From 82c66786a65d67b626d5e88a366b9d9d7efe7237 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Fri, 27 Jun 2025 15:51:44 -0700 Subject: [PATCH 01/42] intiial removal --- docs/.gitignore | 3 - docs/README.md | 129 - docs/_sidebar.json | 125 + .../slack_bolt/adapter/aiohttp/index.html | 0 .../adapter/asgi/aiohttp/index.html | 0 .../adapter/asgi/async_handler.html | 0 .../slack_bolt/adapter/asgi/base_handler.html | 0 .../adapter/asgi/builtin/index.html | 0 .../slack_bolt/adapter/asgi/http_request.html | 0 .../adapter/asgi/http_response.html | 0 .../slack_bolt/adapter/asgi/index.html | 0 .../slack_bolt/adapter/asgi/utils.html | 0 .../adapter/aws_lambda/chalice_handler.html | 0 .../chalice_lazy_listener_runner.html | 0 .../adapter/aws_lambda/handler.html | 0 .../slack_bolt/adapter/aws_lambda/index.html | 0 .../adapter/aws_lambda/internals.html | 0 .../aws_lambda/lambda_s3_oauth_flow.html | 0 .../aws_lambda/lazy_listener_runner.html | 0 .../aws_lambda/local_lambda_client.html | 0 .../slack_bolt/adapter/bottle/handler.html | 0 .../slack_bolt/adapter/bottle/index.html | 0 .../slack_bolt/adapter/cherrypy/handler.html | 0 .../slack_bolt/adapter/cherrypy/index.html | 0 .../slack_bolt/adapter/django/handler.html | 0 .../slack_bolt/adapter/django/index.html | 0 .../adapter/falcon/async_resource.html | 0 .../slack_bolt/adapter/falcon/index.html | 0 .../slack_bolt/adapter/falcon/resource.html | 0 .../adapter/fastapi/async_handler.html | 0 .../slack_bolt/adapter/fastapi/index.html | 0 .../slack_bolt/adapter/flask/handler.html | 0 .../slack_bolt/adapter/flask/index.html | 0 .../google_cloud_functions/handler.html | 0 .../adapter/google_cloud_functions/index.html | 0 .../api-docs/slack_bolt/adapter/index.html | 0 .../slack_bolt/adapter/pyramid/handler.html | 0 .../slack_bolt/adapter/pyramid/index.html | 0 .../adapter/sanic/async_handler.html | 0 .../slack_bolt/adapter/sanic/index.html | 0 .../adapter/socket_mode/aiohttp/index.html | 0 .../socket_mode/async_base_handler.html | 0 .../adapter/socket_mode/async_handler.html | 0 .../adapter/socket_mode/async_internals.html | 0 .../adapter/socket_mode/base_handler.html | 0 .../adapter/socket_mode/builtin/index.html | 0 .../slack_bolt/adapter/socket_mode/index.html | 0 .../adapter/socket_mode/internals.html | 0 .../socket_mode/websocket_client/index.html | 0 .../adapter/socket_mode/websockets/index.html | 0 .../adapter/starlette/async_handler.html | 0 .../slack_bolt/adapter/starlette/handler.html | 0 .../slack_bolt/adapter/starlette/index.html | 0 .../adapter/tornado/async_handler.html | 0 .../slack_bolt/adapter/tornado/handler.html | 0 .../slack_bolt/adapter/tornado/index.html | 0 .../slack_bolt/adapter/wsgi/handler.html | 0 .../slack_bolt/adapter/wsgi/http_request.html | 0 .../adapter/wsgi/http_response.html | 0 .../slack_bolt/adapter/wsgi/index.html | 0 .../slack_bolt/adapter/wsgi/internals.html | 0 .../api-docs/slack_bolt/app/app.html | 0 .../api-docs/slack_bolt/app/async_app.html | 0 .../api-docs/slack_bolt/app/async_server.html | 0 .../api-docs/slack_bolt/app/index.html | 0 .../api-docs/slack_bolt/async_app.html | 0 .../authorization/async_authorize.html | 0 .../authorization/async_authorize_args.html | 0 .../slack_bolt/authorization/authorize.html | 0 .../authorization/authorize_args.html | 0 .../authorization/authorize_result.html | 0 .../slack_bolt/authorization/index.html | 0 .../api-docs/slack_bolt/context/ack/ack.html | 0 .../slack_bolt/context/ack/async_ack.html | 0 .../slack_bolt/context/ack/index.html | 0 .../slack_bolt/context/ack/internals.html | 0 .../assistant/assistant_utilities.html | 0 .../assistant/async_assistant_utilities.html | 0 .../slack_bolt/context/assistant/index.html | 0 .../context/assistant/internals.html | 0 .../assistant/thread_context/index.html | 0 .../thread_context_store/async_store.html | 0 .../default_async_store.html | 0 .../thread_context_store/default_store.html | 0 .../thread_context_store/file/index.html | 0 .../assistant/thread_context_store/index.html | 0 .../assistant/thread_context_store/store.html | 0 .../slack_bolt/context/async_context.html | 0 .../slack_bolt/context/base_context.html | 0 .../context/complete/async_complete.html | 0 .../slack_bolt/context/complete/complete.html | 0 .../slack_bolt/context/complete/index.html | 0 .../api-docs/slack_bolt/context/context.html | 0 .../slack_bolt/context/fail/async_fail.html | 0 .../slack_bolt/context/fail/fail.html | 0 .../slack_bolt/context/fail/index.html | 0 .../async_get_thread_context.html | 0 .../get_thread_context.html | 0 .../context/get_thread_context/index.html | 0 .../api-docs/slack_bolt/context/index.html | 0 .../context/respond/async_respond.html | 0 .../slack_bolt/context/respond/index.html | 0 .../slack_bolt/context/respond/internals.html | 0 .../slack_bolt/context/respond/respond.html | 0 .../async_save_thread_context.html | 0 .../context/save_thread_context/index.html | 0 .../save_thread_context.html | 0 .../slack_bolt/context/say/async_say.html | 0 .../slack_bolt/context/say/index.html | 0 .../slack_bolt/context/say/internals.html | 0 .../api-docs/slack_bolt/context/say/say.html | 0 .../context/set_status/async_set_status.html | 0 .../slack_bolt/context/set_status/index.html | 0 .../context/set_status/set_status.html | 0 .../async_set_suggested_prompts.html | 0 .../context/set_suggested_prompts/index.html | 0 .../set_suggested_prompts.html | 0 .../context/set_title/async_set_title.html | 0 .../slack_bolt/context/set_title/index.html | 0 .../context/set_title/set_title.html | 0 .../api-docs/slack_bolt/error/index.html | 0 .../api-docs/slack_bolt/index.html | 0 .../slack_bolt/kwargs_injection/args.html | 0 .../kwargs_injection/async_args.html | 0 .../kwargs_injection/async_utils.html | 0 .../slack_bolt/kwargs_injection/index.html | 0 .../slack_bolt/kwargs_injection/utils.html | 0 .../lazy_listener/async_internals.html | 0 .../lazy_listener/async_runner.html | 0 .../lazy_listener/asyncio_runner.html | 0 .../slack_bolt/lazy_listener/index.html | 0 .../slack_bolt/lazy_listener/internals.html | 0 .../slack_bolt/lazy_listener/runner.html | 0 .../lazy_listener/thread_runner.html | 0 .../slack_bolt/listener/async_builtins.html | 0 .../slack_bolt/listener/async_listener.html | 0 .../async_listener_completion_handler.html | 0 .../async_listener_error_handler.html | 0 .../async_listener_start_handler.html | 0 .../slack_bolt/listener/asyncio_runner.html | 0 .../slack_bolt/listener/builtins.html | 0 .../slack_bolt/listener/custom_listener.html | 0 .../api-docs/slack_bolt/listener/index.html | 0 .../slack_bolt/listener/listener.html | 0 .../listener/listener_completion_handler.html | 0 .../listener/listener_error_handler.html | 0 .../listener/listener_start_handler.html | 0 .../slack_bolt/listener/thread_runner.html | 0 .../listener_matcher/async_builtins.html | 0 .../async_listener_matcher.html | 0 .../slack_bolt/listener_matcher/builtins.html | 0 .../custom_listener_matcher.html | 0 .../slack_bolt/listener_matcher/index.html | 0 .../listener_matcher/listener_matcher.html | 0 .../api-docs/slack_bolt/logger/index.html | 0 .../api-docs/slack_bolt/logger/messages.html | 0 .../middleware/assistant/assistant.html | 0 .../middleware/assistant/async_assistant.html | 0 .../middleware/assistant/index.html | 0 .../slack_bolt/middleware/async_builtins.html | 0 .../middleware/async_custom_middleware.html | 0 .../middleware/async_middleware.html | 0 .../async_middleware_error_handler.html | 0 .../async_attaching_function_token.html | 0 .../attaching_function_token.html | 0 .../attaching_function_token/index.html | 0 .../authorization/async_authorization.html | 0 .../authorization/async_internals.html | 0 .../async_multi_teams_authorization.html | 0 .../async_single_team_authorization.html | 0 .../authorization/authorization.html | 0 .../middleware/authorization/index.html | 0 .../middleware/authorization/internals.html | 0 .../multi_teams_authorization.html | 0 .../single_team_authorization.html | 0 .../middleware/custom_middleware.html | 0 .../async_ignoring_self_events.html | 0 .../ignoring_self_events.html | 0 .../ignoring_self_events/index.html | 0 .../api-docs/slack_bolt/middleware/index.html | 0 .../async_message_listener_matches.html | 0 .../message_listener_matches/index.html | 0 .../message_listener_matches.html | 0 .../slack_bolt/middleware/middleware.html | 0 .../middleware/middleware_error_handler.html | 0 .../async_request_verification.html | 0 .../request_verification/index.html | 0 .../request_verification.html | 0 .../middleware/ssl_check/async_ssl_check.html | 0 .../middleware/ssl_check/index.html | 0 .../middleware/ssl_check/ssl_check.html | 0 .../async_url_verification.html | 0 .../middleware/url_verification/index.html | 0 .../url_verification/url_verification.html | 0 .../oauth/async_callback_options.html | 0 .../slack_bolt/oauth/async_internals.html | 0 .../slack_bolt/oauth/async_oauth_flow.html | 0 .../oauth/async_oauth_settings.html | 0 .../slack_bolt/oauth/callback_options.html | 0 .../api-docs/slack_bolt/oauth/index.html | 0 .../api-docs/slack_bolt/oauth/internals.html | 0 .../api-docs/slack_bolt/oauth/oauth_flow.html | 0 .../slack_bolt/oauth/oauth_settings.html | 0 .../slack_bolt/request/async_internals.html | 0 .../slack_bolt/request/async_request.html | 0 .../api-docs/slack_bolt/request/index.html | 0 .../slack_bolt/request/internals.html | 0 .../slack_bolt/request/payload_utils.html | 0 .../api-docs/slack_bolt/request/request.html | 0 .../api-docs/slack_bolt/response/index.html | 0 .../slack_bolt/response/response.html | 0 .../api-docs/slack_bolt/util/async_utils.html | 0 .../api-docs/slack_bolt/util/index.html | 0 .../api-docs/slack_bolt/util/utils.html | 0 .../api-docs/slack_bolt/version.html | 0 .../api-docs/slack_bolt/workflows/index.html | 0 .../slack_bolt/workflows/step/async_step.html | 0 .../workflows/step/async_step_middleware.html | 0 .../slack_bolt/workflows/step/index.html | 0 .../slack_bolt/workflows/step/internals.html | 0 .../slack_bolt/workflows/step/step.html | 0 .../workflows/step/step_middleware.html | 0 .../step/utilities/async_complete.html | 0 .../step/utilities/async_configure.html | 0 .../workflows/step/utilities/async_fail.html | 0 .../step/utilities/async_update.html | 0 .../workflows/step/utilities/complete.html | 0 .../workflows/step/utilities/configure.html | 0 .../workflows/step/utilities/fail.html | 0 .../workflows/step/utilities/index.html | 0 .../workflows/step/utilities/update.html | 0 docs/babel.config.js | 3 - docs/docusaurus.config.js | 113 - .../concepts/acknowledge.md | 0 docs/{content => english}/concepts/actions.md | 0 .../{content => english}/concepts/adapters.md | 0 docs/{content => english}/concepts/ai-apps.md | 0 .../{content => english}/concepts/app-home.md | 0 docs/{content => english}/concepts/async.md | 0 .../concepts/authenticating-oauth.md | 0 .../concepts/authorization.md | 0 .../{content => english}/concepts/commands.md | 0 docs/{content => english}/concepts/context.md | 0 .../concepts/custom-adapters.md | 0 .../concepts/custom-steps-dynamic-options.md | 0 .../concepts/custom-steps.md | 0 docs/{content => english}/concepts/errors.md | 0 .../concepts/event-listening.md | 0 .../concepts/global-middleware.md | 0 .../concepts/lazy-listeners.md | 0 .../concepts/listener-middleware.md | 0 docs/{content => english}/concepts/logging.md | 0 .../concepts/message-listening.md | 0 .../concepts/message-sending.md | 0 .../concepts/opening-modals.md | 0 .../concepts/select-menu-options.md | 0 .../concepts/shortcuts.md | 0 .../concepts/socket-mode.md | 0 .../concepts/token-rotation.md | 0 .../concepts/updating-pushing-views.md | 0 .../concepts/view-submissions.md | 0 docs/{content => english}/concepts/web-api.md | 0 docs/{content => english}/getting-started.md | 4 +- docs/{content => english}/index.md | 0 .../legacy}/steps-from-apps.md | 0 .../tutorial}/ai-chatbot/1.png | Bin .../tutorial}/ai-chatbot/2.png | Bin .../tutorial}/ai-chatbot/3.png | Bin .../tutorial}/ai-chatbot/4.png | Bin .../tutorial}/ai-chatbot/5.png | Bin .../tutorial}/ai-chatbot/6.png | Bin .../tutorial}/ai-chatbot/7.png | Bin .../tutorial}/ai-chatbot/8.png | Bin .../tutorial/ai-chatbot}/ai-chatbot.md | 0 .../tutorial/custom-steps-for-jira}/1.png | Bin .../tutorial/custom-steps-for-jira}/2.png | Bin .../tutorial/custom-steps-for-jira}/3.png | Bin .../tutorial/custom-steps-for-jira}/4.png | Bin .../tutorial/custom-steps-for-jira}/5.png | Bin .../tutorial/custom-steps-for-jira}/6.png | Bin .../tutorial/custom-steps-for-jira}/7.png | Bin .../custom-steps-for-jira.md | 16 +- .../add-step.png | Bin .../app-message.png | Bin .../custom-steps-workflow-builder-existing.md | 0 .../define-step.png | Bin .../find-step.png | Bin .../inputs.png | Bin .../org-ready.png | Bin .../outputs.png | Bin .../step-inputs.png | Bin .../app-token.png | Bin .../bot-token.png | Bin .../custom-steps-workflow-builder-new.md | 0 .../install.png | Bin .../manifest.png | Bin .../wfb-1.png | Bin .../wfb-10.png | Bin .../wfb-11.png | Bin .../wfb-12.png | Bin .../wfb-2.png | Bin .../wfb-3.png | Bin .../wfb-4.png | Bin .../wfb-5.png | Bin .../wfb-6.png | Bin .../wfb-7.png | Bin .../wfb-8.png | Bin .../wfb-9.png | Bin .../workflow-step.png | Bin .../tutorial/custom-steps.md | 0 .../tutorial}/modals/base_link.gif | Bin .../tutorial}/modals/final_product.gif | Bin .../tutorial}/modals/heart_icon.gif | Bin .../tutorial}/modals/interactivity_url.png | Bin .../tutorial/modals}/modals.md | 0 .../tutorial}/modals/slash_command.png | Bin docs/footerConfig.js | 21 - docs/i18n/ja-jp/README.md | 121 - docs/i18n/ja-jp/code.json | 321 - .../docusaurus-theme-classic/footer.json | 6 - .../docusaurus-theme-classic/navbar.json | 62 - .../boltpy => img}/basic-information-page.png | Bin docs/{static/img/boltpy => img}/bot-token.png | Bin .../concepts/acknowledge.md | 0 .../current => japanese}/concepts/actions.md | 0 .../current => japanese}/concepts/adapters.md | 0 .../current => japanese}/concepts/app-home.md | 0 .../concepts/assistant.md | 0 .../current => japanese}/concepts/async.md | 0 .../concepts/authenticating-oauth.md | 0 .../concepts/authorization.md | 0 .../current => japanese}/concepts/commands.md | 0 .../current => japanese}/concepts/context.md | 0 .../concepts/custom-adapters.md | 0 .../concepts/custom-steps.md | 0 .../current => japanese}/concepts/errors.md | 0 .../concepts/event-listening.md | 0 .../concepts/global-middleware.md | 0 .../concepts/lazy-listeners.md | 0 .../concepts/listener-middleware.md | 0 .../current => japanese}/concepts/logging.md | 0 .../concepts/message-listening.md | 0 .../concepts/message-sending.md | 0 .../concepts/opening-modals.md | 0 .../concepts/select-menu-options.md | 0 .../concepts/shortcuts.md | 0 .../concepts/socket-mode.md | 0 .../concepts/token-rotation.md | 0 .../concepts/updating-pushing-views.md | 0 .../concepts/view-submissions.md | 0 .../current => japanese}/concepts/web-api.md | 0 .../current.json | 0 .../current => japanese}/getting-started.md | 4 +- .../legacy/steps-from-apps.md | 2 +- docs/navbarConfig.js | 97 - docs/package-lock.json | 17036 ---------------- docs/package.json | 46 - docs/sidebars.js | 123 - docs/src/css/custom.css | 583 - docs/src/theme/NotFound/Content/index.js | 36 - docs/src/theme/NotFound/index.js | 19 - docs/static/.nojekyll | 0 docs/static/img/bolt-logo.svg | 1 - docs/static/img/bolt-py-logo.svg | 1 - docs/static/img/boltpy/bolt-favicon.png | Bin 3376 -> 0 bytes docs/static/img/boltpy/ngrok.gif | Bin 49094 -> 0 bytes docs/static/img/boltpy/request-url-config.png | Bin 168494 -> 0 bytes docs/static/img/boltpy/signing-secret.png | Bin 289939 -> 0 bytes docs/static/img/favicon.ico | Bin 24499 -> 0 bytes docs/static/img/slack-logo-on-white.png | Bin 25811 -> 0 bytes docs/static/img/slack-logo.svg | 6 - scripts/generate_api_docs.sh | 6 +- 372 files changed, 141 insertions(+), 18743 deletions(-) delete mode 100644 docs/.gitignore delete mode 100644 docs/README.md create mode 100644 docs/_sidebar.json rename docs/{static => }/api-docs/slack_bolt/adapter/aiohttp/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/asgi/aiohttp/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/asgi/async_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/asgi/base_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/asgi/builtin/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/asgi/http_request.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/asgi/http_response.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/asgi/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/asgi/utils.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/aws_lambda/chalice_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/aws_lambda/chalice_lazy_listener_runner.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/aws_lambda/handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/aws_lambda/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/aws_lambda/internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/aws_lambda/lambda_s3_oauth_flow.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/aws_lambda/lazy_listener_runner.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/aws_lambda/local_lambda_client.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/bottle/handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/bottle/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/cherrypy/handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/cherrypy/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/django/handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/django/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/falcon/async_resource.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/falcon/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/falcon/resource.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/fastapi/async_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/fastapi/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/flask/handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/flask/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/google_cloud_functions/handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/google_cloud_functions/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/pyramid/handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/pyramid/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/sanic/async_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/sanic/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/socket_mode/aiohttp/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/socket_mode/async_base_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/socket_mode/async_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/socket_mode/async_internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/socket_mode/base_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/socket_mode/builtin/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/socket_mode/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/socket_mode/internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/socket_mode/websocket_client/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/socket_mode/websockets/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/starlette/async_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/starlette/handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/starlette/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/tornado/async_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/tornado/handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/tornado/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/wsgi/handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/wsgi/http_request.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/wsgi/http_response.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/wsgi/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/adapter/wsgi/internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/app/app.html (100%) rename docs/{static => }/api-docs/slack_bolt/app/async_app.html (100%) rename docs/{static => }/api-docs/slack_bolt/app/async_server.html (100%) rename docs/{static => }/api-docs/slack_bolt/app/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/async_app.html (100%) rename docs/{static => }/api-docs/slack_bolt/authorization/async_authorize.html (100%) rename docs/{static => }/api-docs/slack_bolt/authorization/async_authorize_args.html (100%) rename docs/{static => }/api-docs/slack_bolt/authorization/authorize.html (100%) rename docs/{static => }/api-docs/slack_bolt/authorization/authorize_args.html (100%) rename docs/{static => }/api-docs/slack_bolt/authorization/authorize_result.html (100%) rename docs/{static => }/api-docs/slack_bolt/authorization/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/ack/ack.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/ack/async_ack.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/ack/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/ack/internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/assistant/assistant_utilities.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/assistant/async_assistant_utilities.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/assistant/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/assistant/internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/assistant/thread_context/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/assistant/thread_context_store/async_store.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/assistant/thread_context_store/default_async_store.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/assistant/thread_context_store/default_store.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/assistant/thread_context_store/file/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/assistant/thread_context_store/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/assistant/thread_context_store/store.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/async_context.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/base_context.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/complete/async_complete.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/complete/complete.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/complete/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/context.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/fail/async_fail.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/fail/fail.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/fail/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/get_thread_context/async_get_thread_context.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/get_thread_context/get_thread_context.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/get_thread_context/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/respond/async_respond.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/respond/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/respond/internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/respond/respond.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/save_thread_context/async_save_thread_context.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/save_thread_context/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/save_thread_context/save_thread_context.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/say/async_say.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/say/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/say/internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/say/say.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/set_status/async_set_status.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/set_status/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/set_status/set_status.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/set_suggested_prompts/async_set_suggested_prompts.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/set_suggested_prompts/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/set_suggested_prompts/set_suggested_prompts.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/set_title/async_set_title.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/set_title/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/context/set_title/set_title.html (100%) rename docs/{static => }/api-docs/slack_bolt/error/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/kwargs_injection/args.html (100%) rename docs/{static => }/api-docs/slack_bolt/kwargs_injection/async_args.html (100%) rename docs/{static => }/api-docs/slack_bolt/kwargs_injection/async_utils.html (100%) rename docs/{static => }/api-docs/slack_bolt/kwargs_injection/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/kwargs_injection/utils.html (100%) rename docs/{static => }/api-docs/slack_bolt/lazy_listener/async_internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/lazy_listener/async_runner.html (100%) rename docs/{static => }/api-docs/slack_bolt/lazy_listener/asyncio_runner.html (100%) rename docs/{static => }/api-docs/slack_bolt/lazy_listener/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/lazy_listener/internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/lazy_listener/runner.html (100%) rename docs/{static => }/api-docs/slack_bolt/lazy_listener/thread_runner.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener/async_builtins.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener/async_listener.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener/async_listener_completion_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener/async_listener_error_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener/async_listener_start_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener/asyncio_runner.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener/builtins.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener/custom_listener.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener/listener.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener/listener_completion_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener/listener_error_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener/listener_start_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener/thread_runner.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener_matcher/async_builtins.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener_matcher/async_listener_matcher.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener_matcher/builtins.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener_matcher/custom_listener_matcher.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener_matcher/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/listener_matcher/listener_matcher.html (100%) rename docs/{static => }/api-docs/slack_bolt/logger/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/logger/messages.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/assistant/assistant.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/assistant/async_assistant.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/assistant/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/async_builtins.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/async_custom_middleware.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/async_middleware.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/async_middleware_error_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/attaching_function_token/async_attaching_function_token.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/attaching_function_token/attaching_function_token.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/attaching_function_token/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/authorization/async_authorization.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/authorization/async_internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/authorization/async_multi_teams_authorization.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/authorization/async_single_team_authorization.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/authorization/authorization.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/authorization/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/authorization/internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/authorization/multi_teams_authorization.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/authorization/single_team_authorization.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/custom_middleware.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/ignoring_self_events/async_ignoring_self_events.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/ignoring_self_events/ignoring_self_events.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/ignoring_self_events/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/message_listener_matches/async_message_listener_matches.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/message_listener_matches/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/message_listener_matches/message_listener_matches.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/middleware.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/middleware_error_handler.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/request_verification/async_request_verification.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/request_verification/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/request_verification/request_verification.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/ssl_check/async_ssl_check.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/ssl_check/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/ssl_check/ssl_check.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/url_verification/async_url_verification.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/url_verification/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/middleware/url_verification/url_verification.html (100%) rename docs/{static => }/api-docs/slack_bolt/oauth/async_callback_options.html (100%) rename docs/{static => }/api-docs/slack_bolt/oauth/async_internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/oauth/async_oauth_flow.html (100%) rename docs/{static => }/api-docs/slack_bolt/oauth/async_oauth_settings.html (100%) rename docs/{static => }/api-docs/slack_bolt/oauth/callback_options.html (100%) rename docs/{static => }/api-docs/slack_bolt/oauth/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/oauth/internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/oauth/oauth_flow.html (100%) rename docs/{static => }/api-docs/slack_bolt/oauth/oauth_settings.html (100%) rename docs/{static => }/api-docs/slack_bolt/request/async_internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/request/async_request.html (100%) rename docs/{static => }/api-docs/slack_bolt/request/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/request/internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/request/payload_utils.html (100%) rename docs/{static => }/api-docs/slack_bolt/request/request.html (100%) rename docs/{static => }/api-docs/slack_bolt/response/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/response/response.html (100%) rename docs/{static => }/api-docs/slack_bolt/util/async_utils.html (100%) rename docs/{static => }/api-docs/slack_bolt/util/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/util/utils.html (100%) rename docs/{static => }/api-docs/slack_bolt/version.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/step/async_step.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/step/async_step_middleware.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/step/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/step/internals.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/step/step.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/step/step_middleware.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/step/utilities/async_complete.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/step/utilities/async_configure.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/step/utilities/async_fail.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/step/utilities/async_update.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/step/utilities/complete.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/step/utilities/configure.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/step/utilities/fail.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/step/utilities/index.html (100%) rename docs/{static => }/api-docs/slack_bolt/workflows/step/utilities/update.html (100%) delete mode 100644 docs/babel.config.js delete mode 100644 docs/docusaurus.config.js rename docs/{content => english}/concepts/acknowledge.md (100%) rename docs/{content => english}/concepts/actions.md (100%) rename docs/{content => english}/concepts/adapters.md (100%) rename docs/{content => english}/concepts/ai-apps.md (100%) rename docs/{content => english}/concepts/app-home.md (100%) rename docs/{content => english}/concepts/async.md (100%) rename docs/{content => english}/concepts/authenticating-oauth.md (100%) rename docs/{content => english}/concepts/authorization.md (100%) rename docs/{content => english}/concepts/commands.md (100%) rename docs/{content => english}/concepts/context.md (100%) rename docs/{content => english}/concepts/custom-adapters.md (100%) rename docs/{content => english}/concepts/custom-steps-dynamic-options.md (100%) rename docs/{content => english}/concepts/custom-steps.md (100%) rename docs/{content => english}/concepts/errors.md (100%) rename docs/{content => english}/concepts/event-listening.md (100%) rename docs/{content => english}/concepts/global-middleware.md (100%) rename docs/{content => english}/concepts/lazy-listeners.md (100%) rename docs/{content => english}/concepts/listener-middleware.md (100%) rename docs/{content => english}/concepts/logging.md (100%) rename docs/{content => english}/concepts/message-listening.md (100%) rename docs/{content => english}/concepts/message-sending.md (100%) rename docs/{content => english}/concepts/opening-modals.md (100%) rename docs/{content => english}/concepts/select-menu-options.md (100%) rename docs/{content => english}/concepts/shortcuts.md (100%) rename docs/{content => english}/concepts/socket-mode.md (100%) rename docs/{content => english}/concepts/token-rotation.md (100%) rename docs/{content => english}/concepts/updating-pushing-views.md (100%) rename docs/{content => english}/concepts/view-submissions.md (100%) rename docs/{content => english}/concepts/web-api.md (100%) rename docs/{content => english}/getting-started.md (99%) rename docs/{content => english}/index.md (100%) rename docs/{content/concepts => english/legacy}/steps-from-apps.md (100%) rename docs/{static/img/tutorials => english/tutorial}/ai-chatbot/1.png (100%) rename docs/{static/img/tutorials => english/tutorial}/ai-chatbot/2.png (100%) rename docs/{static/img/tutorials => english/tutorial}/ai-chatbot/3.png (100%) rename docs/{static/img/tutorials => english/tutorial}/ai-chatbot/4.png (100%) rename docs/{static/img/tutorials => english/tutorial}/ai-chatbot/5.png (100%) rename docs/{static/img/tutorials => english/tutorial}/ai-chatbot/6.png (100%) rename docs/{static/img/tutorials => english/tutorial}/ai-chatbot/7.png (100%) rename docs/{static/img/tutorials => english/tutorial}/ai-chatbot/8.png (100%) rename docs/{content/tutorial => english/tutorial/ai-chatbot}/ai-chatbot.md (100%) rename docs/{static/img/tutorials/custom-steps-jira => english/tutorial/custom-steps-for-jira}/1.png (100%) rename docs/{static/img/tutorials/custom-steps-jira => english/tutorial/custom-steps-for-jira}/2.png (100%) rename docs/{static/img/tutorials/custom-steps-jira => english/tutorial/custom-steps-for-jira}/3.png (100%) rename docs/{static/img/tutorials/custom-steps-jira => english/tutorial/custom-steps-for-jira}/4.png (100%) rename docs/{static/img/tutorials/custom-steps-jira => english/tutorial/custom-steps-for-jira}/5.png (100%) rename docs/{static/img/tutorials/custom-steps-jira => english/tutorial/custom-steps-for-jira}/6.png (100%) rename docs/{static/img/tutorials/custom-steps-jira => english/tutorial/custom-steps-for-jira}/7.png (100%) rename docs/{content/tutorial => english/tutorial/custom-steps-for-jira}/custom-steps-for-jira.md (91%) rename docs/{static/img/tutorials/custom-steps-wfb-existing => english/tutorial/custom-steps-workflow-builder-existing}/add-step.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-existing => english/tutorial/custom-steps-workflow-builder-existing}/app-message.png (100%) rename docs/{content/tutorial => english/tutorial/custom-steps-workflow-builder-existing}/custom-steps-workflow-builder-existing.md (100%) rename docs/{static/img/tutorials/custom-steps-wfb-existing => english/tutorial/custom-steps-workflow-builder-existing}/define-step.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-existing => english/tutorial/custom-steps-workflow-builder-existing}/find-step.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-existing => english/tutorial/custom-steps-workflow-builder-existing}/inputs.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-existing => english/tutorial/custom-steps-workflow-builder-existing}/org-ready.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-existing => english/tutorial/custom-steps-workflow-builder-existing}/outputs.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-existing => english/tutorial/custom-steps-workflow-builder-existing}/step-inputs.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/app-token.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/bot-token.png (100%) rename docs/{content/tutorial => english/tutorial/custom-steps-workflow-builder-new}/custom-steps-workflow-builder-new.md (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/install.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/manifest.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/wfb-1.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/wfb-10.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/wfb-11.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/wfb-12.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/wfb-2.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/wfb-3.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/wfb-4.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/wfb-5.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/wfb-6.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/wfb-7.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/wfb-8.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/wfb-9.png (100%) rename docs/{static/img/tutorials/custom-steps-wfb-new => english/tutorial/custom-steps-workflow-builder-new}/workflow-step.png (100%) rename docs/{content => english}/tutorial/custom-steps.md (100%) rename docs/{static/img/tutorials => english/tutorial}/modals/base_link.gif (100%) rename docs/{static/img/tutorials => english/tutorial}/modals/final_product.gif (100%) rename docs/{static/img/tutorials => english/tutorial}/modals/heart_icon.gif (100%) rename docs/{static/img/tutorials => english/tutorial}/modals/interactivity_url.png (100%) rename docs/{content/tutorial => english/tutorial/modals}/modals.md (100%) rename docs/{static/img/tutorials => english/tutorial}/modals/slash_command.png (100%) delete mode 100644 docs/footerConfig.js delete mode 100644 docs/i18n/ja-jp/README.md delete mode 100644 docs/i18n/ja-jp/code.json delete mode 100644 docs/i18n/ja-jp/docusaurus-theme-classic/footer.json delete mode 100644 docs/i18n/ja-jp/docusaurus-theme-classic/navbar.json rename docs/{static/img/boltpy => img}/basic-information-page.png (100%) rename docs/{static/img/boltpy => img}/bot-token.png (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/acknowledge.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/actions.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/adapters.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/app-home.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/assistant.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/async.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/authenticating-oauth.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/authorization.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/commands.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/context.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/custom-adapters.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/custom-steps.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/errors.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/event-listening.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/global-middleware.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/lazy-listeners.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/listener-middleware.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/logging.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/message-listening.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/message-sending.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/opening-modals.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/select-menu-options.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/shortcuts.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/socket-mode.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/token-rotation.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/updating-pushing-views.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/view-submissions.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/web-api.md (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs => japanese}/current.json (100%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/getting-started.md (99%) rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/legacy/steps-from-apps.md (99%) delete mode 100644 docs/navbarConfig.js delete mode 100644 docs/package-lock.json delete mode 100644 docs/package.json delete mode 100644 docs/sidebars.js delete mode 100644 docs/src/css/custom.css delete mode 100644 docs/src/theme/NotFound/Content/index.js delete mode 100644 docs/src/theme/NotFound/index.js delete mode 100644 docs/static/.nojekyll delete mode 100644 docs/static/img/bolt-logo.svg delete mode 100644 docs/static/img/bolt-py-logo.svg delete mode 100644 docs/static/img/boltpy/bolt-favicon.png delete mode 100644 docs/static/img/boltpy/ngrok.gif delete mode 100644 docs/static/img/boltpy/request-url-config.png delete mode 100644 docs/static/img/boltpy/signing-secret.png delete mode 100644 docs/static/img/favicon.ico delete mode 100644 docs/static/img/slack-logo-on-white.png delete mode 100644 docs/static/img/slack-logo.svg diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 53a1610fd..000000000 --- a/docs/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules/ -.docusaurus -build \ No newline at end of file diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 023d89975..000000000 --- a/docs/README.md +++ /dev/null @@ -1,129 +0,0 @@ -# tools.slack.dev/bolt-python - -This website is built using [Docusaurus](https://docusaurus.io/). 'Tis cool. - -Each Bolt/SDK has its own Docusaurus website, with matching CSS and nav/footer. There is also be a Docusaurus website of just the homepage and community tools. - -``` -website/ -├── docs/ (the good stuff. md and mdx files supported) -│ ├── getting-started.md -│ └── concepts -│ └── sending-message.md -├── i18n/ja/ (the japanese translations) -│ ├──docusaurus-theme-classic/ (footer/navbar translations) -│ └──docusaurus-plugin-content-docs/ -│ └── current/ ( file names need to exactly match **/docs/, but japanese content) -│ ├── getting-started.md -│ └── concepts -│ └── sending-message.md -├── static/ -│ ├── css/ -│ │ └── custom.css (the css for everything!) -│ ├── img/ (the pictures for the site) -│ │ ├── rory.png -│ │ └── oslo.svg -│ └── api-docs/slack_bolt (the generated reference docs with their own HTML/CSS) -│ ├── index.html -│ └── adaptor -│ └── index.html -├── src/ -│ ├── pages/ (stuff that isn't docs. This is empty for this repo!) -│ └── theme/ (only contains the 404 page) -├── docusaurus.config.js (main config file) -├── footerConfig.js (footer. go to main repo to change) -├── navbarConfig.js (navbar. go to main repo to change) -└── sidebar.js (manually set where the docs are in the sidebar.) -``` - -A cheat-sheet: -* _I want to edit a doc._ `docs/*/*.md` -* _I want to edit a Japanese doc._ `i18n/ja-jp/docusaurus-plugin-content-docs/current/*/*.md`. See the [Japanese docs README](./docs/README.md) -* _I want to change the docs sidebar._ `sidebar.js` -* _I want to change the css._ Don't use this repo, use the home repo and the changes will propagate here. -* _I want to change anything else._ `docusaurus.config.js` - ----- - -## Adding a doc - -1. Make a markdown file. Add a `# Title` or use [front matter](https://docusaurus.io/docs/next/create-doc) with `title:`. -2. Save it in `docs/folder/title.md` or `docs/title.md`, depending on if it's in a sidebar category. The nuance is just for internal organization. -3. There needs to be 1:1 docs for the sidebar. Copy the folder/file and put it in the Japanese docs: `i18n/ja/docusaurus-plugin-content-docs/current/*`. Just leave it in English if you don't speak Japanese. -4. Add the doc's path to the sidebar within `docusaurus.config.js`. Where ever makes most sense for you. -5. Test the changes ↓ - ---- - -## Running locally - -Docusaurus requires at least Node 18. You can update Node however you want. `nvm` is one way. - -Install `nvm` if you don't have it: - -``` -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash -``` - -Then grab the latest version of Node. - -``` -nvm install node -``` - -If you are running this project locally for the first time, you'll need to install the packages with the following command: - -``` -npm install -``` - -The following command starts a local development server and opens up a browser window. - -``` -npm run start -``` - -Edits to pages are reflected live — no restarting the server or reloading the page. (I'd say... 95% of the time, and 100% time if you're just editing a markdown file). The generated reference docs only load in prod! - -Remember — you're only viewing the Bolt for Python docs right now. - -#### Running locally in Japanese - -For local runs, Docusaurus treats each language as a different instance of the website. You'll want to specify the language to run the japanese site locally: - -``` -npm run start -- --locale ja-jp -``` - -Don't worry - both languages will be built/served on deployment. - ---- - -## Deploying - -The following command generates static content into the `build` directory. - -``` -$ npm run build -``` - -Then you can test out with the following command: - -``` -npm run serve -``` - -If it looks good, make a PR request! - -### Deployment to GitHub pages - -There is a GitHub action workflow set up in each repo. - -* On PR, it tests a site build. -* On Merge, it builds the site and deploys it. Site should update in a minute or two. - ---- - -## Something's broken - -Luke goofed. Open an issue please! `:bufo-appreciates-the-insight:` \ No newline at end of file diff --git a/docs/_sidebar.json b/docs/_sidebar.json new file mode 100644 index 000000000..ca53a4158 --- /dev/null +++ b/docs/_sidebar.json @@ -0,0 +1,125 @@ +[ + { + "type": "doc", + "id": "index", + "label": "Bolt for Python", + "className": "sidebar-title" + }, + { "type": "html", "value": "
" }, + { + "type": "category", + "label": "Guides", + "collapsed": false, + "items": [ + "getting-started", + { + "type": "category", + "label": "Slack API calls", + "items": ["concepts/message-sending", "concepts/web-api"] + }, + { + "type": "category", + "label": "Events", + "items": ["concepts/message-listening", "concepts/event-listening"] + }, + { + "type": "category", + "label": "App UI & Interactivity", + "items": [ + "concepts/acknowledge", + "concepts/shortcuts", + "concepts/commands", + "concepts/actions", + "concepts/opening-modals", + "concepts/updating-pushing-views", + "concepts/view-submissions", + "concepts/select-menu-options", + "concepts/app-home" + ] + }, + "concepts/ai-apps", + { + "type": "category", + "label": "Custom Steps", + "items": [ + "concepts/custom-steps", + "concepts/custom-steps-dynamic-options" + ] + }, + { + "type": "category", + "label": "App Configuration", + "items": [ + "concepts/socket-mode", + "concepts/errors", + "concepts/logging", + "concepts/async" + ] + }, + { + "type": "category", + "label": "Middleware & Context", + "items": [ + "concepts/global-middleware", + "concepts/listener-middleware", + "concepts/context" + ] + }, + "concepts/lazy-listeners", + { + "type": "category", + "label": "Adaptors", + "items": ["concepts/adapters", "concepts/custom-adapters"] + }, + { + "type": "category", + "label": "Authorization & Security", + "items": [ + "concepts/authenticating-oauth", + "concepts/authorization", + "concepts/token-rotation" + ] + }, + { + "type": "category", + "label": "Legacy", + "items": ["legacy/steps-from-apps"] + } + ] + }, + { "type": "html", "value": "
" }, + { + "type": "category", + "label": "Tutorials", + "items": [ + "tutorial/ai-chatbot/ai-chatbot", + "tutorial/custom-steps/custom-steps", + "tutorial/custom-steps-for-jira/custom-steps-for-jira", + "tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new", + "tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing", + "tutorial/modals/modals" + ] + }, + { "type": "html", "value": "
" }, + { + "type": "link", + "label": "Reference", + "href": "https://tools.slack.dev/bolt-python/api-docs/slack_bolt/" + }, + { "type": "html", "value": "
" }, + { + "type": "link", + "label": "Release notes", + "href": "https://github.com/slackapi/bolt-python/releases" + }, + { + "type": "link", + "label": "Code on GitHub", + "href": "https://github.com/SlackAPI/bolt-python" + }, + { + "type": "link", + "label": "Contributors Guide", + "href": "https://github.com/SlackAPI/bolt-python/blob/main/.github/contributing.md" + } + ] diff --git a/docs/static/api-docs/slack_bolt/adapter/aiohttp/index.html b/docs/api-docs/slack_bolt/adapter/aiohttp/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/aiohttp/index.html rename to docs/api-docs/slack_bolt/adapter/aiohttp/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/asgi/aiohttp/index.html b/docs/api-docs/slack_bolt/adapter/asgi/aiohttp/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/asgi/aiohttp/index.html rename to docs/api-docs/slack_bolt/adapter/asgi/aiohttp/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/asgi/async_handler.html b/docs/api-docs/slack_bolt/adapter/asgi/async_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/asgi/async_handler.html rename to docs/api-docs/slack_bolt/adapter/asgi/async_handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/asgi/base_handler.html b/docs/api-docs/slack_bolt/adapter/asgi/base_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/asgi/base_handler.html rename to docs/api-docs/slack_bolt/adapter/asgi/base_handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/asgi/builtin/index.html b/docs/api-docs/slack_bolt/adapter/asgi/builtin/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/asgi/builtin/index.html rename to docs/api-docs/slack_bolt/adapter/asgi/builtin/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/asgi/http_request.html b/docs/api-docs/slack_bolt/adapter/asgi/http_request.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/asgi/http_request.html rename to docs/api-docs/slack_bolt/adapter/asgi/http_request.html diff --git a/docs/static/api-docs/slack_bolt/adapter/asgi/http_response.html b/docs/api-docs/slack_bolt/adapter/asgi/http_response.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/asgi/http_response.html rename to docs/api-docs/slack_bolt/adapter/asgi/http_response.html diff --git a/docs/static/api-docs/slack_bolt/adapter/asgi/index.html b/docs/api-docs/slack_bolt/adapter/asgi/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/asgi/index.html rename to docs/api-docs/slack_bolt/adapter/asgi/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/asgi/utils.html b/docs/api-docs/slack_bolt/adapter/asgi/utils.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/asgi/utils.html rename to docs/api-docs/slack_bolt/adapter/asgi/utils.html diff --git a/docs/static/api-docs/slack_bolt/adapter/aws_lambda/chalice_handler.html b/docs/api-docs/slack_bolt/adapter/aws_lambda/chalice_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/aws_lambda/chalice_handler.html rename to docs/api-docs/slack_bolt/adapter/aws_lambda/chalice_handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/aws_lambda/chalice_lazy_listener_runner.html b/docs/api-docs/slack_bolt/adapter/aws_lambda/chalice_lazy_listener_runner.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/aws_lambda/chalice_lazy_listener_runner.html rename to docs/api-docs/slack_bolt/adapter/aws_lambda/chalice_lazy_listener_runner.html diff --git a/docs/static/api-docs/slack_bolt/adapter/aws_lambda/handler.html b/docs/api-docs/slack_bolt/adapter/aws_lambda/handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/aws_lambda/handler.html rename to docs/api-docs/slack_bolt/adapter/aws_lambda/handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/aws_lambda/index.html b/docs/api-docs/slack_bolt/adapter/aws_lambda/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/aws_lambda/index.html rename to docs/api-docs/slack_bolt/adapter/aws_lambda/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/aws_lambda/internals.html b/docs/api-docs/slack_bolt/adapter/aws_lambda/internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/aws_lambda/internals.html rename to docs/api-docs/slack_bolt/adapter/aws_lambda/internals.html diff --git a/docs/static/api-docs/slack_bolt/adapter/aws_lambda/lambda_s3_oauth_flow.html b/docs/api-docs/slack_bolt/adapter/aws_lambda/lambda_s3_oauth_flow.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/aws_lambda/lambda_s3_oauth_flow.html rename to docs/api-docs/slack_bolt/adapter/aws_lambda/lambda_s3_oauth_flow.html diff --git a/docs/static/api-docs/slack_bolt/adapter/aws_lambda/lazy_listener_runner.html b/docs/api-docs/slack_bolt/adapter/aws_lambda/lazy_listener_runner.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/aws_lambda/lazy_listener_runner.html rename to docs/api-docs/slack_bolt/adapter/aws_lambda/lazy_listener_runner.html diff --git a/docs/static/api-docs/slack_bolt/adapter/aws_lambda/local_lambda_client.html b/docs/api-docs/slack_bolt/adapter/aws_lambda/local_lambda_client.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/aws_lambda/local_lambda_client.html rename to docs/api-docs/slack_bolt/adapter/aws_lambda/local_lambda_client.html diff --git a/docs/static/api-docs/slack_bolt/adapter/bottle/handler.html b/docs/api-docs/slack_bolt/adapter/bottle/handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/bottle/handler.html rename to docs/api-docs/slack_bolt/adapter/bottle/handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/bottle/index.html b/docs/api-docs/slack_bolt/adapter/bottle/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/bottle/index.html rename to docs/api-docs/slack_bolt/adapter/bottle/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/cherrypy/handler.html b/docs/api-docs/slack_bolt/adapter/cherrypy/handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/cherrypy/handler.html rename to docs/api-docs/slack_bolt/adapter/cherrypy/handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/cherrypy/index.html b/docs/api-docs/slack_bolt/adapter/cherrypy/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/cherrypy/index.html rename to docs/api-docs/slack_bolt/adapter/cherrypy/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/django/handler.html b/docs/api-docs/slack_bolt/adapter/django/handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/django/handler.html rename to docs/api-docs/slack_bolt/adapter/django/handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/django/index.html b/docs/api-docs/slack_bolt/adapter/django/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/django/index.html rename to docs/api-docs/slack_bolt/adapter/django/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/falcon/async_resource.html b/docs/api-docs/slack_bolt/adapter/falcon/async_resource.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/falcon/async_resource.html rename to docs/api-docs/slack_bolt/adapter/falcon/async_resource.html diff --git a/docs/static/api-docs/slack_bolt/adapter/falcon/index.html b/docs/api-docs/slack_bolt/adapter/falcon/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/falcon/index.html rename to docs/api-docs/slack_bolt/adapter/falcon/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/falcon/resource.html b/docs/api-docs/slack_bolt/adapter/falcon/resource.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/falcon/resource.html rename to docs/api-docs/slack_bolt/adapter/falcon/resource.html diff --git a/docs/static/api-docs/slack_bolt/adapter/fastapi/async_handler.html b/docs/api-docs/slack_bolt/adapter/fastapi/async_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/fastapi/async_handler.html rename to docs/api-docs/slack_bolt/adapter/fastapi/async_handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/fastapi/index.html b/docs/api-docs/slack_bolt/adapter/fastapi/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/fastapi/index.html rename to docs/api-docs/slack_bolt/adapter/fastapi/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/flask/handler.html b/docs/api-docs/slack_bolt/adapter/flask/handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/flask/handler.html rename to docs/api-docs/slack_bolt/adapter/flask/handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/flask/index.html b/docs/api-docs/slack_bolt/adapter/flask/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/flask/index.html rename to docs/api-docs/slack_bolt/adapter/flask/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/google_cloud_functions/handler.html b/docs/api-docs/slack_bolt/adapter/google_cloud_functions/handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/google_cloud_functions/handler.html rename to docs/api-docs/slack_bolt/adapter/google_cloud_functions/handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/google_cloud_functions/index.html b/docs/api-docs/slack_bolt/adapter/google_cloud_functions/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/google_cloud_functions/index.html rename to docs/api-docs/slack_bolt/adapter/google_cloud_functions/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/index.html b/docs/api-docs/slack_bolt/adapter/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/index.html rename to docs/api-docs/slack_bolt/adapter/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/pyramid/handler.html b/docs/api-docs/slack_bolt/adapter/pyramid/handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/pyramid/handler.html rename to docs/api-docs/slack_bolt/adapter/pyramid/handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/pyramid/index.html b/docs/api-docs/slack_bolt/adapter/pyramid/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/pyramid/index.html rename to docs/api-docs/slack_bolt/adapter/pyramid/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/sanic/async_handler.html b/docs/api-docs/slack_bolt/adapter/sanic/async_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/sanic/async_handler.html rename to docs/api-docs/slack_bolt/adapter/sanic/async_handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/sanic/index.html b/docs/api-docs/slack_bolt/adapter/sanic/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/sanic/index.html rename to docs/api-docs/slack_bolt/adapter/sanic/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/socket_mode/aiohttp/index.html b/docs/api-docs/slack_bolt/adapter/socket_mode/aiohttp/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/socket_mode/aiohttp/index.html rename to docs/api-docs/slack_bolt/adapter/socket_mode/aiohttp/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/socket_mode/async_base_handler.html b/docs/api-docs/slack_bolt/adapter/socket_mode/async_base_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/socket_mode/async_base_handler.html rename to docs/api-docs/slack_bolt/adapter/socket_mode/async_base_handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/socket_mode/async_handler.html b/docs/api-docs/slack_bolt/adapter/socket_mode/async_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/socket_mode/async_handler.html rename to docs/api-docs/slack_bolt/adapter/socket_mode/async_handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/socket_mode/async_internals.html b/docs/api-docs/slack_bolt/adapter/socket_mode/async_internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/socket_mode/async_internals.html rename to docs/api-docs/slack_bolt/adapter/socket_mode/async_internals.html diff --git a/docs/static/api-docs/slack_bolt/adapter/socket_mode/base_handler.html b/docs/api-docs/slack_bolt/adapter/socket_mode/base_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/socket_mode/base_handler.html rename to docs/api-docs/slack_bolt/adapter/socket_mode/base_handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/socket_mode/builtin/index.html b/docs/api-docs/slack_bolt/adapter/socket_mode/builtin/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/socket_mode/builtin/index.html rename to docs/api-docs/slack_bolt/adapter/socket_mode/builtin/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/socket_mode/index.html b/docs/api-docs/slack_bolt/adapter/socket_mode/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/socket_mode/index.html rename to docs/api-docs/slack_bolt/adapter/socket_mode/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/socket_mode/internals.html b/docs/api-docs/slack_bolt/adapter/socket_mode/internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/socket_mode/internals.html rename to docs/api-docs/slack_bolt/adapter/socket_mode/internals.html diff --git a/docs/static/api-docs/slack_bolt/adapter/socket_mode/websocket_client/index.html b/docs/api-docs/slack_bolt/adapter/socket_mode/websocket_client/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/socket_mode/websocket_client/index.html rename to docs/api-docs/slack_bolt/adapter/socket_mode/websocket_client/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/socket_mode/websockets/index.html b/docs/api-docs/slack_bolt/adapter/socket_mode/websockets/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/socket_mode/websockets/index.html rename to docs/api-docs/slack_bolt/adapter/socket_mode/websockets/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/starlette/async_handler.html b/docs/api-docs/slack_bolt/adapter/starlette/async_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/starlette/async_handler.html rename to docs/api-docs/slack_bolt/adapter/starlette/async_handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/starlette/handler.html b/docs/api-docs/slack_bolt/adapter/starlette/handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/starlette/handler.html rename to docs/api-docs/slack_bolt/adapter/starlette/handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/starlette/index.html b/docs/api-docs/slack_bolt/adapter/starlette/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/starlette/index.html rename to docs/api-docs/slack_bolt/adapter/starlette/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/tornado/async_handler.html b/docs/api-docs/slack_bolt/adapter/tornado/async_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/tornado/async_handler.html rename to docs/api-docs/slack_bolt/adapter/tornado/async_handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/tornado/handler.html b/docs/api-docs/slack_bolt/adapter/tornado/handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/tornado/handler.html rename to docs/api-docs/slack_bolt/adapter/tornado/handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/tornado/index.html b/docs/api-docs/slack_bolt/adapter/tornado/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/tornado/index.html rename to docs/api-docs/slack_bolt/adapter/tornado/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/wsgi/handler.html b/docs/api-docs/slack_bolt/adapter/wsgi/handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/wsgi/handler.html rename to docs/api-docs/slack_bolt/adapter/wsgi/handler.html diff --git a/docs/static/api-docs/slack_bolt/adapter/wsgi/http_request.html b/docs/api-docs/slack_bolt/adapter/wsgi/http_request.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/wsgi/http_request.html rename to docs/api-docs/slack_bolt/adapter/wsgi/http_request.html diff --git a/docs/static/api-docs/slack_bolt/adapter/wsgi/http_response.html b/docs/api-docs/slack_bolt/adapter/wsgi/http_response.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/wsgi/http_response.html rename to docs/api-docs/slack_bolt/adapter/wsgi/http_response.html diff --git a/docs/static/api-docs/slack_bolt/adapter/wsgi/index.html b/docs/api-docs/slack_bolt/adapter/wsgi/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/wsgi/index.html rename to docs/api-docs/slack_bolt/adapter/wsgi/index.html diff --git a/docs/static/api-docs/slack_bolt/adapter/wsgi/internals.html b/docs/api-docs/slack_bolt/adapter/wsgi/internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/adapter/wsgi/internals.html rename to docs/api-docs/slack_bolt/adapter/wsgi/internals.html diff --git a/docs/static/api-docs/slack_bolt/app/app.html b/docs/api-docs/slack_bolt/app/app.html similarity index 100% rename from docs/static/api-docs/slack_bolt/app/app.html rename to docs/api-docs/slack_bolt/app/app.html diff --git a/docs/static/api-docs/slack_bolt/app/async_app.html b/docs/api-docs/slack_bolt/app/async_app.html similarity index 100% rename from docs/static/api-docs/slack_bolt/app/async_app.html rename to docs/api-docs/slack_bolt/app/async_app.html diff --git a/docs/static/api-docs/slack_bolt/app/async_server.html b/docs/api-docs/slack_bolt/app/async_server.html similarity index 100% rename from docs/static/api-docs/slack_bolt/app/async_server.html rename to docs/api-docs/slack_bolt/app/async_server.html diff --git a/docs/static/api-docs/slack_bolt/app/index.html b/docs/api-docs/slack_bolt/app/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/app/index.html rename to docs/api-docs/slack_bolt/app/index.html diff --git a/docs/static/api-docs/slack_bolt/async_app.html b/docs/api-docs/slack_bolt/async_app.html similarity index 100% rename from docs/static/api-docs/slack_bolt/async_app.html rename to docs/api-docs/slack_bolt/async_app.html diff --git a/docs/static/api-docs/slack_bolt/authorization/async_authorize.html b/docs/api-docs/slack_bolt/authorization/async_authorize.html similarity index 100% rename from docs/static/api-docs/slack_bolt/authorization/async_authorize.html rename to docs/api-docs/slack_bolt/authorization/async_authorize.html diff --git a/docs/static/api-docs/slack_bolt/authorization/async_authorize_args.html b/docs/api-docs/slack_bolt/authorization/async_authorize_args.html similarity index 100% rename from docs/static/api-docs/slack_bolt/authorization/async_authorize_args.html rename to docs/api-docs/slack_bolt/authorization/async_authorize_args.html diff --git a/docs/static/api-docs/slack_bolt/authorization/authorize.html b/docs/api-docs/slack_bolt/authorization/authorize.html similarity index 100% rename from docs/static/api-docs/slack_bolt/authorization/authorize.html rename to docs/api-docs/slack_bolt/authorization/authorize.html diff --git a/docs/static/api-docs/slack_bolt/authorization/authorize_args.html b/docs/api-docs/slack_bolt/authorization/authorize_args.html similarity index 100% rename from docs/static/api-docs/slack_bolt/authorization/authorize_args.html rename to docs/api-docs/slack_bolt/authorization/authorize_args.html diff --git a/docs/static/api-docs/slack_bolt/authorization/authorize_result.html b/docs/api-docs/slack_bolt/authorization/authorize_result.html similarity index 100% rename from docs/static/api-docs/slack_bolt/authorization/authorize_result.html rename to docs/api-docs/slack_bolt/authorization/authorize_result.html diff --git a/docs/static/api-docs/slack_bolt/authorization/index.html b/docs/api-docs/slack_bolt/authorization/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/authorization/index.html rename to docs/api-docs/slack_bolt/authorization/index.html diff --git a/docs/static/api-docs/slack_bolt/context/ack/ack.html b/docs/api-docs/slack_bolt/context/ack/ack.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/ack/ack.html rename to docs/api-docs/slack_bolt/context/ack/ack.html diff --git a/docs/static/api-docs/slack_bolt/context/ack/async_ack.html b/docs/api-docs/slack_bolt/context/ack/async_ack.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/ack/async_ack.html rename to docs/api-docs/slack_bolt/context/ack/async_ack.html diff --git a/docs/static/api-docs/slack_bolt/context/ack/index.html b/docs/api-docs/slack_bolt/context/ack/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/ack/index.html rename to docs/api-docs/slack_bolt/context/ack/index.html diff --git a/docs/static/api-docs/slack_bolt/context/ack/internals.html b/docs/api-docs/slack_bolt/context/ack/internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/ack/internals.html rename to docs/api-docs/slack_bolt/context/ack/internals.html diff --git a/docs/static/api-docs/slack_bolt/context/assistant/assistant_utilities.html b/docs/api-docs/slack_bolt/context/assistant/assistant_utilities.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/assistant/assistant_utilities.html rename to docs/api-docs/slack_bolt/context/assistant/assistant_utilities.html diff --git a/docs/static/api-docs/slack_bolt/context/assistant/async_assistant_utilities.html b/docs/api-docs/slack_bolt/context/assistant/async_assistant_utilities.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/assistant/async_assistant_utilities.html rename to docs/api-docs/slack_bolt/context/assistant/async_assistant_utilities.html diff --git a/docs/static/api-docs/slack_bolt/context/assistant/index.html b/docs/api-docs/slack_bolt/context/assistant/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/assistant/index.html rename to docs/api-docs/slack_bolt/context/assistant/index.html diff --git a/docs/static/api-docs/slack_bolt/context/assistant/internals.html b/docs/api-docs/slack_bolt/context/assistant/internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/assistant/internals.html rename to docs/api-docs/slack_bolt/context/assistant/internals.html diff --git a/docs/static/api-docs/slack_bolt/context/assistant/thread_context/index.html b/docs/api-docs/slack_bolt/context/assistant/thread_context/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/assistant/thread_context/index.html rename to docs/api-docs/slack_bolt/context/assistant/thread_context/index.html diff --git a/docs/static/api-docs/slack_bolt/context/assistant/thread_context_store/async_store.html b/docs/api-docs/slack_bolt/context/assistant/thread_context_store/async_store.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/assistant/thread_context_store/async_store.html rename to docs/api-docs/slack_bolt/context/assistant/thread_context_store/async_store.html diff --git a/docs/static/api-docs/slack_bolt/context/assistant/thread_context_store/default_async_store.html b/docs/api-docs/slack_bolt/context/assistant/thread_context_store/default_async_store.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/assistant/thread_context_store/default_async_store.html rename to docs/api-docs/slack_bolt/context/assistant/thread_context_store/default_async_store.html diff --git a/docs/static/api-docs/slack_bolt/context/assistant/thread_context_store/default_store.html b/docs/api-docs/slack_bolt/context/assistant/thread_context_store/default_store.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/assistant/thread_context_store/default_store.html rename to docs/api-docs/slack_bolt/context/assistant/thread_context_store/default_store.html diff --git a/docs/static/api-docs/slack_bolt/context/assistant/thread_context_store/file/index.html b/docs/api-docs/slack_bolt/context/assistant/thread_context_store/file/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/assistant/thread_context_store/file/index.html rename to docs/api-docs/slack_bolt/context/assistant/thread_context_store/file/index.html diff --git a/docs/static/api-docs/slack_bolt/context/assistant/thread_context_store/index.html b/docs/api-docs/slack_bolt/context/assistant/thread_context_store/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/assistant/thread_context_store/index.html rename to docs/api-docs/slack_bolt/context/assistant/thread_context_store/index.html diff --git a/docs/static/api-docs/slack_bolt/context/assistant/thread_context_store/store.html b/docs/api-docs/slack_bolt/context/assistant/thread_context_store/store.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/assistant/thread_context_store/store.html rename to docs/api-docs/slack_bolt/context/assistant/thread_context_store/store.html diff --git a/docs/static/api-docs/slack_bolt/context/async_context.html b/docs/api-docs/slack_bolt/context/async_context.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/async_context.html rename to docs/api-docs/slack_bolt/context/async_context.html diff --git a/docs/static/api-docs/slack_bolt/context/base_context.html b/docs/api-docs/slack_bolt/context/base_context.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/base_context.html rename to docs/api-docs/slack_bolt/context/base_context.html diff --git a/docs/static/api-docs/slack_bolt/context/complete/async_complete.html b/docs/api-docs/slack_bolt/context/complete/async_complete.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/complete/async_complete.html rename to docs/api-docs/slack_bolt/context/complete/async_complete.html diff --git a/docs/static/api-docs/slack_bolt/context/complete/complete.html b/docs/api-docs/slack_bolt/context/complete/complete.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/complete/complete.html rename to docs/api-docs/slack_bolt/context/complete/complete.html diff --git a/docs/static/api-docs/slack_bolt/context/complete/index.html b/docs/api-docs/slack_bolt/context/complete/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/complete/index.html rename to docs/api-docs/slack_bolt/context/complete/index.html diff --git a/docs/static/api-docs/slack_bolt/context/context.html b/docs/api-docs/slack_bolt/context/context.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/context.html rename to docs/api-docs/slack_bolt/context/context.html diff --git a/docs/static/api-docs/slack_bolt/context/fail/async_fail.html b/docs/api-docs/slack_bolt/context/fail/async_fail.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/fail/async_fail.html rename to docs/api-docs/slack_bolt/context/fail/async_fail.html diff --git a/docs/static/api-docs/slack_bolt/context/fail/fail.html b/docs/api-docs/slack_bolt/context/fail/fail.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/fail/fail.html rename to docs/api-docs/slack_bolt/context/fail/fail.html diff --git a/docs/static/api-docs/slack_bolt/context/fail/index.html b/docs/api-docs/slack_bolt/context/fail/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/fail/index.html rename to docs/api-docs/slack_bolt/context/fail/index.html diff --git a/docs/static/api-docs/slack_bolt/context/get_thread_context/async_get_thread_context.html b/docs/api-docs/slack_bolt/context/get_thread_context/async_get_thread_context.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/get_thread_context/async_get_thread_context.html rename to docs/api-docs/slack_bolt/context/get_thread_context/async_get_thread_context.html diff --git a/docs/static/api-docs/slack_bolt/context/get_thread_context/get_thread_context.html b/docs/api-docs/slack_bolt/context/get_thread_context/get_thread_context.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/get_thread_context/get_thread_context.html rename to docs/api-docs/slack_bolt/context/get_thread_context/get_thread_context.html diff --git a/docs/static/api-docs/slack_bolt/context/get_thread_context/index.html b/docs/api-docs/slack_bolt/context/get_thread_context/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/get_thread_context/index.html rename to docs/api-docs/slack_bolt/context/get_thread_context/index.html diff --git a/docs/static/api-docs/slack_bolt/context/index.html b/docs/api-docs/slack_bolt/context/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/index.html rename to docs/api-docs/slack_bolt/context/index.html diff --git a/docs/static/api-docs/slack_bolt/context/respond/async_respond.html b/docs/api-docs/slack_bolt/context/respond/async_respond.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/respond/async_respond.html rename to docs/api-docs/slack_bolt/context/respond/async_respond.html diff --git a/docs/static/api-docs/slack_bolt/context/respond/index.html b/docs/api-docs/slack_bolt/context/respond/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/respond/index.html rename to docs/api-docs/slack_bolt/context/respond/index.html diff --git a/docs/static/api-docs/slack_bolt/context/respond/internals.html b/docs/api-docs/slack_bolt/context/respond/internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/respond/internals.html rename to docs/api-docs/slack_bolt/context/respond/internals.html diff --git a/docs/static/api-docs/slack_bolt/context/respond/respond.html b/docs/api-docs/slack_bolt/context/respond/respond.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/respond/respond.html rename to docs/api-docs/slack_bolt/context/respond/respond.html diff --git a/docs/static/api-docs/slack_bolt/context/save_thread_context/async_save_thread_context.html b/docs/api-docs/slack_bolt/context/save_thread_context/async_save_thread_context.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/save_thread_context/async_save_thread_context.html rename to docs/api-docs/slack_bolt/context/save_thread_context/async_save_thread_context.html diff --git a/docs/static/api-docs/slack_bolt/context/save_thread_context/index.html b/docs/api-docs/slack_bolt/context/save_thread_context/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/save_thread_context/index.html rename to docs/api-docs/slack_bolt/context/save_thread_context/index.html diff --git a/docs/static/api-docs/slack_bolt/context/save_thread_context/save_thread_context.html b/docs/api-docs/slack_bolt/context/save_thread_context/save_thread_context.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/save_thread_context/save_thread_context.html rename to docs/api-docs/slack_bolt/context/save_thread_context/save_thread_context.html diff --git a/docs/static/api-docs/slack_bolt/context/say/async_say.html b/docs/api-docs/slack_bolt/context/say/async_say.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/say/async_say.html rename to docs/api-docs/slack_bolt/context/say/async_say.html diff --git a/docs/static/api-docs/slack_bolt/context/say/index.html b/docs/api-docs/slack_bolt/context/say/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/say/index.html rename to docs/api-docs/slack_bolt/context/say/index.html diff --git a/docs/static/api-docs/slack_bolt/context/say/internals.html b/docs/api-docs/slack_bolt/context/say/internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/say/internals.html rename to docs/api-docs/slack_bolt/context/say/internals.html diff --git a/docs/static/api-docs/slack_bolt/context/say/say.html b/docs/api-docs/slack_bolt/context/say/say.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/say/say.html rename to docs/api-docs/slack_bolt/context/say/say.html diff --git a/docs/static/api-docs/slack_bolt/context/set_status/async_set_status.html b/docs/api-docs/slack_bolt/context/set_status/async_set_status.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/set_status/async_set_status.html rename to docs/api-docs/slack_bolt/context/set_status/async_set_status.html diff --git a/docs/static/api-docs/slack_bolt/context/set_status/index.html b/docs/api-docs/slack_bolt/context/set_status/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/set_status/index.html rename to docs/api-docs/slack_bolt/context/set_status/index.html diff --git a/docs/static/api-docs/slack_bolt/context/set_status/set_status.html b/docs/api-docs/slack_bolt/context/set_status/set_status.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/set_status/set_status.html rename to docs/api-docs/slack_bolt/context/set_status/set_status.html diff --git a/docs/static/api-docs/slack_bolt/context/set_suggested_prompts/async_set_suggested_prompts.html b/docs/api-docs/slack_bolt/context/set_suggested_prompts/async_set_suggested_prompts.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/set_suggested_prompts/async_set_suggested_prompts.html rename to docs/api-docs/slack_bolt/context/set_suggested_prompts/async_set_suggested_prompts.html diff --git a/docs/static/api-docs/slack_bolt/context/set_suggested_prompts/index.html b/docs/api-docs/slack_bolt/context/set_suggested_prompts/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/set_suggested_prompts/index.html rename to docs/api-docs/slack_bolt/context/set_suggested_prompts/index.html diff --git a/docs/static/api-docs/slack_bolt/context/set_suggested_prompts/set_suggested_prompts.html b/docs/api-docs/slack_bolt/context/set_suggested_prompts/set_suggested_prompts.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/set_suggested_prompts/set_suggested_prompts.html rename to docs/api-docs/slack_bolt/context/set_suggested_prompts/set_suggested_prompts.html diff --git a/docs/static/api-docs/slack_bolt/context/set_title/async_set_title.html b/docs/api-docs/slack_bolt/context/set_title/async_set_title.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/set_title/async_set_title.html rename to docs/api-docs/slack_bolt/context/set_title/async_set_title.html diff --git a/docs/static/api-docs/slack_bolt/context/set_title/index.html b/docs/api-docs/slack_bolt/context/set_title/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/set_title/index.html rename to docs/api-docs/slack_bolt/context/set_title/index.html diff --git a/docs/static/api-docs/slack_bolt/context/set_title/set_title.html b/docs/api-docs/slack_bolt/context/set_title/set_title.html similarity index 100% rename from docs/static/api-docs/slack_bolt/context/set_title/set_title.html rename to docs/api-docs/slack_bolt/context/set_title/set_title.html diff --git a/docs/static/api-docs/slack_bolt/error/index.html b/docs/api-docs/slack_bolt/error/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/error/index.html rename to docs/api-docs/slack_bolt/error/index.html diff --git a/docs/static/api-docs/slack_bolt/index.html b/docs/api-docs/slack_bolt/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/index.html rename to docs/api-docs/slack_bolt/index.html diff --git a/docs/static/api-docs/slack_bolt/kwargs_injection/args.html b/docs/api-docs/slack_bolt/kwargs_injection/args.html similarity index 100% rename from docs/static/api-docs/slack_bolt/kwargs_injection/args.html rename to docs/api-docs/slack_bolt/kwargs_injection/args.html diff --git a/docs/static/api-docs/slack_bolt/kwargs_injection/async_args.html b/docs/api-docs/slack_bolt/kwargs_injection/async_args.html similarity index 100% rename from docs/static/api-docs/slack_bolt/kwargs_injection/async_args.html rename to docs/api-docs/slack_bolt/kwargs_injection/async_args.html diff --git a/docs/static/api-docs/slack_bolt/kwargs_injection/async_utils.html b/docs/api-docs/slack_bolt/kwargs_injection/async_utils.html similarity index 100% rename from docs/static/api-docs/slack_bolt/kwargs_injection/async_utils.html rename to docs/api-docs/slack_bolt/kwargs_injection/async_utils.html diff --git a/docs/static/api-docs/slack_bolt/kwargs_injection/index.html b/docs/api-docs/slack_bolt/kwargs_injection/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/kwargs_injection/index.html rename to docs/api-docs/slack_bolt/kwargs_injection/index.html diff --git a/docs/static/api-docs/slack_bolt/kwargs_injection/utils.html b/docs/api-docs/slack_bolt/kwargs_injection/utils.html similarity index 100% rename from docs/static/api-docs/slack_bolt/kwargs_injection/utils.html rename to docs/api-docs/slack_bolt/kwargs_injection/utils.html diff --git a/docs/static/api-docs/slack_bolt/lazy_listener/async_internals.html b/docs/api-docs/slack_bolt/lazy_listener/async_internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/lazy_listener/async_internals.html rename to docs/api-docs/slack_bolt/lazy_listener/async_internals.html diff --git a/docs/static/api-docs/slack_bolt/lazy_listener/async_runner.html b/docs/api-docs/slack_bolt/lazy_listener/async_runner.html similarity index 100% rename from docs/static/api-docs/slack_bolt/lazy_listener/async_runner.html rename to docs/api-docs/slack_bolt/lazy_listener/async_runner.html diff --git a/docs/static/api-docs/slack_bolt/lazy_listener/asyncio_runner.html b/docs/api-docs/slack_bolt/lazy_listener/asyncio_runner.html similarity index 100% rename from docs/static/api-docs/slack_bolt/lazy_listener/asyncio_runner.html rename to docs/api-docs/slack_bolt/lazy_listener/asyncio_runner.html diff --git a/docs/static/api-docs/slack_bolt/lazy_listener/index.html b/docs/api-docs/slack_bolt/lazy_listener/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/lazy_listener/index.html rename to docs/api-docs/slack_bolt/lazy_listener/index.html diff --git a/docs/static/api-docs/slack_bolt/lazy_listener/internals.html b/docs/api-docs/slack_bolt/lazy_listener/internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/lazy_listener/internals.html rename to docs/api-docs/slack_bolt/lazy_listener/internals.html diff --git a/docs/static/api-docs/slack_bolt/lazy_listener/runner.html b/docs/api-docs/slack_bolt/lazy_listener/runner.html similarity index 100% rename from docs/static/api-docs/slack_bolt/lazy_listener/runner.html rename to docs/api-docs/slack_bolt/lazy_listener/runner.html diff --git a/docs/static/api-docs/slack_bolt/lazy_listener/thread_runner.html b/docs/api-docs/slack_bolt/lazy_listener/thread_runner.html similarity index 100% rename from docs/static/api-docs/slack_bolt/lazy_listener/thread_runner.html rename to docs/api-docs/slack_bolt/lazy_listener/thread_runner.html diff --git a/docs/static/api-docs/slack_bolt/listener/async_builtins.html b/docs/api-docs/slack_bolt/listener/async_builtins.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener/async_builtins.html rename to docs/api-docs/slack_bolt/listener/async_builtins.html diff --git a/docs/static/api-docs/slack_bolt/listener/async_listener.html b/docs/api-docs/slack_bolt/listener/async_listener.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener/async_listener.html rename to docs/api-docs/slack_bolt/listener/async_listener.html diff --git a/docs/static/api-docs/slack_bolt/listener/async_listener_completion_handler.html b/docs/api-docs/slack_bolt/listener/async_listener_completion_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener/async_listener_completion_handler.html rename to docs/api-docs/slack_bolt/listener/async_listener_completion_handler.html diff --git a/docs/static/api-docs/slack_bolt/listener/async_listener_error_handler.html b/docs/api-docs/slack_bolt/listener/async_listener_error_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener/async_listener_error_handler.html rename to docs/api-docs/slack_bolt/listener/async_listener_error_handler.html diff --git a/docs/static/api-docs/slack_bolt/listener/async_listener_start_handler.html b/docs/api-docs/slack_bolt/listener/async_listener_start_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener/async_listener_start_handler.html rename to docs/api-docs/slack_bolt/listener/async_listener_start_handler.html diff --git a/docs/static/api-docs/slack_bolt/listener/asyncio_runner.html b/docs/api-docs/slack_bolt/listener/asyncio_runner.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener/asyncio_runner.html rename to docs/api-docs/slack_bolt/listener/asyncio_runner.html diff --git a/docs/static/api-docs/slack_bolt/listener/builtins.html b/docs/api-docs/slack_bolt/listener/builtins.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener/builtins.html rename to docs/api-docs/slack_bolt/listener/builtins.html diff --git a/docs/static/api-docs/slack_bolt/listener/custom_listener.html b/docs/api-docs/slack_bolt/listener/custom_listener.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener/custom_listener.html rename to docs/api-docs/slack_bolt/listener/custom_listener.html diff --git a/docs/static/api-docs/slack_bolt/listener/index.html b/docs/api-docs/slack_bolt/listener/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener/index.html rename to docs/api-docs/slack_bolt/listener/index.html diff --git a/docs/static/api-docs/slack_bolt/listener/listener.html b/docs/api-docs/slack_bolt/listener/listener.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener/listener.html rename to docs/api-docs/slack_bolt/listener/listener.html diff --git a/docs/static/api-docs/slack_bolt/listener/listener_completion_handler.html b/docs/api-docs/slack_bolt/listener/listener_completion_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener/listener_completion_handler.html rename to docs/api-docs/slack_bolt/listener/listener_completion_handler.html diff --git a/docs/static/api-docs/slack_bolt/listener/listener_error_handler.html b/docs/api-docs/slack_bolt/listener/listener_error_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener/listener_error_handler.html rename to docs/api-docs/slack_bolt/listener/listener_error_handler.html diff --git a/docs/static/api-docs/slack_bolt/listener/listener_start_handler.html b/docs/api-docs/slack_bolt/listener/listener_start_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener/listener_start_handler.html rename to docs/api-docs/slack_bolt/listener/listener_start_handler.html diff --git a/docs/static/api-docs/slack_bolt/listener/thread_runner.html b/docs/api-docs/slack_bolt/listener/thread_runner.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener/thread_runner.html rename to docs/api-docs/slack_bolt/listener/thread_runner.html diff --git a/docs/static/api-docs/slack_bolt/listener_matcher/async_builtins.html b/docs/api-docs/slack_bolt/listener_matcher/async_builtins.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener_matcher/async_builtins.html rename to docs/api-docs/slack_bolt/listener_matcher/async_builtins.html diff --git a/docs/static/api-docs/slack_bolt/listener_matcher/async_listener_matcher.html b/docs/api-docs/slack_bolt/listener_matcher/async_listener_matcher.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener_matcher/async_listener_matcher.html rename to docs/api-docs/slack_bolt/listener_matcher/async_listener_matcher.html diff --git a/docs/static/api-docs/slack_bolt/listener_matcher/builtins.html b/docs/api-docs/slack_bolt/listener_matcher/builtins.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener_matcher/builtins.html rename to docs/api-docs/slack_bolt/listener_matcher/builtins.html diff --git a/docs/static/api-docs/slack_bolt/listener_matcher/custom_listener_matcher.html b/docs/api-docs/slack_bolt/listener_matcher/custom_listener_matcher.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener_matcher/custom_listener_matcher.html rename to docs/api-docs/slack_bolt/listener_matcher/custom_listener_matcher.html diff --git a/docs/static/api-docs/slack_bolt/listener_matcher/index.html b/docs/api-docs/slack_bolt/listener_matcher/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener_matcher/index.html rename to docs/api-docs/slack_bolt/listener_matcher/index.html diff --git a/docs/static/api-docs/slack_bolt/listener_matcher/listener_matcher.html b/docs/api-docs/slack_bolt/listener_matcher/listener_matcher.html similarity index 100% rename from docs/static/api-docs/slack_bolt/listener_matcher/listener_matcher.html rename to docs/api-docs/slack_bolt/listener_matcher/listener_matcher.html diff --git a/docs/static/api-docs/slack_bolt/logger/index.html b/docs/api-docs/slack_bolt/logger/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/logger/index.html rename to docs/api-docs/slack_bolt/logger/index.html diff --git a/docs/static/api-docs/slack_bolt/logger/messages.html b/docs/api-docs/slack_bolt/logger/messages.html similarity index 100% rename from docs/static/api-docs/slack_bolt/logger/messages.html rename to docs/api-docs/slack_bolt/logger/messages.html diff --git a/docs/static/api-docs/slack_bolt/middleware/assistant/assistant.html b/docs/api-docs/slack_bolt/middleware/assistant/assistant.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/assistant/assistant.html rename to docs/api-docs/slack_bolt/middleware/assistant/assistant.html diff --git a/docs/static/api-docs/slack_bolt/middleware/assistant/async_assistant.html b/docs/api-docs/slack_bolt/middleware/assistant/async_assistant.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/assistant/async_assistant.html rename to docs/api-docs/slack_bolt/middleware/assistant/async_assistant.html diff --git a/docs/static/api-docs/slack_bolt/middleware/assistant/index.html b/docs/api-docs/slack_bolt/middleware/assistant/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/assistant/index.html rename to docs/api-docs/slack_bolt/middleware/assistant/index.html diff --git a/docs/static/api-docs/slack_bolt/middleware/async_builtins.html b/docs/api-docs/slack_bolt/middleware/async_builtins.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/async_builtins.html rename to docs/api-docs/slack_bolt/middleware/async_builtins.html diff --git a/docs/static/api-docs/slack_bolt/middleware/async_custom_middleware.html b/docs/api-docs/slack_bolt/middleware/async_custom_middleware.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/async_custom_middleware.html rename to docs/api-docs/slack_bolt/middleware/async_custom_middleware.html diff --git a/docs/static/api-docs/slack_bolt/middleware/async_middleware.html b/docs/api-docs/slack_bolt/middleware/async_middleware.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/async_middleware.html rename to docs/api-docs/slack_bolt/middleware/async_middleware.html diff --git a/docs/static/api-docs/slack_bolt/middleware/async_middleware_error_handler.html b/docs/api-docs/slack_bolt/middleware/async_middleware_error_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/async_middleware_error_handler.html rename to docs/api-docs/slack_bolt/middleware/async_middleware_error_handler.html diff --git a/docs/static/api-docs/slack_bolt/middleware/attaching_function_token/async_attaching_function_token.html b/docs/api-docs/slack_bolt/middleware/attaching_function_token/async_attaching_function_token.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/attaching_function_token/async_attaching_function_token.html rename to docs/api-docs/slack_bolt/middleware/attaching_function_token/async_attaching_function_token.html diff --git a/docs/static/api-docs/slack_bolt/middleware/attaching_function_token/attaching_function_token.html b/docs/api-docs/slack_bolt/middleware/attaching_function_token/attaching_function_token.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/attaching_function_token/attaching_function_token.html rename to docs/api-docs/slack_bolt/middleware/attaching_function_token/attaching_function_token.html diff --git a/docs/static/api-docs/slack_bolt/middleware/attaching_function_token/index.html b/docs/api-docs/slack_bolt/middleware/attaching_function_token/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/attaching_function_token/index.html rename to docs/api-docs/slack_bolt/middleware/attaching_function_token/index.html diff --git a/docs/static/api-docs/slack_bolt/middleware/authorization/async_authorization.html b/docs/api-docs/slack_bolt/middleware/authorization/async_authorization.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/authorization/async_authorization.html rename to docs/api-docs/slack_bolt/middleware/authorization/async_authorization.html diff --git a/docs/static/api-docs/slack_bolt/middleware/authorization/async_internals.html b/docs/api-docs/slack_bolt/middleware/authorization/async_internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/authorization/async_internals.html rename to docs/api-docs/slack_bolt/middleware/authorization/async_internals.html diff --git a/docs/static/api-docs/slack_bolt/middleware/authorization/async_multi_teams_authorization.html b/docs/api-docs/slack_bolt/middleware/authorization/async_multi_teams_authorization.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/authorization/async_multi_teams_authorization.html rename to docs/api-docs/slack_bolt/middleware/authorization/async_multi_teams_authorization.html diff --git a/docs/static/api-docs/slack_bolt/middleware/authorization/async_single_team_authorization.html b/docs/api-docs/slack_bolt/middleware/authorization/async_single_team_authorization.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/authorization/async_single_team_authorization.html rename to docs/api-docs/slack_bolt/middleware/authorization/async_single_team_authorization.html diff --git a/docs/static/api-docs/slack_bolt/middleware/authorization/authorization.html b/docs/api-docs/slack_bolt/middleware/authorization/authorization.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/authorization/authorization.html rename to docs/api-docs/slack_bolt/middleware/authorization/authorization.html diff --git a/docs/static/api-docs/slack_bolt/middleware/authorization/index.html b/docs/api-docs/slack_bolt/middleware/authorization/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/authorization/index.html rename to docs/api-docs/slack_bolt/middleware/authorization/index.html diff --git a/docs/static/api-docs/slack_bolt/middleware/authorization/internals.html b/docs/api-docs/slack_bolt/middleware/authorization/internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/authorization/internals.html rename to docs/api-docs/slack_bolt/middleware/authorization/internals.html diff --git a/docs/static/api-docs/slack_bolt/middleware/authorization/multi_teams_authorization.html b/docs/api-docs/slack_bolt/middleware/authorization/multi_teams_authorization.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/authorization/multi_teams_authorization.html rename to docs/api-docs/slack_bolt/middleware/authorization/multi_teams_authorization.html diff --git a/docs/static/api-docs/slack_bolt/middleware/authorization/single_team_authorization.html b/docs/api-docs/slack_bolt/middleware/authorization/single_team_authorization.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/authorization/single_team_authorization.html rename to docs/api-docs/slack_bolt/middleware/authorization/single_team_authorization.html diff --git a/docs/static/api-docs/slack_bolt/middleware/custom_middleware.html b/docs/api-docs/slack_bolt/middleware/custom_middleware.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/custom_middleware.html rename to docs/api-docs/slack_bolt/middleware/custom_middleware.html diff --git a/docs/static/api-docs/slack_bolt/middleware/ignoring_self_events/async_ignoring_self_events.html b/docs/api-docs/slack_bolt/middleware/ignoring_self_events/async_ignoring_self_events.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/ignoring_self_events/async_ignoring_self_events.html rename to docs/api-docs/slack_bolt/middleware/ignoring_self_events/async_ignoring_self_events.html diff --git a/docs/static/api-docs/slack_bolt/middleware/ignoring_self_events/ignoring_self_events.html b/docs/api-docs/slack_bolt/middleware/ignoring_self_events/ignoring_self_events.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/ignoring_self_events/ignoring_self_events.html rename to docs/api-docs/slack_bolt/middleware/ignoring_self_events/ignoring_self_events.html diff --git a/docs/static/api-docs/slack_bolt/middleware/ignoring_self_events/index.html b/docs/api-docs/slack_bolt/middleware/ignoring_self_events/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/ignoring_self_events/index.html rename to docs/api-docs/slack_bolt/middleware/ignoring_self_events/index.html diff --git a/docs/static/api-docs/slack_bolt/middleware/index.html b/docs/api-docs/slack_bolt/middleware/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/index.html rename to docs/api-docs/slack_bolt/middleware/index.html diff --git a/docs/static/api-docs/slack_bolt/middleware/message_listener_matches/async_message_listener_matches.html b/docs/api-docs/slack_bolt/middleware/message_listener_matches/async_message_listener_matches.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/message_listener_matches/async_message_listener_matches.html rename to docs/api-docs/slack_bolt/middleware/message_listener_matches/async_message_listener_matches.html diff --git a/docs/static/api-docs/slack_bolt/middleware/message_listener_matches/index.html b/docs/api-docs/slack_bolt/middleware/message_listener_matches/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/message_listener_matches/index.html rename to docs/api-docs/slack_bolt/middleware/message_listener_matches/index.html diff --git a/docs/static/api-docs/slack_bolt/middleware/message_listener_matches/message_listener_matches.html b/docs/api-docs/slack_bolt/middleware/message_listener_matches/message_listener_matches.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/message_listener_matches/message_listener_matches.html rename to docs/api-docs/slack_bolt/middleware/message_listener_matches/message_listener_matches.html diff --git a/docs/static/api-docs/slack_bolt/middleware/middleware.html b/docs/api-docs/slack_bolt/middleware/middleware.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/middleware.html rename to docs/api-docs/slack_bolt/middleware/middleware.html diff --git a/docs/static/api-docs/slack_bolt/middleware/middleware_error_handler.html b/docs/api-docs/slack_bolt/middleware/middleware_error_handler.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/middleware_error_handler.html rename to docs/api-docs/slack_bolt/middleware/middleware_error_handler.html diff --git a/docs/static/api-docs/slack_bolt/middleware/request_verification/async_request_verification.html b/docs/api-docs/slack_bolt/middleware/request_verification/async_request_verification.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/request_verification/async_request_verification.html rename to docs/api-docs/slack_bolt/middleware/request_verification/async_request_verification.html diff --git a/docs/static/api-docs/slack_bolt/middleware/request_verification/index.html b/docs/api-docs/slack_bolt/middleware/request_verification/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/request_verification/index.html rename to docs/api-docs/slack_bolt/middleware/request_verification/index.html diff --git a/docs/static/api-docs/slack_bolt/middleware/request_verification/request_verification.html b/docs/api-docs/slack_bolt/middleware/request_verification/request_verification.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/request_verification/request_verification.html rename to docs/api-docs/slack_bolt/middleware/request_verification/request_verification.html diff --git a/docs/static/api-docs/slack_bolt/middleware/ssl_check/async_ssl_check.html b/docs/api-docs/slack_bolt/middleware/ssl_check/async_ssl_check.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/ssl_check/async_ssl_check.html rename to docs/api-docs/slack_bolt/middleware/ssl_check/async_ssl_check.html diff --git a/docs/static/api-docs/slack_bolt/middleware/ssl_check/index.html b/docs/api-docs/slack_bolt/middleware/ssl_check/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/ssl_check/index.html rename to docs/api-docs/slack_bolt/middleware/ssl_check/index.html diff --git a/docs/static/api-docs/slack_bolt/middleware/ssl_check/ssl_check.html b/docs/api-docs/slack_bolt/middleware/ssl_check/ssl_check.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/ssl_check/ssl_check.html rename to docs/api-docs/slack_bolt/middleware/ssl_check/ssl_check.html diff --git a/docs/static/api-docs/slack_bolt/middleware/url_verification/async_url_verification.html b/docs/api-docs/slack_bolt/middleware/url_verification/async_url_verification.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/url_verification/async_url_verification.html rename to docs/api-docs/slack_bolt/middleware/url_verification/async_url_verification.html diff --git a/docs/static/api-docs/slack_bolt/middleware/url_verification/index.html b/docs/api-docs/slack_bolt/middleware/url_verification/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/url_verification/index.html rename to docs/api-docs/slack_bolt/middleware/url_verification/index.html diff --git a/docs/static/api-docs/slack_bolt/middleware/url_verification/url_verification.html b/docs/api-docs/slack_bolt/middleware/url_verification/url_verification.html similarity index 100% rename from docs/static/api-docs/slack_bolt/middleware/url_verification/url_verification.html rename to docs/api-docs/slack_bolt/middleware/url_verification/url_verification.html diff --git a/docs/static/api-docs/slack_bolt/oauth/async_callback_options.html b/docs/api-docs/slack_bolt/oauth/async_callback_options.html similarity index 100% rename from docs/static/api-docs/slack_bolt/oauth/async_callback_options.html rename to docs/api-docs/slack_bolt/oauth/async_callback_options.html diff --git a/docs/static/api-docs/slack_bolt/oauth/async_internals.html b/docs/api-docs/slack_bolt/oauth/async_internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/oauth/async_internals.html rename to docs/api-docs/slack_bolt/oauth/async_internals.html diff --git a/docs/static/api-docs/slack_bolt/oauth/async_oauth_flow.html b/docs/api-docs/slack_bolt/oauth/async_oauth_flow.html similarity index 100% rename from docs/static/api-docs/slack_bolt/oauth/async_oauth_flow.html rename to docs/api-docs/slack_bolt/oauth/async_oauth_flow.html diff --git a/docs/static/api-docs/slack_bolt/oauth/async_oauth_settings.html b/docs/api-docs/slack_bolt/oauth/async_oauth_settings.html similarity index 100% rename from docs/static/api-docs/slack_bolt/oauth/async_oauth_settings.html rename to docs/api-docs/slack_bolt/oauth/async_oauth_settings.html diff --git a/docs/static/api-docs/slack_bolt/oauth/callback_options.html b/docs/api-docs/slack_bolt/oauth/callback_options.html similarity index 100% rename from docs/static/api-docs/slack_bolt/oauth/callback_options.html rename to docs/api-docs/slack_bolt/oauth/callback_options.html diff --git a/docs/static/api-docs/slack_bolt/oauth/index.html b/docs/api-docs/slack_bolt/oauth/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/oauth/index.html rename to docs/api-docs/slack_bolt/oauth/index.html diff --git a/docs/static/api-docs/slack_bolt/oauth/internals.html b/docs/api-docs/slack_bolt/oauth/internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/oauth/internals.html rename to docs/api-docs/slack_bolt/oauth/internals.html diff --git a/docs/static/api-docs/slack_bolt/oauth/oauth_flow.html b/docs/api-docs/slack_bolt/oauth/oauth_flow.html similarity index 100% rename from docs/static/api-docs/slack_bolt/oauth/oauth_flow.html rename to docs/api-docs/slack_bolt/oauth/oauth_flow.html diff --git a/docs/static/api-docs/slack_bolt/oauth/oauth_settings.html b/docs/api-docs/slack_bolt/oauth/oauth_settings.html similarity index 100% rename from docs/static/api-docs/slack_bolt/oauth/oauth_settings.html rename to docs/api-docs/slack_bolt/oauth/oauth_settings.html diff --git a/docs/static/api-docs/slack_bolt/request/async_internals.html b/docs/api-docs/slack_bolt/request/async_internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/request/async_internals.html rename to docs/api-docs/slack_bolt/request/async_internals.html diff --git a/docs/static/api-docs/slack_bolt/request/async_request.html b/docs/api-docs/slack_bolt/request/async_request.html similarity index 100% rename from docs/static/api-docs/slack_bolt/request/async_request.html rename to docs/api-docs/slack_bolt/request/async_request.html diff --git a/docs/static/api-docs/slack_bolt/request/index.html b/docs/api-docs/slack_bolt/request/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/request/index.html rename to docs/api-docs/slack_bolt/request/index.html diff --git a/docs/static/api-docs/slack_bolt/request/internals.html b/docs/api-docs/slack_bolt/request/internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/request/internals.html rename to docs/api-docs/slack_bolt/request/internals.html diff --git a/docs/static/api-docs/slack_bolt/request/payload_utils.html b/docs/api-docs/slack_bolt/request/payload_utils.html similarity index 100% rename from docs/static/api-docs/slack_bolt/request/payload_utils.html rename to docs/api-docs/slack_bolt/request/payload_utils.html diff --git a/docs/static/api-docs/slack_bolt/request/request.html b/docs/api-docs/slack_bolt/request/request.html similarity index 100% rename from docs/static/api-docs/slack_bolt/request/request.html rename to docs/api-docs/slack_bolt/request/request.html diff --git a/docs/static/api-docs/slack_bolt/response/index.html b/docs/api-docs/slack_bolt/response/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/response/index.html rename to docs/api-docs/slack_bolt/response/index.html diff --git a/docs/static/api-docs/slack_bolt/response/response.html b/docs/api-docs/slack_bolt/response/response.html similarity index 100% rename from docs/static/api-docs/slack_bolt/response/response.html rename to docs/api-docs/slack_bolt/response/response.html diff --git a/docs/static/api-docs/slack_bolt/util/async_utils.html b/docs/api-docs/slack_bolt/util/async_utils.html similarity index 100% rename from docs/static/api-docs/slack_bolt/util/async_utils.html rename to docs/api-docs/slack_bolt/util/async_utils.html diff --git a/docs/static/api-docs/slack_bolt/util/index.html b/docs/api-docs/slack_bolt/util/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/util/index.html rename to docs/api-docs/slack_bolt/util/index.html diff --git a/docs/static/api-docs/slack_bolt/util/utils.html b/docs/api-docs/slack_bolt/util/utils.html similarity index 100% rename from docs/static/api-docs/slack_bolt/util/utils.html rename to docs/api-docs/slack_bolt/util/utils.html diff --git a/docs/static/api-docs/slack_bolt/version.html b/docs/api-docs/slack_bolt/version.html similarity index 100% rename from docs/static/api-docs/slack_bolt/version.html rename to docs/api-docs/slack_bolt/version.html diff --git a/docs/static/api-docs/slack_bolt/workflows/index.html b/docs/api-docs/slack_bolt/workflows/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/index.html rename to docs/api-docs/slack_bolt/workflows/index.html diff --git a/docs/static/api-docs/slack_bolt/workflows/step/async_step.html b/docs/api-docs/slack_bolt/workflows/step/async_step.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/step/async_step.html rename to docs/api-docs/slack_bolt/workflows/step/async_step.html diff --git a/docs/static/api-docs/slack_bolt/workflows/step/async_step_middleware.html b/docs/api-docs/slack_bolt/workflows/step/async_step_middleware.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/step/async_step_middleware.html rename to docs/api-docs/slack_bolt/workflows/step/async_step_middleware.html diff --git a/docs/static/api-docs/slack_bolt/workflows/step/index.html b/docs/api-docs/slack_bolt/workflows/step/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/step/index.html rename to docs/api-docs/slack_bolt/workflows/step/index.html diff --git a/docs/static/api-docs/slack_bolt/workflows/step/internals.html b/docs/api-docs/slack_bolt/workflows/step/internals.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/step/internals.html rename to docs/api-docs/slack_bolt/workflows/step/internals.html diff --git a/docs/static/api-docs/slack_bolt/workflows/step/step.html b/docs/api-docs/slack_bolt/workflows/step/step.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/step/step.html rename to docs/api-docs/slack_bolt/workflows/step/step.html diff --git a/docs/static/api-docs/slack_bolt/workflows/step/step_middleware.html b/docs/api-docs/slack_bolt/workflows/step/step_middleware.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/step/step_middleware.html rename to docs/api-docs/slack_bolt/workflows/step/step_middleware.html diff --git a/docs/static/api-docs/slack_bolt/workflows/step/utilities/async_complete.html b/docs/api-docs/slack_bolt/workflows/step/utilities/async_complete.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/step/utilities/async_complete.html rename to docs/api-docs/slack_bolt/workflows/step/utilities/async_complete.html diff --git a/docs/static/api-docs/slack_bolt/workflows/step/utilities/async_configure.html b/docs/api-docs/slack_bolt/workflows/step/utilities/async_configure.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/step/utilities/async_configure.html rename to docs/api-docs/slack_bolt/workflows/step/utilities/async_configure.html diff --git a/docs/static/api-docs/slack_bolt/workflows/step/utilities/async_fail.html b/docs/api-docs/slack_bolt/workflows/step/utilities/async_fail.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/step/utilities/async_fail.html rename to docs/api-docs/slack_bolt/workflows/step/utilities/async_fail.html diff --git a/docs/static/api-docs/slack_bolt/workflows/step/utilities/async_update.html b/docs/api-docs/slack_bolt/workflows/step/utilities/async_update.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/step/utilities/async_update.html rename to docs/api-docs/slack_bolt/workflows/step/utilities/async_update.html diff --git a/docs/static/api-docs/slack_bolt/workflows/step/utilities/complete.html b/docs/api-docs/slack_bolt/workflows/step/utilities/complete.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/step/utilities/complete.html rename to docs/api-docs/slack_bolt/workflows/step/utilities/complete.html diff --git a/docs/static/api-docs/slack_bolt/workflows/step/utilities/configure.html b/docs/api-docs/slack_bolt/workflows/step/utilities/configure.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/step/utilities/configure.html rename to docs/api-docs/slack_bolt/workflows/step/utilities/configure.html diff --git a/docs/static/api-docs/slack_bolt/workflows/step/utilities/fail.html b/docs/api-docs/slack_bolt/workflows/step/utilities/fail.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/step/utilities/fail.html rename to docs/api-docs/slack_bolt/workflows/step/utilities/fail.html diff --git a/docs/static/api-docs/slack_bolt/workflows/step/utilities/index.html b/docs/api-docs/slack_bolt/workflows/step/utilities/index.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/step/utilities/index.html rename to docs/api-docs/slack_bolt/workflows/step/utilities/index.html diff --git a/docs/static/api-docs/slack_bolt/workflows/step/utilities/update.html b/docs/api-docs/slack_bolt/workflows/step/utilities/update.html similarity index 100% rename from docs/static/api-docs/slack_bolt/workflows/step/utilities/update.html rename to docs/api-docs/slack_bolt/workflows/step/utilities/update.html diff --git a/docs/babel.config.js b/docs/babel.config.js deleted file mode 100644 index e00595dae..000000000 --- a/docs/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: [require.resolve('@docusaurus/core/lib/babel/preset')], -}; diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js deleted file mode 100644 index 60f3eae81..000000000 --- a/docs/docusaurus.config.js +++ /dev/null @@ -1,113 +0,0 @@ -import { themes as prismThemes } from 'prism-react-renderer'; -const footer = require('./footerConfig'); -const navbar = require('./navbarConfig'); - -/** @type {import('@docusaurus/types').Config} */ -const config = { - title: "Bolt for Python", - tagline: "Official frameworks, libraries, and SDKs for Slack developers", - favicon: "img/favicon.ico", - url: "https://tools.slack.dev", - baseUrl: "/bolt-python/", - organizationName: "slackapi", - projectName: "bolt-python", - - onBrokenLinks: "ignore", - onBrokenAnchors: "warn", - onBrokenMarkdownLinks: "warn", - - i18n: { - defaultLocale: "en", - locales: ["en", "ja-jp"], - }, - - presets: [ - [ - "classic", - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ - docs: { - path: "content", - breadcrumbs: false, - routeBasePath: "/", // Serve the docs at the site's root - sidebarPath: "./sidebars.js", - editUrl: "https://github.com/slackapi/bolt-python/tree/main/docs", - }, - blog: false, - theme: { - customCss: "./src/css/custom.css", - }, - }), - ], - ], - - plugins: [ - "docusaurus-theme-github-codeblock", - [ - "@docusaurus/plugin-client-redirects", - { - redirects: [ - { - to: "/getting-started", - from: ["/tutorial/getting-started"], - }, - { - to: "/", - from: ["/concepts", "/concepts/basic", "/concepts/advanced"], - }, - { - to: '/concepts/actions', - from: [ - '/concepts/action-listening', - '/concepts/action-responding' - ], - }, - { - to: '/legacy/steps-from-apps', - from: [ - '/concepts/steps', - '/concepts/creating-steps', - '/concepts/adding-editing-steps', - '/concepts/saving-steps', - '/concepts/executing-steps' - ], - }, - { - to: '/concepts/ai-apps', - from: '/concepts/assistant' - } - ], - }, - ], - ], - - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - colorMode: { - respectPrefersColorScheme: true, - }, - docs: { - sidebar: { - autoCollapseCategories: true, - }, - }, - navbar, - footer, - prism: { - // switch to alucard when available in prism? - theme: prismThemes.github, - darkTheme: prismThemes.dracula, - }, - codeblock: { - showGithubLink: true, - githubLinkLabel: "View on GitHub", - }, - // announcementBar: { - // id: `announcementBar`, - // content: `🎉️ Version 2.26.0 of the developer tools for the Slack automations platform is here! 🎉️ `, - // }, - }), -}; - -export default config; diff --git a/docs/content/concepts/acknowledge.md b/docs/english/concepts/acknowledge.md similarity index 100% rename from docs/content/concepts/acknowledge.md rename to docs/english/concepts/acknowledge.md diff --git a/docs/content/concepts/actions.md b/docs/english/concepts/actions.md similarity index 100% rename from docs/content/concepts/actions.md rename to docs/english/concepts/actions.md diff --git a/docs/content/concepts/adapters.md b/docs/english/concepts/adapters.md similarity index 100% rename from docs/content/concepts/adapters.md rename to docs/english/concepts/adapters.md diff --git a/docs/content/concepts/ai-apps.md b/docs/english/concepts/ai-apps.md similarity index 100% rename from docs/content/concepts/ai-apps.md rename to docs/english/concepts/ai-apps.md diff --git a/docs/content/concepts/app-home.md b/docs/english/concepts/app-home.md similarity index 100% rename from docs/content/concepts/app-home.md rename to docs/english/concepts/app-home.md diff --git a/docs/content/concepts/async.md b/docs/english/concepts/async.md similarity index 100% rename from docs/content/concepts/async.md rename to docs/english/concepts/async.md diff --git a/docs/content/concepts/authenticating-oauth.md b/docs/english/concepts/authenticating-oauth.md similarity index 100% rename from docs/content/concepts/authenticating-oauth.md rename to docs/english/concepts/authenticating-oauth.md diff --git a/docs/content/concepts/authorization.md b/docs/english/concepts/authorization.md similarity index 100% rename from docs/content/concepts/authorization.md rename to docs/english/concepts/authorization.md diff --git a/docs/content/concepts/commands.md b/docs/english/concepts/commands.md similarity index 100% rename from docs/content/concepts/commands.md rename to docs/english/concepts/commands.md diff --git a/docs/content/concepts/context.md b/docs/english/concepts/context.md similarity index 100% rename from docs/content/concepts/context.md rename to docs/english/concepts/context.md diff --git a/docs/content/concepts/custom-adapters.md b/docs/english/concepts/custom-adapters.md similarity index 100% rename from docs/content/concepts/custom-adapters.md rename to docs/english/concepts/custom-adapters.md diff --git a/docs/content/concepts/custom-steps-dynamic-options.md b/docs/english/concepts/custom-steps-dynamic-options.md similarity index 100% rename from docs/content/concepts/custom-steps-dynamic-options.md rename to docs/english/concepts/custom-steps-dynamic-options.md diff --git a/docs/content/concepts/custom-steps.md b/docs/english/concepts/custom-steps.md similarity index 100% rename from docs/content/concepts/custom-steps.md rename to docs/english/concepts/custom-steps.md diff --git a/docs/content/concepts/errors.md b/docs/english/concepts/errors.md similarity index 100% rename from docs/content/concepts/errors.md rename to docs/english/concepts/errors.md diff --git a/docs/content/concepts/event-listening.md b/docs/english/concepts/event-listening.md similarity index 100% rename from docs/content/concepts/event-listening.md rename to docs/english/concepts/event-listening.md diff --git a/docs/content/concepts/global-middleware.md b/docs/english/concepts/global-middleware.md similarity index 100% rename from docs/content/concepts/global-middleware.md rename to docs/english/concepts/global-middleware.md diff --git a/docs/content/concepts/lazy-listeners.md b/docs/english/concepts/lazy-listeners.md similarity index 100% rename from docs/content/concepts/lazy-listeners.md rename to docs/english/concepts/lazy-listeners.md diff --git a/docs/content/concepts/listener-middleware.md b/docs/english/concepts/listener-middleware.md similarity index 100% rename from docs/content/concepts/listener-middleware.md rename to docs/english/concepts/listener-middleware.md diff --git a/docs/content/concepts/logging.md b/docs/english/concepts/logging.md similarity index 100% rename from docs/content/concepts/logging.md rename to docs/english/concepts/logging.md diff --git a/docs/content/concepts/message-listening.md b/docs/english/concepts/message-listening.md similarity index 100% rename from docs/content/concepts/message-listening.md rename to docs/english/concepts/message-listening.md diff --git a/docs/content/concepts/message-sending.md b/docs/english/concepts/message-sending.md similarity index 100% rename from docs/content/concepts/message-sending.md rename to docs/english/concepts/message-sending.md diff --git a/docs/content/concepts/opening-modals.md b/docs/english/concepts/opening-modals.md similarity index 100% rename from docs/content/concepts/opening-modals.md rename to docs/english/concepts/opening-modals.md diff --git a/docs/content/concepts/select-menu-options.md b/docs/english/concepts/select-menu-options.md similarity index 100% rename from docs/content/concepts/select-menu-options.md rename to docs/english/concepts/select-menu-options.md diff --git a/docs/content/concepts/shortcuts.md b/docs/english/concepts/shortcuts.md similarity index 100% rename from docs/content/concepts/shortcuts.md rename to docs/english/concepts/shortcuts.md diff --git a/docs/content/concepts/socket-mode.md b/docs/english/concepts/socket-mode.md similarity index 100% rename from docs/content/concepts/socket-mode.md rename to docs/english/concepts/socket-mode.md diff --git a/docs/content/concepts/token-rotation.md b/docs/english/concepts/token-rotation.md similarity index 100% rename from docs/content/concepts/token-rotation.md rename to docs/english/concepts/token-rotation.md diff --git a/docs/content/concepts/updating-pushing-views.md b/docs/english/concepts/updating-pushing-views.md similarity index 100% rename from docs/content/concepts/updating-pushing-views.md rename to docs/english/concepts/updating-pushing-views.md diff --git a/docs/content/concepts/view-submissions.md b/docs/english/concepts/view-submissions.md similarity index 100% rename from docs/content/concepts/view-submissions.md rename to docs/english/concepts/view-submissions.md diff --git a/docs/content/concepts/web-api.md b/docs/english/concepts/web-api.md similarity index 100% rename from docs/content/concepts/web-api.md rename to docs/english/concepts/web-api.md diff --git a/docs/content/getting-started.md b/docs/english/getting-started.md similarity index 99% rename from docs/content/getting-started.md rename to docs/english/getting-started.md index d1b7d5e2c..509a4cd16 100644 --- a/docs/content/getting-started.md +++ b/docs/english/getting-started.md @@ -25,7 +25,7 @@ After you fill out an app name (_you can change it later_) and pick a workspace This page contains an overview of your app in addition to important credentials you'll need later. -![Basic Information page](/img/boltpy/basic-information-page.png "Basic Information page") +![Basic Information page](/img/basic-information-page.png "Basic Information page") Look around, add an app icon and description, and then let's start configuring your app 🔩 @@ -49,7 +49,7 @@ We're going to use bot and app-level tokens for this guide. 4. Once you authorize the installation, you'll land on the **OAuth & Permissions** page and see a **Bot User OAuth Access Token**. -![OAuth Tokens](/img/boltpy/bot-token.png "Bot OAuth Token") +![OAuth Tokens](/img/bot-token.png "Bot OAuth Token") 5. Then head over to **Basic Information** and scroll down under the App Token section and click **Generate Token and Scopes** to generate an app-level token. Add the `connections:write` scope to this token and save the generated `xapp` token, we'll use both these tokens in just a moment. diff --git a/docs/content/index.md b/docs/english/index.md similarity index 100% rename from docs/content/index.md rename to docs/english/index.md diff --git a/docs/content/concepts/steps-from-apps.md b/docs/english/legacy/steps-from-apps.md similarity index 100% rename from docs/content/concepts/steps-from-apps.md rename to docs/english/legacy/steps-from-apps.md diff --git a/docs/static/img/tutorials/ai-chatbot/1.png b/docs/english/tutorial/ai-chatbot/1.png similarity index 100% rename from docs/static/img/tutorials/ai-chatbot/1.png rename to docs/english/tutorial/ai-chatbot/1.png diff --git a/docs/static/img/tutorials/ai-chatbot/2.png b/docs/english/tutorial/ai-chatbot/2.png similarity index 100% rename from docs/static/img/tutorials/ai-chatbot/2.png rename to docs/english/tutorial/ai-chatbot/2.png diff --git a/docs/static/img/tutorials/ai-chatbot/3.png b/docs/english/tutorial/ai-chatbot/3.png similarity index 100% rename from docs/static/img/tutorials/ai-chatbot/3.png rename to docs/english/tutorial/ai-chatbot/3.png diff --git a/docs/static/img/tutorials/ai-chatbot/4.png b/docs/english/tutorial/ai-chatbot/4.png similarity index 100% rename from docs/static/img/tutorials/ai-chatbot/4.png rename to docs/english/tutorial/ai-chatbot/4.png diff --git a/docs/static/img/tutorials/ai-chatbot/5.png b/docs/english/tutorial/ai-chatbot/5.png similarity index 100% rename from docs/static/img/tutorials/ai-chatbot/5.png rename to docs/english/tutorial/ai-chatbot/5.png diff --git a/docs/static/img/tutorials/ai-chatbot/6.png b/docs/english/tutorial/ai-chatbot/6.png similarity index 100% rename from docs/static/img/tutorials/ai-chatbot/6.png rename to docs/english/tutorial/ai-chatbot/6.png diff --git a/docs/static/img/tutorials/ai-chatbot/7.png b/docs/english/tutorial/ai-chatbot/7.png similarity index 100% rename from docs/static/img/tutorials/ai-chatbot/7.png rename to docs/english/tutorial/ai-chatbot/7.png diff --git a/docs/static/img/tutorials/ai-chatbot/8.png b/docs/english/tutorial/ai-chatbot/8.png similarity index 100% rename from docs/static/img/tutorials/ai-chatbot/8.png rename to docs/english/tutorial/ai-chatbot/8.png diff --git a/docs/content/tutorial/ai-chatbot.md b/docs/english/tutorial/ai-chatbot/ai-chatbot.md similarity index 100% rename from docs/content/tutorial/ai-chatbot.md rename to docs/english/tutorial/ai-chatbot/ai-chatbot.md diff --git a/docs/static/img/tutorials/custom-steps-jira/1.png b/docs/english/tutorial/custom-steps-for-jira/1.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-jira/1.png rename to docs/english/tutorial/custom-steps-for-jira/1.png diff --git a/docs/static/img/tutorials/custom-steps-jira/2.png b/docs/english/tutorial/custom-steps-for-jira/2.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-jira/2.png rename to docs/english/tutorial/custom-steps-for-jira/2.png diff --git a/docs/static/img/tutorials/custom-steps-jira/3.png b/docs/english/tutorial/custom-steps-for-jira/3.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-jira/3.png rename to docs/english/tutorial/custom-steps-for-jira/3.png diff --git a/docs/static/img/tutorials/custom-steps-jira/4.png b/docs/english/tutorial/custom-steps-for-jira/4.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-jira/4.png rename to docs/english/tutorial/custom-steps-for-jira/4.png diff --git a/docs/static/img/tutorials/custom-steps-jira/5.png b/docs/english/tutorial/custom-steps-for-jira/5.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-jira/5.png rename to docs/english/tutorial/custom-steps-for-jira/5.png diff --git a/docs/static/img/tutorials/custom-steps-jira/6.png b/docs/english/tutorial/custom-steps-for-jira/6.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-jira/6.png rename to docs/english/tutorial/custom-steps-for-jira/6.png diff --git a/docs/static/img/tutorials/custom-steps-jira/7.png b/docs/english/tutorial/custom-steps-for-jira/7.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-jira/7.png rename to docs/english/tutorial/custom-steps-for-jira/7.png diff --git a/docs/content/tutorial/custom-steps-for-jira.md b/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md similarity index 91% rename from docs/content/tutorial/custom-steps-for-jira.md rename to docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md index b38f9337c..a8ba3adf4 100644 --- a/docs/content/tutorial/custom-steps-for-jira.md +++ b/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md @@ -11,7 +11,7 @@ In this tutorial, you'll learn how to configure custom steps for use with JIRA. Before getting started, you will need the following: -* a development workspace where you have permissions to install apps. If you don’t have a workspace, go ahead and set that up now—you can [go here](https://slack.com/get-started#create) to create one, or you can join the [Developer Program](https://api.slack.com/developer-program) and provision a sandbox with access to all Slack features for free. +* a development workspace where you have permissions to install apps. If you don’t have a workspace, go ahead and set that up now—you can [go here](https://slack.com/get-started#create) to create one, or you can join the [Developer Program](https://api.slack.com/developer-program) and provision a sandbox with access to all Slack features for free. * a development environment with [Python 3.6](https://www.python.org/downloads/) or later. **Skip to the code** @@ -127,21 +127,21 @@ If your app is up and running, you'll see a message noting that the app is start 2. Select **New Workflow** > **Build Workflow**. 3. Click **Untitled Workflow** at the top of the pane to rename your workflow. We'll call it **Create Issue**. For the description, enter _Creates a new issue_, then click **Save**. -![Workflow details](/img/tutorials/custom-steps-jira/1.png) +![Workflow details](1.png) 4. Select **Choose an event** under **Start the workflow...**, and then select **From a link in Slack**. Click **Continue**. -![Start the workflow](/img/tutorials/custom-steps-jira/2.png) +![Start the workflow](2.png) 5. Under **Then, do these things** click **Add steps** to add the custom step. Your custom step will be the function defined in the [`create_issue.py`](https://github.com/slack-samples/bolt-python-jira-functions/blob/main/listeners/functions/create_issue.py) file. Scroll down to the bottom of the list on the right-hand pane and select **Custom**, then **BoltPy Jira Functions** > **Create an issue**. Enter the project details, issue type (optional), summary (optional), and description (optional). Click **Save**. -![Custom function](/img/tutorials/custom-steps-jira/3.png) +![Custom function](3.png) 6. Add another step and select **Messages** > **Send a message to a channel**. Select **Channel where the workflow was used** from the drop-down list and then select **Insert a variable** and **Issue url**. Click **Save**. -![Insert variable for issue URL](/img/tutorials/custom-steps-jira/4.png) +![Insert variable for issue URL](4.png) 7. Click **Publish** to make the workflow available to your workspace. @@ -150,16 +150,16 @@ If your app is up and running, you'll see a message noting that the app is start 1. Copy your workflow link. 2. Navigate to your app's home tab and click **Connect an Account** to connect your JIRA account to the app. -![Connect account](/img/tutorials/custom-steps-jira/5.png) +![Connect account](5.png) 3. Click **Allow** on the screen that appears. -![Allow connection](/img/tutorials/custom-steps-jira/6.png) +![Allow connection](6.png) 4. In any channel, post the workflow link you copied. 5. Click **Start Workflow** and observe as the link to a new JIRA ticket is posted in the channel. Click the link to be directed to the newly-created issue within your JIRA project. -![JIRA issue](/img/tutorials/custom-steps-jira/7.png) +![JIRA issue](7.png) When finished, you can click the **Disconnect Account** button in the home tab to disconnect your app from your JIRA account. diff --git a/docs/static/img/tutorials/custom-steps-wfb-existing/add-step.png b/docs/english/tutorial/custom-steps-workflow-builder-existing/add-step.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-existing/add-step.png rename to docs/english/tutorial/custom-steps-workflow-builder-existing/add-step.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-existing/app-message.png b/docs/english/tutorial/custom-steps-workflow-builder-existing/app-message.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-existing/app-message.png rename to docs/english/tutorial/custom-steps-workflow-builder-existing/app-message.png diff --git a/docs/content/tutorial/custom-steps-workflow-builder-existing.md b/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md similarity index 100% rename from docs/content/tutorial/custom-steps-workflow-builder-existing.md rename to docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md diff --git a/docs/static/img/tutorials/custom-steps-wfb-existing/define-step.png b/docs/english/tutorial/custom-steps-workflow-builder-existing/define-step.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-existing/define-step.png rename to docs/english/tutorial/custom-steps-workflow-builder-existing/define-step.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-existing/find-step.png b/docs/english/tutorial/custom-steps-workflow-builder-existing/find-step.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-existing/find-step.png rename to docs/english/tutorial/custom-steps-workflow-builder-existing/find-step.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-existing/inputs.png b/docs/english/tutorial/custom-steps-workflow-builder-existing/inputs.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-existing/inputs.png rename to docs/english/tutorial/custom-steps-workflow-builder-existing/inputs.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-existing/org-ready.png b/docs/english/tutorial/custom-steps-workflow-builder-existing/org-ready.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-existing/org-ready.png rename to docs/english/tutorial/custom-steps-workflow-builder-existing/org-ready.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-existing/outputs.png b/docs/english/tutorial/custom-steps-workflow-builder-existing/outputs.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-existing/outputs.png rename to docs/english/tutorial/custom-steps-workflow-builder-existing/outputs.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-existing/step-inputs.png b/docs/english/tutorial/custom-steps-workflow-builder-existing/step-inputs.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-existing/step-inputs.png rename to docs/english/tutorial/custom-steps-workflow-builder-existing/step-inputs.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/app-token.png b/docs/english/tutorial/custom-steps-workflow-builder-new/app-token.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/app-token.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/app-token.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/bot-token.png b/docs/english/tutorial/custom-steps-workflow-builder-new/bot-token.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/bot-token.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/bot-token.png diff --git a/docs/content/tutorial/custom-steps-workflow-builder-new.md b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md similarity index 100% rename from docs/content/tutorial/custom-steps-workflow-builder-new.md rename to docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/install.png b/docs/english/tutorial/custom-steps-workflow-builder-new/install.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/install.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/install.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/manifest.png b/docs/english/tutorial/custom-steps-workflow-builder-new/manifest.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/manifest.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/manifest.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/wfb-1.png b/docs/english/tutorial/custom-steps-workflow-builder-new/wfb-1.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/wfb-1.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/wfb-1.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/wfb-10.png b/docs/english/tutorial/custom-steps-workflow-builder-new/wfb-10.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/wfb-10.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/wfb-10.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/wfb-11.png b/docs/english/tutorial/custom-steps-workflow-builder-new/wfb-11.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/wfb-11.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/wfb-11.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/wfb-12.png b/docs/english/tutorial/custom-steps-workflow-builder-new/wfb-12.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/wfb-12.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/wfb-12.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/wfb-2.png b/docs/english/tutorial/custom-steps-workflow-builder-new/wfb-2.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/wfb-2.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/wfb-2.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/wfb-3.png b/docs/english/tutorial/custom-steps-workflow-builder-new/wfb-3.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/wfb-3.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/wfb-3.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/wfb-4.png b/docs/english/tutorial/custom-steps-workflow-builder-new/wfb-4.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/wfb-4.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/wfb-4.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/wfb-5.png b/docs/english/tutorial/custom-steps-workflow-builder-new/wfb-5.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/wfb-5.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/wfb-5.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/wfb-6.png b/docs/english/tutorial/custom-steps-workflow-builder-new/wfb-6.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/wfb-6.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/wfb-6.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/wfb-7.png b/docs/english/tutorial/custom-steps-workflow-builder-new/wfb-7.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/wfb-7.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/wfb-7.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/wfb-8.png b/docs/english/tutorial/custom-steps-workflow-builder-new/wfb-8.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/wfb-8.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/wfb-8.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/wfb-9.png b/docs/english/tutorial/custom-steps-workflow-builder-new/wfb-9.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/wfb-9.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/wfb-9.png diff --git a/docs/static/img/tutorials/custom-steps-wfb-new/workflow-step.png b/docs/english/tutorial/custom-steps-workflow-builder-new/workflow-step.png similarity index 100% rename from docs/static/img/tutorials/custom-steps-wfb-new/workflow-step.png rename to docs/english/tutorial/custom-steps-workflow-builder-new/workflow-step.png diff --git a/docs/content/tutorial/custom-steps.md b/docs/english/tutorial/custom-steps.md similarity index 100% rename from docs/content/tutorial/custom-steps.md rename to docs/english/tutorial/custom-steps.md diff --git a/docs/static/img/tutorials/modals/base_link.gif b/docs/english/tutorial/modals/base_link.gif similarity index 100% rename from docs/static/img/tutorials/modals/base_link.gif rename to docs/english/tutorial/modals/base_link.gif diff --git a/docs/static/img/tutorials/modals/final_product.gif b/docs/english/tutorial/modals/final_product.gif similarity index 100% rename from docs/static/img/tutorials/modals/final_product.gif rename to docs/english/tutorial/modals/final_product.gif diff --git a/docs/static/img/tutorials/modals/heart_icon.gif b/docs/english/tutorial/modals/heart_icon.gif similarity index 100% rename from docs/static/img/tutorials/modals/heart_icon.gif rename to docs/english/tutorial/modals/heart_icon.gif diff --git a/docs/static/img/tutorials/modals/interactivity_url.png b/docs/english/tutorial/modals/interactivity_url.png similarity index 100% rename from docs/static/img/tutorials/modals/interactivity_url.png rename to docs/english/tutorial/modals/interactivity_url.png diff --git a/docs/content/tutorial/modals.md b/docs/english/tutorial/modals/modals.md similarity index 100% rename from docs/content/tutorial/modals.md rename to docs/english/tutorial/modals/modals.md diff --git a/docs/static/img/tutorials/modals/slash_command.png b/docs/english/tutorial/modals/slash_command.png similarity index 100% rename from docs/static/img/tutorials/modals/slash_command.png rename to docs/english/tutorial/modals/slash_command.png diff --git a/docs/footerConfig.js b/docs/footerConfig.js deleted file mode 100644 index 6433c049d..000000000 --- a/docs/footerConfig.js +++ /dev/null @@ -1,21 +0,0 @@ -const footer = { - links: [ - { - items: [ - { - html: ` - -
- ©2025 Slack Technologies, LLC, a Salesforce company. All rights reserved. Various trademarks held by their respective owners. -
- `, - }, - ], - }, - ], -}; - -module.exports = footer; diff --git a/docs/i18n/ja-jp/README.md b/docs/i18n/ja-jp/README.md deleted file mode 100644 index e23cb969b..000000000 --- a/docs/i18n/ja-jp/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# Bolt for Python Japanese documentation - -This README describes how the Japanese documentation is created. Please read the [/docs README](./docs/README) for information on _all_ the documentation. - -[Docusaurus](https://docusaurus.io) supports using different languages. Each language is a different version of the same site. The English site is the default. The English page will be viewable if the page is not translated into Japanese. - -There will be English pages on the Japanese site for any non-translated pages. Japanese readers will not miss any content, but they may be confused seeing English and Japanese mixed together. Please give us your thoughts on this setup. - -Because of this, the sidebar does not need to be updated for the Japanese documentation. It's always the same as the English documentation! - -## Testing the Japanese site. - -Please read the [/docs README](./docs/README.md) for instructions. Be sure to run the site in Japanese: - -``` -npm run start -- --locale ja-jp -``` - ---- - -## Japanese documentation files - -``` -docs/ -├── content/ -│ ├── getting-started.md -│ └── concepts -│ └── sending-message.md -├── i18n/ja-jp -│ ├── code.json -│ ├── docusaurus-theme-classic/ -│ │ ├── footer.json -│ │ └── navbar.json -│ └── docusaurus-plugin-content-docs/ -│ └── current/ -│ ├── getting-started.md -│ └── concepts -│ └── sending-message.md -``` - -The Japanese documentation is in `i18n/ja-jp/`. The folder contains `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, and `code.json`. - -### `docusaurus-plugin-content-docs` - -``` -docs/ -├── content/ (English pages) -│ ├── example-page.md -│ ├── getting-started.md -│ └── concepts -│ └── sending-message.md -├── i18n/ja-jp -│ └── docusaurus-plugin-content-docs/ -│ └── current/ (Japanese pages) -│ ├── getting-started.md -│ └── concepts -│ └── sending-message.md -``` - -If the file is not in `i18n/ja-jp/docusaurus-plugin-content-docs/current/`, then the English file will be used. In the example above, `example-page.md` is not in `i18n/ja-jp/docusaurus-plugin-content-docs/current/`. Therefore, the English version of `example-page.md` will appear on the Japanese site. - -The Japanese page file formats in `i18n/ja-jp/docusaurus-plugin-content-docs/current/` must be the same as the English page files in `docs/content/`. Please keep the file names in English (example: `sending-message.md`). - -Please provide a title in Japanese. It will show up in the sidebar. There are two options: - -``` ---- -title: こんにちは ---- - -# こんにちは - -``` - -[Read the Docusaurus documentation for info on writing pages in markdown](https://docusaurus.io/docs/markdown-features). - -### `docusaurus-theme-classic` - -``` -└── i18n/ja-jp - └── docusaurus-theme-classic/ - ├── footer.json - └── navbar.json -``` - -`docusaurus-theme-classic` You can translate site components (footer and navbar) for the Japanese site. Each JSON object has a `messages` and `description` value: - * `message` - The Japanese translation. It will be in English if not translated. - * `description` - What and where the message is. This stays in English. - -For example: - -``` -{ - "item.label.Hello": { - "message": "こんにちは", - "description": "The title of the page" - } -} -``` - -The JSON files are created with the `npm run write-translations -- --locale ja-jp` command. [Please read the Docusaurus documentation](https://docusaurus.io/docs/i18n/tutorial#translate-your-react-code) for more info. - -### `code.json` - -``` -└── i18n/ja-jp - └── code.json -``` - -The `code.json` file is similar to `docusaurus-theme-classic` JSON objects. `code.json` has translations provided by Docusaurus for site elements. - -For example: - -``` - "theme.CodeBlock.copy": { - "message": "コピー", - "description": "The copy button label on code blocks" - }, -``` - -Be careful changing `code.json`. If you change something in this repo, it will likely need to be changed in the other tools.slack.dev repos too, like the Bolt-Python repo. We want these translations to match for all tools.slack.dev sites. \ No newline at end of file diff --git a/docs/i18n/ja-jp/code.json b/docs/i18n/ja-jp/code.json deleted file mode 100644 index 2b3c80254..000000000 --- a/docs/i18n/ja-jp/code.json +++ /dev/null @@ -1,321 +0,0 @@ -{ - "theme.NotFound.title": { - "message": "ページが見つかりません", - "description": "The title of the 404 page" - }, - "theme.NotFound.p1": { - "message": "お探しのページが見つかりませんでした", - "description": "The first paragraph of the 404 page" - }, - "theme.NotFound.p2": { - "message": "このページにリンクしているサイトの所有者にリンクが壊れていることを伝えてください", - "description": "The 2nd paragraph of the 404 page" - }, - "theme.ErrorPageContent.title": { - "message": "エラーが発生しました", - "description": "The title of the fallback page when the page crashed" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "先頭へ戻る", - "description": "The ARIA label for the back to top button" - }, - "theme.blog.archive.title": { - "message": "アーカイブ", - "description": "The page & hero title of the blog archive page" - }, - "theme.blog.archive.description": { - "message": "アーカイブ", - "description": "The page & hero description of the blog archive page" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "ブログ記事一覧のナビゲーション", - "description": "The ARIA label for the blog pagination" - }, - "theme.blog.paginator.newerEntries": { - "message": "新しい記事", - "description": "The label used to navigate to the newer blog posts page (previous page)" - }, - "theme.blog.paginator.olderEntries": { - "message": "過去の記事", - "description": "The label used to navigate to the older blog posts page (next page)" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "ブログ記事のナビゲーション", - "description": "The ARIA label for the blog posts pagination" - }, - "theme.blog.post.paginator.newerPost": { - "message": "新しい記事", - "description": "The blog post button label to navigate to the newer/previous post" - }, - "theme.blog.post.paginator.olderPost": { - "message": "過去の記事", - "description": "The blog post button label to navigate to the older/next post" - }, - "theme.blog.post.plurals": { - "message": "{count}件", - "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.blog.tagTitle": { - "message": "「{tagName}」タグの記事が{nPosts}件あります", - "description": "The title of the page for a blog tag" - }, - "theme.tags.tagsPageLink": { - "message": "全てのタグを見る", - "description": "The label of the link targeting the tag list page" - }, - "theme.colorToggle.ariaLabel": { - "message": "ダークモードを切り替える(現在は{mode})", - "description": "The ARIA label for the navbar color mode toggle" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "ダークモード", - "description": "The name for the dark color mode" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "ライトモード", - "description": "The name for the light color mode" - }, - "theme.docs.breadcrumbs.navAriaLabel": { - "message": "パンくずリストのナビゲーション", - "description": "The ARIA label for the breadcrumbs" - }, - "theme.docs.DocCard.categoryDescription.plurals": { - "message": "{count}項目", - "description": "The default description for a category card in the generated index about how many items this category includes" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "ドキュメントページ", - "description": "The ARIA label for the docs pagination" - }, - "theme.docs.paginator.previous": { - "message": "前へ", - "description": "The label used to navigate to the previous doc" - }, - "theme.docs.paginator.next": { - "message": "次へ", - "description": "The label used to navigate to the next doc" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "{count}記事", - "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.tagDocListPageTitle": { - "message": "「{tagName}」タグのついた{nDocsTagged}", - "description": "The title of the page for a docs tag" - }, - "theme.docs.versionBadge.label": { - "message": "バージョン: {versionLabel}" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "これはリリース前のバージョン{versionLabel}の{siteTitle}のドキュメントです。", - "description": "The label used to tell the user that he's browsing an unreleased doc version" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "これはバージョン{versionLabel}の{siteTitle}のドキュメントで現在はメンテナンスされていません", - "description": "The label used to tell the user that he's browsing an unmaintained doc version" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "最新のドキュメントは{latestVersionLink} ({versionLabel}) を見てください", - "description": "The label used to tell the user to check the latest version" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "最新バージョン", - "description": "The label used for the latest version suggestion link label" - }, - "theme.common.editThisPage": { - "message": "このページを編集", - "description": "The link label to edit the current page" - }, - "theme.lastUpdated.atDate": { - "message": "{date}に", - "description": "The words used to describe on which date a page has been last updated" - }, - "theme.lastUpdated.byUser": { - "message": "{user}が", - "description": "The words used to describe by who the page has been last updated" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "{atDate}{byUser}最終更新", - "description": "The sentence used to display when a page has been last updated, and by who" - }, - "theme.common.headingLinkTitle": { - "message": "{heading} への直接リンク", - "description": "Title for link to heading" - }, - "theme.navbar.mobileVersionsDropdown.label": { - "message": "他のバージョン", - "description": "The label for the navbar versions dropdown on mobile view" - }, - "theme.tags.tagsListLabel": { - "message": "タグ:", - "description": "The label alongside a tag list" - }, - "theme.admonition.caution": { - "message": "注意", - "description": "The default label used for the Caution admonition (:::caution)" - }, - "theme.admonition.danger": { - "message": "危険", - "description": "The default label used for the Danger admonition (:::danger)" - }, - "theme.admonition.info": { - "message": "備考", - "description": "The default label used for the Info admonition (:::info)" - }, - "theme.admonition.note": { - "message": "注記", - "description": "The default label used for the Note admonition (:::note)" - }, - "theme.admonition.tip": { - "message": "ヒント", - "description": "The default label used for the Tip admonition (:::tip)" - }, - "theme.admonition.warning": { - "message": "警告", - "description": "The default label used for the Warning admonition (:::warning)" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "閉じる", - "description": "The ARIA label for close button of announcement bar" - }, - "theme.blog.sidebar.navAriaLabel": { - "message": "最近のブログ記事のナビゲーション", - "description": "The ARIA label for recent posts in the blog sidebar" - }, - "theme.CodeBlock.copied": { - "message": "コピーしました", - "description": "The copied button label on code blocks" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "クリップボードにコードをコピー", - "description": "The ARIA label for copy code blocks button" - }, - "theme.CodeBlock.copy": { - "message": "コピー", - "description": "The copy button label on code blocks" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "折り返し", - "description": "The title attribute for toggle word wrapping button of code block lines" - }, - "theme.DocSidebarItem.expandCategoryAriaLabel": { - "message": "'{label}'の目次を開く", - "description": "The ARIA label to expand the sidebar category" - }, - "theme.DocSidebarItem.collapseCategoryAriaLabel": { - "message": "'{label}'の目次を隠す", - "description": "The ARIA label to collapse the sidebar category" - }, - "theme.NavBar.navAriaLabel": { - "message": "ナビゲーション", - "description": "The ARIA label for the main navigation" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "他の言語", - "description": "The label for the mobile language switcher dropdown" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "このページの見出し", - "description": "The label used by the button on the collapsible TOC component" - }, - "theme.blog.post.readMore": { - "message": "もっと見る", - "description": "The label used in blog post item excerpts to link to full blog posts" - }, - "theme.blog.post.readMoreLabel": { - "message": "{title}についてもっと見る", - "description": "The ARIA label for the link to full blog posts from excerpts" - }, - "theme.blog.post.readingTime.plurals": { - "message": "約{readingTime}分", - "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.breadcrumbs.home": { - "message": "ホームページ", - "description": "The ARIA label for the home page in the breadcrumbs" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "サイドバーを隠す", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "サイドバーを隠す", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "ドキュメントのサイドバー", - "description": "The ARIA label for the sidebar navigation" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "ナビゲーションバーを閉じる", - "description": "The ARIA label for close button of mobile sidebar" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← メインメニューに戻る", - "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "ナビゲーションバーを開く", - "description": "The ARIA label for hamburger menu button of mobile navigation" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "サイドバーを開く", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "サイドバーを開く", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "もう一度試してください", - "description": "The label of the button to try again rendering when the React error boundary captures an error" - }, - "theme.common.skipToMainContent": { - "message": "メインコンテンツまでスキップ", - "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" - }, - "theme.tags.tagsPageTitle": { - "message": "タグ", - "description": "The title of the tag list page" - }, - "theme.unlistedContent.title": { - "message": "非公開のページ", - "description": "The unlisted content banner title" - }, - "theme.unlistedContent.message": { - "message": "このページは非公開です。 検索対象外となり、このページのリンクに直接アクセスできるユーザーのみに公開されます。", - "description": "The unlisted content banner message" - }, - "theme.blog.author.pageTitle": { - "message": "{authorName} - {nPosts}", - "description": "The title of the page for a blog author" - }, - "theme.blog.authorsList.pageTitle": { - "message": "著者一覧", - "description": "The title of the authors page" - }, - "theme.blog.authorsList.viewAll": { - "message": "すべての著者を見る", - "description": "The label of the link targeting the blog authors page" - }, - "theme.blog.author.noPosts": { - "message": "この著者による投稿はまだありません。", - "description": "The text for authors with 0 blog post" - }, - "theme.contentVisibility.unlistedBanner.title": { - "message": "非公開のページ", - "description": "The unlisted content banner title" - }, - "theme.contentVisibility.unlistedBanner.message": { - "message": "このページは非公開です。 検索対象外となり、このページのリンクに直接アクセスできるユーザーのみに公開されます。", - "description": "The unlisted content banner message" - }, - "theme.contentVisibility.draftBanner.title": { - "message": "下書きのページ", - "description": "The draft content banner title" - }, - "theme.contentVisibility.draftBanner.message": { - "message": "このページは下書きです。開発環境でのみ表示され、本番環境のビルドには含まれません。", - "description": "The draft content banner message" - } -} diff --git a/docs/i18n/ja-jp/docusaurus-theme-classic/footer.json b/docs/i18n/ja-jp/docusaurus-theme-classic/footer.json deleted file mode 100644 index 5a2d1bc10..000000000 --- a/docs/i18n/ja-jp/docusaurus-theme-classic/footer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "copyright": { - "message": "

Made with ♡ by Slack and friends

", - "description": "The footer copyright" - } -} diff --git a/docs/i18n/ja-jp/docusaurus-theme-classic/navbar.json b/docs/i18n/ja-jp/docusaurus-theme-classic/navbar.json deleted file mode 100644 index 3eee009ee..000000000 --- a/docs/i18n/ja-jp/docusaurus-theme-classic/navbar.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "title": { - "message": "Slack Developer Tools", - "description": "The title in the navbar" - }, - "item.label.SDKs": { - "message": "SDKs", - "description": "Navbar item with label SDKs" - }, - "item.label.Java": { - "message": "Java", - "description": "Navbar item with label Java" - }, - "item.label.JavaScript": { - "message": "JavaScript", - "description": "Navbar item with label JavaScript" - }, - "item.label.Python": { - "message": "Python", - "description": "Navbar item with label Python" - }, - "item.label.Community": { - "message": "Community", - "description": "Navbar item with label Community" - }, - "item.label.Bolt": { - "message": "Bolt", - "description": "Navbar item with label Bolt" - }, - "item.label.API Docs": { - "message": "API Docs", - "description": "Navbar item with label API Docs" - }, - "item.label.Java Slack SDK": { - "message": "Java Slack SDK", - "description": "Navbar item with label Java Slack SDK" - }, - "item.label.Node Slack SDK": { - "message": "Node Slack SDK", - "description": "Navbar item with label Node Slack SDK" - }, - "item.label.Python Slack SDK": { - "message": "Python Slack SDK", - "description": "Navbar item with label Python Slack SDK" - }, - "item.label.Deno Slack SDK": { - "message": "Deno Slack SDK", - "description": "Navbar item with label Deno Slack SDK" - }, - "item.label.Community tools": { - "message": "Community tools", - "description": "Navbar item with label Community tools" - }, - "item.label.Slack Community": { - "message": "Slack Community", - "description": "Navbar item with label Slack Community" - }, - "item.label.Slack CLI": { - "message": "Slack CLI", - "description": "Navbar item with label Slack CLI" - } -} diff --git a/docs/static/img/boltpy/basic-information-page.png b/docs/img/basic-information-page.png similarity index 100% rename from docs/static/img/boltpy/basic-information-page.png rename to docs/img/basic-information-page.png diff --git a/docs/static/img/boltpy/bot-token.png b/docs/img/bot-token.png similarity index 100% rename from docs/static/img/boltpy/bot-token.png rename to docs/img/bot-token.png diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/acknowledge.md b/docs/japanese/concepts/acknowledge.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/acknowledge.md rename to docs/japanese/concepts/acknowledge.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/actions.md b/docs/japanese/concepts/actions.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/actions.md rename to docs/japanese/concepts/actions.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/adapters.md b/docs/japanese/concepts/adapters.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/adapters.md rename to docs/japanese/concepts/adapters.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/app-home.md b/docs/japanese/concepts/app-home.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/app-home.md rename to docs/japanese/concepts/app-home.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/assistant.md b/docs/japanese/concepts/assistant.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/assistant.md rename to docs/japanese/concepts/assistant.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/async.md b/docs/japanese/concepts/async.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/async.md rename to docs/japanese/concepts/async.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/authenticating-oauth.md b/docs/japanese/concepts/authenticating-oauth.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/authenticating-oauth.md rename to docs/japanese/concepts/authenticating-oauth.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/authorization.md b/docs/japanese/concepts/authorization.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/authorization.md rename to docs/japanese/concepts/authorization.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/commands.md b/docs/japanese/concepts/commands.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/commands.md rename to docs/japanese/concepts/commands.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/context.md b/docs/japanese/concepts/context.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/context.md rename to docs/japanese/concepts/context.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/custom-adapters.md b/docs/japanese/concepts/custom-adapters.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/custom-adapters.md rename to docs/japanese/concepts/custom-adapters.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/custom-steps.md b/docs/japanese/concepts/custom-steps.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/custom-steps.md rename to docs/japanese/concepts/custom-steps.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/errors.md b/docs/japanese/concepts/errors.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/errors.md rename to docs/japanese/concepts/errors.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/event-listening.md b/docs/japanese/concepts/event-listening.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/event-listening.md rename to docs/japanese/concepts/event-listening.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/global-middleware.md b/docs/japanese/concepts/global-middleware.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/global-middleware.md rename to docs/japanese/concepts/global-middleware.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/lazy-listeners.md b/docs/japanese/concepts/lazy-listeners.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/lazy-listeners.md rename to docs/japanese/concepts/lazy-listeners.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/listener-middleware.md b/docs/japanese/concepts/listener-middleware.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/listener-middleware.md rename to docs/japanese/concepts/listener-middleware.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/logging.md b/docs/japanese/concepts/logging.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/logging.md rename to docs/japanese/concepts/logging.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/message-listening.md b/docs/japanese/concepts/message-listening.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/message-listening.md rename to docs/japanese/concepts/message-listening.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/message-sending.md b/docs/japanese/concepts/message-sending.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/message-sending.md rename to docs/japanese/concepts/message-sending.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/opening-modals.md b/docs/japanese/concepts/opening-modals.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/opening-modals.md rename to docs/japanese/concepts/opening-modals.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/select-menu-options.md b/docs/japanese/concepts/select-menu-options.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/select-menu-options.md rename to docs/japanese/concepts/select-menu-options.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/shortcuts.md b/docs/japanese/concepts/shortcuts.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/shortcuts.md rename to docs/japanese/concepts/shortcuts.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/socket-mode.md b/docs/japanese/concepts/socket-mode.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/socket-mode.md rename to docs/japanese/concepts/socket-mode.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/token-rotation.md b/docs/japanese/concepts/token-rotation.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/token-rotation.md rename to docs/japanese/concepts/token-rotation.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/updating-pushing-views.md b/docs/japanese/concepts/updating-pushing-views.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/updating-pushing-views.md rename to docs/japanese/concepts/updating-pushing-views.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/view-submissions.md b/docs/japanese/concepts/view-submissions.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/view-submissions.md rename to docs/japanese/concepts/view-submissions.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/web-api.md b/docs/japanese/concepts/web-api.md similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/web-api.md rename to docs/japanese/concepts/web-api.md diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current.json b/docs/japanese/current.json similarity index 100% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current.json rename to docs/japanese/current.json diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/getting-started.md b/docs/japanese/getting-started.md similarity index 99% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/getting-started.md rename to docs/japanese/getting-started.md index b29deaef8..08e6593d7 100644 --- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/getting-started.md +++ b/docs/japanese/getting-started.md @@ -26,7 +26,7 @@ lang: ja-jp このページでは、アプリの概要や重要な認証情報を確認できます。これらの情報は後ほど参照します。 -![Basic Information ページ](/img/boltpy/basic-information-page.png "Basic Information ページ") +![Basic Information ページ](/img/basic-information-page.png "Basic Information ページ") ひと通り確認して、アプリのアイコンと説明を追加したら、アプリのプロジェクトの構成 🔩 を始めましょう。 @@ -50,7 +50,7 @@ Slack アプリで使用できるトークンには、ユーザートークン 4. インストールを承認すると **OAuth & Permissions** ページが表示され、**Bot User OAuth Access Token** を確認できるでしょう。 -![OAuth トークン](/img/boltpy/bot-token.png "ボット用 OAuth トークン") +![OAuth トークン](/img/bot-token.png "ボット用 OAuth トークン") 5. 次に「**Basic Informationのページ**」まで戻り、アプリレベルトークンのセクションまで下にスクロールし「**Generate Token and Scopes**」をクリックしてアプリレベルトークンを作成します。このトークンに `connections:write` のスコープを付与し、作成された `xapp` トークンを保存します。これらのトークンは後ほど利用します。 diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/legacy/steps-from-apps.md b/docs/japanese/legacy/steps-from-apps.md similarity index 99% rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/legacy/steps-from-apps.md rename to docs/japanese/legacy/steps-from-apps.md index 554b2a1f4..9706e52cc 100644 --- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/legacy/steps-from-apps.md +++ b/docs/japanese/legacy/steps-from-apps.md @@ -1,7 +1,7 @@ --- title: ワークフローステップの概要 lang: ja-jp -slug: /concepts/steps-from-apps +slug: /legacy/steps-from-apps --- (アプリによる)ワークフローステップでは、処理をアプリ側で行うカスタムのワークフローステップを提供することができます。ユーザーは[ワークフロービルダー](https://docs.slack.dev/workflows/workflow-builder)を使ってこれらのステップをワークフローに追加できます。 diff --git a/docs/navbarConfig.js b/docs/navbarConfig.js deleted file mode 100644 index b243299f1..000000000 --- a/docs/navbarConfig.js +++ /dev/null @@ -1,97 +0,0 @@ -const navbar = { - style: 'dark', - title: 'Slack Developer Tools', - logo: { - src: 'img/slack-logo-on-white.png', - href: 'https://tools.slack.dev', - }, - items: [ - { - type: 'dropdown', - label: 'Bolt', - position: 'left', - items: [ - { - label: 'Java', - to: 'https://tools.slack.dev/java-slack-sdk/guides/bolt-basics', - target: '_self', - }, - { - label: 'JavaScript', - to: 'https://tools.slack.dev/bolt-js', - target: '_self', - }, - { - label: 'Python', - to: 'https://tools.slack.dev/bolt-python', - target: '_self', - }, - ], - }, - { - type: 'dropdown', - label: 'SDKs', - position: 'left', - items: [ - { - label: 'Java Slack SDK', - to: 'https://tools.slack.dev/java-slack-sdk/', - target: '_self', - }, - { - label: 'Node Slack SDK', - to: 'https://tools.slack.dev/node-slack-sdk/', - target: '_self', - }, - { - label: 'Python Slack SDK', - to: 'https://tools.slack.dev/python-slack-sdk/', - target: '_self', - }, - { - label: 'Deno Slack SDK', - to: 'https://tools.slack.dev/deno-slack-sdk/', - target: '_self', - }, - ], - }, - { - to: 'https://tools.slack.dev/slack-cli', - label: 'Slack CLI', - target: '_self', - }, - { - to: 'https://docs.slack.dev/', - label: 'API Docs', - position: 'right', - target: '_self', - }, - { - label: 'Developer Program', - position: 'right', - to: 'https://api.slack.com/developer-program', - target: '_blank', - rel: "noopener noreferrer" - }, - { - label: 'Your apps', - to: 'https://api.slack.com/apps', - position: 'right', - target: '_blank', - rel: "noopener noreferrer" - }, - { - type: 'localeDropdown', - position: 'right', - }, - { - 'aria-label': 'GitHub Repository', - className: 'navbar-github-link', - href: 'https://github.com/slackapi', - position: 'right', - target: '_self', - }, - ], -}; - -module.exports = navbar; diff --git a/docs/package-lock.json b/docs/package-lock.json deleted file mode 100644 index 4e7d7b445..000000000 --- a/docs/package-lock.json +++ /dev/null @@ -1,17036 +0,0 @@ -{ - "name": "website", - "version": "2024.08.01", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "website", - "version": "2024.08.01", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/plugin-client-redirects": "^3.8.0", - "@docusaurus/preset-classic": "3.8.0", - "@mdx-js/react": "^3.1.0", - "clsx": "^2.0.0", - "docusaurus-theme-github-codeblock": "^2.0.2", - "prism-react-renderer": "^2.4.1", - "react": "^19.1.0", - "react-dom": "^19.1.0" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "3.8.0", - "@docusaurus/types": "3.8.0" - }, - "engines": { - "node": ">=20.0" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz", - "integrity": "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", - "@algolia/autocomplete-shared": "1.17.9" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz", - "integrity": "sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.9" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz", - "integrity": "sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.9" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz", - "integrity": "sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==", - "license": "MIT", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/client-abtesting": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.25.0.tgz", - "integrity": "sha512-1pfQulNUYNf1Tk/svbfjfkLBS36zsuph6m+B6gDkPEivFmso/XnRgwDvjAx80WNtiHnmeNjIXdF7Gos8+OLHqQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.25.0.tgz", - "integrity": "sha512-AFbG6VDJX/o2vDd9hqncj1B6B4Tulk61mY0pzTtzKClyTDlNP0xaUiEKhl6E7KO9I/x0FJF5tDCm0Hn6v5x18A==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.25.0.tgz", - "integrity": "sha512-il1zS/+Rc6la6RaCdSZ2YbJnkQC6W1wiBO8+SH+DE6CPMWBU6iDVzH0sCKSAtMWl9WBxoN6MhNjGBnCv9Yy2bA==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-insights": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.25.0.tgz", - "integrity": "sha512-blbjrUH1siZNfyCGeq0iLQu00w3a4fBXm0WRIM0V8alcAPo7rWjLbMJMrfBtzL9X5ic6wgxVpDADXduGtdrnkw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.25.0.tgz", - "integrity": "sha512-aywoEuu1NxChBcHZ1pWaat0Plw7A8jDMwjgRJ00Mcl7wGlwuPt5dJ/LTNcg3McsEUbs2MBNmw0ignXBw9Tbgow==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-query-suggestions": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.25.0.tgz", - "integrity": "sha512-a/W2z6XWKjKjIW1QQQV8PTTj1TXtaKx79uR3NGBdBdGvVdt24KzGAaN7sCr5oP8DW4D3cJt44wp2OY/fZcPAVA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.25.0.tgz", - "integrity": "sha512-9rUYcMIBOrCtYiLX49djyzxqdK9Dya/6Z/8sebPn94BekT+KLOpaZCuc6s0Fpfq7nx5J6YY5LIVFQrtioK9u0g==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", - "license": "MIT" - }, - "node_modules/@algolia/ingestion": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.25.0.tgz", - "integrity": "sha512-jJeH/Hk+k17Vkokf02lkfYE4A+EJX+UgnMhTLR/Mb+d1ya5WhE+po8p5a/Nxb6lo9OLCRl6w3Hmk1TX1e9gVbQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/monitoring": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.25.0.tgz", - "integrity": "sha512-Ls3i1AehJ0C6xaHe7kK9vPmzImOn5zBg7Kzj8tRYIcmCWVyuuFwCIsbuIIz/qzUf1FPSWmw0TZrGeTumk2fqXg==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/recommend": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.25.0.tgz", - "integrity": "sha512-79sMdHpiRLXVxSjgw7Pt4R1aNUHxFLHiaTDnN2MQjHwJ1+o3wSseb55T9VXU4kqy3m7TUme3pyRhLk5ip/S4Mw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.25.0.tgz", - "integrity": "sha512-JLaF23p1SOPBmfEqozUAgKHQrGl3z/Z5RHbggBu6s07QqXXcazEsub5VLonCxGVqTv6a61AAPr8J1G5HgGGjEw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.25.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-fetch": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.25.0.tgz", - "integrity": "sha512-rtzXwqzFi1edkOF6sXxq+HhmRKDy7tz84u0o5t1fXwz0cwx+cjpmxu/6OQKTdOJFS92JUYHsG51Iunie7xbqfQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.25.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-node-http": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.25.0.tgz", - "integrity": "sha512-ZO0UKvDyEFvyeJQX0gmZDQEvhLZ2X10K+ps6hViMo1HgE2V8em00SwNsQ+7E/52a+YiBkVWX61pJJJE44juDMQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.25.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.3.tgz", - "integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.27.3", - "@babel/types": "^7.27.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", - "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", - "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", - "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", - "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", - "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.4.tgz", - "integrity": "sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", - "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", - "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", - "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", - "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", - "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.4.tgz", - "integrity": "sha512-D68nR5zxU64EUzV8i7T3R5XP0Xhrou/amNnddsRQssx6GrTLdZl1rLxyjtVZBd+v/NVX4AbTPOB5aU8thAZV1A==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", - "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", - "dependencies": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.9.tgz", - "integrity": "sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-transform-react-display-name": "^7.25.9", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/plugin-transform-react-jsx-development": "^7.25.9", - "@babel/plugin-transform-react-pure-annotations": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", - "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-typescript": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", - "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.4.tgz", - "integrity": "sha512-H7QhL0ucCGOObsUETNbB2PuzF4gAvN8p32P6r91bX7M/hk4bx+3yz2hTwHL9d/Efzwu1upeb4/cd7oSxCzup3w==", - "license": "MIT", - "dependencies": { - "core-js-pure": "^3.30.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", - "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.4", - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz", - "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@csstools/cascade-layer-name-parser": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", - "integrity": "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/color-helpers": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", - "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", - "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", - "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/color-helpers": "^5.0.2", - "@csstools/css-calc": "^2.1.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/media-query-list-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", - "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.1.tgz", - "integrity": "sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-cascade-layers/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.10.tgz", - "integrity": "sha512-4dY0NBu7NVIpzxZRgh/Q/0GPSz/jLSw0i/u3LTUor0BkQcz/fNhN10mSWBDsL0p9nDb0Ky1PD6/dcGbhACuFTQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-color-mix-function": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.10.tgz", - "integrity": "sha512-P0lIbQW9I4ShE7uBgZRib/lMTf9XMjJkFl/d6w4EMNHu2qvQ6zljJGEcBkw/NsBtq/6q3WrmgxSS8kHtPMkK4Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-color-mix-variadic-function-arguments": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.0.tgz", - "integrity": "sha512-Z5WhouTyD74dPFPrVE7KydgNS9VvnjB8qcdes9ARpCOItb4jTnm7cHp4FhxCRUoyhabD0WVv43wbkJ4p8hLAlQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-content-alt-text": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.6.tgz", - "integrity": "sha512-eRjLbOjblXq+byyaedQRSrAejKGNAFued+LcbzT+LCL78fabxHkxYjBbxkroONxHHYu2qxhFK2dBStTLPG3jpQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-exponential-functions": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz", - "integrity": "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz", - "integrity": "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-gamut-mapping": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.10.tgz", - "integrity": "sha512-QDGqhJlvFnDlaPAfCYPsnwVA6ze+8hhrwevYWlnUeSjkkZfBpcCO42SaUD8jiLlq7niouyLgvup5lh+f1qessg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.10.tgz", - "integrity": "sha512-HHPauB2k7Oits02tKFUeVFEU2ox/H3OQVrP3fSOKDxvloOikSal+3dzlyTZmYsb9FlY9p5EUpBtz0//XBmy+aw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.10.tgz", - "integrity": "sha512-nOKKfp14SWcdEQ++S9/4TgRKchooLZL0TUFdun3nI4KPwCjETmhjta1QT4ICQcGVWQTvrsgMM/aLB5We+kMHhQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.2.tgz", - "integrity": "sha512-lrK2jjyZwh7DbxaNnIUjkeDmU8Y6KyzRBk91ZkI5h8nb1ykEfZrtIVArdIjX4DHMIBGpdHrgP0n4qXDr7OHaKA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-initial": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz", - "integrity": "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", - "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-light-dark-function": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.9.tgz", - "integrity": "sha512-1tCZH5bla0EAkFAI2r0H33CDnIBeLUaJh1p+hvvsylJ4svsv2wOmJjJn+OXwUZLXef37GYbRIVKX+X+g6m+3CQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-float-and-clear": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz", - "integrity": "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-overflow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz", - "integrity": "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-overscroll-behavior": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz", - "integrity": "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-resize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz", - "integrity": "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz", - "integrity": "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-media-minmax": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz", - "integrity": "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz", - "integrity": "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz", - "integrity": "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", - "integrity": "sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.10.tgz", - "integrity": "sha512-ZzZUTDd0fgNdhv8UUjGCtObPD8LYxMH+MJsW9xlZaWTV8Ppr4PtxlHYNMmF4vVWGl0T6f8tyWAKjoI6vePSgAg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.1.0.tgz", - "integrity": "sha512-YrkI9dx8U4R8Sz2EJaoeD9fI7s7kmeEBfmO+UURNeL6lQI7VxF6sBE+rSqdCBn4onwqmxFdBU3lTwyYb/lCmxA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-random-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", - "integrity": "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.10.tgz", - "integrity": "sha512-8+0kQbQGg9yYG8hv0dtEpOMLwB9M+P7PhacgIzVzJpixxV4Eq9AUQtQw8adMmAJU1RBBmIlpmtmm3XTRd/T00g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-scope-pseudo-class": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz", - "integrity": "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-sign-functions": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz", - "integrity": "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz", - "integrity": "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz", - "integrity": "sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/color-helpers": "^5.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz", - "integrity": "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz", - "integrity": "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/utilities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", - "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.9.0.tgz", - "integrity": "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==", - "license": "MIT" - }, - "node_modules/@docsearch/react": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.9.0.tgz", - "integrity": "sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-core": "1.17.9", - "@algolia/autocomplete-preset-algolia": "1.17.9", - "@docsearch/css": "3.9.0", - "algoliasearch": "^5.14.2" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 20.0.0", - "react": ">= 16.8.0 < 20.0.0", - "react-dom": ">= 16.8.0 < 20.0.0", - "search-insights": ">= 1 < 3" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } - } - }, - "node_modules/@docusaurus/babel": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.8.0.tgz", - "integrity": "sha512-9EJwSgS6TgB8IzGk1L8XddJLhZod8fXT4ULYMx6SKqyCBqCFpVCEjR/hNXXhnmtVM2irDuzYoVLGWv7srG/VOA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.25.9", - "@babel/preset-env": "^7.25.9", - "@babel/preset-react": "^7.25.9", - "@babel/preset-typescript": "^7.25.9", - "@babel/runtime": "^7.25.9", - "@babel/runtime-corejs3": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.8.0", - "@docusaurus/utils": "3.8.0", - "babel-plugin-dynamic-import-node": "^2.3.3", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/bundler": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.8.0.tgz", - "integrity": "sha512-Rq4Z/MSeAHjVzBLirLeMcjLIAQy92pF1OI+2rmt18fSlMARfTGLWRE8Vb+ljQPTOSfJxwDYSzsK6i7XloD2rNA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.8.0", - "@docusaurus/cssnano-preset": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "babel-loader": "^9.2.1", - "clean-css": "^5.3.2", - "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.8.1", - "css-minimizer-webpack-plugin": "^5.0.1", - "cssnano": "^6.1.2", - "file-loader": "^6.2.0", - "html-minifier-terser": "^7.2.0", - "mini-css-extract-plugin": "^2.9.1", - "null-loader": "^4.0.1", - "postcss": "^8.4.26", - "postcss-loader": "^7.3.3", - "postcss-preset-env": "^10.1.0", - "terser-webpack-plugin": "^5.3.9", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "webpack": "^5.95.0", - "webpackbar": "^6.0.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/faster": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/faster": { - "optional": true - } - } - }, - "node_modules/@docusaurus/core": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.8.0.tgz", - "integrity": "sha512-c7u6zFELmSGPEP9WSubhVDjgnpiHgDqMh1qVdCB7rTflh4Jx0msTYmMiO91Ez0KtHj4sIsDsASnjwfJ2IZp3Vw==", - "license": "MIT", - "dependencies": { - "@docusaurus/babel": "3.8.0", - "@docusaurus/bundler": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cli-table3": "^0.6.3", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "core-js": "^3.31.1", - "detect-port": "^1.5.1", - "escape-html": "^1.0.3", - "eta": "^2.2.0", - "eval": "^0.1.8", - "execa": "5.1.1", - "fs-extra": "^11.1.1", - "html-tags": "^3.3.1", - "html-webpack-plugin": "^5.6.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "open": "^8.4.0", - "p-map": "^4.0.0", - "prompts": "^2.4.2", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.4", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.4", - "semver": "^7.5.4", - "serve-handler": "^6.1.6", - "tinypool": "^1.0.2", - "tslib": "^2.6.0", - "update-notifier": "^6.0.2", - "webpack": "^5.95.0", - "webpack-bundle-analyzer": "^4.10.2", - "webpack-dev-server": "^4.15.2", - "webpack-merge": "^6.0.1" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@mdx-js/react": "^3.0.0", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.0.tgz", - "integrity": "sha512-UJ4hAS2T0R4WNy+phwVff2Q0L5+RXW9cwlH6AEphHR5qw3m/yacfWcSK7ort2pMMbDn8uGrD38BTm4oLkuuNoQ==", - "license": "MIT", - "dependencies": { - "cssnano-preset-advanced": "^6.1.2", - "postcss": "^8.4.38", - "postcss-sort-media-queries": "^5.2.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/logger": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.8.0.tgz", - "integrity": "sha512-7eEMaFIam5Q+v8XwGqF/n0ZoCld4hV4eCCgQkfcN9Mq5inoZa6PHHW9Wu6lmgzoK5Kx3keEeABcO2SxwraoPDQ==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.8.0.tgz", - "integrity": "sha512-mDPSzssRnpjSdCGuv7z2EIAnPS1MHuZGTaRLwPn4oQwszu4afjWZ/60sfKjTnjBjI8Vl4OgJl2vMmfmiNDX4Ng==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "@mdx-js/mdx": "^3.0.0", - "@slorber/remark-comment": "^1.0.0", - "escape-html": "^1.0.3", - "estree-util-value-to-estree": "^3.0.1", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "image-size": "^2.0.2", - "mdast-util-mdx": "^3.0.0", - "mdast-util-to-string": "^4.0.0", - "rehype-raw": "^7.0.0", - "remark-directive": "^3.0.0", - "remark-emoji": "^4.0.0", - "remark-frontmatter": "^5.0.0", - "remark-gfm": "^4.0.0", - "stringify-object": "^3.3.0", - "tslib": "^2.6.0", - "unified": "^11.0.3", - "unist-util-visit": "^5.0.0", - "url-loader": "^4.1.1", - "vfile": "^6.0.1", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.0.tgz", - "integrity": "sha512-/uMb4Ipt5J/QnD13MpnoC/A4EYAe6DKNWqTWLlGrqsPJwJv73vSwkA25xnYunwfqWk0FlUQfGv/Swdh5eCCg7g==", - "license": "MIT", - "dependencies": { - "@docusaurus/types": "3.8.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/plugin-client-redirects": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.8.0.tgz", - "integrity": "sha512-J8f5qzAlO61BnG1I91+N5WH1b/lPWqn6ifTxf/Bluz9JVe1bhFNSl0yW03p+Ff3AFOINDy2ofX70al9nOnOLyw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.0.tgz", - "integrity": "sha512-0SlOTd9R55WEr1GgIXu+hhTT0hzARYx3zIScA5IzpdekZQesI/hKEa5LPHBd415fLkWMjdD59TaW/3qQKpJ0Lg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "cheerio": "1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "schema-dts": "^1.1.2", - "srcset": "^4.0.0", - "tslib": "^2.6.0", - "unist-util-visit": "^5.0.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.0.tgz", - "integrity": "sha512-fRDMFLbUN6eVRXcjP8s3Y7HpAt9pzPYh1F/7KKXOCxvJhjjCtbon4VJW0WndEPInVz4t8QUXn5QZkU2tGVCE2g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/module-type-aliases": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "@types/react-router-config": "^5.0.7", - "combine-promises": "^1.1.0", - "fs-extra": "^11.1.1", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "schema-dts": "^1.1.2", - "tslib": "^2.6.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.0.tgz", - "integrity": "sha512-39EDx2y1GA0Pxfion5tQZLNJxL4gq6susd1xzetVBjVIQtwpCdyloOfQBAgX0FylqQxfJrYqL0DIUuq7rd7uBw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-css-cascade-layers": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.0.tgz", - "integrity": "sha512-/VBTNymPIxQB8oA3ZQ4GFFRYdH4ZxDRRBECxyjRyv486mfUPXfcdk+im4S5mKWa6EK2JzBz95IH/Wu0qQgJ5yQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.8.0.tgz", - "integrity": "sha512-teonJvJsDB9o2OnG6ifbhblg/PXzZvpUKHFgD8dOL1UJ58u0lk8o0ZOkvaYEBa9nDgqzoWrRk9w+e3qaG2mOhQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "fs-extra": "^11.1.1", - "react-json-view-lite": "^2.3.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.0.tgz", - "integrity": "sha512-aKKa7Q8+3xRSRESipNvlFgNp3FNPELKhuo48Cg/svQbGNwidSHbZT03JqbW4cBaQnyyVchO1ttk+kJ5VC9Gx0w==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.0.tgz", - "integrity": "sha512-ugQYMGF4BjbAW/JIBtVcp+9eZEgT9HRdvdcDudl5rywNPBA0lct+lXMG3r17s02rrhInMpjMahN3Yc9Cb3H5/g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "@types/gtag.js": "^0.0.12", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.0.tgz", - "integrity": "sha512-9juRWxbwZD3SV02Jd9QB6yeN7eu+7T4zB0bvJLcVQwi+am51wAxn2CwbdL0YCCX+9OfiXbADE8D8Q65Hbopu/w==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.0.tgz", - "integrity": "sha512-fGpOIyJvNiuAb90nSJ2Gfy/hUOaDu6826e5w5UxPmbpCIc7KlBHNAZ5g4L4ZuHhc4hdfq4mzVBsQSnne+8Ze1g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "fs-extra": "^11.1.1", - "sitemap": "^7.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-svgr": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.0.tgz", - "integrity": "sha512-kEDyry+4OMz6BWLG/lEqrNsL/w818bywK70N1gytViw4m9iAmoxCUT7Ri9Dgs7xUdzCHJ3OujolEmD88Wy44OA==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "@svgr/core": "8.1.0", - "@svgr/webpack": "^8.1.0", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.8.0.tgz", - "integrity": "sha512-qOu6tQDOWv+rpTlKu+eJATCJVGnABpRCPuqf7LbEaQ1mNY//N/P8cHQwkpAU+aweQfarcZ0XfwCqRHJfjeSV/g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/plugin-content-blog": "3.8.0", - "@docusaurus/plugin-content-docs": "3.8.0", - "@docusaurus/plugin-content-pages": "3.8.0", - "@docusaurus/plugin-css-cascade-layers": "3.8.0", - "@docusaurus/plugin-debug": "3.8.0", - "@docusaurus/plugin-google-analytics": "3.8.0", - "@docusaurus/plugin-google-gtag": "3.8.0", - "@docusaurus/plugin-google-tag-manager": "3.8.0", - "@docusaurus/plugin-sitemap": "3.8.0", - "@docusaurus/plugin-svgr": "3.8.0", - "@docusaurus/theme-classic": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/theme-search-algolia": "3.8.0", - "@docusaurus/types": "3.8.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.8.0.tgz", - "integrity": "sha512-nQWFiD5ZjoT76OaELt2n33P3WVuuCz8Dt5KFRP2fCBo2r9JCLsp2GJjZpnaG24LZ5/arRjv4VqWKgpK0/YLt7g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/module-type-aliases": "3.8.0", - "@docusaurus/plugin-content-blog": "3.8.0", - "@docusaurus/plugin-content-docs": "3.8.0", - "@docusaurus/plugin-content-pages": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/theme-translations": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "copy-text-to-clipboard": "^3.2.0", - "infima": "0.2.0-alpha.45", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.26", - "prism-react-renderer": "^2.3.0", - "prismjs": "^1.29.0", - "react-router-dom": "^5.3.4", - "rtlcss": "^4.1.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.8.0.tgz", - "integrity": "sha512-YqV2vAWpXGLA+A3PMLrOMtqgTHJLDcT+1Caa6RF7N4/IWgrevy5diY8oIHFkXR/eybjcrFFjUPrHif8gSGs3Tw==", - "license": "MIT", - "dependencies": { - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/module-type-aliases": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^2.0.0", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^2.3.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.0.tgz", - "integrity": "sha512-GBZ5UOcPgiu6nUw153+0+PNWvFKweSnvKIL6Rp04H9olKb475jfKjAwCCtju5D2xs5qXHvCMvzWOg5o9f6DtuQ==", - "license": "MIT", - "dependencies": { - "@docsearch/react": "^3.9.0", - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/plugin-content-docs": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/theme-translations": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "algoliasearch": "^5.17.1", - "algoliasearch-helper": "^3.22.6", - "clsx": "^2.0.0", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-translations": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.8.0.tgz", - "integrity": "sha512-1DTy/snHicgkCkryWq54fZvsAglTdjTx4qjOXgqnXJ+DIty1B+aPQrAVUu8LiM+6BiILfmNxYsxhKTj+BS3PZg==", - "license": "MIT", - "dependencies": { - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/types": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.0.tgz", - "integrity": "sha512-RDEClpwNxZq02c+JlaKLWoS13qwWhjcNsi2wG1UpzmEnuti/z1Wx4SGpqbUqRPNSd8QWWePR8Cb7DvG0VN/TtA==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.95.0", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/types/node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docusaurus/utils": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.8.0.tgz", - "integrity": "sha512-2wvtG28ALCN/A1WCSLxPASFBFzXCnP0YKCAFIPcvEb6imNu1wg7ni/Svcp71b3Z2FaOFFIv4Hq+j4gD7gA0yfQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "escape-string-regexp": "^4.0.0", - "execa": "5.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "github-slugger": "^1.5.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "jiti": "^1.20.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "p-queue": "^6.6.2", - "prompts": "^2.4.2", - "resolve-pathname": "^3.0.0", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.8.0.tgz", - "integrity": "sha512-3TGF+wVTGgQ3pAc9+5jVchES4uXUAhAt9pwv7uws4mVOxL4alvU3ue/EZ+R4XuGk94pDy7CNXjRXpPjlfZXQfw==", - "license": "MIT", - "dependencies": { - "@docusaurus/types": "3.8.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.0.tgz", - "integrity": "sha512-MrnEbkigr54HkdFeg8e4FKc4EF+E9dlVwsY3XQZsNkbv3MKZnbHQ5LsNJDIKDROFe8PBf5C4qCAg5TPBpsjrjg==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "fs-extra": "^11.2.0", - "joi": "^17.9.2", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "license": "MIT" - }, - "node_modules/@mdx-js/mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz", - "integrity": "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdx": "^2.0.0", - "collapse-white-space": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-util-to-js": "^2.0.0", - "estree-walker": "^3.0.0", - "hast-util-to-estree": "^3.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "markdown-extensions": "^2.0.0", - "periscopic": "^3.0.0", - "remark-mdx": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "source-map": "^0.7.0", - "unified": "^11.0.0", - "unist-util-position-from-estree": "^2.0.0", - "unist-util-stringify-position": "^4.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", - "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", - "dependencies": { - "@types/mdx": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "license": "MIT", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.28", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", - "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", - "license": "MIT" - }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "license": "MIT" - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@slorber/remark-comment": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", - "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.1.0", - "micromark-util-symbol": "^1.0.1" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", - "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", - "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", - "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", - "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", - "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", - "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", - "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", - "license": "MIT", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", - "@svgr/babel-plugin-transform-svg-component": "8.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", - "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^8.1.3", - "snake-case": "^3.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", - "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", - "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "@svgr/hast-util-to-babel-ast": "8.0.0", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", - "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.1.3", - "deepmerge": "^4.3.1", - "svgo": "^3.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/webpack": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", - "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@babel/plugin-transform-react-constant-elements": "^7.21.3", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.21.0", - "@svgr/core": "8.1.0", - "@svgr/plugin-jsx": "8.1.0", - "@svgr/plugin-svgo": "8.1.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" - }, - "node_modules/@types/estree-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", - "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/gtag.js": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", - "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", - "license": "MIT" - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "license": "MIT" - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "license": "MIT" - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdx": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" - }, - "node_modules/@types/node": { - "version": "20.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", - "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/prismjs": { - "version": "1.26.4", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.4.tgz", - "integrity": "sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" - }, - "node_modules/@types/qs": { - "version": "6.9.18", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-config": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", - "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "^5.1.0" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "license": "MIT" - }, - "node_modules/@types/sax": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", - "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/@types/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/algoliasearch": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.25.0.tgz", - "integrity": "sha512-n73BVorL4HIwKlfJKb4SEzAYkR3Buwfwbh+MYxg2mloFph2fFGV58E90QTzdbfzWrLn4HE5Czx/WTjI8fcHaMg==", - "license": "MIT", - "dependencies": { - "@algolia/client-abtesting": "5.25.0", - "@algolia/client-analytics": "5.25.0", - "@algolia/client-common": "5.25.0", - "@algolia/client-insights": "5.25.0", - "@algolia/client-personalization": "5.25.0", - "@algolia/client-query-suggestions": "5.25.0", - "@algolia/client-search": "5.25.0", - "@algolia/ingestion": "1.25.0", - "@algolia/monitoring": "1.25.0", - "@algolia/recommend": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.25.0.tgz", - "integrity": "sha512-vQoK43U6HXA9/euCqLjvyNdM4G2Fiu/VFp4ae0Gau9sZeIKBPvUPnXfLYAe65Bg7PFuw03coeu5K6lTPSXRObw==", - "license": "MIT", - "dependencies": { - "@algolia/events": "^4.0.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 6" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/astring": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", - "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", - "bin": { - "astring": "bin/astring" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", - "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", - "license": "MIT", - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "license": "MIT", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "license": "MIT" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", - "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", - "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001718", - "electron-to-chromium": "^1.5.160", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001720", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz", - "integrity": "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/collapse-white-space": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", - "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "license": "MIT" - }, - "node_modules/combine-promises": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", - "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "license": "ISC" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compressible/node_modules/mime-db": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", - "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.0.2", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/configstore": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", - "license": "BSD-2-Clause", - "dependencies": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", - "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-js": { - "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz", - "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.42.0.tgz", - "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.42.0.tgz", - "integrity": "sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "license": "MIT", - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-blank-pseudo": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", - "integrity": "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", - "license": "ISC", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-has-pseudo": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz", - "integrity": "sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-has-pseudo/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "cssnano": "^6.0.1", - "jest-worker": "^29.4.3", - "postcss": "^8.4.24", - "schema-utils": "^4.0.1", - "serialize-javascript": "^6.0.1" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz", - "integrity": "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssdb": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.3.0.tgz", - "integrity": "sha512-c7bmItIg38DgGjSwDPZOYF/2o0QU/sSgkWOMyl8votOfgFuyiFKWPesmCGEsrGLxEA9uL540cp8LdaGEjUGsZQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - } - ], - "license": "MIT-0" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", - "license": "MIT", - "dependencies": { - "cssnano-preset-default": "^6.1.2", - "lilconfig": "^3.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-advanced": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", - "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", - "license": "MIT", - "dependencies": { - "autoprefixer": "^10.4.19", - "browserslist": "^4.23.0", - "cssnano-preset-default": "^6.1.2", - "postcss-discard-unused": "^6.0.5", - "postcss-merge-idents": "^6.0.3", - "postcss-reduce-idents": "^6.0.3", - "postcss-zindex": "^6.0.2" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "license": "MIT" - }, - "node_modules/detect-port": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", - "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/docusaurus-theme-github-codeblock": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/docusaurus-theme-github-codeblock/-/docusaurus-theme-github-codeblock-2.0.2.tgz", - "integrity": "sha512-H2WoQPWOLjGZO6KS58Gsd+eUVjTFJemkReiSSu9chqokyLc/3Ih3+zPRYfuEZ/HsDvSMIarf7CNcp+Vt+/G+ig==", - "dependencies": { - "@docusaurus/types": "^3.0.0" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.161", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz", - "integrity": "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==", - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/emojilib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", - "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz", - "integrity": "sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-util-attach-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", - "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-build-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", - "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-walker": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-to-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", - "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "astring": "^1.8.0", - "source-map": "^0.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-value-to-estree": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.3.3.tgz", - "integrity": "sha512-Db+m1WSD4+mUO7UgMeKkAwdbfNWwIxLt48XF2oFU9emPfXkIu+k5/nlOj313v7wqtAPo0f9REhUvznFrPkG8CQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/remcohaszing" - } - }, - "node_modules/estree-util-visit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", - "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", - "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/express/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "license": "MIT", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "license": "MIT", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/file-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/file-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "license": "MIT", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "license": "MIT", - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "license": "ISC" - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "license": "MIT", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", - "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", - "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^9.0.0", - "property-information": "^7.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/property-information": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", - "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", - "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-from-parse5": "^8.0.0", - "hast-util-to-parse5": "^8.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "parse5": "^7.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-estree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", - "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-attach-comments": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unist-util-position": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", - "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz", - "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==" - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz", - "integrity": "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==", - "dependencies": { - "inline-style-parser": "0.2.3" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", - "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript/node_modules/property-information": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", - "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", - "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "~5.3.2", - "commander": "^10.0.0", - "entities": "^4.4.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.15.1" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", - "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/html-webpack-plugin/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz", - "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", - "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", - "license": "MIT", - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.45", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz", - "integrity": "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", - "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", - "license": "MIT", - "dependencies": { - "package-json": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/launch-editor": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", - "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "license": "MIT" - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/markdown-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", - "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mdast-util-directive": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", - "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", - "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/mdast-util-frontmatter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", - "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "escape-string-regexp": "^5.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", - "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz", - "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^5.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", - "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-directive": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", - "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-frontmatter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", - "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", - "license": "MIT", - "dependencies": { - "fault": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-mdx-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", - "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz", - "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==", - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-mdx-md": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", - "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", - "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", - "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^3.0.0", - "micromark-extension-mdx-jsx": "^3.0.0", - "micromark-extension-mdx-md": "^2.0.0", - "micromark-extension-mdxjs-esm": "^3.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", - "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-destination/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-destination/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz", - "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-space/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-character/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-events-to-acorn": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", - "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-normalize-identifier/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", - "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "license": "MIT", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", - "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", - "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "char-regex": "^1.0.2", - "emojilib": "^2.4.0", - "skin-tone": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", - "license": "MIT" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/null-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/null-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/null-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/null-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/null-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", - "license": "MIT", - "dependencies": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", - "license": "ISC" - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", - "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/postcss": { - "version": "8.4.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", - "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz", - "integrity": "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.10.tgz", - "integrity": "sha512-k9qX+aXHBiLTRrWoCJuUFI6F1iF6QJQUXNVWJVSbqZgj57jDhBlOvD8gNUGl35tgqDivbGLhZeW3Ongz4feuKA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz", - "integrity": "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz", - "integrity": "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-custom-media": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz", - "integrity": "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.5", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-properties": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.5.tgz", - "integrity": "sha512-UWf/vhMapZatv+zOuqlfLmYXeOhhHLh8U8HAKGI2VJ00xLRYoAJh4xv8iX6FB6+TLXeDnm0DBLMi00E0hodbQw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.5", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz", - "integrity": "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.5", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz", - "integrity": "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-unused": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", - "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.2.tgz", - "integrity": "sha512-7qTqnL7nfLRyJK/AHSVrrXOuvDDzettC+wGoienURV8v2svNbu6zJC52ruZtHaO6mfcagFmuTGFdzRsJKB3k5Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz", - "integrity": "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-focus-within": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz", - "integrity": "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz", - "integrity": "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-image-set-function": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz", - "integrity": "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-lab-function": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.10.tgz", - "integrity": "sha512-tqs6TCEv9tC1Riq6fOzHuHcZyhg4k3gIAMB8GGY/zA1ssGdm6puHMVE7t75aOSoFg7UD2wyrFFhbldiCMyyFTQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-loader": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", - "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.3.5", - "jiti": "^1.20.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.1.0.tgz", - "integrity": "sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-merge-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", - "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", - "license": "MIT", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", - "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", - "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nesting": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", - "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-resolve-nested": "^3.0.0", - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", - "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-opacity-percentage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", - "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz", - "integrity": "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz", - "integrity": "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-preset-env": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.0.tgz", - "integrity": "sha512-cl13sPBbSqo1Q7Ryb19oT5NZO5IHFolRbIMdgDq4f9w1MHYiL6uZS7uSsjXJ1KzRIcX5BMjEeyxmAevVXENa3Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/postcss-cascade-layers": "^5.0.1", - "@csstools/postcss-color-function": "^4.0.10", - "@csstools/postcss-color-mix-function": "^3.0.10", - "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.0", - "@csstools/postcss-content-alt-text": "^2.0.6", - "@csstools/postcss-exponential-functions": "^2.0.9", - "@csstools/postcss-font-format-keywords": "^4.0.0", - "@csstools/postcss-gamut-mapping": "^2.0.10", - "@csstools/postcss-gradients-interpolation-method": "^5.0.10", - "@csstools/postcss-hwb-function": "^4.0.10", - "@csstools/postcss-ic-unit": "^4.0.2", - "@csstools/postcss-initial": "^2.0.1", - "@csstools/postcss-is-pseudo-class": "^5.0.1", - "@csstools/postcss-light-dark-function": "^2.0.9", - "@csstools/postcss-logical-float-and-clear": "^3.0.0", - "@csstools/postcss-logical-overflow": "^2.0.0", - "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", - "@csstools/postcss-logical-resize": "^3.0.0", - "@csstools/postcss-logical-viewport-units": "^3.0.4", - "@csstools/postcss-media-minmax": "^2.0.9", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", - "@csstools/postcss-nested-calc": "^4.0.0", - "@csstools/postcss-normalize-display-values": "^4.0.0", - "@csstools/postcss-oklab-function": "^4.0.10", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/postcss-random-function": "^2.0.1", - "@csstools/postcss-relative-color-syntax": "^3.0.10", - "@csstools/postcss-scope-pseudo-class": "^4.0.1", - "@csstools/postcss-sign-functions": "^1.1.4", - "@csstools/postcss-stepped-value-functions": "^4.0.9", - "@csstools/postcss-text-decoration-shorthand": "^4.0.2", - "@csstools/postcss-trigonometric-functions": "^4.0.9", - "@csstools/postcss-unset-value": "^4.0.0", - "autoprefixer": "^10.4.21", - "browserslist": "^4.24.5", - "css-blank-pseudo": "^7.0.1", - "css-has-pseudo": "^7.0.2", - "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.3.0", - "postcss-attribute-case-insensitive": "^7.0.1", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^7.0.10", - "postcss-color-hex-alpha": "^10.0.0", - "postcss-color-rebeccapurple": "^10.0.0", - "postcss-custom-media": "^11.0.6", - "postcss-custom-properties": "^14.0.5", - "postcss-custom-selectors": "^8.0.5", - "postcss-dir-pseudo-class": "^9.0.1", - "postcss-double-position-gradients": "^6.0.2", - "postcss-focus-visible": "^10.0.1", - "postcss-focus-within": "^9.0.1", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^6.0.0", - "postcss-image-set-function": "^7.0.0", - "postcss-lab-function": "^7.0.10", - "postcss-logical": "^8.1.0", - "postcss-nesting": "^13.0.1", - "postcss-opacity-percentage": "^3.0.0", - "postcss-overflow-shorthand": "^6.0.0", - "postcss-page-break": "^3.0.4", - "postcss-place": "^10.0.0", - "postcss-pseudo-class-any-link": "^10.0.1", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^8.0.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz", - "integrity": "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", - "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-selector-not": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz", - "integrity": "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", - "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", - "license": "MIT", - "dependencies": { - "sort-css-media-queries": "2.2.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.23" - } - }, - "node_modules/postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" - }, - "engines": { - "node": "^14 || ^16 || >= 18" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" - }, - "node_modules/postcss-zindex": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", - "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", - "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", - "dependencies": { - "@types/prismjs": "^1.26.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.0.0" - } - }, - "node_modules/prismjs": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "license": "ISC" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", - "license": "MIT", - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", - "license": "MIT", - "dependencies": { - "scheduler": "^0.26.0" - }, - "peerDependencies": { - "react": "^19.1.0" - } - }, - "node_modules/react-fast-compare": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", - "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", - "license": "MIT" - }, - "node_modules/react-helmet-async": { - "name": "@slorber/react-helmet-async", - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-json-view-lite": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.4.1.tgz", - "integrity": "sha512-fwFYknRIBxjbFm0kBDrzgBy1xa5tDg2LyXXBepC5f1b+MY3BUClMCsvanMPn089JbV1Eg3nZcrp0VCuH43aXnA==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", - "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", - "dependencies": { - "@types/react": "*" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==" - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/rehype-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-directive": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz", - "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-directive": "^3.0.0", - "micromark-extension-directive": "^3.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-emoji": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", - "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.2", - "emoticon": "^4.0.1", - "mdast-util-find-and-replace": "^3.0.1", - "node-emoji": "^2.1.0", - "unified": "^11.0.4" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/remark-frontmatter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", - "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-frontmatter": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", - "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", - "dependencies": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", - "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "license": "MIT", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rtlcss": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", - "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0", - "postcss": "^8.4.21", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" - }, - "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "license": "MIT" - }, - "node_modules/schema-dts": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz", - "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==", - "license": "Apache-2.0" - }, - "node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/search-insights": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", - "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", - "license": "MIT", - "peer": true - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "license": "MIT", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/send/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", - "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", - "license": "MIT", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "3.3.0", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", - "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", - "license": "MIT" - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/sitemap": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", - "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", - "license": "MIT", - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "license": "MIT" - }, - "node_modules/skin-tone": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", - "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", - "license": "MIT", - "dependencies": { - "unicode-emoji-modifier-base": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sort-css-media-queries": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", - "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", - "license": "MIT", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/srcset": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", - "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", - "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "license": "BSD-2-Clause", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", - "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/stylehacks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "license": "MIT" - }, - "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.31.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", - "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/tinypool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.0.tgz", - "integrity": "sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==", - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" - }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", - "optional": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-emoji-modifier-base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", - "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", - "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", - "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", - "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^7.0.0", - "chalk": "^5.0.1", - "configstore": "^6.0.0", - "has-yarn": "^3.0.0", - "import-lazy": "^4.0.0", - "is-ci": "^3.0.1", - "is-installed-globally": "^0.4.0", - "is-npm": "^6.0.0", - "is-yarn-global": "^0.4.0", - "latest-version": "^7.0.0", - "pupa": "^3.1.0", - "semver": "^7.3.7", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/url-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/url-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/url-loader/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "license": "MIT" - }, - "node_modules/utility-types": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", - "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", - "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpack": { - "version": "5.96.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", - "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", - "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", - "license": "MIT", - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "html-escaper": "^2.0.2", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpackbar": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", - "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "consola": "^3.2.3", - "figures": "^3.2.0", - "markdown-table": "^2.0.0", - "pretty-time": "^1.1.0", - "std-env": "^3.7.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=14.21.3" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/webpackbar/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/webpackbar/node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpackbar/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpackbar/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "license": "MIT", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "license": "MIT", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index 2bb440711..000000000 --- a/docs/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "website", - "version": "2024.08.01", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start", - "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids" - }, - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/plugin-client-redirects": "^3.8.0", - "@docusaurus/preset-classic": "3.8.0", - "@mdx-js/react": "^3.1.0", - "clsx": "^2.0.0", - "docusaurus-theme-github-codeblock": "^2.0.2", - "prism-react-renderer": "^2.4.1", - "react": "^19.1.0", - "react-dom": "^19.1.0" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "3.8.0", - "@docusaurus/types": "3.8.0" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 3 chrome version", - "last 3 firefox version", - "last 5 safari version" - ] - }, - "engines": { - "node": ">=20.0" - } -} diff --git a/docs/sidebars.js b/docs/sidebars.js deleted file mode 100644 index 65c5e85f4..000000000 --- a/docs/sidebars.js +++ /dev/null @@ -1,123 +0,0 @@ -/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ -const sidebars = { - sidebarBoltPy: [ - { - type: 'doc', - id: 'index', - label: 'Bolt for Python', - className: 'sidebar-title', - }, - { type: 'html', value: '


' }, - { - type: 'category', - label: 'Guides', - collapsed: false, - items: [ - "getting-started", - { - type: "category", - label: "Slack API calls", - items: ["concepts/message-sending", "concepts/web-api"], - }, - { - type: "category", - label: "Events", - items: ["concepts/message-listening", "concepts/event-listening"], - }, - { - type: "category", - label: "App UI & Interactivity", - items: [ - "concepts/acknowledge", - "concepts/shortcuts", - "concepts/commands", - "concepts/actions", - "concepts/opening-modals", - "concepts/updating-pushing-views", - "concepts/view-submissions", - "concepts/select-menu-options", - "concepts/app-home", - ], - }, - "concepts/ai-apps", - { - type: 'category', - label: 'Custom Steps', - items: [ - 'concepts/custom-steps', - 'concepts/custom-steps-dynamic-options', - ] - }, - { - type: "category", - label: "App Configuration", - items: [ - "concepts/socket-mode", - "concepts/errors", - "concepts/logging", - "concepts/async", - ], - }, - { - type: "category", - label: "Middleware & Context", - items: [ - "concepts/global-middleware", - "concepts/listener-middleware", - "concepts/context", - ], - }, - "concepts/lazy-listeners", - { - type: "category", - label: "Adaptors", - items: ["concepts/adapters", "concepts/custom-adapters"], - }, - { - type: "category", - label: "Authorization & Security", - items: [ - "concepts/authenticating-oauth", - "concepts/authorization", - "concepts/token-rotation", - ], - }, - { - type: "category", - label: "Legacy", - items: ["concepts/steps-from-apps"], - }, - ], - }, - { type: "html", value: "
" }, - { - type: "category", - label: "Tutorials", - items: ["tutorial/ai-chatbot", "tutorial/custom-steps", "tutorial/custom-steps-for-jira", "tutorial/custom-steps-workflow-builder-new", "tutorial/custom-steps-workflow-builder-existing", "tutorial/modals"], - }, - { type: "html", value: "
" }, - { - type: "link", - label: "Reference", - href: "https://tools.slack.dev/bolt-python/api-docs/slack_bolt/", - }, - { type: "html", value: "
" }, - { - type: "link", - label: "Release notes", - href: "https://github.com/slackapi/bolt-python/releases", - }, - { - type: "link", - label: "Code on GitHub", - href: "https://github.com/SlackAPI/bolt-python", - }, - { - type: "link", - label: "Contributors Guide", - href: "https://github.com/SlackAPI/bolt-python/blob/main/.github/contributing.md", - }, - ], -}; - -export default sidebars; diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css deleted file mode 100644 index 8a0fa6ca2..000000000 --- a/docs/src/css/custom.css +++ /dev/null @@ -1,583 +0,0 @@ -:root { - --ifm-font-size-base: 15px; - - /* set hex colors here pls */ - --dim: #eef2f6; - - --aubergine: #481a54; - --aubergine-background: #552555; - --aubergine-dark: #2c0134; - - --aubergine-active: #7c3085; - --aubergine-active-70: #7c308570; - --aubergine-active-50: #7c308550; - --aubergine-active-30: #7c308530; - - --horchata: #f4ede4; - - --slack-red: #e3066a; - --slack-red-70: #e3066a70; - --slack-red-50: #e3066a50; - --slack-red-30: #e3066a30; - --slack-red-20: #e3066a20; - - --slack-yellow: #fcc003; - --slack-yellow-70: #fcc00370; - --slack-yellow-50: #fcc00350; - --slack-yellow-30: #fcc00330; - --slack-yellow-20: #fcc00320; - - --slack-green: #41b658; - --slack-green-70: #41b65870; - --slack-green-50: #41b65850; - --slack-green-30: #41b65830; - --slack-green-20: #41b65820; - - --slack-blue: #1ab9ff; - --slack-blue-70: #1ab9ff70; - --slack-blue-50: #1ab9ff70; - --slack-blue-30: #1ab9ff30; - --slack-blue-20: #1ab9ff20; - - /* used for dark-mode links */ - --slack-cloud-blue: #1ab9ff; - /* slack marketing color used for light-mode links */ - --slack-dark-blue: #1264a3; - - /* used for functions */ - --unofficial-orange: #e36606; - --unofficial-orange-70: #e3660670; - --unofficial-orange-50: #e3660650; - --unofficial-orange-30: #e3660630; - - /* turns opacity into flat colors for bubbles on top of things */ - --slack-yellow-70-flat: #fcc00370; - - --slack-yellow-30-on-white: #feecb3; - --slack-green-30-on-white: #c6e9cc; - --slack-red-30-on-white: #f6b4d2; - --slack-blue-30-on-white: #baeaff; - --unofficial-orange-30-on-white: #f6d1b4; - --aubergine-active-30-on-white: #d7c0da; - - --ifm-h5-font-size: 1rem; - /* --ifm-heading-font-family: 'AvantGardeForSalesforce', sans-serif; */ - /* --ifm-font-family-base: 'Salesforce_Sans', sans-serif; */ - --ifm-navbar-height: 83px; - - -} - -.navbar__logo img { - height: 150%; - margin-top: -8px; -} - -.navbar--dark { - --ifm-navbar-background-color: #000 !important; - --ifm-navbar-link-hover-color: var(--slack-blue); -} - -.footer { - --ifm-footer-background-color: #000 !important; - --ifm-footer-link-hover-color: var(--slack-blue); - --ifm-footer-color: white !important; -} - -.theme-admonition div{ - text-transform: none !important; /* Disables uppercase transformation */ - -} - -/* resets striped tables that hurt me eyes */ -table tr:nth-child(even) { - background-color: inherit; -} - -h1 { - font-size: 2.5rem; -} - -/* Reduce title size in blog list */ -.blog-list-page h2[class*="title"] -{ - font-size: 2rem; -} - -/* Reduce title size in blog page */ -.blog-post-page h1[class*="title"] -{ - font-size: 2rem; -} - -/* changing the links to blue for accessibility */ -p a, -.markdown a { - color: var(--slack-cloud-blue); - text-decoration: none; -} - -p a, -.markdown a:hover { - text-decoration: underline; -} - -a:hover { - color: var(--slack-cloud-blue); -} - -.article h1 { - font-size: 1rem !important; /* Adjust the size as needed */ -} - -.card { - box-shadow: none; -} - -/* adjusting for light and dark modes */ -[data-theme="light"] { - --docusaurus-highlighted-code-line-bg: var(--dim); - --ifm-color-primary: var(--aubergine-active); - --ifm-navbar-background-color: black; - --ifm-footer-background-color: black; - --slack-cloud-blue: var(--slack-dark-blue); - --reference-section-color: var(--horchata); -} - -[data-theme="dark"] { - --docusaurus-highlighted-code-line-bg: rgb(0 0 0 / 30%); - --ifm-color-primary: var(--slack-cloud-blue); - --ifm-navbar-background-color: #000 !important; - --ifm-footer-background-color: #000 !important; - --ifm-footer-color: white; -} - -.alert--warning { - --ifm-alert-background-color: var(--slack-yellow-30); - --ifm-alert-border-color: var(--slack-yellow); - --ifm-alert-background-color-highlight: var(--slack-yellow-30); -} - -.alert--info { - --ifm-alert-background-color: var(--slack-blue-30); - --ifm-alert-border-color: var(--slack-blue); - /* --ifm-alert-background-color-highlight: var(--slack-blue-30); */ -} - -.alert--danger { - --ifm-alert-background-color: var(--slack-red-30); - --ifm-alert-border-color: var(--slack-red); -} - -.alert--success { - --ifm-alert-background-color: var(--slack-green-30); - --ifm-alert-border-color: var(--slack-green); -} - -.footer { - /* font-size: 80%; */ - padding-bottom: 0.5rem; -} - -.footer__items a { - color: inherit; -} - -.footer .container { - margin: 0; -} - -.table-of-contents__link { - font-size: .9rem; -} - -/* bolding ToC for contrast */ -.table-of-contents__link--active { - font-weight: bold; -} - -/* removing ToC line */ -.table-of-contents__left-border { - border-left: none !important; -} - - -.dropdown-hr { - margin: 0 -} - -/* increasing name of site in sidebar */ -.sidebar-title { - /* padding-bottom: 0.5rem; - font-size: 1.25em; */ - font-weight: bold; -} - -.theme-doc-sidebar-item-link hr { - margin: 1rem; -} - -.sidebar-sdk-title { - /* margin: 0.5rem 0; */ - padding: 0.5rem; - /* border-radius: 4px; */ - border-bottom: 0.5px solid grey; -} - -/* .theme-doc-sidebar-item-category-level-1 .menu__link { - font-weight: bold; -} */ - -.theme-doc-sidebar-item-category-level-1 .menu__list-item .menu__link { - font-weight: normal; -} - -/* removing sidebar line and adding space to match ToC */ -.theme-doc-sidebar-container { - border-right: none !important; - margin-right: 2rem; -} - -/* announcement bar up top */ -div[class^="announcementBar_"] { - font-size: 20px; - height: 50px; - background: var(--horchata); -} - -/* navbar github link */ -.navbar-github-link { - width: 32px; - height: 32px; - padding: 6px; - margin-right: 6px; - margin-left: 6px; - border-radius: 50%; - transition: background var(--ifm-transition-fast); -} - -.navbar-github-link:hover { - background: var(--ifm-color-gray-800); -} - -.navbar-github-link::before { - content: ""; - height: 100%; - display: block; - background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") - no-repeat; -} - -/* Delineate tab blocks */ -.tabs-container { - border: 1px solid var(--ifm-color-primary); - border-radius: 4px; - padding: 0.5em; -} - -summary { - background-color: var(--ifm-background-color); - --docusaurus-details-decoration-color: var(--ifm-color-primary); -} - -details { - border: 1px solid var(--ifm-color-primary)!important; - background-color: var(--ifm-background-color)!important; - --docusaurus-details-decoration-color: var(--ifm-color-primary); -} - -details[open] { - border: 1px solid var(--ifm-color-primary); - background-color: var(--ifm-background-color); - --docusaurus-details-decoration-color: var(--ifm-color-primary); - -} - -/* Docs code bubbles */ -[data-theme="light"] { - --contrast-color: black; - --code-link-background: var(--slack-blue-30); - --code-link-text: rgb(21, 50, 59); - - --method-link-background: var(--slack-green-30-on-white); - --method-link-text: rgb(0, 41, 0); - - --scope-link-background: var(--slack-yellow-30-on-white); - --scope-link-text: rgb(63, 46, 0); - - --event-link-background:#fad4e5; - /* --event-link-text: rgb(63, 0, 24); */ - --event-link-text: rgb(0, 0, 0); - - --function-link-background: var(--unofficial-orange-30-on-white); - --function-link-text: rgb(75, 35, 0); - - --command-link-background: var(--aubergine-active-30-on-white); - --command-link-text: rgb(75, 0, 75); -} - -[data-theme="dark"] { - --contrast-color: white; - --code-link-text: white; - --method-link-text: white; - --scope-link-text: white; - --event-link-text: white; - --function-link-text: white; - --command-link-text: white; - - --code-link-background: var(--slack-blue-70); - --method-link-background: var(--slack-green-70); - --scope-link-background: var(--slack-yellow-70); - --event-link-background: var(--slack-red-70); - --command-link-background: var(--aubergine-active); - --function-link-background: var(--unofficial-orange-70); -} - -a code { - background-color: var(--code-link-background); - color: var(--code-link-text); -} - -a[href^="https://docs.slack.dev/reference/methods"] > code -{ - background-color: var(--method-link-background); - color: var(--method-link-text); -} - -a[href^="/reference/methods"] > code -{ - background-color: var(--method-link-background); - color: var(--method-link-text); -} - -a[href^="https://docs.slack.dev/reference/scopes"] > code -{ - background-color: var(--scope-link-background); - color: var(--scope-link-text); -} - -a[href^="/reference/scopes"] > code -{ - background-color: var(--scope-link-background); - color: var(--scope-link-text); -} - -a[href^="https://docs.slack.dev/reference/events"] > code -{ - background-color: var(--event-link-background); - color: var(--event-link-text); -} - -a[href^="/reference/events"] > code -{ - background-color: var(--event-link-background); - color: var(--event-link-text); -} - -a[href^="/deno-slack-sdk/reference/slack-functions/"] > code { - background-color: var(--function-link-background); - color: var(--function-link-text); -} - -a[href^="/deno-slack-sdk/reference/connector-functions/"] > code { - background-color: var(--function-link-background); - color: var(--function-link-text); -} - -a[href^="/slack-cli/reference/commands"] > code { - background-color: var(--command-link-background); - color: var(--command-link-text); -} - -.facts-section { - margin-top: 2rem; - background-color: var(--slack-green-20) !important; -} - - -.facts-section .tabs-container { - border: none; - border-radius: 0px; - padding: 0em; - --ifm-leading: 0rem - -} - -.facts-section .tabs__item { - padding: 0 0.5rem; - color: inherit; -} - -.facts-section .tabs__item--active { - border-bottom-color: inherit -} - -.errors-section { - background-color: var(--slack-red-20) !important; -} - - -.inputs-section { - background-color: var(--slack-blue-20) !important; -} - -.functions-section { - border-radius: 6px; - padding: 1rem; - margin-bottom: 2rem; -} - -.facts-row-list { - display: flex; - flex-wrap: wrap; - column-gap: 0.5rem; - row-gap: 0.5rem; - align-items: baseline; /* Aligns items to the same baseline */ -} - -.facts-row-list-item { - display: inline-block; -} - - -.inline-icon { - height: 1.9em; /* Matches the height of the text */ - width: auto; /* Maintains aspect ratio */ - vertical-align: middle; /* Aligns with the text */ -} - -.functions-section .type { - text-align: right; -} - -.param-required-section { - padding-top: 1rem; - margin-bottom: 1rem; -} - -.reference-container { - display: flex; - flex-direction: column; - width: 100%; - /* border: 1px solid #ddd; */ - border-radius: 8px; - overflow: hidden; -} -.reference-facts-header { - display: flex; - /* background: #f4f4f4; */ - padding: 10px 0; - font-weight: bold; -} -.reference-facts-item { - display: flex; - padding: 10px 0; - border-bottom: 1px solid var(--ifm-color-emphasis-200); -} -.reference-facts-item:last-child { - border-bottom: none; -} - -.reference-name { - flex: 2; - /* padding: 5px;*/ - min-width: 200px; -} - -.reference-description { - flex: 2; /* Makes description take extra space */ - padding: 5px; -} - -.reference-last-column { - flex: 1; - padding: 5px 0; -} - -.reference-subitems-bubble { - display: inline-block; - background: var(--ifm-color-emphasis-200); - color: var(--ifm-color-emphasis-1000); - padding: 2px 6px; - margin: 2px; - border-radius: 4px; - font-size: 12px; -} - -.param-container { - border-top: 1px solid lightgray; - padding-top: 1rem; - padding-bottom: 1rem; -} - -.param-container:last-child { - padding-bottom: 0; -} - -.param-top-row { - display: flex; - align-items: center; - margin-bottom: 1rem; -} - -/* left-align param name */ -.param-top-row .name { - flex: 1; -} - -/* right-align Required and Type */ -.param-top-row .required, -.param-top-row .type { - margin-left: auto; - text-align: right; -} - -/* add space between Required and Type */ -.param-top-row .required { - margin-left: 10px; -} - -.info-row { - display: flex; - /* align-items: center; */ - padding-top: 1rem; - padding-bottom: 1rem; - border-top: 1px solid var(--ifm-color-emphasis-400); -} - -.info-key { - flex: 0 0 10rem; - align-items: center; -} - -/* hides next and previous */ -.pagination-nav__link { - display: none; -} - -/* -html[data-theme="dark"] .button:hover { - background-color: var(--slack-blue-30-on-white); -} - -html[data-theme="light"] .button:hover { - background-color: var(--aubergine-active-30-on-white); -} */ - -.button { - background-color: var(--aubergine); /* Change color on hover */ - border: 0; - color: white; -} - -.button:hover { - background-color: var(--aubergine-active); - border: 0; - color: white; -} - -.footer-spaced { - display: flex; - gap: 20px; - padding-bottom: 1rem -} \ No newline at end of file diff --git a/docs/src/theme/NotFound/Content/index.js b/docs/src/theme/NotFound/Content/index.js deleted file mode 100644 index c122bc039..000000000 --- a/docs/src/theme/NotFound/Content/index.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; -import clsx from 'clsx'; -import Translate from '@docusaurus/Translate'; -import Heading from '@theme/Heading'; -export default function NotFoundContent({className}) { - return ( -
-
-
- - - Oh no! There's nothing here. - - -

- - If we've led you astray, please let us know. We'll do our best to get things in order. - - -

-

- - For now, we suggest heading back to the beginning to get your bearings. May your next journey have clear skies to guide you true. - -

-
-
-
- ); -} diff --git a/docs/src/theme/NotFound/index.js b/docs/src/theme/NotFound/index.js deleted file mode 100644 index 3b551f9e4..000000000 --- a/docs/src/theme/NotFound/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; -import {translate} from '@docusaurus/Translate'; -import {PageMetadata} from '@docusaurus/theme-common'; -import Layout from '@theme/Layout'; -import NotFoundContent from '@theme/NotFound/Content'; -export default function Index() { - const title = translate({ - id: 'theme.NotFound.title', - message: 'Page Not Found', - }); - return ( - <> - - - - - - ); -} diff --git a/docs/static/.nojekyll b/docs/static/.nojekyll deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/static/img/bolt-logo.svg b/docs/static/img/bolt-logo.svg deleted file mode 100644 index 5077600d5..000000000 --- a/docs/static/img/bolt-logo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/static/img/bolt-py-logo.svg b/docs/static/img/bolt-py-logo.svg deleted file mode 100644 index 1dcab5261..000000000 --- a/docs/static/img/bolt-py-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/static/img/boltpy/bolt-favicon.png b/docs/static/img/boltpy/bolt-favicon.png deleted file mode 100644 index bfe5456c172c5e76fa9b13b1e8ab0a793b6e95cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3376 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 diff --git a/docs/static/img/boltpy/ngrok.gif b/docs/static/img/boltpy/ngrok.gif deleted file mode 100644 index c7c94d51a303aedcbee5302988b5b6629940e8b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49094 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 diff --git a/docs/static/img/boltpy/signing-secret.png b/docs/static/img/boltpy/signing-secret.png deleted file mode 100644 index d32afa03e670f36d023355d91c76f0f475a690f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289939 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Μ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

=$cTRzP6g9AUM*{+>;Kt{TOp-U+J|Vgil81LN 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 z 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


" }, From 12879d9200178d9d28203c13c0e81b0cf8ae35ae Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Fri, 27 Jun 2025 16:05:24 -0700 Subject: [PATCH 05/42] typo --- docs/english/_sidebar.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json index b0868e51b..3c4308e36 100644 --- a/docs/english/_sidebar.json +++ b/docs/english/_sidebar.json @@ -93,7 +93,7 @@ "label": "Tutorials", "items": [ "bolt-python/tutorial/ai-chatbot/ai-chatbot", - "bolt-python/tutorial/custom-steps/custom-steps", + "bolt-python/tutorial/custom-steps", "bolt-python/tutorial/custom-steps-for-jira/custom-steps-for-jira", "bolt-python/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new", "bolt-python/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing", From f5916b196a023c432c665bbff84e34a22b36469b Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Fri, 27 Jun 2025 16:12:52 -0700 Subject: [PATCH 06/42] admonitions --- docs/english/concepts/acknowledge.md | 4 +--- docs/english/concepts/ai-apps.md | 12 +++++------ docs/english/concepts/message-listening.md | 4 +--- docs/english/concepts/web-api.md | 4 +--- docs/english/getting-started.md | 20 ++++++++----------- docs/english/legacy/steps-from-apps.md | 4 +--- .../custom-steps-workflow-builder-new.md | 3 +-- docs/japanese/getting-started.md | 16 ++++++--------- 8 files changed, 25 insertions(+), 42 deletions(-) diff --git a/docs/english/concepts/acknowledge.md b/docs/english/concepts/acknowledge.md index 5e5c0ed25..1ddc1db0f 100644 --- a/docs/english/concepts/acknowledge.md +++ b/docs/english/concepts/acknowledge.md @@ -10,9 +10,7 @@ Depending on the type of request, your acknowledgement may be different. For exa We recommend calling `ack()` right away before initiating any time-consuming processes such as fetching information from your database or sending a new message, since you only have 3 seconds to respond before Slack registers a timeout error. -:::info - -When working in a FaaS / serverless environment, our guidelines for when to `ack()` are different. See the section on [Lazy listeners (FaaS)](/concepts/lazy-listeners) for more detail on this. +:::info[When working in a FaaS / serverless environment, our guidelines for when to `ack()` are different. See the section on [Lazy listeners (FaaS)](/concepts/lazy-listeners) for more detail on this.] ::: diff --git a/docs/english/concepts/ai-apps.md b/docs/english/concepts/ai-apps.md index d30513bdd..6134171b2 100644 --- a/docs/english/concepts/ai-apps.md +++ b/docs/english/concepts/ai-apps.md @@ -24,8 +24,10 @@ AI apps comprise a new messaging experience for Slack. If you're unfamiliar with * [`assistant_thread_context_changed`](https://docs.slack.dev/reference/events/assistant_thread_context_changed) * [`message.im`](https://docs.slack.dev/reference/events/message.im) -:::info -You _could_ implement your own AI app by [listening](event-listening) for the `assistant_thread_started`, `assistant_thread_context_changed`, and `message.im` events (see implementation details below). That being said, using the `Assistant` class will streamline the process. And we already wrote this nice guide for you! +:::info[You _could_ implement your own AI app by [listening](event-listening) for the `assistant_thread_started`, `assistant_thread_context_changed`, and `message.im` events (see implementation details below).] + +That being said, using the `Assistant` class will streamline the process. And we already wrote this nice guide for you! + ::: ## The `Assistant` class instance {#assistant-class} @@ -101,16 +103,14 @@ While the `assistant_thread_started` and `assistant_thread_context_changed` even If you do provide your own `threadContextStore` property, it must feature `get` and `save` methods. -:::tip -Refer to the [module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +:::tip[Refer to the [module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments.] ::: ## Handling a new thread {#handling-a-new-thread} When the user opens a new thread with your AI app, the [`assistant_thread_started`](https://docs.slack.dev/reference/events/assistant_thread_started) event will be sent to your app. -:::tip -When a user opens an AI app thread while in a channel, the channel info is stored as the thread's `AssistantThreadContext` data. You can grab that info by using the `get_thread_context` utility, as subsequent user message event payloads won't include the channel info. +:::tip[When a user opens an AI app thread while in a channel, the channel info is stored as the thread's `AssistantThreadContext` data. You can grab that info by using the `get_thread_context` utility, as subsequent user message event payloads won't include the channel info.] ::: ### Block Kit interactions in the AI app thread {#block-kit-interactions} diff --git a/docs/english/concepts/message-listening.md b/docs/english/concepts/message-listening.md index b2f8bc05c..c03695a09 100644 --- a/docs/english/concepts/message-listening.md +++ b/docs/english/concepts/message-listening.md @@ -8,9 +8,7 @@ To listen to messages that [your app has access to receive](https://docs.slack.d `message()` accepts an argument of type `str` or `re.Pattern` object that filters out any messages that don't match the pattern. -:::info - -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +:::info[Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments.] ::: diff --git a/docs/english/concepts/web-api.md b/docs/english/concepts/web-api.md index 18b41a029..40db163e5 100644 --- a/docs/english/concepts/web-api.md +++ b/docs/english/concepts/web-api.md @@ -8,9 +8,7 @@ You can call [any Web API method](https://docs.slack.dev/reference/methods) usin The token used to initialize Bolt can be found in the `context` object, which is required to call most Web API methods. -:::info - -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +:::info[Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments.] ::: diff --git a/docs/english/getting-started.md b/docs/english/getting-started.md index 840a17d09..c2212c430 100644 --- a/docs/english/getting-started.md +++ b/docs/english/getting-started.md @@ -15,9 +15,7 @@ When you're finished, you'll have this ⚡️[Getting Started with Slack app](ht ### Create an app {#create-an-app} First thing's first: before you start developing with Bolt, you'll want to [create a Slack app](https://api.slack.com/apps/new). -:::tip - -We recommend using a workspace where you won't disrupt real work getting done — [you can create a new one for free](https://slack.com/get-started#create). +:::tip[We recommend using a workspace where you won't disrupt real work getting done — [you can create a new one for free](https://slack.com/get-started#create).] ::: @@ -55,9 +53,7 @@ We're going to use bot and app-level tokens for this guide. 6. Navigate to **Socket Mode** on the left side menu and toggle to enable. -:::tip - -Treat your tokens like passwords and [keep them safe](https://docs.slack.dev/authentication/best-practices-for-security). Your app uses tokens to post and retrieve information from Slack workspaces. +:::tip[Treat your tokens like passwords and [keep them safe](https://docs.slack.dev/authentication/best-practices-for-security). Your app uses tokens to post and retrieve information from Slack workspaces.] ::: @@ -169,9 +165,9 @@ When an event occurs, Slack will send your app some information about the event, 2. Add your Request URL. Slack will send HTTP POST requests corresponding to events to this [Request URL](https://docs.slack.dev/apis/events-api/#subscribing) endpoint. Bolt uses the `/slack/events` path to listen to all incoming requests (whether shortcuts, events, or interactivity payloads). When configuring your Request URL within your app configuration, you'll append `/slack/events`, e.g. `https:///slack/events`. 💡 As long as your Bolt app is still running, your URL should become verified. -:::tip +:::tip[For local development, you can use a proxy service like ngrok to create a public URL and tunnel requests to your development environment.] -For local development, you can use a proxy service like ngrok to create a public URL and tunnel requests to your development environment. Refer to [ngrok's getting started guide](https://ngrok.com/docs#getting-started-expose) on how to create this tunnel. And when you get to hosting your app, we've collected some of the most common hosting providers Slack developers use to host their apps [on our API site](https://docs.slack.dev/distribution/hosting-slack-apps/). +Refer to [ngrok's getting started guide](https://ngrok.com/docs#getting-started-expose) on how to create this tunnel. And when you get to hosting your app, we've collected some of the most common hosting providers Slack developers use to host their apps [on our API site](https://docs.slack.dev/distribution/hosting-slack-apps/). ::: @@ -266,9 +262,9 @@ With Socket Mode on, basic interactivity is enabled by default, so no further ac Similar to events, you'll need to specify a URL for Slack to send the action (such as *user clicked a button*). Back on your app configuration page, click on **Interactivity & Shortcuts** on the left side. You'll see that there's another **Request URL** box. -:::tip +:::tip[By default, Bolt is configured to use the same endpoint for interactive components that it uses for events] -By default, Bolt is configured to use the same endpoint for interactive components that it uses for events, so use the same request URL as above (for example, `https://8e8ec2d7.ngrok.io/slack/events`). Press the **Save Changes** button in the lower right hand corner, and that's it. Your app is set up to handle interactivity! +Use the same request URL as above (for example, `https://8e8ec2d7.ngrok.io/slack/events`). Press the **Save Changes** button in the lower right hand corner, and that's it. Your app is set up to handle interactivity! ::: @@ -366,9 +362,9 @@ The value inside of `say()` is now an object that contains an array of `blocks`. You'll notice in the button `accessory` object, there is an `action_id`. This will act as a unique identifier for the button so your app can specify what action it wants to respond to. -:::tip +:::tip[The [Block Kit Builder](https://app.slack.com/block-kit-builder) is a simple way to prototype your interactive messages.] -The [Block Kit Builder](https://app.slack.com/block-kit-builder) is an simple way to prototype your interactive messages. The builder lets you (or anyone on your team) mockup messages and generates the corresponding JSON that you can paste directly in your app. +The builder lets you (or anyone on your team) mockup messages and generates the corresponding JSON that you can paste directly in your app. ::: diff --git a/docs/english/legacy/steps-from-apps.md b/docs/english/legacy/steps-from-apps.md index 09becda0c..7259e562f 100644 --- a/docs/english/legacy/steps-from-apps.md +++ b/docs/english/legacy/steps-from-apps.md @@ -4,9 +4,7 @@ lang: en slug: /legacy/steps-from-apps --- -:::danger - -Steps from Apps is a deprecated feature. +:::danger[Steps from Apps is a deprecated feature.] Steps from Apps are different than, and not interchangeable with, Slack automation workflows. We encourage those who are currently publishing steps from apps to consider the new [Slack automation features](https://docs.slack.dev/workflows/), such as [custom steps for Bolt](https://docs.slack.dev/workflows/workflow-steps). diff --git a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md index 6af5b2958..1b345da38 100644 --- a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md +++ b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md @@ -120,8 +120,7 @@ You'll know the local development server is up and running successfully when it With your development server running, continue to the next step. -:::info -If you need to stop running the local development server, press `` + `c` to end the process. +:::info[If you need to stop running the local development server, press `` + `c` to end the process.] ::: ## Wiring up the sample step in Workflow Builder {#wfb} diff --git a/docs/japanese/getting-started.md b/docs/japanese/getting-started.md index 10aa3c58d..14a84b2e1 100644 --- a/docs/japanese/getting-started.md +++ b/docs/japanese/getting-started.md @@ -16,9 +16,7 @@ lang: ja-jp ### アプリを作成する {#create-an-app} 最初にやるべきこと : Bolt での開発を始める前に、[Slack アプリを作成](https://api.slack.com/apps/new)します。 -:::tip - -通常の業務の妨げにならないよう、別の開発用のワークスペースを使用することをおすすめします。[新しいワークスペースは無料で作成できます](https://slack.com/get-started#create) +:::tip[通常の業務の妨げにならないよう、別の開発用のワークスペースを使用することをおすすめします。[新しいワークスペースは無料で作成できます](https://slack.com/get-started#create)] ::: @@ -56,9 +54,7 @@ Slack アプリで使用できるトークンには、ユーザートークン 6. 左サイドメニューの「**Socket Mode**」を有効にします。 -:::tip - -トークンはパスワードと同様に取り扱い、[安全な方法で保管してください](https://docs.slack.dev/authentication/best-practices-for-security)。アプリはこのトークンを使って Slack ワークスペースで投稿をしたり、情報の取得をしたりします。 +:::tip[トークンはパスワードと同様に取り扱い、[安全な方法で保管してください](https://docs.slack.dev/authentication/best-practices-for-security)。アプリはこのトークンを使って Slack ワークスペースで投稿をしたり、情報の取得をしたりします。] ::: @@ -99,9 +95,9 @@ export SLACK_BOT_TOKEN=xoxb-<ボットトークン> ```shell export SLACK_APP_TOKEN=<アプリレベルトークン> ``` -:::warning +:::warning[🔒 全てのトークンは安全に保管してください。] -🔒 全てのトークンは安全に保管してください。少なくともパブリックなバージョン管理にチェックインするようなことは避けるべきでしょう。また、上にあった例のように環境変数を介してアクセスするようにしてください。詳細な情報は [アプリのセキュリティのベストプラクティス](https://docs.slack.dev/authentication/best-practices-for-security)のドキュメントを参照してください。 +少なくともパブリックなバージョン管理にチェックインするようなことは避けるべきでしょう。また、上にあった例のように環境変数を介してアクセスするようにしてください。詳細な情報は [アプリのセキュリティのベストプラクティス](https://docs.slack.dev/authentication/best-practices-for-security)のドキュメントを参照してください。 ::: @@ -359,9 +355,9 @@ if __name__ == "__main__": ボタンを含む `accessory` オブジェクトでは、`action_id` を指定していることがわかります。これは、ボタンを一意に示す識別子として機能します。これを使って、アプリをどのアクションに応答させるかを指定できます。 -:::tip +:::tip[[Block Kit Builder](https://app.slack.com/block-kit-builder) を使用すると、インタラクティブなメッセージのプロトタイプを簡単に作成できます。] -[Block Kit Builder](https://app.slack.com/block-kit-builder) を使用すると、インタラクティブなメッセージのプロトタイプを簡単に作成できます。自分自身やチームメンバーがメッセージのモックアップを作成し、生成される JSON をアプリに直接貼りつけることができます。 +自分自身やチームメンバーがメッセージのモックアップを作成し、生成される JSON をアプリに直接貼りつけることができます。 ::: From 16c2405bbbe1e0b2537eea05b82292e4ea11e906 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Mon, 7 Jul 2025 14:25:41 -0700 Subject: [PATCH 07/42] committing --- docs/english/getting-started.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/english/getting-started.md b/docs/english/getting-started.md index c2212c430..c8ef0bec5 100644 --- a/docs/english/getting-started.md +++ b/docs/english/getting-started.md @@ -96,9 +96,9 @@ export SLACK_BOT_TOKEN=xoxb- export SLACK_APP_TOKEN= ``` -:::warning +:::warning[Remember to keep your tokens secure.] -Remember to keep your tokens secure. At a minimum, you should avoid checking them into public version control, and access them via environment variables as we've done above. Check out the API documentation for more on [best practices for app security](https://docs.slack.dev/authentication/best-practices-for-security). +At a minimum, you should avoid checking them into public version control, and access them via environment variables as we've done above. Check out the API documentation for more on [best practices for app security](https://docs.slack.dev/authentication/best-practices-for-security). ::: From 1be3bc3e8f0b224f3fffd0ddf2a8c18bdcb2d3ae Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 16 Jul 2025 10:11:04 -0700 Subject: [PATCH 08/42] broken images --- docs/docusaurus.config.js | 114 -------------------------------- docs/english/building-an-app.md | 2 +- docs/english/getting-started.md | 2 +- 3 files changed, 2 insertions(+), 116 deletions(-) delete mode 100644 docs/docusaurus.config.js diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js deleted file mode 100644 index 0d80161e6..000000000 --- a/docs/docusaurus.config.js +++ /dev/null @@ -1,114 +0,0 @@ -import { themes as prismThemes } from 'prism-react-renderer'; -const footer = require('./footerConfig'); -const navbar = require('./navbarConfig'); - -/** @type {import('@docusaurus/types').Config} */ -const config = { - title: "Bolt for Python", - tagline: "Official frameworks, libraries, and SDKs for Slack developers", - favicon: "img/favicon.ico", - url: "https://tools.slack.dev", - baseUrl: "/bolt-python/", - organizationName: "slackapi", - projectName: "bolt-python", - - onBrokenLinks: "ignore", - onBrokenAnchors: "warn", - onBrokenMarkdownLinks: "warn", - - i18n: { - defaultLocale: "en", - locales: ["en", "ja-jp"], - }, - - presets: [ - [ - "classic", - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ - docs: { - path: "content", - breadcrumbs: false, - routeBasePath: "/", // Serve the docs at the site's root - sidebarPath: "./sidebars.js", - editUrl: "https://github.com/slackapi/bolt-python/tree/main/docs", - }, - blog: false, - theme: { - customCss: "./src/css/custom.css", - }, - }), - ], - ], - - plugins: [ - "docusaurus-theme-github-codeblock", - [ - "@docusaurus/plugin-client-redirects", - { - redirects: [ - { - to: "/getting-started", - from: ["/tutorial/getting-started"], - }, - { - to: "/", - from: ["/concepts", "/concepts/basic", "/concepts/advanced"], - }, - { - to: '/concepts/actions', - from: [ - '/concepts/action-listening', - '/concepts/action-responding' - ], - }, - { - to: '/legacy/steps-from-apps', - from: [ - '/concepts/steps', - '/concepts/creating-steps', - '/concepts/adding-editing-steps', - '/concepts/saving-steps', - '/concepts/executing-steps' - ], - }, - { - to: '/concepts/ai-apps', - from: '/concepts/assistant' - } - ], - }, - ], - ], - - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - colorMode: { - respectPrefersColorScheme: true, - }, - docs: { - sidebar: { - autoCollapseCategories: true, - }, - }, - navbar, - footer, - prism: { - // switch to alucard when available in prism? - theme: prismThemes.github, - darkTheme: prismThemes.dracula, - additionalLanguages: ['bash'], - }, - codeblock: { - showGithubLink: true, - githubLinkLabel: "View on GitHub", - }, - // announcementBar: { - // id: `announcementBar`, - // content: `🎉️ Version 2.26.0 of the developer tools for the Slack automations platform is here! 🎉️ `, - // }, - }), -}; - -export default config; diff --git a/docs/english/building-an-app.md b/docs/english/building-an-app.md index deb3146b9..c7182bfed 100644 --- a/docs/english/building-an-app.md +++ b/docs/english/building-an-app.md @@ -24,7 +24,7 @@ After you fill out an app name (_you can change it later_) and pick a workspace This page contains an overview of your app in addition to important credentials you'll need later. -![Basic Information page](/img/boltpy/basic-information-page.png "Basic Information page") +![Basic Information page](/img/bolt-python/basic-information-page.png "Basic Information page") Look around, add an app icon and description, and then let's start configuring your app 🔩 diff --git a/docs/english/getting-started.md b/docs/english/getting-started.md index a794f3176..421494323 100644 --- a/docs/english/getting-started.md +++ b/docs/english/getting-started.md @@ -133,7 +133,7 @@ Navigate to your list of apps and [create a new Slack app](https://api.slack.com You'll then land on your app's **Basic Information** page, which is an overview of your app and which contains important credentials: -![Basic Information page](/img/boltpy/basic-information-page.png "Basic Information page") +![Basic Information page](/img/bolt-python/basic-information-page.png "Basic Information page") To listen for events happening in Slack (such as a new posted message) without opening a port or exposing an endpoint, we will use [Socket Mode](/concepts/socket-mode). This connection requires a specific app token: From 3faca30b9cef9a6c4018be501311899640deecdb Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 16 Jul 2025 10:12:04 -0700 Subject: [PATCH 09/42] broken images --- docs/english/building-an-app.md | 2 +- docs/english/getting-started.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/english/building-an-app.md b/docs/english/building-an-app.md index c7182bfed..e0b147490 100644 --- a/docs/english/building-an-app.md +++ b/docs/english/building-an-app.md @@ -48,7 +48,7 @@ We're going to use bot and app-level tokens for this guide. 4. Once you authorize the installation, you'll land on the **OAuth & Permissions** page and see a **Bot User OAuth Access Token**. -![OAuth Tokens](/img/boltpy/bot-token.png "Bot OAuth Token") +![OAuth Tokens](/img/bolt-python/bot-token.png "Bot OAuth Token") 5. Head over to **Basic Information** and scroll down under the App Token section and click **Generate Token and Scopes** to generate an app-level token. Add the `connections:write` scope to this token and save the generated `xapp` token. diff --git a/docs/english/getting-started.md b/docs/english/getting-started.md index 421494323..e9953c776 100644 --- a/docs/english/getting-started.md +++ b/docs/english/getting-started.md @@ -158,7 +158,7 @@ A bot token is also needed to interact with the Web API methods as your app's bo 1. Navigate to the **OAuth & Permissions** on the left sidebar and install your app to your workspace to generate a token. 2. After authorizing the installation, you'll return to the **OAuth & Permissions** page and find a **Bot User OAuth Token**: -![OAuth Tokens](/img/boltpy/bot-token.png "Bot OAuth Token") +![OAuth Tokens](/img/bolt-python/bot-token.png "Bot OAuth Token") 3. Copy the bot token beginning with `xoxb` from the **OAuth & Permissions page** and then store it in a new environment variable: From da6634d2f480a53ed0a7ee1a5336edae99186db9 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 16 Jul 2025 10:12:57 -0700 Subject: [PATCH 10/42] broken images --- docs/english/getting-started.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/english/getting-started.md b/docs/english/getting-started.md index e9953c776..96984c96c 100644 --- a/docs/english/getting-started.md +++ b/docs/english/getting-started.md @@ -265,7 +265,7 @@ $ slack app settings This will open the following page in a web browser: -![Basic Information page](/img/boltpy/basic-information-page.png "Basic Information page") +![Basic Information page](/img/bolt-python/basic-information-page.png "Basic Information page") @@ -274,7 +274,7 @@ Browse to https://api.slack.com/apps and select your app "Getting Started Bolt A This will open the following page: -![Basic Information page](/img/boltpy/basic-information-page.png "Basic Information page") +![Basic Information page](/img/bolt-python/basic-information-page.png "Basic Information page") From 158469f811bb8d06e375306c2814d2d4afb0d87a Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 16 Jul 2025 10:20:03 -0700 Subject: [PATCH 11/42] moving reference --- {slack_bolt => docs/slack_bolt}/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/aiohttp/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/asgi/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/asgi/aiohttp/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/asgi/async_handler.py | 0 {slack_bolt => docs/slack_bolt}/adapter/asgi/base_handler.py | 0 {slack_bolt => docs/slack_bolt}/adapter/asgi/builtin/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/asgi/http_request.py | 0 {slack_bolt => docs/slack_bolt}/adapter/asgi/http_response.py | 0 {slack_bolt => docs/slack_bolt}/adapter/asgi/utils.py | 0 {slack_bolt => docs/slack_bolt}/adapter/aws_lambda/__init__.py | 0 .../slack_bolt}/adapter/aws_lambda/chalice_handler.py | 0 .../adapter/aws_lambda/chalice_lazy_listener_runner.py | 0 {slack_bolt => docs/slack_bolt}/adapter/aws_lambda/handler.py | 0 {slack_bolt => docs/slack_bolt}/adapter/aws_lambda/internals.py | 0 .../slack_bolt}/adapter/aws_lambda/lambda_s3_oauth_flow.py | 0 .../slack_bolt}/adapter/aws_lambda/lazy_listener_runner.py | 0 .../slack_bolt}/adapter/aws_lambda/local_lambda_client.py | 0 {slack_bolt => docs/slack_bolt}/adapter/bottle/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/bottle/handler.py | 0 {slack_bolt => docs/slack_bolt}/adapter/cherrypy/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/cherrypy/handler.py | 0 {slack_bolt => docs/slack_bolt}/adapter/django/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/django/handler.py | 0 {slack_bolt => docs/slack_bolt}/adapter/falcon/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/falcon/async_resource.py | 0 {slack_bolt => docs/slack_bolt}/adapter/falcon/resource.py | 0 {slack_bolt => docs/slack_bolt}/adapter/fastapi/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/fastapi/async_handler.py | 0 {slack_bolt => docs/slack_bolt}/adapter/flask/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/flask/handler.py | 0 .../slack_bolt}/adapter/google_cloud_functions/__init__.py | 0 .../slack_bolt}/adapter/google_cloud_functions/handler.py | 0 {slack_bolt => docs/slack_bolt}/adapter/pyramid/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/pyramid/handler.py | 0 {slack_bolt => docs/slack_bolt}/adapter/sanic/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/sanic/async_handler.py | 0 {slack_bolt => docs/slack_bolt}/adapter/socket_mode/__init__.py | 0 .../slack_bolt}/adapter/socket_mode/aiohttp/__init__.py | 0 .../slack_bolt}/adapter/socket_mode/async_base_handler.py | 0 .../slack_bolt}/adapter/socket_mode/async_handler.py | 0 .../slack_bolt}/adapter/socket_mode/async_internals.py | 0 .../slack_bolt}/adapter/socket_mode/base_handler.py | 0 .../slack_bolt}/adapter/socket_mode/builtin/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/socket_mode/internals.py | 0 .../slack_bolt}/adapter/socket_mode/websocket_client/__init__.py | 0 .../slack_bolt}/adapter/socket_mode/websockets/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/starlette/__init__.py | 0 .../slack_bolt}/adapter/starlette/async_handler.py | 0 {slack_bolt => docs/slack_bolt}/adapter/starlette/handler.py | 0 {slack_bolt => docs/slack_bolt}/adapter/tornado/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/tornado/async_handler.py | 0 {slack_bolt => docs/slack_bolt}/adapter/tornado/handler.py | 0 {slack_bolt => docs/slack_bolt}/adapter/wsgi/__init__.py | 0 {slack_bolt => docs/slack_bolt}/adapter/wsgi/handler.py | 0 {slack_bolt => docs/slack_bolt}/adapter/wsgi/http_request.py | 0 {slack_bolt => docs/slack_bolt}/adapter/wsgi/http_response.py | 0 {slack_bolt => docs/slack_bolt}/adapter/wsgi/internals.py | 0 {slack_bolt => docs/slack_bolt}/app/__init__.py | 0 {slack_bolt => docs/slack_bolt}/app/app.py | 0 {slack_bolt => docs/slack_bolt}/app/async_app.py | 0 {slack_bolt => docs/slack_bolt}/app/async_server.py | 0 {slack_bolt => docs/slack_bolt}/async_app.py | 0 {slack_bolt => docs/slack_bolt}/authorization/__init__.py | 0 {slack_bolt => docs/slack_bolt}/authorization/async_authorize.py | 0 .../slack_bolt}/authorization/async_authorize_args.py | 0 {slack_bolt => docs/slack_bolt}/authorization/authorize.py | 0 {slack_bolt => docs/slack_bolt}/authorization/authorize_args.py | 0 {slack_bolt => docs/slack_bolt}/authorization/authorize_result.py | 0 {slack_bolt => docs/slack_bolt}/context/__init__.py | 0 {slack_bolt => docs/slack_bolt}/context/ack/__init__.py | 0 {slack_bolt => docs/slack_bolt}/context/ack/ack.py | 0 {slack_bolt => docs/slack_bolt}/context/ack/async_ack.py | 0 {slack_bolt => docs/slack_bolt}/context/ack/internals.py | 0 {slack_bolt => docs/slack_bolt}/context/assistant/__init__.py | 0 .../slack_bolt}/context/assistant/assistant_utilities.py | 0 .../slack_bolt}/context/assistant/async_assistant_utilities.py | 0 {slack_bolt => docs/slack_bolt}/context/assistant/internals.py | 0 .../slack_bolt}/context/assistant/thread_context/__init__.py | 0 .../context/assistant/thread_context_store/__init__.py | 0 .../context/assistant/thread_context_store/async_store.py | 0 .../context/assistant/thread_context_store/default_async_store.py | 0 .../context/assistant/thread_context_store/default_store.py | 0 .../context/assistant/thread_context_store/file/__init__.py | 0 .../slack_bolt}/context/assistant/thread_context_store/store.py | 0 {slack_bolt => docs/slack_bolt}/context/async_context.py | 0 {slack_bolt => docs/slack_bolt}/context/base_context.py | 0 {slack_bolt => docs/slack_bolt}/context/complete/__init__.py | 0 .../slack_bolt}/context/complete/async_complete.py | 0 {slack_bolt => docs/slack_bolt}/context/complete/complete.py | 0 {slack_bolt => docs/slack_bolt}/context/context.py | 0 {slack_bolt => docs/slack_bolt}/context/fail/__init__.py | 0 {slack_bolt => docs/slack_bolt}/context/fail/async_fail.py | 0 {slack_bolt => docs/slack_bolt}/context/fail/fail.py | 0 .../slack_bolt}/context/get_thread_context/__init__.py | 0 .../context/get_thread_context/async_get_thread_context.py | 0 .../slack_bolt}/context/get_thread_context/get_thread_context.py | 0 {slack_bolt => docs/slack_bolt}/context/respond/__init__.py | 0 {slack_bolt => docs/slack_bolt}/context/respond/async_respond.py | 0 {slack_bolt => docs/slack_bolt}/context/respond/internals.py | 0 {slack_bolt => docs/slack_bolt}/context/respond/respond.py | 0 .../slack_bolt}/context/save_thread_context/__init__.py | 0 .../context/save_thread_context/async_save_thread_context.py | 0 .../context/save_thread_context/save_thread_context.py | 0 {slack_bolt => docs/slack_bolt}/context/say/__init__.py | 0 {slack_bolt => docs/slack_bolt}/context/say/async_say.py | 0 {slack_bolt => docs/slack_bolt}/context/say/internals.py | 0 {slack_bolt => docs/slack_bolt}/context/say/say.py | 0 {slack_bolt => docs/slack_bolt}/context/set_status/__init__.py | 0 .../slack_bolt}/context/set_status/async_set_status.py | 0 {slack_bolt => docs/slack_bolt}/context/set_status/set_status.py | 0 .../slack_bolt}/context/set_suggested_prompts/__init__.py | 0 .../context/set_suggested_prompts/async_set_suggested_prompts.py | 0 .../context/set_suggested_prompts/set_suggested_prompts.py | 0 {slack_bolt => docs/slack_bolt}/context/set_title/__init__.py | 0 .../slack_bolt}/context/set_title/async_set_title.py | 0 {slack_bolt => docs/slack_bolt}/context/set_title/set_title.py | 0 {slack_bolt => docs/slack_bolt}/error/__init__.py | 0 {slack_bolt => docs/slack_bolt}/kwargs_injection/__init__.py | 0 {slack_bolt => docs/slack_bolt}/kwargs_injection/args.py | 0 {slack_bolt => docs/slack_bolt}/kwargs_injection/async_args.py | 0 {slack_bolt => docs/slack_bolt}/kwargs_injection/async_utils.py | 0 {slack_bolt => docs/slack_bolt}/kwargs_injection/utils.py | 0 {slack_bolt => docs/slack_bolt}/lazy_listener/__init__.py | 0 {slack_bolt => docs/slack_bolt}/lazy_listener/async_internals.py | 0 {slack_bolt => docs/slack_bolt}/lazy_listener/async_runner.py | 0 {slack_bolt => docs/slack_bolt}/lazy_listener/asyncio_runner.py | 0 {slack_bolt => docs/slack_bolt}/lazy_listener/internals.py | 0 {slack_bolt => docs/slack_bolt}/lazy_listener/runner.py | 0 {slack_bolt => docs/slack_bolt}/lazy_listener/thread_runner.py | 0 {slack_bolt => docs/slack_bolt}/listener/__init__.py | 0 {slack_bolt => docs/slack_bolt}/listener/async_builtins.py | 0 {slack_bolt => docs/slack_bolt}/listener/async_listener.py | 0 .../slack_bolt}/listener/async_listener_completion_handler.py | 0 .../slack_bolt}/listener/async_listener_error_handler.py | 0 .../slack_bolt}/listener/async_listener_start_handler.py | 0 {slack_bolt => docs/slack_bolt}/listener/asyncio_runner.py | 0 {slack_bolt => docs/slack_bolt}/listener/builtins.py | 0 {slack_bolt => docs/slack_bolt}/listener/custom_listener.py | 0 {slack_bolt => docs/slack_bolt}/listener/listener.py | 0 .../slack_bolt}/listener/listener_completion_handler.py | 0 .../slack_bolt}/listener/listener_error_handler.py | 0 .../slack_bolt}/listener/listener_start_handler.py | 0 {slack_bolt => docs/slack_bolt}/listener/thread_runner.py | 0 {slack_bolt => docs/slack_bolt}/listener_matcher/__init__.py | 0 .../slack_bolt}/listener_matcher/async_builtins.py | 0 .../slack_bolt}/listener_matcher/async_listener_matcher.py | 0 {slack_bolt => docs/slack_bolt}/listener_matcher/builtins.py | 0 .../slack_bolt}/listener_matcher/custom_listener_matcher.py | 0 .../slack_bolt}/listener_matcher/listener_matcher.py | 0 {slack_bolt => docs/slack_bolt}/logger/__init__.py | 0 {slack_bolt => docs/slack_bolt}/logger/messages.py | 0 {slack_bolt => docs/slack_bolt}/middleware/__init__.py | 0 {slack_bolt => docs/slack_bolt}/middleware/assistant/__init__.py | 0 {slack_bolt => docs/slack_bolt}/middleware/assistant/assistant.py | 0 .../slack_bolt}/middleware/assistant/async_assistant.py | 0 {slack_bolt => docs/slack_bolt}/middleware/async_builtins.py | 0 .../slack_bolt}/middleware/async_custom_middleware.py | 0 {slack_bolt => docs/slack_bolt}/middleware/async_middleware.py | 0 .../slack_bolt}/middleware/async_middleware_error_handler.py | 0 .../slack_bolt}/middleware/attaching_function_token/__init__.py | 0 .../attaching_function_token/async_attaching_function_token.py | 0 .../attaching_function_token/attaching_function_token.py | 0 .../slack_bolt}/middleware/authorization/__init__.py | 0 .../slack_bolt}/middleware/authorization/async_authorization.py | 0 .../slack_bolt}/middleware/authorization/async_internals.py | 0 .../middleware/authorization/async_multi_teams_authorization.py | 0 .../middleware/authorization/async_single_team_authorization.py | 0 .../slack_bolt}/middleware/authorization/authorization.py | 0 .../slack_bolt}/middleware/authorization/internals.py | 0 .../middleware/authorization/multi_teams_authorization.py | 0 .../middleware/authorization/single_team_authorization.py | 0 {slack_bolt => docs/slack_bolt}/middleware/custom_middleware.py | 0 .../slack_bolt}/middleware/ignoring_self_events/__init__.py | 0 .../middleware/ignoring_self_events/async_ignoring_self_events.py | 0 .../middleware/ignoring_self_events/ignoring_self_events.py | 0 .../slack_bolt}/middleware/message_listener_matches/__init__.py | 0 .../message_listener_matches/async_message_listener_matches.py | 0 .../message_listener_matches/message_listener_matches.py | 0 {slack_bolt => docs/slack_bolt}/middleware/middleware.py | 0 .../slack_bolt}/middleware/middleware_error_handler.py | 0 .../slack_bolt}/middleware/request_verification/__init__.py | 0 .../middleware/request_verification/async_request_verification.py | 0 .../middleware/request_verification/request_verification.py | 0 {slack_bolt => docs/slack_bolt}/middleware/ssl_check/__init__.py | 0 .../slack_bolt}/middleware/ssl_check/async_ssl_check.py | 0 {slack_bolt => docs/slack_bolt}/middleware/ssl_check/ssl_check.py | 0 .../slack_bolt}/middleware/url_verification/__init__.py | 0 .../middleware/url_verification/async_url_verification.py | 0 .../slack_bolt}/middleware/url_verification/url_verification.py | 0 {slack_bolt => docs/slack_bolt}/oauth/__init__.py | 0 {slack_bolt => docs/slack_bolt}/oauth/async_callback_options.py | 0 {slack_bolt => docs/slack_bolt}/oauth/async_internals.py | 0 {slack_bolt => docs/slack_bolt}/oauth/async_oauth_flow.py | 0 {slack_bolt => docs/slack_bolt}/oauth/async_oauth_settings.py | 0 {slack_bolt => docs/slack_bolt}/oauth/callback_options.py | 0 {slack_bolt => docs/slack_bolt}/oauth/internals.py | 0 {slack_bolt => docs/slack_bolt}/oauth/oauth_flow.py | 0 {slack_bolt => docs/slack_bolt}/oauth/oauth_settings.py | 0 {slack_bolt => docs/slack_bolt}/py.typed | 0 {slack_bolt => docs/slack_bolt}/request/__init__.py | 0 {slack_bolt => docs/slack_bolt}/request/async_internals.py | 0 {slack_bolt => docs/slack_bolt}/request/async_request.py | 0 {slack_bolt => docs/slack_bolt}/request/internals.py | 0 {slack_bolt => docs/slack_bolt}/request/payload_utils.py | 0 {slack_bolt => docs/slack_bolt}/request/request.py | 0 {slack_bolt => docs/slack_bolt}/response/__init__.py | 0 {slack_bolt => docs/slack_bolt}/response/response.py | 0 {slack_bolt => docs/slack_bolt}/util/__init__.py | 0 {slack_bolt => docs/slack_bolt}/util/async_utils.py | 0 {slack_bolt => docs/slack_bolt}/util/utils.py | 0 {slack_bolt => docs/slack_bolt}/version.py | 0 {slack_bolt => docs/slack_bolt}/workflows/__init__.py | 0 {slack_bolt => docs/slack_bolt}/workflows/step/__init__.py | 0 {slack_bolt => docs/slack_bolt}/workflows/step/async_step.py | 0 .../slack_bolt}/workflows/step/async_step_middleware.py | 0 {slack_bolt => docs/slack_bolt}/workflows/step/internals.py | 0 {slack_bolt => docs/slack_bolt}/workflows/step/step.py | 0 {slack_bolt => docs/slack_bolt}/workflows/step/step_middleware.py | 0 .../slack_bolt}/workflows/step/utilities/__init__.py | 0 .../slack_bolt}/workflows/step/utilities/async_complete.py | 0 .../slack_bolt}/workflows/step/utilities/async_configure.py | 0 .../slack_bolt}/workflows/step/utilities/async_fail.py | 0 .../slack_bolt}/workflows/step/utilities/async_update.py | 0 .../slack_bolt}/workflows/step/utilities/complete.py | 0 .../slack_bolt}/workflows/step/utilities/configure.py | 0 {slack_bolt => docs/slack_bolt}/workflows/step/utilities/fail.py | 0 .../slack_bolt}/workflows/step/utilities/update.py | 0 229 files changed, 0 insertions(+), 0 deletions(-) rename {slack_bolt => docs/slack_bolt}/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/aiohttp/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/asgi/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/asgi/aiohttp/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/asgi/async_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/asgi/base_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/asgi/builtin/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/asgi/http_request.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/asgi/http_response.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/asgi/utils.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/aws_lambda/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/aws_lambda/chalice_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/aws_lambda/chalice_lazy_listener_runner.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/aws_lambda/handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/aws_lambda/internals.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/aws_lambda/lambda_s3_oauth_flow.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/aws_lambda/lazy_listener_runner.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/aws_lambda/local_lambda_client.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/bottle/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/bottle/handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/cherrypy/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/cherrypy/handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/django/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/django/handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/falcon/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/falcon/async_resource.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/falcon/resource.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/fastapi/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/fastapi/async_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/flask/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/flask/handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/google_cloud_functions/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/google_cloud_functions/handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/pyramid/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/pyramid/handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/sanic/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/sanic/async_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/socket_mode/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/socket_mode/aiohttp/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/socket_mode/async_base_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/socket_mode/async_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/socket_mode/async_internals.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/socket_mode/base_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/socket_mode/builtin/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/socket_mode/internals.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/socket_mode/websocket_client/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/socket_mode/websockets/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/starlette/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/starlette/async_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/starlette/handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/tornado/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/tornado/async_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/tornado/handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/wsgi/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/wsgi/handler.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/wsgi/http_request.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/wsgi/http_response.py (100%) rename {slack_bolt => docs/slack_bolt}/adapter/wsgi/internals.py (100%) rename {slack_bolt => docs/slack_bolt}/app/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/app/app.py (100%) rename {slack_bolt => docs/slack_bolt}/app/async_app.py (100%) rename {slack_bolt => docs/slack_bolt}/app/async_server.py (100%) rename {slack_bolt => docs/slack_bolt}/async_app.py (100%) rename {slack_bolt => docs/slack_bolt}/authorization/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/authorization/async_authorize.py (100%) rename {slack_bolt => docs/slack_bolt}/authorization/async_authorize_args.py (100%) rename {slack_bolt => docs/slack_bolt}/authorization/authorize.py (100%) rename {slack_bolt => docs/slack_bolt}/authorization/authorize_args.py (100%) rename {slack_bolt => docs/slack_bolt}/authorization/authorize_result.py (100%) rename {slack_bolt => docs/slack_bolt}/context/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/context/ack/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/context/ack/ack.py (100%) rename {slack_bolt => docs/slack_bolt}/context/ack/async_ack.py (100%) rename {slack_bolt => docs/slack_bolt}/context/ack/internals.py (100%) rename {slack_bolt => docs/slack_bolt}/context/assistant/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/context/assistant/assistant_utilities.py (100%) rename {slack_bolt => docs/slack_bolt}/context/assistant/async_assistant_utilities.py (100%) rename {slack_bolt => docs/slack_bolt}/context/assistant/internals.py (100%) rename {slack_bolt => docs/slack_bolt}/context/assistant/thread_context/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/context/assistant/thread_context_store/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/context/assistant/thread_context_store/async_store.py (100%) rename {slack_bolt => docs/slack_bolt}/context/assistant/thread_context_store/default_async_store.py (100%) rename {slack_bolt => docs/slack_bolt}/context/assistant/thread_context_store/default_store.py (100%) rename {slack_bolt => docs/slack_bolt}/context/assistant/thread_context_store/file/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/context/assistant/thread_context_store/store.py (100%) rename {slack_bolt => docs/slack_bolt}/context/async_context.py (100%) rename {slack_bolt => docs/slack_bolt}/context/base_context.py (100%) rename {slack_bolt => docs/slack_bolt}/context/complete/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/context/complete/async_complete.py (100%) rename {slack_bolt => docs/slack_bolt}/context/complete/complete.py (100%) rename {slack_bolt => docs/slack_bolt}/context/context.py (100%) rename {slack_bolt => docs/slack_bolt}/context/fail/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/context/fail/async_fail.py (100%) rename {slack_bolt => docs/slack_bolt}/context/fail/fail.py (100%) rename {slack_bolt => docs/slack_bolt}/context/get_thread_context/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/context/get_thread_context/async_get_thread_context.py (100%) rename {slack_bolt => docs/slack_bolt}/context/get_thread_context/get_thread_context.py (100%) rename {slack_bolt => docs/slack_bolt}/context/respond/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/context/respond/async_respond.py (100%) rename {slack_bolt => docs/slack_bolt}/context/respond/internals.py (100%) rename {slack_bolt => docs/slack_bolt}/context/respond/respond.py (100%) rename {slack_bolt => docs/slack_bolt}/context/save_thread_context/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/context/save_thread_context/async_save_thread_context.py (100%) rename {slack_bolt => docs/slack_bolt}/context/save_thread_context/save_thread_context.py (100%) rename {slack_bolt => docs/slack_bolt}/context/say/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/context/say/async_say.py (100%) rename {slack_bolt => docs/slack_bolt}/context/say/internals.py (100%) rename {slack_bolt => docs/slack_bolt}/context/say/say.py (100%) rename {slack_bolt => docs/slack_bolt}/context/set_status/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/context/set_status/async_set_status.py (100%) rename {slack_bolt => docs/slack_bolt}/context/set_status/set_status.py (100%) rename {slack_bolt => docs/slack_bolt}/context/set_suggested_prompts/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/context/set_suggested_prompts/async_set_suggested_prompts.py (100%) rename {slack_bolt => docs/slack_bolt}/context/set_suggested_prompts/set_suggested_prompts.py (100%) rename {slack_bolt => docs/slack_bolt}/context/set_title/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/context/set_title/async_set_title.py (100%) rename {slack_bolt => docs/slack_bolt}/context/set_title/set_title.py (100%) rename {slack_bolt => docs/slack_bolt}/error/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/kwargs_injection/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/kwargs_injection/args.py (100%) rename {slack_bolt => docs/slack_bolt}/kwargs_injection/async_args.py (100%) rename {slack_bolt => docs/slack_bolt}/kwargs_injection/async_utils.py (100%) rename {slack_bolt => docs/slack_bolt}/kwargs_injection/utils.py (100%) rename {slack_bolt => docs/slack_bolt}/lazy_listener/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/lazy_listener/async_internals.py (100%) rename {slack_bolt => docs/slack_bolt}/lazy_listener/async_runner.py (100%) rename {slack_bolt => docs/slack_bolt}/lazy_listener/asyncio_runner.py (100%) rename {slack_bolt => docs/slack_bolt}/lazy_listener/internals.py (100%) rename {slack_bolt => docs/slack_bolt}/lazy_listener/runner.py (100%) rename {slack_bolt => docs/slack_bolt}/lazy_listener/thread_runner.py (100%) rename {slack_bolt => docs/slack_bolt}/listener/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/listener/async_builtins.py (100%) rename {slack_bolt => docs/slack_bolt}/listener/async_listener.py (100%) rename {slack_bolt => docs/slack_bolt}/listener/async_listener_completion_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/listener/async_listener_error_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/listener/async_listener_start_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/listener/asyncio_runner.py (100%) rename {slack_bolt => docs/slack_bolt}/listener/builtins.py (100%) rename {slack_bolt => docs/slack_bolt}/listener/custom_listener.py (100%) rename {slack_bolt => docs/slack_bolt}/listener/listener.py (100%) rename {slack_bolt => docs/slack_bolt}/listener/listener_completion_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/listener/listener_error_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/listener/listener_start_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/listener/thread_runner.py (100%) rename {slack_bolt => docs/slack_bolt}/listener_matcher/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/listener_matcher/async_builtins.py (100%) rename {slack_bolt => docs/slack_bolt}/listener_matcher/async_listener_matcher.py (100%) rename {slack_bolt => docs/slack_bolt}/listener_matcher/builtins.py (100%) rename {slack_bolt => docs/slack_bolt}/listener_matcher/custom_listener_matcher.py (100%) rename {slack_bolt => docs/slack_bolt}/listener_matcher/listener_matcher.py (100%) rename {slack_bolt => docs/slack_bolt}/logger/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/logger/messages.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/assistant/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/assistant/assistant.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/assistant/async_assistant.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/async_builtins.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/async_custom_middleware.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/async_middleware.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/async_middleware_error_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/attaching_function_token/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/attaching_function_token/async_attaching_function_token.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/attaching_function_token/attaching_function_token.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/authorization/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/authorization/async_authorization.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/authorization/async_internals.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/authorization/async_multi_teams_authorization.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/authorization/async_single_team_authorization.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/authorization/authorization.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/authorization/internals.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/authorization/multi_teams_authorization.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/authorization/single_team_authorization.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/custom_middleware.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/ignoring_self_events/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/ignoring_self_events/async_ignoring_self_events.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/ignoring_self_events/ignoring_self_events.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/message_listener_matches/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/message_listener_matches/async_message_listener_matches.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/message_listener_matches/message_listener_matches.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/middleware.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/middleware_error_handler.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/request_verification/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/request_verification/async_request_verification.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/request_verification/request_verification.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/ssl_check/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/ssl_check/async_ssl_check.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/ssl_check/ssl_check.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/url_verification/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/url_verification/async_url_verification.py (100%) rename {slack_bolt => docs/slack_bolt}/middleware/url_verification/url_verification.py (100%) rename {slack_bolt => docs/slack_bolt}/oauth/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/oauth/async_callback_options.py (100%) rename {slack_bolt => docs/slack_bolt}/oauth/async_internals.py (100%) rename {slack_bolt => docs/slack_bolt}/oauth/async_oauth_flow.py (100%) rename {slack_bolt => docs/slack_bolt}/oauth/async_oauth_settings.py (100%) rename {slack_bolt => docs/slack_bolt}/oauth/callback_options.py (100%) rename {slack_bolt => docs/slack_bolt}/oauth/internals.py (100%) rename {slack_bolt => docs/slack_bolt}/oauth/oauth_flow.py (100%) rename {slack_bolt => docs/slack_bolt}/oauth/oauth_settings.py (100%) rename {slack_bolt => docs/slack_bolt}/py.typed (100%) rename {slack_bolt => docs/slack_bolt}/request/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/request/async_internals.py (100%) rename {slack_bolt => docs/slack_bolt}/request/async_request.py (100%) rename {slack_bolt => docs/slack_bolt}/request/internals.py (100%) rename {slack_bolt => docs/slack_bolt}/request/payload_utils.py (100%) rename {slack_bolt => docs/slack_bolt}/request/request.py (100%) rename {slack_bolt => docs/slack_bolt}/response/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/response/response.py (100%) rename {slack_bolt => docs/slack_bolt}/util/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/util/async_utils.py (100%) rename {slack_bolt => docs/slack_bolt}/util/utils.py (100%) rename {slack_bolt => docs/slack_bolt}/version.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/step/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/step/async_step.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/step/async_step_middleware.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/step/internals.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/step/step.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/step/step_middleware.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/step/utilities/__init__.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/step/utilities/async_complete.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/step/utilities/async_configure.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/step/utilities/async_fail.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/step/utilities/async_update.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/step/utilities/complete.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/step/utilities/configure.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/step/utilities/fail.py (100%) rename {slack_bolt => docs/slack_bolt}/workflows/step/utilities/update.py (100%) diff --git a/slack_bolt/__init__.py b/docs/slack_bolt/__init__.py similarity index 100% rename from slack_bolt/__init__.py rename to docs/slack_bolt/__init__.py diff --git a/slack_bolt/adapter/__init__.py b/docs/slack_bolt/adapter/__init__.py similarity index 100% rename from slack_bolt/adapter/__init__.py rename to docs/slack_bolt/adapter/__init__.py diff --git a/slack_bolt/adapter/aiohttp/__init__.py b/docs/slack_bolt/adapter/aiohttp/__init__.py similarity index 100% rename from slack_bolt/adapter/aiohttp/__init__.py rename to docs/slack_bolt/adapter/aiohttp/__init__.py diff --git a/slack_bolt/adapter/asgi/__init__.py b/docs/slack_bolt/adapter/asgi/__init__.py similarity index 100% rename from slack_bolt/adapter/asgi/__init__.py rename to docs/slack_bolt/adapter/asgi/__init__.py diff --git a/slack_bolt/adapter/asgi/aiohttp/__init__.py b/docs/slack_bolt/adapter/asgi/aiohttp/__init__.py similarity index 100% rename from slack_bolt/adapter/asgi/aiohttp/__init__.py rename to docs/slack_bolt/adapter/asgi/aiohttp/__init__.py diff --git a/slack_bolt/adapter/asgi/async_handler.py b/docs/slack_bolt/adapter/asgi/async_handler.py similarity index 100% rename from slack_bolt/adapter/asgi/async_handler.py rename to docs/slack_bolt/adapter/asgi/async_handler.py diff --git a/slack_bolt/adapter/asgi/base_handler.py b/docs/slack_bolt/adapter/asgi/base_handler.py similarity index 100% rename from slack_bolt/adapter/asgi/base_handler.py rename to docs/slack_bolt/adapter/asgi/base_handler.py diff --git a/slack_bolt/adapter/asgi/builtin/__init__.py b/docs/slack_bolt/adapter/asgi/builtin/__init__.py similarity index 100% rename from slack_bolt/adapter/asgi/builtin/__init__.py rename to docs/slack_bolt/adapter/asgi/builtin/__init__.py diff --git a/slack_bolt/adapter/asgi/http_request.py b/docs/slack_bolt/adapter/asgi/http_request.py similarity index 100% rename from slack_bolt/adapter/asgi/http_request.py rename to docs/slack_bolt/adapter/asgi/http_request.py diff --git a/slack_bolt/adapter/asgi/http_response.py b/docs/slack_bolt/adapter/asgi/http_response.py similarity index 100% rename from slack_bolt/adapter/asgi/http_response.py rename to docs/slack_bolt/adapter/asgi/http_response.py diff --git a/slack_bolt/adapter/asgi/utils.py b/docs/slack_bolt/adapter/asgi/utils.py similarity index 100% rename from slack_bolt/adapter/asgi/utils.py rename to docs/slack_bolt/adapter/asgi/utils.py diff --git a/slack_bolt/adapter/aws_lambda/__init__.py b/docs/slack_bolt/adapter/aws_lambda/__init__.py similarity index 100% rename from slack_bolt/adapter/aws_lambda/__init__.py rename to docs/slack_bolt/adapter/aws_lambda/__init__.py diff --git a/slack_bolt/adapter/aws_lambda/chalice_handler.py b/docs/slack_bolt/adapter/aws_lambda/chalice_handler.py similarity index 100% rename from slack_bolt/adapter/aws_lambda/chalice_handler.py rename to docs/slack_bolt/adapter/aws_lambda/chalice_handler.py diff --git a/slack_bolt/adapter/aws_lambda/chalice_lazy_listener_runner.py b/docs/slack_bolt/adapter/aws_lambda/chalice_lazy_listener_runner.py similarity index 100% rename from slack_bolt/adapter/aws_lambda/chalice_lazy_listener_runner.py rename to docs/slack_bolt/adapter/aws_lambda/chalice_lazy_listener_runner.py diff --git a/slack_bolt/adapter/aws_lambda/handler.py b/docs/slack_bolt/adapter/aws_lambda/handler.py similarity index 100% rename from slack_bolt/adapter/aws_lambda/handler.py rename to docs/slack_bolt/adapter/aws_lambda/handler.py diff --git a/slack_bolt/adapter/aws_lambda/internals.py b/docs/slack_bolt/adapter/aws_lambda/internals.py similarity index 100% rename from slack_bolt/adapter/aws_lambda/internals.py rename to docs/slack_bolt/adapter/aws_lambda/internals.py diff --git a/slack_bolt/adapter/aws_lambda/lambda_s3_oauth_flow.py b/docs/slack_bolt/adapter/aws_lambda/lambda_s3_oauth_flow.py similarity index 100% rename from slack_bolt/adapter/aws_lambda/lambda_s3_oauth_flow.py rename to docs/slack_bolt/adapter/aws_lambda/lambda_s3_oauth_flow.py diff --git a/slack_bolt/adapter/aws_lambda/lazy_listener_runner.py b/docs/slack_bolt/adapter/aws_lambda/lazy_listener_runner.py similarity index 100% rename from slack_bolt/adapter/aws_lambda/lazy_listener_runner.py rename to docs/slack_bolt/adapter/aws_lambda/lazy_listener_runner.py diff --git a/slack_bolt/adapter/aws_lambda/local_lambda_client.py b/docs/slack_bolt/adapter/aws_lambda/local_lambda_client.py similarity index 100% rename from slack_bolt/adapter/aws_lambda/local_lambda_client.py rename to docs/slack_bolt/adapter/aws_lambda/local_lambda_client.py diff --git a/slack_bolt/adapter/bottle/__init__.py b/docs/slack_bolt/adapter/bottle/__init__.py similarity index 100% rename from slack_bolt/adapter/bottle/__init__.py rename to docs/slack_bolt/adapter/bottle/__init__.py diff --git a/slack_bolt/adapter/bottle/handler.py b/docs/slack_bolt/adapter/bottle/handler.py similarity index 100% rename from slack_bolt/adapter/bottle/handler.py rename to docs/slack_bolt/adapter/bottle/handler.py diff --git a/slack_bolt/adapter/cherrypy/__init__.py b/docs/slack_bolt/adapter/cherrypy/__init__.py similarity index 100% rename from slack_bolt/adapter/cherrypy/__init__.py rename to docs/slack_bolt/adapter/cherrypy/__init__.py diff --git a/slack_bolt/adapter/cherrypy/handler.py b/docs/slack_bolt/adapter/cherrypy/handler.py similarity index 100% rename from slack_bolt/adapter/cherrypy/handler.py rename to docs/slack_bolt/adapter/cherrypy/handler.py diff --git a/slack_bolt/adapter/django/__init__.py b/docs/slack_bolt/adapter/django/__init__.py similarity index 100% rename from slack_bolt/adapter/django/__init__.py rename to docs/slack_bolt/adapter/django/__init__.py diff --git a/slack_bolt/adapter/django/handler.py b/docs/slack_bolt/adapter/django/handler.py similarity index 100% rename from slack_bolt/adapter/django/handler.py rename to docs/slack_bolt/adapter/django/handler.py diff --git a/slack_bolt/adapter/falcon/__init__.py b/docs/slack_bolt/adapter/falcon/__init__.py similarity index 100% rename from slack_bolt/adapter/falcon/__init__.py rename to docs/slack_bolt/adapter/falcon/__init__.py diff --git a/slack_bolt/adapter/falcon/async_resource.py b/docs/slack_bolt/adapter/falcon/async_resource.py similarity index 100% rename from slack_bolt/adapter/falcon/async_resource.py rename to docs/slack_bolt/adapter/falcon/async_resource.py diff --git a/slack_bolt/adapter/falcon/resource.py b/docs/slack_bolt/adapter/falcon/resource.py similarity index 100% rename from slack_bolt/adapter/falcon/resource.py rename to docs/slack_bolt/adapter/falcon/resource.py diff --git a/slack_bolt/adapter/fastapi/__init__.py b/docs/slack_bolt/adapter/fastapi/__init__.py similarity index 100% rename from slack_bolt/adapter/fastapi/__init__.py rename to docs/slack_bolt/adapter/fastapi/__init__.py diff --git a/slack_bolt/adapter/fastapi/async_handler.py b/docs/slack_bolt/adapter/fastapi/async_handler.py similarity index 100% rename from slack_bolt/adapter/fastapi/async_handler.py rename to docs/slack_bolt/adapter/fastapi/async_handler.py diff --git a/slack_bolt/adapter/flask/__init__.py b/docs/slack_bolt/adapter/flask/__init__.py similarity index 100% rename from slack_bolt/adapter/flask/__init__.py rename to docs/slack_bolt/adapter/flask/__init__.py diff --git a/slack_bolt/adapter/flask/handler.py b/docs/slack_bolt/adapter/flask/handler.py similarity index 100% rename from slack_bolt/adapter/flask/handler.py rename to docs/slack_bolt/adapter/flask/handler.py diff --git a/slack_bolt/adapter/google_cloud_functions/__init__.py b/docs/slack_bolt/adapter/google_cloud_functions/__init__.py similarity index 100% rename from slack_bolt/adapter/google_cloud_functions/__init__.py rename to docs/slack_bolt/adapter/google_cloud_functions/__init__.py diff --git a/slack_bolt/adapter/google_cloud_functions/handler.py b/docs/slack_bolt/adapter/google_cloud_functions/handler.py similarity index 100% rename from slack_bolt/adapter/google_cloud_functions/handler.py rename to docs/slack_bolt/adapter/google_cloud_functions/handler.py diff --git a/slack_bolt/adapter/pyramid/__init__.py b/docs/slack_bolt/adapter/pyramid/__init__.py similarity index 100% rename from slack_bolt/adapter/pyramid/__init__.py rename to docs/slack_bolt/adapter/pyramid/__init__.py diff --git a/slack_bolt/adapter/pyramid/handler.py b/docs/slack_bolt/adapter/pyramid/handler.py similarity index 100% rename from slack_bolt/adapter/pyramid/handler.py rename to docs/slack_bolt/adapter/pyramid/handler.py diff --git a/slack_bolt/adapter/sanic/__init__.py b/docs/slack_bolt/adapter/sanic/__init__.py similarity index 100% rename from slack_bolt/adapter/sanic/__init__.py rename to docs/slack_bolt/adapter/sanic/__init__.py diff --git a/slack_bolt/adapter/sanic/async_handler.py b/docs/slack_bolt/adapter/sanic/async_handler.py similarity index 100% rename from slack_bolt/adapter/sanic/async_handler.py rename to docs/slack_bolt/adapter/sanic/async_handler.py diff --git a/slack_bolt/adapter/socket_mode/__init__.py b/docs/slack_bolt/adapter/socket_mode/__init__.py similarity index 100% rename from slack_bolt/adapter/socket_mode/__init__.py rename to docs/slack_bolt/adapter/socket_mode/__init__.py diff --git a/slack_bolt/adapter/socket_mode/aiohttp/__init__.py b/docs/slack_bolt/adapter/socket_mode/aiohttp/__init__.py similarity index 100% rename from slack_bolt/adapter/socket_mode/aiohttp/__init__.py rename to docs/slack_bolt/adapter/socket_mode/aiohttp/__init__.py diff --git a/slack_bolt/adapter/socket_mode/async_base_handler.py b/docs/slack_bolt/adapter/socket_mode/async_base_handler.py similarity index 100% rename from slack_bolt/adapter/socket_mode/async_base_handler.py rename to docs/slack_bolt/adapter/socket_mode/async_base_handler.py diff --git a/slack_bolt/adapter/socket_mode/async_handler.py b/docs/slack_bolt/adapter/socket_mode/async_handler.py similarity index 100% rename from slack_bolt/adapter/socket_mode/async_handler.py rename to docs/slack_bolt/adapter/socket_mode/async_handler.py diff --git a/slack_bolt/adapter/socket_mode/async_internals.py b/docs/slack_bolt/adapter/socket_mode/async_internals.py similarity index 100% rename from slack_bolt/adapter/socket_mode/async_internals.py rename to docs/slack_bolt/adapter/socket_mode/async_internals.py diff --git a/slack_bolt/adapter/socket_mode/base_handler.py b/docs/slack_bolt/adapter/socket_mode/base_handler.py similarity index 100% rename from slack_bolt/adapter/socket_mode/base_handler.py rename to docs/slack_bolt/adapter/socket_mode/base_handler.py diff --git a/slack_bolt/adapter/socket_mode/builtin/__init__.py b/docs/slack_bolt/adapter/socket_mode/builtin/__init__.py similarity index 100% rename from slack_bolt/adapter/socket_mode/builtin/__init__.py rename to docs/slack_bolt/adapter/socket_mode/builtin/__init__.py diff --git a/slack_bolt/adapter/socket_mode/internals.py b/docs/slack_bolt/adapter/socket_mode/internals.py similarity index 100% rename from slack_bolt/adapter/socket_mode/internals.py rename to docs/slack_bolt/adapter/socket_mode/internals.py diff --git a/slack_bolt/adapter/socket_mode/websocket_client/__init__.py b/docs/slack_bolt/adapter/socket_mode/websocket_client/__init__.py similarity index 100% rename from slack_bolt/adapter/socket_mode/websocket_client/__init__.py rename to docs/slack_bolt/adapter/socket_mode/websocket_client/__init__.py diff --git a/slack_bolt/adapter/socket_mode/websockets/__init__.py b/docs/slack_bolt/adapter/socket_mode/websockets/__init__.py similarity index 100% rename from slack_bolt/adapter/socket_mode/websockets/__init__.py rename to docs/slack_bolt/adapter/socket_mode/websockets/__init__.py diff --git a/slack_bolt/adapter/starlette/__init__.py b/docs/slack_bolt/adapter/starlette/__init__.py similarity index 100% rename from slack_bolt/adapter/starlette/__init__.py rename to docs/slack_bolt/adapter/starlette/__init__.py diff --git a/slack_bolt/adapter/starlette/async_handler.py b/docs/slack_bolt/adapter/starlette/async_handler.py similarity index 100% rename from slack_bolt/adapter/starlette/async_handler.py rename to docs/slack_bolt/adapter/starlette/async_handler.py diff --git a/slack_bolt/adapter/starlette/handler.py b/docs/slack_bolt/adapter/starlette/handler.py similarity index 100% rename from slack_bolt/adapter/starlette/handler.py rename to docs/slack_bolt/adapter/starlette/handler.py diff --git a/slack_bolt/adapter/tornado/__init__.py b/docs/slack_bolt/adapter/tornado/__init__.py similarity index 100% rename from slack_bolt/adapter/tornado/__init__.py rename to docs/slack_bolt/adapter/tornado/__init__.py diff --git a/slack_bolt/adapter/tornado/async_handler.py b/docs/slack_bolt/adapter/tornado/async_handler.py similarity index 100% rename from slack_bolt/adapter/tornado/async_handler.py rename to docs/slack_bolt/adapter/tornado/async_handler.py diff --git a/slack_bolt/adapter/tornado/handler.py b/docs/slack_bolt/adapter/tornado/handler.py similarity index 100% rename from slack_bolt/adapter/tornado/handler.py rename to docs/slack_bolt/adapter/tornado/handler.py diff --git a/slack_bolt/adapter/wsgi/__init__.py b/docs/slack_bolt/adapter/wsgi/__init__.py similarity index 100% rename from slack_bolt/adapter/wsgi/__init__.py rename to docs/slack_bolt/adapter/wsgi/__init__.py diff --git a/slack_bolt/adapter/wsgi/handler.py b/docs/slack_bolt/adapter/wsgi/handler.py similarity index 100% rename from slack_bolt/adapter/wsgi/handler.py rename to docs/slack_bolt/adapter/wsgi/handler.py diff --git a/slack_bolt/adapter/wsgi/http_request.py b/docs/slack_bolt/adapter/wsgi/http_request.py similarity index 100% rename from slack_bolt/adapter/wsgi/http_request.py rename to docs/slack_bolt/adapter/wsgi/http_request.py diff --git a/slack_bolt/adapter/wsgi/http_response.py b/docs/slack_bolt/adapter/wsgi/http_response.py similarity index 100% rename from slack_bolt/adapter/wsgi/http_response.py rename to docs/slack_bolt/adapter/wsgi/http_response.py diff --git a/slack_bolt/adapter/wsgi/internals.py b/docs/slack_bolt/adapter/wsgi/internals.py similarity index 100% rename from slack_bolt/adapter/wsgi/internals.py rename to docs/slack_bolt/adapter/wsgi/internals.py diff --git a/slack_bolt/app/__init__.py b/docs/slack_bolt/app/__init__.py similarity index 100% rename from slack_bolt/app/__init__.py rename to docs/slack_bolt/app/__init__.py diff --git a/slack_bolt/app/app.py b/docs/slack_bolt/app/app.py similarity index 100% rename from slack_bolt/app/app.py rename to docs/slack_bolt/app/app.py diff --git a/slack_bolt/app/async_app.py b/docs/slack_bolt/app/async_app.py similarity index 100% rename from slack_bolt/app/async_app.py rename to docs/slack_bolt/app/async_app.py diff --git a/slack_bolt/app/async_server.py b/docs/slack_bolt/app/async_server.py similarity index 100% rename from slack_bolt/app/async_server.py rename to docs/slack_bolt/app/async_server.py diff --git a/slack_bolt/async_app.py b/docs/slack_bolt/async_app.py similarity index 100% rename from slack_bolt/async_app.py rename to docs/slack_bolt/async_app.py diff --git a/slack_bolt/authorization/__init__.py b/docs/slack_bolt/authorization/__init__.py similarity index 100% rename from slack_bolt/authorization/__init__.py rename to docs/slack_bolt/authorization/__init__.py diff --git a/slack_bolt/authorization/async_authorize.py b/docs/slack_bolt/authorization/async_authorize.py similarity index 100% rename from slack_bolt/authorization/async_authorize.py rename to docs/slack_bolt/authorization/async_authorize.py diff --git a/slack_bolt/authorization/async_authorize_args.py b/docs/slack_bolt/authorization/async_authorize_args.py similarity index 100% rename from slack_bolt/authorization/async_authorize_args.py rename to docs/slack_bolt/authorization/async_authorize_args.py diff --git a/slack_bolt/authorization/authorize.py b/docs/slack_bolt/authorization/authorize.py similarity index 100% rename from slack_bolt/authorization/authorize.py rename to docs/slack_bolt/authorization/authorize.py diff --git a/slack_bolt/authorization/authorize_args.py b/docs/slack_bolt/authorization/authorize_args.py similarity index 100% rename from slack_bolt/authorization/authorize_args.py rename to docs/slack_bolt/authorization/authorize_args.py diff --git a/slack_bolt/authorization/authorize_result.py b/docs/slack_bolt/authorization/authorize_result.py similarity index 100% rename from slack_bolt/authorization/authorize_result.py rename to docs/slack_bolt/authorization/authorize_result.py diff --git a/slack_bolt/context/__init__.py b/docs/slack_bolt/context/__init__.py similarity index 100% rename from slack_bolt/context/__init__.py rename to docs/slack_bolt/context/__init__.py diff --git a/slack_bolt/context/ack/__init__.py b/docs/slack_bolt/context/ack/__init__.py similarity index 100% rename from slack_bolt/context/ack/__init__.py rename to docs/slack_bolt/context/ack/__init__.py diff --git a/slack_bolt/context/ack/ack.py b/docs/slack_bolt/context/ack/ack.py similarity index 100% rename from slack_bolt/context/ack/ack.py rename to docs/slack_bolt/context/ack/ack.py diff --git a/slack_bolt/context/ack/async_ack.py b/docs/slack_bolt/context/ack/async_ack.py similarity index 100% rename from slack_bolt/context/ack/async_ack.py rename to docs/slack_bolt/context/ack/async_ack.py diff --git a/slack_bolt/context/ack/internals.py b/docs/slack_bolt/context/ack/internals.py similarity index 100% rename from slack_bolt/context/ack/internals.py rename to docs/slack_bolt/context/ack/internals.py diff --git a/slack_bolt/context/assistant/__init__.py b/docs/slack_bolt/context/assistant/__init__.py similarity index 100% rename from slack_bolt/context/assistant/__init__.py rename to docs/slack_bolt/context/assistant/__init__.py diff --git a/slack_bolt/context/assistant/assistant_utilities.py b/docs/slack_bolt/context/assistant/assistant_utilities.py similarity index 100% rename from slack_bolt/context/assistant/assistant_utilities.py rename to docs/slack_bolt/context/assistant/assistant_utilities.py diff --git a/slack_bolt/context/assistant/async_assistant_utilities.py b/docs/slack_bolt/context/assistant/async_assistant_utilities.py similarity index 100% rename from slack_bolt/context/assistant/async_assistant_utilities.py rename to docs/slack_bolt/context/assistant/async_assistant_utilities.py diff --git a/slack_bolt/context/assistant/internals.py b/docs/slack_bolt/context/assistant/internals.py similarity index 100% rename from slack_bolt/context/assistant/internals.py rename to docs/slack_bolt/context/assistant/internals.py diff --git a/slack_bolt/context/assistant/thread_context/__init__.py b/docs/slack_bolt/context/assistant/thread_context/__init__.py similarity index 100% rename from slack_bolt/context/assistant/thread_context/__init__.py rename to docs/slack_bolt/context/assistant/thread_context/__init__.py diff --git a/slack_bolt/context/assistant/thread_context_store/__init__.py b/docs/slack_bolt/context/assistant/thread_context_store/__init__.py similarity index 100% rename from slack_bolt/context/assistant/thread_context_store/__init__.py rename to docs/slack_bolt/context/assistant/thread_context_store/__init__.py diff --git a/slack_bolt/context/assistant/thread_context_store/async_store.py b/docs/slack_bolt/context/assistant/thread_context_store/async_store.py similarity index 100% rename from slack_bolt/context/assistant/thread_context_store/async_store.py rename to docs/slack_bolt/context/assistant/thread_context_store/async_store.py diff --git a/slack_bolt/context/assistant/thread_context_store/default_async_store.py b/docs/slack_bolt/context/assistant/thread_context_store/default_async_store.py similarity index 100% rename from slack_bolt/context/assistant/thread_context_store/default_async_store.py rename to docs/slack_bolt/context/assistant/thread_context_store/default_async_store.py diff --git a/slack_bolt/context/assistant/thread_context_store/default_store.py b/docs/slack_bolt/context/assistant/thread_context_store/default_store.py similarity index 100% rename from slack_bolt/context/assistant/thread_context_store/default_store.py rename to docs/slack_bolt/context/assistant/thread_context_store/default_store.py diff --git a/slack_bolt/context/assistant/thread_context_store/file/__init__.py b/docs/slack_bolt/context/assistant/thread_context_store/file/__init__.py similarity index 100% rename from slack_bolt/context/assistant/thread_context_store/file/__init__.py rename to docs/slack_bolt/context/assistant/thread_context_store/file/__init__.py diff --git a/slack_bolt/context/assistant/thread_context_store/store.py b/docs/slack_bolt/context/assistant/thread_context_store/store.py similarity index 100% rename from slack_bolt/context/assistant/thread_context_store/store.py rename to docs/slack_bolt/context/assistant/thread_context_store/store.py diff --git a/slack_bolt/context/async_context.py b/docs/slack_bolt/context/async_context.py similarity index 100% rename from slack_bolt/context/async_context.py rename to docs/slack_bolt/context/async_context.py diff --git a/slack_bolt/context/base_context.py b/docs/slack_bolt/context/base_context.py similarity index 100% rename from slack_bolt/context/base_context.py rename to docs/slack_bolt/context/base_context.py diff --git a/slack_bolt/context/complete/__init__.py b/docs/slack_bolt/context/complete/__init__.py similarity index 100% rename from slack_bolt/context/complete/__init__.py rename to docs/slack_bolt/context/complete/__init__.py diff --git a/slack_bolt/context/complete/async_complete.py b/docs/slack_bolt/context/complete/async_complete.py similarity index 100% rename from slack_bolt/context/complete/async_complete.py rename to docs/slack_bolt/context/complete/async_complete.py diff --git a/slack_bolt/context/complete/complete.py b/docs/slack_bolt/context/complete/complete.py similarity index 100% rename from slack_bolt/context/complete/complete.py rename to docs/slack_bolt/context/complete/complete.py diff --git a/slack_bolt/context/context.py b/docs/slack_bolt/context/context.py similarity index 100% rename from slack_bolt/context/context.py rename to docs/slack_bolt/context/context.py diff --git a/slack_bolt/context/fail/__init__.py b/docs/slack_bolt/context/fail/__init__.py similarity index 100% rename from slack_bolt/context/fail/__init__.py rename to docs/slack_bolt/context/fail/__init__.py diff --git a/slack_bolt/context/fail/async_fail.py b/docs/slack_bolt/context/fail/async_fail.py similarity index 100% rename from slack_bolt/context/fail/async_fail.py rename to docs/slack_bolt/context/fail/async_fail.py diff --git a/slack_bolt/context/fail/fail.py b/docs/slack_bolt/context/fail/fail.py similarity index 100% rename from slack_bolt/context/fail/fail.py rename to docs/slack_bolt/context/fail/fail.py diff --git a/slack_bolt/context/get_thread_context/__init__.py b/docs/slack_bolt/context/get_thread_context/__init__.py similarity index 100% rename from slack_bolt/context/get_thread_context/__init__.py rename to docs/slack_bolt/context/get_thread_context/__init__.py diff --git a/slack_bolt/context/get_thread_context/async_get_thread_context.py b/docs/slack_bolt/context/get_thread_context/async_get_thread_context.py similarity index 100% rename from slack_bolt/context/get_thread_context/async_get_thread_context.py rename to docs/slack_bolt/context/get_thread_context/async_get_thread_context.py diff --git a/slack_bolt/context/get_thread_context/get_thread_context.py b/docs/slack_bolt/context/get_thread_context/get_thread_context.py similarity index 100% rename from slack_bolt/context/get_thread_context/get_thread_context.py rename to docs/slack_bolt/context/get_thread_context/get_thread_context.py diff --git a/slack_bolt/context/respond/__init__.py b/docs/slack_bolt/context/respond/__init__.py similarity index 100% rename from slack_bolt/context/respond/__init__.py rename to docs/slack_bolt/context/respond/__init__.py diff --git a/slack_bolt/context/respond/async_respond.py b/docs/slack_bolt/context/respond/async_respond.py similarity index 100% rename from slack_bolt/context/respond/async_respond.py rename to docs/slack_bolt/context/respond/async_respond.py diff --git a/slack_bolt/context/respond/internals.py b/docs/slack_bolt/context/respond/internals.py similarity index 100% rename from slack_bolt/context/respond/internals.py rename to docs/slack_bolt/context/respond/internals.py diff --git a/slack_bolt/context/respond/respond.py b/docs/slack_bolt/context/respond/respond.py similarity index 100% rename from slack_bolt/context/respond/respond.py rename to docs/slack_bolt/context/respond/respond.py diff --git a/slack_bolt/context/save_thread_context/__init__.py b/docs/slack_bolt/context/save_thread_context/__init__.py similarity index 100% rename from slack_bolt/context/save_thread_context/__init__.py rename to docs/slack_bolt/context/save_thread_context/__init__.py diff --git a/slack_bolt/context/save_thread_context/async_save_thread_context.py b/docs/slack_bolt/context/save_thread_context/async_save_thread_context.py similarity index 100% rename from slack_bolt/context/save_thread_context/async_save_thread_context.py rename to docs/slack_bolt/context/save_thread_context/async_save_thread_context.py diff --git a/slack_bolt/context/save_thread_context/save_thread_context.py b/docs/slack_bolt/context/save_thread_context/save_thread_context.py similarity index 100% rename from slack_bolt/context/save_thread_context/save_thread_context.py rename to docs/slack_bolt/context/save_thread_context/save_thread_context.py diff --git a/slack_bolt/context/say/__init__.py b/docs/slack_bolt/context/say/__init__.py similarity index 100% rename from slack_bolt/context/say/__init__.py rename to docs/slack_bolt/context/say/__init__.py diff --git a/slack_bolt/context/say/async_say.py b/docs/slack_bolt/context/say/async_say.py similarity index 100% rename from slack_bolt/context/say/async_say.py rename to docs/slack_bolt/context/say/async_say.py diff --git a/slack_bolt/context/say/internals.py b/docs/slack_bolt/context/say/internals.py similarity index 100% rename from slack_bolt/context/say/internals.py rename to docs/slack_bolt/context/say/internals.py diff --git a/slack_bolt/context/say/say.py b/docs/slack_bolt/context/say/say.py similarity index 100% rename from slack_bolt/context/say/say.py rename to docs/slack_bolt/context/say/say.py diff --git a/slack_bolt/context/set_status/__init__.py b/docs/slack_bolt/context/set_status/__init__.py similarity index 100% rename from slack_bolt/context/set_status/__init__.py rename to docs/slack_bolt/context/set_status/__init__.py diff --git a/slack_bolt/context/set_status/async_set_status.py b/docs/slack_bolt/context/set_status/async_set_status.py similarity index 100% rename from slack_bolt/context/set_status/async_set_status.py rename to docs/slack_bolt/context/set_status/async_set_status.py diff --git a/slack_bolt/context/set_status/set_status.py b/docs/slack_bolt/context/set_status/set_status.py similarity index 100% rename from slack_bolt/context/set_status/set_status.py rename to docs/slack_bolt/context/set_status/set_status.py diff --git a/slack_bolt/context/set_suggested_prompts/__init__.py b/docs/slack_bolt/context/set_suggested_prompts/__init__.py similarity index 100% rename from slack_bolt/context/set_suggested_prompts/__init__.py rename to docs/slack_bolt/context/set_suggested_prompts/__init__.py diff --git a/slack_bolt/context/set_suggested_prompts/async_set_suggested_prompts.py b/docs/slack_bolt/context/set_suggested_prompts/async_set_suggested_prompts.py similarity index 100% rename from slack_bolt/context/set_suggested_prompts/async_set_suggested_prompts.py rename to docs/slack_bolt/context/set_suggested_prompts/async_set_suggested_prompts.py diff --git a/slack_bolt/context/set_suggested_prompts/set_suggested_prompts.py b/docs/slack_bolt/context/set_suggested_prompts/set_suggested_prompts.py similarity index 100% rename from slack_bolt/context/set_suggested_prompts/set_suggested_prompts.py rename to docs/slack_bolt/context/set_suggested_prompts/set_suggested_prompts.py diff --git a/slack_bolt/context/set_title/__init__.py b/docs/slack_bolt/context/set_title/__init__.py similarity index 100% rename from slack_bolt/context/set_title/__init__.py rename to docs/slack_bolt/context/set_title/__init__.py diff --git a/slack_bolt/context/set_title/async_set_title.py b/docs/slack_bolt/context/set_title/async_set_title.py similarity index 100% rename from slack_bolt/context/set_title/async_set_title.py rename to docs/slack_bolt/context/set_title/async_set_title.py diff --git a/slack_bolt/context/set_title/set_title.py b/docs/slack_bolt/context/set_title/set_title.py similarity index 100% rename from slack_bolt/context/set_title/set_title.py rename to docs/slack_bolt/context/set_title/set_title.py diff --git a/slack_bolt/error/__init__.py b/docs/slack_bolt/error/__init__.py similarity index 100% rename from slack_bolt/error/__init__.py rename to docs/slack_bolt/error/__init__.py diff --git a/slack_bolt/kwargs_injection/__init__.py b/docs/slack_bolt/kwargs_injection/__init__.py similarity index 100% rename from slack_bolt/kwargs_injection/__init__.py rename to docs/slack_bolt/kwargs_injection/__init__.py diff --git a/slack_bolt/kwargs_injection/args.py b/docs/slack_bolt/kwargs_injection/args.py similarity index 100% rename from slack_bolt/kwargs_injection/args.py rename to docs/slack_bolt/kwargs_injection/args.py diff --git a/slack_bolt/kwargs_injection/async_args.py b/docs/slack_bolt/kwargs_injection/async_args.py similarity index 100% rename from slack_bolt/kwargs_injection/async_args.py rename to docs/slack_bolt/kwargs_injection/async_args.py diff --git a/slack_bolt/kwargs_injection/async_utils.py b/docs/slack_bolt/kwargs_injection/async_utils.py similarity index 100% rename from slack_bolt/kwargs_injection/async_utils.py rename to docs/slack_bolt/kwargs_injection/async_utils.py diff --git a/slack_bolt/kwargs_injection/utils.py b/docs/slack_bolt/kwargs_injection/utils.py similarity index 100% rename from slack_bolt/kwargs_injection/utils.py rename to docs/slack_bolt/kwargs_injection/utils.py diff --git a/slack_bolt/lazy_listener/__init__.py b/docs/slack_bolt/lazy_listener/__init__.py similarity index 100% rename from slack_bolt/lazy_listener/__init__.py rename to docs/slack_bolt/lazy_listener/__init__.py diff --git a/slack_bolt/lazy_listener/async_internals.py b/docs/slack_bolt/lazy_listener/async_internals.py similarity index 100% rename from slack_bolt/lazy_listener/async_internals.py rename to docs/slack_bolt/lazy_listener/async_internals.py diff --git a/slack_bolt/lazy_listener/async_runner.py b/docs/slack_bolt/lazy_listener/async_runner.py similarity index 100% rename from slack_bolt/lazy_listener/async_runner.py rename to docs/slack_bolt/lazy_listener/async_runner.py diff --git a/slack_bolt/lazy_listener/asyncio_runner.py b/docs/slack_bolt/lazy_listener/asyncio_runner.py similarity index 100% rename from slack_bolt/lazy_listener/asyncio_runner.py rename to docs/slack_bolt/lazy_listener/asyncio_runner.py diff --git a/slack_bolt/lazy_listener/internals.py b/docs/slack_bolt/lazy_listener/internals.py similarity index 100% rename from slack_bolt/lazy_listener/internals.py rename to docs/slack_bolt/lazy_listener/internals.py diff --git a/slack_bolt/lazy_listener/runner.py b/docs/slack_bolt/lazy_listener/runner.py similarity index 100% rename from slack_bolt/lazy_listener/runner.py rename to docs/slack_bolt/lazy_listener/runner.py diff --git a/slack_bolt/lazy_listener/thread_runner.py b/docs/slack_bolt/lazy_listener/thread_runner.py similarity index 100% rename from slack_bolt/lazy_listener/thread_runner.py rename to docs/slack_bolt/lazy_listener/thread_runner.py diff --git a/slack_bolt/listener/__init__.py b/docs/slack_bolt/listener/__init__.py similarity index 100% rename from slack_bolt/listener/__init__.py rename to docs/slack_bolt/listener/__init__.py diff --git a/slack_bolt/listener/async_builtins.py b/docs/slack_bolt/listener/async_builtins.py similarity index 100% rename from slack_bolt/listener/async_builtins.py rename to docs/slack_bolt/listener/async_builtins.py diff --git a/slack_bolt/listener/async_listener.py b/docs/slack_bolt/listener/async_listener.py similarity index 100% rename from slack_bolt/listener/async_listener.py rename to docs/slack_bolt/listener/async_listener.py diff --git a/slack_bolt/listener/async_listener_completion_handler.py b/docs/slack_bolt/listener/async_listener_completion_handler.py similarity index 100% rename from slack_bolt/listener/async_listener_completion_handler.py rename to docs/slack_bolt/listener/async_listener_completion_handler.py diff --git a/slack_bolt/listener/async_listener_error_handler.py b/docs/slack_bolt/listener/async_listener_error_handler.py similarity index 100% rename from slack_bolt/listener/async_listener_error_handler.py rename to docs/slack_bolt/listener/async_listener_error_handler.py diff --git a/slack_bolt/listener/async_listener_start_handler.py b/docs/slack_bolt/listener/async_listener_start_handler.py similarity index 100% rename from slack_bolt/listener/async_listener_start_handler.py rename to docs/slack_bolt/listener/async_listener_start_handler.py diff --git a/slack_bolt/listener/asyncio_runner.py b/docs/slack_bolt/listener/asyncio_runner.py similarity index 100% rename from slack_bolt/listener/asyncio_runner.py rename to docs/slack_bolt/listener/asyncio_runner.py diff --git a/slack_bolt/listener/builtins.py b/docs/slack_bolt/listener/builtins.py similarity index 100% rename from slack_bolt/listener/builtins.py rename to docs/slack_bolt/listener/builtins.py diff --git a/slack_bolt/listener/custom_listener.py b/docs/slack_bolt/listener/custom_listener.py similarity index 100% rename from slack_bolt/listener/custom_listener.py rename to docs/slack_bolt/listener/custom_listener.py diff --git a/slack_bolt/listener/listener.py b/docs/slack_bolt/listener/listener.py similarity index 100% rename from slack_bolt/listener/listener.py rename to docs/slack_bolt/listener/listener.py diff --git a/slack_bolt/listener/listener_completion_handler.py b/docs/slack_bolt/listener/listener_completion_handler.py similarity index 100% rename from slack_bolt/listener/listener_completion_handler.py rename to docs/slack_bolt/listener/listener_completion_handler.py diff --git a/slack_bolt/listener/listener_error_handler.py b/docs/slack_bolt/listener/listener_error_handler.py similarity index 100% rename from slack_bolt/listener/listener_error_handler.py rename to docs/slack_bolt/listener/listener_error_handler.py diff --git a/slack_bolt/listener/listener_start_handler.py b/docs/slack_bolt/listener/listener_start_handler.py similarity index 100% rename from slack_bolt/listener/listener_start_handler.py rename to docs/slack_bolt/listener/listener_start_handler.py diff --git a/slack_bolt/listener/thread_runner.py b/docs/slack_bolt/listener/thread_runner.py similarity index 100% rename from slack_bolt/listener/thread_runner.py rename to docs/slack_bolt/listener/thread_runner.py diff --git a/slack_bolt/listener_matcher/__init__.py b/docs/slack_bolt/listener_matcher/__init__.py similarity index 100% rename from slack_bolt/listener_matcher/__init__.py rename to docs/slack_bolt/listener_matcher/__init__.py diff --git a/slack_bolt/listener_matcher/async_builtins.py b/docs/slack_bolt/listener_matcher/async_builtins.py similarity index 100% rename from slack_bolt/listener_matcher/async_builtins.py rename to docs/slack_bolt/listener_matcher/async_builtins.py diff --git a/slack_bolt/listener_matcher/async_listener_matcher.py b/docs/slack_bolt/listener_matcher/async_listener_matcher.py similarity index 100% rename from slack_bolt/listener_matcher/async_listener_matcher.py rename to docs/slack_bolt/listener_matcher/async_listener_matcher.py diff --git a/slack_bolt/listener_matcher/builtins.py b/docs/slack_bolt/listener_matcher/builtins.py similarity index 100% rename from slack_bolt/listener_matcher/builtins.py rename to docs/slack_bolt/listener_matcher/builtins.py diff --git a/slack_bolt/listener_matcher/custom_listener_matcher.py b/docs/slack_bolt/listener_matcher/custom_listener_matcher.py similarity index 100% rename from slack_bolt/listener_matcher/custom_listener_matcher.py rename to docs/slack_bolt/listener_matcher/custom_listener_matcher.py diff --git a/slack_bolt/listener_matcher/listener_matcher.py b/docs/slack_bolt/listener_matcher/listener_matcher.py similarity index 100% rename from slack_bolt/listener_matcher/listener_matcher.py rename to docs/slack_bolt/listener_matcher/listener_matcher.py diff --git a/slack_bolt/logger/__init__.py b/docs/slack_bolt/logger/__init__.py similarity index 100% rename from slack_bolt/logger/__init__.py rename to docs/slack_bolt/logger/__init__.py diff --git a/slack_bolt/logger/messages.py b/docs/slack_bolt/logger/messages.py similarity index 100% rename from slack_bolt/logger/messages.py rename to docs/slack_bolt/logger/messages.py diff --git a/slack_bolt/middleware/__init__.py b/docs/slack_bolt/middleware/__init__.py similarity index 100% rename from slack_bolt/middleware/__init__.py rename to docs/slack_bolt/middleware/__init__.py diff --git a/slack_bolt/middleware/assistant/__init__.py b/docs/slack_bolt/middleware/assistant/__init__.py similarity index 100% rename from slack_bolt/middleware/assistant/__init__.py rename to docs/slack_bolt/middleware/assistant/__init__.py diff --git a/slack_bolt/middleware/assistant/assistant.py b/docs/slack_bolt/middleware/assistant/assistant.py similarity index 100% rename from slack_bolt/middleware/assistant/assistant.py rename to docs/slack_bolt/middleware/assistant/assistant.py diff --git a/slack_bolt/middleware/assistant/async_assistant.py b/docs/slack_bolt/middleware/assistant/async_assistant.py similarity index 100% rename from slack_bolt/middleware/assistant/async_assistant.py rename to docs/slack_bolt/middleware/assistant/async_assistant.py diff --git a/slack_bolt/middleware/async_builtins.py b/docs/slack_bolt/middleware/async_builtins.py similarity index 100% rename from slack_bolt/middleware/async_builtins.py rename to docs/slack_bolt/middleware/async_builtins.py diff --git a/slack_bolt/middleware/async_custom_middleware.py b/docs/slack_bolt/middleware/async_custom_middleware.py similarity index 100% rename from slack_bolt/middleware/async_custom_middleware.py rename to docs/slack_bolt/middleware/async_custom_middleware.py diff --git a/slack_bolt/middleware/async_middleware.py b/docs/slack_bolt/middleware/async_middleware.py similarity index 100% rename from slack_bolt/middleware/async_middleware.py rename to docs/slack_bolt/middleware/async_middleware.py diff --git a/slack_bolt/middleware/async_middleware_error_handler.py b/docs/slack_bolt/middleware/async_middleware_error_handler.py similarity index 100% rename from slack_bolt/middleware/async_middleware_error_handler.py rename to docs/slack_bolt/middleware/async_middleware_error_handler.py diff --git a/slack_bolt/middleware/attaching_function_token/__init__.py b/docs/slack_bolt/middleware/attaching_function_token/__init__.py similarity index 100% rename from slack_bolt/middleware/attaching_function_token/__init__.py rename to docs/slack_bolt/middleware/attaching_function_token/__init__.py diff --git a/slack_bolt/middleware/attaching_function_token/async_attaching_function_token.py b/docs/slack_bolt/middleware/attaching_function_token/async_attaching_function_token.py similarity index 100% rename from slack_bolt/middleware/attaching_function_token/async_attaching_function_token.py rename to docs/slack_bolt/middleware/attaching_function_token/async_attaching_function_token.py diff --git a/slack_bolt/middleware/attaching_function_token/attaching_function_token.py b/docs/slack_bolt/middleware/attaching_function_token/attaching_function_token.py similarity index 100% rename from slack_bolt/middleware/attaching_function_token/attaching_function_token.py rename to docs/slack_bolt/middleware/attaching_function_token/attaching_function_token.py diff --git a/slack_bolt/middleware/authorization/__init__.py b/docs/slack_bolt/middleware/authorization/__init__.py similarity index 100% rename from slack_bolt/middleware/authorization/__init__.py rename to docs/slack_bolt/middleware/authorization/__init__.py diff --git a/slack_bolt/middleware/authorization/async_authorization.py b/docs/slack_bolt/middleware/authorization/async_authorization.py similarity index 100% rename from slack_bolt/middleware/authorization/async_authorization.py rename to docs/slack_bolt/middleware/authorization/async_authorization.py diff --git a/slack_bolt/middleware/authorization/async_internals.py b/docs/slack_bolt/middleware/authorization/async_internals.py similarity index 100% rename from slack_bolt/middleware/authorization/async_internals.py rename to docs/slack_bolt/middleware/authorization/async_internals.py diff --git a/slack_bolt/middleware/authorization/async_multi_teams_authorization.py b/docs/slack_bolt/middleware/authorization/async_multi_teams_authorization.py similarity index 100% rename from slack_bolt/middleware/authorization/async_multi_teams_authorization.py rename to docs/slack_bolt/middleware/authorization/async_multi_teams_authorization.py diff --git a/slack_bolt/middleware/authorization/async_single_team_authorization.py b/docs/slack_bolt/middleware/authorization/async_single_team_authorization.py similarity index 100% rename from slack_bolt/middleware/authorization/async_single_team_authorization.py rename to docs/slack_bolt/middleware/authorization/async_single_team_authorization.py diff --git a/slack_bolt/middleware/authorization/authorization.py b/docs/slack_bolt/middleware/authorization/authorization.py similarity index 100% rename from slack_bolt/middleware/authorization/authorization.py rename to docs/slack_bolt/middleware/authorization/authorization.py diff --git a/slack_bolt/middleware/authorization/internals.py b/docs/slack_bolt/middleware/authorization/internals.py similarity index 100% rename from slack_bolt/middleware/authorization/internals.py rename to docs/slack_bolt/middleware/authorization/internals.py diff --git a/slack_bolt/middleware/authorization/multi_teams_authorization.py b/docs/slack_bolt/middleware/authorization/multi_teams_authorization.py similarity index 100% rename from slack_bolt/middleware/authorization/multi_teams_authorization.py rename to docs/slack_bolt/middleware/authorization/multi_teams_authorization.py diff --git a/slack_bolt/middleware/authorization/single_team_authorization.py b/docs/slack_bolt/middleware/authorization/single_team_authorization.py similarity index 100% rename from slack_bolt/middleware/authorization/single_team_authorization.py rename to docs/slack_bolt/middleware/authorization/single_team_authorization.py diff --git a/slack_bolt/middleware/custom_middleware.py b/docs/slack_bolt/middleware/custom_middleware.py similarity index 100% rename from slack_bolt/middleware/custom_middleware.py rename to docs/slack_bolt/middleware/custom_middleware.py diff --git a/slack_bolt/middleware/ignoring_self_events/__init__.py b/docs/slack_bolt/middleware/ignoring_self_events/__init__.py similarity index 100% rename from slack_bolt/middleware/ignoring_self_events/__init__.py rename to docs/slack_bolt/middleware/ignoring_self_events/__init__.py diff --git a/slack_bolt/middleware/ignoring_self_events/async_ignoring_self_events.py b/docs/slack_bolt/middleware/ignoring_self_events/async_ignoring_self_events.py similarity index 100% rename from slack_bolt/middleware/ignoring_self_events/async_ignoring_self_events.py rename to docs/slack_bolt/middleware/ignoring_self_events/async_ignoring_self_events.py diff --git a/slack_bolt/middleware/ignoring_self_events/ignoring_self_events.py b/docs/slack_bolt/middleware/ignoring_self_events/ignoring_self_events.py similarity index 100% rename from slack_bolt/middleware/ignoring_self_events/ignoring_self_events.py rename to docs/slack_bolt/middleware/ignoring_self_events/ignoring_self_events.py diff --git a/slack_bolt/middleware/message_listener_matches/__init__.py b/docs/slack_bolt/middleware/message_listener_matches/__init__.py similarity index 100% rename from slack_bolt/middleware/message_listener_matches/__init__.py rename to docs/slack_bolt/middleware/message_listener_matches/__init__.py diff --git a/slack_bolt/middleware/message_listener_matches/async_message_listener_matches.py b/docs/slack_bolt/middleware/message_listener_matches/async_message_listener_matches.py similarity index 100% rename from slack_bolt/middleware/message_listener_matches/async_message_listener_matches.py rename to docs/slack_bolt/middleware/message_listener_matches/async_message_listener_matches.py diff --git a/slack_bolt/middleware/message_listener_matches/message_listener_matches.py b/docs/slack_bolt/middleware/message_listener_matches/message_listener_matches.py similarity index 100% rename from slack_bolt/middleware/message_listener_matches/message_listener_matches.py rename to docs/slack_bolt/middleware/message_listener_matches/message_listener_matches.py diff --git a/slack_bolt/middleware/middleware.py b/docs/slack_bolt/middleware/middleware.py similarity index 100% rename from slack_bolt/middleware/middleware.py rename to docs/slack_bolt/middleware/middleware.py diff --git a/slack_bolt/middleware/middleware_error_handler.py b/docs/slack_bolt/middleware/middleware_error_handler.py similarity index 100% rename from slack_bolt/middleware/middleware_error_handler.py rename to docs/slack_bolt/middleware/middleware_error_handler.py diff --git a/slack_bolt/middleware/request_verification/__init__.py b/docs/slack_bolt/middleware/request_verification/__init__.py similarity index 100% rename from slack_bolt/middleware/request_verification/__init__.py rename to docs/slack_bolt/middleware/request_verification/__init__.py diff --git a/slack_bolt/middleware/request_verification/async_request_verification.py b/docs/slack_bolt/middleware/request_verification/async_request_verification.py similarity index 100% rename from slack_bolt/middleware/request_verification/async_request_verification.py rename to docs/slack_bolt/middleware/request_verification/async_request_verification.py diff --git a/slack_bolt/middleware/request_verification/request_verification.py b/docs/slack_bolt/middleware/request_verification/request_verification.py similarity index 100% rename from slack_bolt/middleware/request_verification/request_verification.py rename to docs/slack_bolt/middleware/request_verification/request_verification.py diff --git a/slack_bolt/middleware/ssl_check/__init__.py b/docs/slack_bolt/middleware/ssl_check/__init__.py similarity index 100% rename from slack_bolt/middleware/ssl_check/__init__.py rename to docs/slack_bolt/middleware/ssl_check/__init__.py diff --git a/slack_bolt/middleware/ssl_check/async_ssl_check.py b/docs/slack_bolt/middleware/ssl_check/async_ssl_check.py similarity index 100% rename from slack_bolt/middleware/ssl_check/async_ssl_check.py rename to docs/slack_bolt/middleware/ssl_check/async_ssl_check.py diff --git a/slack_bolt/middleware/ssl_check/ssl_check.py b/docs/slack_bolt/middleware/ssl_check/ssl_check.py similarity index 100% rename from slack_bolt/middleware/ssl_check/ssl_check.py rename to docs/slack_bolt/middleware/ssl_check/ssl_check.py diff --git a/slack_bolt/middleware/url_verification/__init__.py b/docs/slack_bolt/middleware/url_verification/__init__.py similarity index 100% rename from slack_bolt/middleware/url_verification/__init__.py rename to docs/slack_bolt/middleware/url_verification/__init__.py diff --git a/slack_bolt/middleware/url_verification/async_url_verification.py b/docs/slack_bolt/middleware/url_verification/async_url_verification.py similarity index 100% rename from slack_bolt/middleware/url_verification/async_url_verification.py rename to docs/slack_bolt/middleware/url_verification/async_url_verification.py diff --git a/slack_bolt/middleware/url_verification/url_verification.py b/docs/slack_bolt/middleware/url_verification/url_verification.py similarity index 100% rename from slack_bolt/middleware/url_verification/url_verification.py rename to docs/slack_bolt/middleware/url_verification/url_verification.py diff --git a/slack_bolt/oauth/__init__.py b/docs/slack_bolt/oauth/__init__.py similarity index 100% rename from slack_bolt/oauth/__init__.py rename to docs/slack_bolt/oauth/__init__.py diff --git a/slack_bolt/oauth/async_callback_options.py b/docs/slack_bolt/oauth/async_callback_options.py similarity index 100% rename from slack_bolt/oauth/async_callback_options.py rename to docs/slack_bolt/oauth/async_callback_options.py diff --git a/slack_bolt/oauth/async_internals.py b/docs/slack_bolt/oauth/async_internals.py similarity index 100% rename from slack_bolt/oauth/async_internals.py rename to docs/slack_bolt/oauth/async_internals.py diff --git a/slack_bolt/oauth/async_oauth_flow.py b/docs/slack_bolt/oauth/async_oauth_flow.py similarity index 100% rename from slack_bolt/oauth/async_oauth_flow.py rename to docs/slack_bolt/oauth/async_oauth_flow.py diff --git a/slack_bolt/oauth/async_oauth_settings.py b/docs/slack_bolt/oauth/async_oauth_settings.py similarity index 100% rename from slack_bolt/oauth/async_oauth_settings.py rename to docs/slack_bolt/oauth/async_oauth_settings.py diff --git a/slack_bolt/oauth/callback_options.py b/docs/slack_bolt/oauth/callback_options.py similarity index 100% rename from slack_bolt/oauth/callback_options.py rename to docs/slack_bolt/oauth/callback_options.py diff --git a/slack_bolt/oauth/internals.py b/docs/slack_bolt/oauth/internals.py similarity index 100% rename from slack_bolt/oauth/internals.py rename to docs/slack_bolt/oauth/internals.py diff --git a/slack_bolt/oauth/oauth_flow.py b/docs/slack_bolt/oauth/oauth_flow.py similarity index 100% rename from slack_bolt/oauth/oauth_flow.py rename to docs/slack_bolt/oauth/oauth_flow.py diff --git a/slack_bolt/oauth/oauth_settings.py b/docs/slack_bolt/oauth/oauth_settings.py similarity index 100% rename from slack_bolt/oauth/oauth_settings.py rename to docs/slack_bolt/oauth/oauth_settings.py diff --git a/slack_bolt/py.typed b/docs/slack_bolt/py.typed similarity index 100% rename from slack_bolt/py.typed rename to docs/slack_bolt/py.typed diff --git a/slack_bolt/request/__init__.py b/docs/slack_bolt/request/__init__.py similarity index 100% rename from slack_bolt/request/__init__.py rename to docs/slack_bolt/request/__init__.py diff --git a/slack_bolt/request/async_internals.py b/docs/slack_bolt/request/async_internals.py similarity index 100% rename from slack_bolt/request/async_internals.py rename to docs/slack_bolt/request/async_internals.py diff --git a/slack_bolt/request/async_request.py b/docs/slack_bolt/request/async_request.py similarity index 100% rename from slack_bolt/request/async_request.py rename to docs/slack_bolt/request/async_request.py diff --git a/slack_bolt/request/internals.py b/docs/slack_bolt/request/internals.py similarity index 100% rename from slack_bolt/request/internals.py rename to docs/slack_bolt/request/internals.py diff --git a/slack_bolt/request/payload_utils.py b/docs/slack_bolt/request/payload_utils.py similarity index 100% rename from slack_bolt/request/payload_utils.py rename to docs/slack_bolt/request/payload_utils.py diff --git a/slack_bolt/request/request.py b/docs/slack_bolt/request/request.py similarity index 100% rename from slack_bolt/request/request.py rename to docs/slack_bolt/request/request.py diff --git a/slack_bolt/response/__init__.py b/docs/slack_bolt/response/__init__.py similarity index 100% rename from slack_bolt/response/__init__.py rename to docs/slack_bolt/response/__init__.py diff --git a/slack_bolt/response/response.py b/docs/slack_bolt/response/response.py similarity index 100% rename from slack_bolt/response/response.py rename to docs/slack_bolt/response/response.py diff --git a/slack_bolt/util/__init__.py b/docs/slack_bolt/util/__init__.py similarity index 100% rename from slack_bolt/util/__init__.py rename to docs/slack_bolt/util/__init__.py diff --git a/slack_bolt/util/async_utils.py b/docs/slack_bolt/util/async_utils.py similarity index 100% rename from slack_bolt/util/async_utils.py rename to docs/slack_bolt/util/async_utils.py diff --git a/slack_bolt/util/utils.py b/docs/slack_bolt/util/utils.py similarity index 100% rename from slack_bolt/util/utils.py rename to docs/slack_bolt/util/utils.py diff --git a/slack_bolt/version.py b/docs/slack_bolt/version.py similarity index 100% rename from slack_bolt/version.py rename to docs/slack_bolt/version.py diff --git a/slack_bolt/workflows/__init__.py b/docs/slack_bolt/workflows/__init__.py similarity index 100% rename from slack_bolt/workflows/__init__.py rename to docs/slack_bolt/workflows/__init__.py diff --git a/slack_bolt/workflows/step/__init__.py b/docs/slack_bolt/workflows/step/__init__.py similarity index 100% rename from slack_bolt/workflows/step/__init__.py rename to docs/slack_bolt/workflows/step/__init__.py diff --git a/slack_bolt/workflows/step/async_step.py b/docs/slack_bolt/workflows/step/async_step.py similarity index 100% rename from slack_bolt/workflows/step/async_step.py rename to docs/slack_bolt/workflows/step/async_step.py diff --git a/slack_bolt/workflows/step/async_step_middleware.py b/docs/slack_bolt/workflows/step/async_step_middleware.py similarity index 100% rename from slack_bolt/workflows/step/async_step_middleware.py rename to docs/slack_bolt/workflows/step/async_step_middleware.py diff --git a/slack_bolt/workflows/step/internals.py b/docs/slack_bolt/workflows/step/internals.py similarity index 100% rename from slack_bolt/workflows/step/internals.py rename to docs/slack_bolt/workflows/step/internals.py diff --git a/slack_bolt/workflows/step/step.py b/docs/slack_bolt/workflows/step/step.py similarity index 100% rename from slack_bolt/workflows/step/step.py rename to docs/slack_bolt/workflows/step/step.py diff --git a/slack_bolt/workflows/step/step_middleware.py b/docs/slack_bolt/workflows/step/step_middleware.py similarity index 100% rename from slack_bolt/workflows/step/step_middleware.py rename to docs/slack_bolt/workflows/step/step_middleware.py diff --git a/slack_bolt/workflows/step/utilities/__init__.py b/docs/slack_bolt/workflows/step/utilities/__init__.py similarity index 100% rename from slack_bolt/workflows/step/utilities/__init__.py rename to docs/slack_bolt/workflows/step/utilities/__init__.py diff --git a/slack_bolt/workflows/step/utilities/async_complete.py b/docs/slack_bolt/workflows/step/utilities/async_complete.py similarity index 100% rename from slack_bolt/workflows/step/utilities/async_complete.py rename to docs/slack_bolt/workflows/step/utilities/async_complete.py diff --git a/slack_bolt/workflows/step/utilities/async_configure.py b/docs/slack_bolt/workflows/step/utilities/async_configure.py similarity index 100% rename from slack_bolt/workflows/step/utilities/async_configure.py rename to docs/slack_bolt/workflows/step/utilities/async_configure.py diff --git a/slack_bolt/workflows/step/utilities/async_fail.py b/docs/slack_bolt/workflows/step/utilities/async_fail.py similarity index 100% rename from slack_bolt/workflows/step/utilities/async_fail.py rename to docs/slack_bolt/workflows/step/utilities/async_fail.py diff --git a/slack_bolt/workflows/step/utilities/async_update.py b/docs/slack_bolt/workflows/step/utilities/async_update.py similarity index 100% rename from slack_bolt/workflows/step/utilities/async_update.py rename to docs/slack_bolt/workflows/step/utilities/async_update.py diff --git a/slack_bolt/workflows/step/utilities/complete.py b/docs/slack_bolt/workflows/step/utilities/complete.py similarity index 100% rename from slack_bolt/workflows/step/utilities/complete.py rename to docs/slack_bolt/workflows/step/utilities/complete.py diff --git a/slack_bolt/workflows/step/utilities/configure.py b/docs/slack_bolt/workflows/step/utilities/configure.py similarity index 100% rename from slack_bolt/workflows/step/utilities/configure.py rename to docs/slack_bolt/workflows/step/utilities/configure.py diff --git a/slack_bolt/workflows/step/utilities/fail.py b/docs/slack_bolt/workflows/step/utilities/fail.py similarity index 100% rename from slack_bolt/workflows/step/utilities/fail.py rename to docs/slack_bolt/workflows/step/utilities/fail.py diff --git a/slack_bolt/workflows/step/utilities/update.py b/docs/slack_bolt/workflows/step/utilities/update.py similarity index 100% rename from slack_bolt/workflows/step/utilities/update.py rename to docs/slack_bolt/workflows/step/utilities/update.py From 64ea7749ee8050664d5f5fc98bd025ebbe9303bb Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 16 Jul 2025 10:22:24 -0700 Subject: [PATCH 12/42] that's not a reference --- {docs/slack_bolt => slack_bolt}/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/aiohttp/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/asgi/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/asgi/aiohttp/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/asgi/async_handler.py | 0 {docs/slack_bolt => slack_bolt}/adapter/asgi/base_handler.py | 0 {docs/slack_bolt => slack_bolt}/adapter/asgi/builtin/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/asgi/http_request.py | 0 {docs/slack_bolt => slack_bolt}/adapter/asgi/http_response.py | 0 {docs/slack_bolt => slack_bolt}/adapter/asgi/utils.py | 0 {docs/slack_bolt => slack_bolt}/adapter/aws_lambda/__init__.py | 0 .../adapter/aws_lambda/chalice_handler.py | 0 .../adapter/aws_lambda/chalice_lazy_listener_runner.py | 0 {docs/slack_bolt => slack_bolt}/adapter/aws_lambda/handler.py | 0 {docs/slack_bolt => slack_bolt}/adapter/aws_lambda/internals.py | 0 .../adapter/aws_lambda/lambda_s3_oauth_flow.py | 0 .../adapter/aws_lambda/lazy_listener_runner.py | 0 .../adapter/aws_lambda/local_lambda_client.py | 0 {docs/slack_bolt => slack_bolt}/adapter/bottle/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/bottle/handler.py | 0 {docs/slack_bolt => slack_bolt}/adapter/cherrypy/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/cherrypy/handler.py | 0 {docs/slack_bolt => slack_bolt}/adapter/django/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/django/handler.py | 0 {docs/slack_bolt => slack_bolt}/adapter/falcon/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/falcon/async_resource.py | 0 {docs/slack_bolt => slack_bolt}/adapter/falcon/resource.py | 0 {docs/slack_bolt => slack_bolt}/adapter/fastapi/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/fastapi/async_handler.py | 0 {docs/slack_bolt => slack_bolt}/adapter/flask/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/flask/handler.py | 0 .../adapter/google_cloud_functions/__init__.py | 0 .../adapter/google_cloud_functions/handler.py | 0 {docs/slack_bolt => slack_bolt}/adapter/pyramid/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/pyramid/handler.py | 0 {docs/slack_bolt => slack_bolt}/adapter/sanic/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/sanic/async_handler.py | 0 {docs/slack_bolt => slack_bolt}/adapter/socket_mode/__init__.py | 0 .../adapter/socket_mode/aiohttp/__init__.py | 0 .../adapter/socket_mode/async_base_handler.py | 0 .../adapter/socket_mode/async_handler.py | 0 .../adapter/socket_mode/async_internals.py | 0 .../slack_bolt => slack_bolt}/adapter/socket_mode/base_handler.py | 0 .../adapter/socket_mode/builtin/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/socket_mode/internals.py | 0 .../adapter/socket_mode/websocket_client/__init__.py | 0 .../adapter/socket_mode/websockets/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/starlette/__init__.py | 0 .../slack_bolt => slack_bolt}/adapter/starlette/async_handler.py | 0 {docs/slack_bolt => slack_bolt}/adapter/starlette/handler.py | 0 {docs/slack_bolt => slack_bolt}/adapter/tornado/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/tornado/async_handler.py | 0 {docs/slack_bolt => slack_bolt}/adapter/tornado/handler.py | 0 {docs/slack_bolt => slack_bolt}/adapter/wsgi/__init__.py | 0 {docs/slack_bolt => slack_bolt}/adapter/wsgi/handler.py | 0 {docs/slack_bolt => slack_bolt}/adapter/wsgi/http_request.py | 0 {docs/slack_bolt => slack_bolt}/adapter/wsgi/http_response.py | 0 {docs/slack_bolt => slack_bolt}/adapter/wsgi/internals.py | 0 {docs/slack_bolt => slack_bolt}/app/__init__.py | 0 {docs/slack_bolt => slack_bolt}/app/app.py | 0 {docs/slack_bolt => slack_bolt}/app/async_app.py | 0 {docs/slack_bolt => slack_bolt}/app/async_server.py | 0 {docs/slack_bolt => slack_bolt}/async_app.py | 0 {docs/slack_bolt => slack_bolt}/authorization/__init__.py | 0 {docs/slack_bolt => slack_bolt}/authorization/async_authorize.py | 0 .../authorization/async_authorize_args.py | 0 {docs/slack_bolt => slack_bolt}/authorization/authorize.py | 0 {docs/slack_bolt => slack_bolt}/authorization/authorize_args.py | 0 {docs/slack_bolt => slack_bolt}/authorization/authorize_result.py | 0 {docs/slack_bolt => slack_bolt}/context/__init__.py | 0 {docs/slack_bolt => slack_bolt}/context/ack/__init__.py | 0 {docs/slack_bolt => slack_bolt}/context/ack/ack.py | 0 {docs/slack_bolt => slack_bolt}/context/ack/async_ack.py | 0 {docs/slack_bolt => slack_bolt}/context/ack/internals.py | 0 {docs/slack_bolt => slack_bolt}/context/assistant/__init__.py | 0 .../context/assistant/assistant_utilities.py | 0 .../context/assistant/async_assistant_utilities.py | 0 {docs/slack_bolt => slack_bolt}/context/assistant/internals.py | 0 .../context/assistant/thread_context/__init__.py | 0 .../context/assistant/thread_context_store/__init__.py | 0 .../context/assistant/thread_context_store/async_store.py | 0 .../context/assistant/thread_context_store/default_async_store.py | 0 .../context/assistant/thread_context_store/default_store.py | 0 .../context/assistant/thread_context_store/file/__init__.py | 0 .../context/assistant/thread_context_store/store.py | 0 {docs/slack_bolt => slack_bolt}/context/async_context.py | 0 {docs/slack_bolt => slack_bolt}/context/base_context.py | 0 {docs/slack_bolt => slack_bolt}/context/complete/__init__.py | 0 .../slack_bolt => slack_bolt}/context/complete/async_complete.py | 0 {docs/slack_bolt => slack_bolt}/context/complete/complete.py | 0 {docs/slack_bolt => slack_bolt}/context/context.py | 0 {docs/slack_bolt => slack_bolt}/context/fail/__init__.py | 0 {docs/slack_bolt => slack_bolt}/context/fail/async_fail.py | 0 {docs/slack_bolt => slack_bolt}/context/fail/fail.py | 0 .../context/get_thread_context/__init__.py | 0 .../context/get_thread_context/async_get_thread_context.py | 0 .../context/get_thread_context/get_thread_context.py | 0 {docs/slack_bolt => slack_bolt}/context/respond/__init__.py | 0 {docs/slack_bolt => slack_bolt}/context/respond/async_respond.py | 0 {docs/slack_bolt => slack_bolt}/context/respond/internals.py | 0 {docs/slack_bolt => slack_bolt}/context/respond/respond.py | 0 .../context/save_thread_context/__init__.py | 0 .../context/save_thread_context/async_save_thread_context.py | 0 .../context/save_thread_context/save_thread_context.py | 0 {docs/slack_bolt => slack_bolt}/context/say/__init__.py | 0 {docs/slack_bolt => slack_bolt}/context/say/async_say.py | 0 {docs/slack_bolt => slack_bolt}/context/say/internals.py | 0 {docs/slack_bolt => slack_bolt}/context/say/say.py | 0 {docs/slack_bolt => slack_bolt}/context/set_status/__init__.py | 0 .../context/set_status/async_set_status.py | 0 {docs/slack_bolt => slack_bolt}/context/set_status/set_status.py | 0 .../context/set_suggested_prompts/__init__.py | 0 .../context/set_suggested_prompts/async_set_suggested_prompts.py | 0 .../context/set_suggested_prompts/set_suggested_prompts.py | 0 {docs/slack_bolt => slack_bolt}/context/set_title/__init__.py | 0 .../context/set_title/async_set_title.py | 0 {docs/slack_bolt => slack_bolt}/context/set_title/set_title.py | 0 {docs/slack_bolt => slack_bolt}/error/__init__.py | 0 {docs/slack_bolt => slack_bolt}/kwargs_injection/__init__.py | 0 {docs/slack_bolt => slack_bolt}/kwargs_injection/args.py | 0 {docs/slack_bolt => slack_bolt}/kwargs_injection/async_args.py | 0 {docs/slack_bolt => slack_bolt}/kwargs_injection/async_utils.py | 0 {docs/slack_bolt => slack_bolt}/kwargs_injection/utils.py | 0 {docs/slack_bolt => slack_bolt}/lazy_listener/__init__.py | 0 {docs/slack_bolt => slack_bolt}/lazy_listener/async_internals.py | 0 {docs/slack_bolt => slack_bolt}/lazy_listener/async_runner.py | 0 {docs/slack_bolt => slack_bolt}/lazy_listener/asyncio_runner.py | 0 {docs/slack_bolt => slack_bolt}/lazy_listener/internals.py | 0 {docs/slack_bolt => slack_bolt}/lazy_listener/runner.py | 0 {docs/slack_bolt => slack_bolt}/lazy_listener/thread_runner.py | 0 {docs/slack_bolt => slack_bolt}/listener/__init__.py | 0 {docs/slack_bolt => slack_bolt}/listener/async_builtins.py | 0 {docs/slack_bolt => slack_bolt}/listener/async_listener.py | 0 .../listener/async_listener_completion_handler.py | 0 .../listener/async_listener_error_handler.py | 0 .../listener/async_listener_start_handler.py | 0 {docs/slack_bolt => slack_bolt}/listener/asyncio_runner.py | 0 {docs/slack_bolt => slack_bolt}/listener/builtins.py | 0 {docs/slack_bolt => slack_bolt}/listener/custom_listener.py | 0 {docs/slack_bolt => slack_bolt}/listener/listener.py | 0 .../listener/listener_completion_handler.py | 0 .../slack_bolt => slack_bolt}/listener/listener_error_handler.py | 0 .../slack_bolt => slack_bolt}/listener/listener_start_handler.py | 0 {docs/slack_bolt => slack_bolt}/listener/thread_runner.py | 0 {docs/slack_bolt => slack_bolt}/listener_matcher/__init__.py | 0 .../slack_bolt => slack_bolt}/listener_matcher/async_builtins.py | 0 .../listener_matcher/async_listener_matcher.py | 0 {docs/slack_bolt => slack_bolt}/listener_matcher/builtins.py | 0 .../listener_matcher/custom_listener_matcher.py | 0 .../listener_matcher/listener_matcher.py | 0 {docs/slack_bolt => slack_bolt}/logger/__init__.py | 0 {docs/slack_bolt => slack_bolt}/logger/messages.py | 0 {docs/slack_bolt => slack_bolt}/middleware/__init__.py | 0 {docs/slack_bolt => slack_bolt}/middleware/assistant/__init__.py | 0 {docs/slack_bolt => slack_bolt}/middleware/assistant/assistant.py | 0 .../middleware/assistant/async_assistant.py | 0 {docs/slack_bolt => slack_bolt}/middleware/async_builtins.py | 0 .../middleware/async_custom_middleware.py | 0 {docs/slack_bolt => slack_bolt}/middleware/async_middleware.py | 0 .../middleware/async_middleware_error_handler.py | 0 .../middleware/attaching_function_token/__init__.py | 0 .../attaching_function_token/async_attaching_function_token.py | 0 .../attaching_function_token/attaching_function_token.py | 0 .../middleware/authorization/__init__.py | 0 .../middleware/authorization/async_authorization.py | 0 .../middleware/authorization/async_internals.py | 0 .../middleware/authorization/async_multi_teams_authorization.py | 0 .../middleware/authorization/async_single_team_authorization.py | 0 .../middleware/authorization/authorization.py | 0 .../middleware/authorization/internals.py | 0 .../middleware/authorization/multi_teams_authorization.py | 0 .../middleware/authorization/single_team_authorization.py | 0 {docs/slack_bolt => slack_bolt}/middleware/custom_middleware.py | 0 .../middleware/ignoring_self_events/__init__.py | 0 .../middleware/ignoring_self_events/async_ignoring_self_events.py | 0 .../middleware/ignoring_self_events/ignoring_self_events.py | 0 .../middleware/message_listener_matches/__init__.py | 0 .../message_listener_matches/async_message_listener_matches.py | 0 .../message_listener_matches/message_listener_matches.py | 0 {docs/slack_bolt => slack_bolt}/middleware/middleware.py | 0 .../middleware/middleware_error_handler.py | 0 .../middleware/request_verification/__init__.py | 0 .../middleware/request_verification/async_request_verification.py | 0 .../middleware/request_verification/request_verification.py | 0 {docs/slack_bolt => slack_bolt}/middleware/ssl_check/__init__.py | 0 .../middleware/ssl_check/async_ssl_check.py | 0 {docs/slack_bolt => slack_bolt}/middleware/ssl_check/ssl_check.py | 0 .../middleware/url_verification/__init__.py | 0 .../middleware/url_verification/async_url_verification.py | 0 .../middleware/url_verification/url_verification.py | 0 {docs/slack_bolt => slack_bolt}/oauth/__init__.py | 0 {docs/slack_bolt => slack_bolt}/oauth/async_callback_options.py | 0 {docs/slack_bolt => slack_bolt}/oauth/async_internals.py | 0 {docs/slack_bolt => slack_bolt}/oauth/async_oauth_flow.py | 0 {docs/slack_bolt => slack_bolt}/oauth/async_oauth_settings.py | 0 {docs/slack_bolt => slack_bolt}/oauth/callback_options.py | 0 {docs/slack_bolt => slack_bolt}/oauth/internals.py | 0 {docs/slack_bolt => slack_bolt}/oauth/oauth_flow.py | 0 {docs/slack_bolt => slack_bolt}/oauth/oauth_settings.py | 0 {docs/slack_bolt => slack_bolt}/py.typed | 0 {docs/slack_bolt => slack_bolt}/request/__init__.py | 0 {docs/slack_bolt => slack_bolt}/request/async_internals.py | 0 {docs/slack_bolt => slack_bolt}/request/async_request.py | 0 {docs/slack_bolt => slack_bolt}/request/internals.py | 0 {docs/slack_bolt => slack_bolt}/request/payload_utils.py | 0 {docs/slack_bolt => slack_bolt}/request/request.py | 0 {docs/slack_bolt => slack_bolt}/response/__init__.py | 0 {docs/slack_bolt => slack_bolt}/response/response.py | 0 {docs/slack_bolt => slack_bolt}/util/__init__.py | 0 {docs/slack_bolt => slack_bolt}/util/async_utils.py | 0 {docs/slack_bolt => slack_bolt}/util/utils.py | 0 {docs/slack_bolt => slack_bolt}/version.py | 0 {docs/slack_bolt => slack_bolt}/workflows/__init__.py | 0 {docs/slack_bolt => slack_bolt}/workflows/step/__init__.py | 0 {docs/slack_bolt => slack_bolt}/workflows/step/async_step.py | 0 .../workflows/step/async_step_middleware.py | 0 {docs/slack_bolt => slack_bolt}/workflows/step/internals.py | 0 {docs/slack_bolt => slack_bolt}/workflows/step/step.py | 0 {docs/slack_bolt => slack_bolt}/workflows/step/step_middleware.py | 0 .../workflows/step/utilities/__init__.py | 0 .../workflows/step/utilities/async_complete.py | 0 .../workflows/step/utilities/async_configure.py | 0 .../workflows/step/utilities/async_fail.py | 0 .../workflows/step/utilities/async_update.py | 0 .../workflows/step/utilities/complete.py | 0 .../workflows/step/utilities/configure.py | 0 {docs/slack_bolt => slack_bolt}/workflows/step/utilities/fail.py | 0 .../slack_bolt => slack_bolt}/workflows/step/utilities/update.py | 0 229 files changed, 0 insertions(+), 0 deletions(-) rename {docs/slack_bolt => slack_bolt}/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/aiohttp/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/asgi/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/asgi/aiohttp/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/asgi/async_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/asgi/base_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/asgi/builtin/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/asgi/http_request.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/asgi/http_response.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/asgi/utils.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/aws_lambda/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/aws_lambda/chalice_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/aws_lambda/chalice_lazy_listener_runner.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/aws_lambda/handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/aws_lambda/internals.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/aws_lambda/lambda_s3_oauth_flow.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/aws_lambda/lazy_listener_runner.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/aws_lambda/local_lambda_client.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/bottle/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/bottle/handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/cherrypy/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/cherrypy/handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/django/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/django/handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/falcon/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/falcon/async_resource.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/falcon/resource.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/fastapi/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/fastapi/async_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/flask/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/flask/handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/google_cloud_functions/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/google_cloud_functions/handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/pyramid/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/pyramid/handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/sanic/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/sanic/async_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/socket_mode/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/socket_mode/aiohttp/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/socket_mode/async_base_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/socket_mode/async_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/socket_mode/async_internals.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/socket_mode/base_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/socket_mode/builtin/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/socket_mode/internals.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/socket_mode/websocket_client/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/socket_mode/websockets/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/starlette/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/starlette/async_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/starlette/handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/tornado/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/tornado/async_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/tornado/handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/wsgi/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/wsgi/handler.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/wsgi/http_request.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/wsgi/http_response.py (100%) rename {docs/slack_bolt => slack_bolt}/adapter/wsgi/internals.py (100%) rename {docs/slack_bolt => slack_bolt}/app/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/app/app.py (100%) rename {docs/slack_bolt => slack_bolt}/app/async_app.py (100%) rename {docs/slack_bolt => slack_bolt}/app/async_server.py (100%) rename {docs/slack_bolt => slack_bolt}/async_app.py (100%) rename {docs/slack_bolt => slack_bolt}/authorization/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/authorization/async_authorize.py (100%) rename {docs/slack_bolt => slack_bolt}/authorization/async_authorize_args.py (100%) rename {docs/slack_bolt => slack_bolt}/authorization/authorize.py (100%) rename {docs/slack_bolt => slack_bolt}/authorization/authorize_args.py (100%) rename {docs/slack_bolt => slack_bolt}/authorization/authorize_result.py (100%) rename {docs/slack_bolt => slack_bolt}/context/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/context/ack/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/context/ack/ack.py (100%) rename {docs/slack_bolt => slack_bolt}/context/ack/async_ack.py (100%) rename {docs/slack_bolt => slack_bolt}/context/ack/internals.py (100%) rename {docs/slack_bolt => slack_bolt}/context/assistant/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/context/assistant/assistant_utilities.py (100%) rename {docs/slack_bolt => slack_bolt}/context/assistant/async_assistant_utilities.py (100%) rename {docs/slack_bolt => slack_bolt}/context/assistant/internals.py (100%) rename {docs/slack_bolt => slack_bolt}/context/assistant/thread_context/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/context/assistant/thread_context_store/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/context/assistant/thread_context_store/async_store.py (100%) rename {docs/slack_bolt => slack_bolt}/context/assistant/thread_context_store/default_async_store.py (100%) rename {docs/slack_bolt => slack_bolt}/context/assistant/thread_context_store/default_store.py (100%) rename {docs/slack_bolt => slack_bolt}/context/assistant/thread_context_store/file/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/context/assistant/thread_context_store/store.py (100%) rename {docs/slack_bolt => slack_bolt}/context/async_context.py (100%) rename {docs/slack_bolt => slack_bolt}/context/base_context.py (100%) rename {docs/slack_bolt => slack_bolt}/context/complete/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/context/complete/async_complete.py (100%) rename {docs/slack_bolt => slack_bolt}/context/complete/complete.py (100%) rename {docs/slack_bolt => slack_bolt}/context/context.py (100%) rename {docs/slack_bolt => slack_bolt}/context/fail/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/context/fail/async_fail.py (100%) rename {docs/slack_bolt => slack_bolt}/context/fail/fail.py (100%) rename {docs/slack_bolt => slack_bolt}/context/get_thread_context/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/context/get_thread_context/async_get_thread_context.py (100%) rename {docs/slack_bolt => slack_bolt}/context/get_thread_context/get_thread_context.py (100%) rename {docs/slack_bolt => slack_bolt}/context/respond/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/context/respond/async_respond.py (100%) rename {docs/slack_bolt => slack_bolt}/context/respond/internals.py (100%) rename {docs/slack_bolt => slack_bolt}/context/respond/respond.py (100%) rename {docs/slack_bolt => slack_bolt}/context/save_thread_context/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/context/save_thread_context/async_save_thread_context.py (100%) rename {docs/slack_bolt => slack_bolt}/context/save_thread_context/save_thread_context.py (100%) rename {docs/slack_bolt => slack_bolt}/context/say/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/context/say/async_say.py (100%) rename {docs/slack_bolt => slack_bolt}/context/say/internals.py (100%) rename {docs/slack_bolt => slack_bolt}/context/say/say.py (100%) rename {docs/slack_bolt => slack_bolt}/context/set_status/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/context/set_status/async_set_status.py (100%) rename {docs/slack_bolt => slack_bolt}/context/set_status/set_status.py (100%) rename {docs/slack_bolt => slack_bolt}/context/set_suggested_prompts/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/context/set_suggested_prompts/async_set_suggested_prompts.py (100%) rename {docs/slack_bolt => slack_bolt}/context/set_suggested_prompts/set_suggested_prompts.py (100%) rename {docs/slack_bolt => slack_bolt}/context/set_title/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/context/set_title/async_set_title.py (100%) rename {docs/slack_bolt => slack_bolt}/context/set_title/set_title.py (100%) rename {docs/slack_bolt => slack_bolt}/error/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/kwargs_injection/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/kwargs_injection/args.py (100%) rename {docs/slack_bolt => slack_bolt}/kwargs_injection/async_args.py (100%) rename {docs/slack_bolt => slack_bolt}/kwargs_injection/async_utils.py (100%) rename {docs/slack_bolt => slack_bolt}/kwargs_injection/utils.py (100%) rename {docs/slack_bolt => slack_bolt}/lazy_listener/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/lazy_listener/async_internals.py (100%) rename {docs/slack_bolt => slack_bolt}/lazy_listener/async_runner.py (100%) rename {docs/slack_bolt => slack_bolt}/lazy_listener/asyncio_runner.py (100%) rename {docs/slack_bolt => slack_bolt}/lazy_listener/internals.py (100%) rename {docs/slack_bolt => slack_bolt}/lazy_listener/runner.py (100%) rename {docs/slack_bolt => slack_bolt}/lazy_listener/thread_runner.py (100%) rename {docs/slack_bolt => slack_bolt}/listener/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/listener/async_builtins.py (100%) rename {docs/slack_bolt => slack_bolt}/listener/async_listener.py (100%) rename {docs/slack_bolt => slack_bolt}/listener/async_listener_completion_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/listener/async_listener_error_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/listener/async_listener_start_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/listener/asyncio_runner.py (100%) rename {docs/slack_bolt => slack_bolt}/listener/builtins.py (100%) rename {docs/slack_bolt => slack_bolt}/listener/custom_listener.py (100%) rename {docs/slack_bolt => slack_bolt}/listener/listener.py (100%) rename {docs/slack_bolt => slack_bolt}/listener/listener_completion_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/listener/listener_error_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/listener/listener_start_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/listener/thread_runner.py (100%) rename {docs/slack_bolt => slack_bolt}/listener_matcher/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/listener_matcher/async_builtins.py (100%) rename {docs/slack_bolt => slack_bolt}/listener_matcher/async_listener_matcher.py (100%) rename {docs/slack_bolt => slack_bolt}/listener_matcher/builtins.py (100%) rename {docs/slack_bolt => slack_bolt}/listener_matcher/custom_listener_matcher.py (100%) rename {docs/slack_bolt => slack_bolt}/listener_matcher/listener_matcher.py (100%) rename {docs/slack_bolt => slack_bolt}/logger/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/logger/messages.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/assistant/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/assistant/assistant.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/assistant/async_assistant.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/async_builtins.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/async_custom_middleware.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/async_middleware.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/async_middleware_error_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/attaching_function_token/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/attaching_function_token/async_attaching_function_token.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/attaching_function_token/attaching_function_token.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/authorization/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/authorization/async_authorization.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/authorization/async_internals.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/authorization/async_multi_teams_authorization.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/authorization/async_single_team_authorization.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/authorization/authorization.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/authorization/internals.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/authorization/multi_teams_authorization.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/authorization/single_team_authorization.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/custom_middleware.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/ignoring_self_events/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/ignoring_self_events/async_ignoring_self_events.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/ignoring_self_events/ignoring_self_events.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/message_listener_matches/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/message_listener_matches/async_message_listener_matches.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/message_listener_matches/message_listener_matches.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/middleware.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/middleware_error_handler.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/request_verification/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/request_verification/async_request_verification.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/request_verification/request_verification.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/ssl_check/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/ssl_check/async_ssl_check.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/ssl_check/ssl_check.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/url_verification/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/url_verification/async_url_verification.py (100%) rename {docs/slack_bolt => slack_bolt}/middleware/url_verification/url_verification.py (100%) rename {docs/slack_bolt => slack_bolt}/oauth/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/oauth/async_callback_options.py (100%) rename {docs/slack_bolt => slack_bolt}/oauth/async_internals.py (100%) rename {docs/slack_bolt => slack_bolt}/oauth/async_oauth_flow.py (100%) rename {docs/slack_bolt => slack_bolt}/oauth/async_oauth_settings.py (100%) rename {docs/slack_bolt => slack_bolt}/oauth/callback_options.py (100%) rename {docs/slack_bolt => slack_bolt}/oauth/internals.py (100%) rename {docs/slack_bolt => slack_bolt}/oauth/oauth_flow.py (100%) rename {docs/slack_bolt => slack_bolt}/oauth/oauth_settings.py (100%) rename {docs/slack_bolt => slack_bolt}/py.typed (100%) rename {docs/slack_bolt => slack_bolt}/request/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/request/async_internals.py (100%) rename {docs/slack_bolt => slack_bolt}/request/async_request.py (100%) rename {docs/slack_bolt => slack_bolt}/request/internals.py (100%) rename {docs/slack_bolt => slack_bolt}/request/payload_utils.py (100%) rename {docs/slack_bolt => slack_bolt}/request/request.py (100%) rename {docs/slack_bolt => slack_bolt}/response/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/response/response.py (100%) rename {docs/slack_bolt => slack_bolt}/util/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/util/async_utils.py (100%) rename {docs/slack_bolt => slack_bolt}/util/utils.py (100%) rename {docs/slack_bolt => slack_bolt}/version.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/step/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/step/async_step.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/step/async_step_middleware.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/step/internals.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/step/step.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/step/step_middleware.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/step/utilities/__init__.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/step/utilities/async_complete.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/step/utilities/async_configure.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/step/utilities/async_fail.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/step/utilities/async_update.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/step/utilities/complete.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/step/utilities/configure.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/step/utilities/fail.py (100%) rename {docs/slack_bolt => slack_bolt}/workflows/step/utilities/update.py (100%) diff --git a/docs/slack_bolt/__init__.py b/slack_bolt/__init__.py similarity index 100% rename from docs/slack_bolt/__init__.py rename to slack_bolt/__init__.py diff --git a/docs/slack_bolt/adapter/__init__.py b/slack_bolt/adapter/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/__init__.py rename to slack_bolt/adapter/__init__.py diff --git a/docs/slack_bolt/adapter/aiohttp/__init__.py b/slack_bolt/adapter/aiohttp/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/aiohttp/__init__.py rename to slack_bolt/adapter/aiohttp/__init__.py diff --git a/docs/slack_bolt/adapter/asgi/__init__.py b/slack_bolt/adapter/asgi/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/asgi/__init__.py rename to slack_bolt/adapter/asgi/__init__.py diff --git a/docs/slack_bolt/adapter/asgi/aiohttp/__init__.py b/slack_bolt/adapter/asgi/aiohttp/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/asgi/aiohttp/__init__.py rename to slack_bolt/adapter/asgi/aiohttp/__init__.py diff --git a/docs/slack_bolt/adapter/asgi/async_handler.py b/slack_bolt/adapter/asgi/async_handler.py similarity index 100% rename from docs/slack_bolt/adapter/asgi/async_handler.py rename to slack_bolt/adapter/asgi/async_handler.py diff --git a/docs/slack_bolt/adapter/asgi/base_handler.py b/slack_bolt/adapter/asgi/base_handler.py similarity index 100% rename from docs/slack_bolt/adapter/asgi/base_handler.py rename to slack_bolt/adapter/asgi/base_handler.py diff --git a/docs/slack_bolt/adapter/asgi/builtin/__init__.py b/slack_bolt/adapter/asgi/builtin/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/asgi/builtin/__init__.py rename to slack_bolt/adapter/asgi/builtin/__init__.py diff --git a/docs/slack_bolt/adapter/asgi/http_request.py b/slack_bolt/adapter/asgi/http_request.py similarity index 100% rename from docs/slack_bolt/adapter/asgi/http_request.py rename to slack_bolt/adapter/asgi/http_request.py diff --git a/docs/slack_bolt/adapter/asgi/http_response.py b/slack_bolt/adapter/asgi/http_response.py similarity index 100% rename from docs/slack_bolt/adapter/asgi/http_response.py rename to slack_bolt/adapter/asgi/http_response.py diff --git a/docs/slack_bolt/adapter/asgi/utils.py b/slack_bolt/adapter/asgi/utils.py similarity index 100% rename from docs/slack_bolt/adapter/asgi/utils.py rename to slack_bolt/adapter/asgi/utils.py diff --git a/docs/slack_bolt/adapter/aws_lambda/__init__.py b/slack_bolt/adapter/aws_lambda/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/aws_lambda/__init__.py rename to slack_bolt/adapter/aws_lambda/__init__.py diff --git a/docs/slack_bolt/adapter/aws_lambda/chalice_handler.py b/slack_bolt/adapter/aws_lambda/chalice_handler.py similarity index 100% rename from docs/slack_bolt/adapter/aws_lambda/chalice_handler.py rename to slack_bolt/adapter/aws_lambda/chalice_handler.py diff --git a/docs/slack_bolt/adapter/aws_lambda/chalice_lazy_listener_runner.py b/slack_bolt/adapter/aws_lambda/chalice_lazy_listener_runner.py similarity index 100% rename from docs/slack_bolt/adapter/aws_lambda/chalice_lazy_listener_runner.py rename to slack_bolt/adapter/aws_lambda/chalice_lazy_listener_runner.py diff --git a/docs/slack_bolt/adapter/aws_lambda/handler.py b/slack_bolt/adapter/aws_lambda/handler.py similarity index 100% rename from docs/slack_bolt/adapter/aws_lambda/handler.py rename to slack_bolt/adapter/aws_lambda/handler.py diff --git a/docs/slack_bolt/adapter/aws_lambda/internals.py b/slack_bolt/adapter/aws_lambda/internals.py similarity index 100% rename from docs/slack_bolt/adapter/aws_lambda/internals.py rename to slack_bolt/adapter/aws_lambda/internals.py diff --git a/docs/slack_bolt/adapter/aws_lambda/lambda_s3_oauth_flow.py b/slack_bolt/adapter/aws_lambda/lambda_s3_oauth_flow.py similarity index 100% rename from docs/slack_bolt/adapter/aws_lambda/lambda_s3_oauth_flow.py rename to slack_bolt/adapter/aws_lambda/lambda_s3_oauth_flow.py diff --git a/docs/slack_bolt/adapter/aws_lambda/lazy_listener_runner.py b/slack_bolt/adapter/aws_lambda/lazy_listener_runner.py similarity index 100% rename from docs/slack_bolt/adapter/aws_lambda/lazy_listener_runner.py rename to slack_bolt/adapter/aws_lambda/lazy_listener_runner.py diff --git a/docs/slack_bolt/adapter/aws_lambda/local_lambda_client.py b/slack_bolt/adapter/aws_lambda/local_lambda_client.py similarity index 100% rename from docs/slack_bolt/adapter/aws_lambda/local_lambda_client.py rename to slack_bolt/adapter/aws_lambda/local_lambda_client.py diff --git a/docs/slack_bolt/adapter/bottle/__init__.py b/slack_bolt/adapter/bottle/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/bottle/__init__.py rename to slack_bolt/adapter/bottle/__init__.py diff --git a/docs/slack_bolt/adapter/bottle/handler.py b/slack_bolt/adapter/bottle/handler.py similarity index 100% rename from docs/slack_bolt/adapter/bottle/handler.py rename to slack_bolt/adapter/bottle/handler.py diff --git a/docs/slack_bolt/adapter/cherrypy/__init__.py b/slack_bolt/adapter/cherrypy/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/cherrypy/__init__.py rename to slack_bolt/adapter/cherrypy/__init__.py diff --git a/docs/slack_bolt/adapter/cherrypy/handler.py b/slack_bolt/adapter/cherrypy/handler.py similarity index 100% rename from docs/slack_bolt/adapter/cherrypy/handler.py rename to slack_bolt/adapter/cherrypy/handler.py diff --git a/docs/slack_bolt/adapter/django/__init__.py b/slack_bolt/adapter/django/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/django/__init__.py rename to slack_bolt/adapter/django/__init__.py diff --git a/docs/slack_bolt/adapter/django/handler.py b/slack_bolt/adapter/django/handler.py similarity index 100% rename from docs/slack_bolt/adapter/django/handler.py rename to slack_bolt/adapter/django/handler.py diff --git a/docs/slack_bolt/adapter/falcon/__init__.py b/slack_bolt/adapter/falcon/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/falcon/__init__.py rename to slack_bolt/adapter/falcon/__init__.py diff --git a/docs/slack_bolt/adapter/falcon/async_resource.py b/slack_bolt/adapter/falcon/async_resource.py similarity index 100% rename from docs/slack_bolt/adapter/falcon/async_resource.py rename to slack_bolt/adapter/falcon/async_resource.py diff --git a/docs/slack_bolt/adapter/falcon/resource.py b/slack_bolt/adapter/falcon/resource.py similarity index 100% rename from docs/slack_bolt/adapter/falcon/resource.py rename to slack_bolt/adapter/falcon/resource.py diff --git a/docs/slack_bolt/adapter/fastapi/__init__.py b/slack_bolt/adapter/fastapi/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/fastapi/__init__.py rename to slack_bolt/adapter/fastapi/__init__.py diff --git a/docs/slack_bolt/adapter/fastapi/async_handler.py b/slack_bolt/adapter/fastapi/async_handler.py similarity index 100% rename from docs/slack_bolt/adapter/fastapi/async_handler.py rename to slack_bolt/adapter/fastapi/async_handler.py diff --git a/docs/slack_bolt/adapter/flask/__init__.py b/slack_bolt/adapter/flask/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/flask/__init__.py rename to slack_bolt/adapter/flask/__init__.py diff --git a/docs/slack_bolt/adapter/flask/handler.py b/slack_bolt/adapter/flask/handler.py similarity index 100% rename from docs/slack_bolt/adapter/flask/handler.py rename to slack_bolt/adapter/flask/handler.py diff --git a/docs/slack_bolt/adapter/google_cloud_functions/__init__.py b/slack_bolt/adapter/google_cloud_functions/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/google_cloud_functions/__init__.py rename to slack_bolt/adapter/google_cloud_functions/__init__.py diff --git a/docs/slack_bolt/adapter/google_cloud_functions/handler.py b/slack_bolt/adapter/google_cloud_functions/handler.py similarity index 100% rename from docs/slack_bolt/adapter/google_cloud_functions/handler.py rename to slack_bolt/adapter/google_cloud_functions/handler.py diff --git a/docs/slack_bolt/adapter/pyramid/__init__.py b/slack_bolt/adapter/pyramid/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/pyramid/__init__.py rename to slack_bolt/adapter/pyramid/__init__.py diff --git a/docs/slack_bolt/adapter/pyramid/handler.py b/slack_bolt/adapter/pyramid/handler.py similarity index 100% rename from docs/slack_bolt/adapter/pyramid/handler.py rename to slack_bolt/adapter/pyramid/handler.py diff --git a/docs/slack_bolt/adapter/sanic/__init__.py b/slack_bolt/adapter/sanic/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/sanic/__init__.py rename to slack_bolt/adapter/sanic/__init__.py diff --git a/docs/slack_bolt/adapter/sanic/async_handler.py b/slack_bolt/adapter/sanic/async_handler.py similarity index 100% rename from docs/slack_bolt/adapter/sanic/async_handler.py rename to slack_bolt/adapter/sanic/async_handler.py diff --git a/docs/slack_bolt/adapter/socket_mode/__init__.py b/slack_bolt/adapter/socket_mode/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/socket_mode/__init__.py rename to slack_bolt/adapter/socket_mode/__init__.py diff --git a/docs/slack_bolt/adapter/socket_mode/aiohttp/__init__.py b/slack_bolt/adapter/socket_mode/aiohttp/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/socket_mode/aiohttp/__init__.py rename to slack_bolt/adapter/socket_mode/aiohttp/__init__.py diff --git a/docs/slack_bolt/adapter/socket_mode/async_base_handler.py b/slack_bolt/adapter/socket_mode/async_base_handler.py similarity index 100% rename from docs/slack_bolt/adapter/socket_mode/async_base_handler.py rename to slack_bolt/adapter/socket_mode/async_base_handler.py diff --git a/docs/slack_bolt/adapter/socket_mode/async_handler.py b/slack_bolt/adapter/socket_mode/async_handler.py similarity index 100% rename from docs/slack_bolt/adapter/socket_mode/async_handler.py rename to slack_bolt/adapter/socket_mode/async_handler.py diff --git a/docs/slack_bolt/adapter/socket_mode/async_internals.py b/slack_bolt/adapter/socket_mode/async_internals.py similarity index 100% rename from docs/slack_bolt/adapter/socket_mode/async_internals.py rename to slack_bolt/adapter/socket_mode/async_internals.py diff --git a/docs/slack_bolt/adapter/socket_mode/base_handler.py b/slack_bolt/adapter/socket_mode/base_handler.py similarity index 100% rename from docs/slack_bolt/adapter/socket_mode/base_handler.py rename to slack_bolt/adapter/socket_mode/base_handler.py diff --git a/docs/slack_bolt/adapter/socket_mode/builtin/__init__.py b/slack_bolt/adapter/socket_mode/builtin/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/socket_mode/builtin/__init__.py rename to slack_bolt/adapter/socket_mode/builtin/__init__.py diff --git a/docs/slack_bolt/adapter/socket_mode/internals.py b/slack_bolt/adapter/socket_mode/internals.py similarity index 100% rename from docs/slack_bolt/adapter/socket_mode/internals.py rename to slack_bolt/adapter/socket_mode/internals.py diff --git a/docs/slack_bolt/adapter/socket_mode/websocket_client/__init__.py b/slack_bolt/adapter/socket_mode/websocket_client/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/socket_mode/websocket_client/__init__.py rename to slack_bolt/adapter/socket_mode/websocket_client/__init__.py diff --git a/docs/slack_bolt/adapter/socket_mode/websockets/__init__.py b/slack_bolt/adapter/socket_mode/websockets/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/socket_mode/websockets/__init__.py rename to slack_bolt/adapter/socket_mode/websockets/__init__.py diff --git a/docs/slack_bolt/adapter/starlette/__init__.py b/slack_bolt/adapter/starlette/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/starlette/__init__.py rename to slack_bolt/adapter/starlette/__init__.py diff --git a/docs/slack_bolt/adapter/starlette/async_handler.py b/slack_bolt/adapter/starlette/async_handler.py similarity index 100% rename from docs/slack_bolt/adapter/starlette/async_handler.py rename to slack_bolt/adapter/starlette/async_handler.py diff --git a/docs/slack_bolt/adapter/starlette/handler.py b/slack_bolt/adapter/starlette/handler.py similarity index 100% rename from docs/slack_bolt/adapter/starlette/handler.py rename to slack_bolt/adapter/starlette/handler.py diff --git a/docs/slack_bolt/adapter/tornado/__init__.py b/slack_bolt/adapter/tornado/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/tornado/__init__.py rename to slack_bolt/adapter/tornado/__init__.py diff --git a/docs/slack_bolt/adapter/tornado/async_handler.py b/slack_bolt/adapter/tornado/async_handler.py similarity index 100% rename from docs/slack_bolt/adapter/tornado/async_handler.py rename to slack_bolt/adapter/tornado/async_handler.py diff --git a/docs/slack_bolt/adapter/tornado/handler.py b/slack_bolt/adapter/tornado/handler.py similarity index 100% rename from docs/slack_bolt/adapter/tornado/handler.py rename to slack_bolt/adapter/tornado/handler.py diff --git a/docs/slack_bolt/adapter/wsgi/__init__.py b/slack_bolt/adapter/wsgi/__init__.py similarity index 100% rename from docs/slack_bolt/adapter/wsgi/__init__.py rename to slack_bolt/adapter/wsgi/__init__.py diff --git a/docs/slack_bolt/adapter/wsgi/handler.py b/slack_bolt/adapter/wsgi/handler.py similarity index 100% rename from docs/slack_bolt/adapter/wsgi/handler.py rename to slack_bolt/adapter/wsgi/handler.py diff --git a/docs/slack_bolt/adapter/wsgi/http_request.py b/slack_bolt/adapter/wsgi/http_request.py similarity index 100% rename from docs/slack_bolt/adapter/wsgi/http_request.py rename to slack_bolt/adapter/wsgi/http_request.py diff --git a/docs/slack_bolt/adapter/wsgi/http_response.py b/slack_bolt/adapter/wsgi/http_response.py similarity index 100% rename from docs/slack_bolt/adapter/wsgi/http_response.py rename to slack_bolt/adapter/wsgi/http_response.py diff --git a/docs/slack_bolt/adapter/wsgi/internals.py b/slack_bolt/adapter/wsgi/internals.py similarity index 100% rename from docs/slack_bolt/adapter/wsgi/internals.py rename to slack_bolt/adapter/wsgi/internals.py diff --git a/docs/slack_bolt/app/__init__.py b/slack_bolt/app/__init__.py similarity index 100% rename from docs/slack_bolt/app/__init__.py rename to slack_bolt/app/__init__.py diff --git a/docs/slack_bolt/app/app.py b/slack_bolt/app/app.py similarity index 100% rename from docs/slack_bolt/app/app.py rename to slack_bolt/app/app.py diff --git a/docs/slack_bolt/app/async_app.py b/slack_bolt/app/async_app.py similarity index 100% rename from docs/slack_bolt/app/async_app.py rename to slack_bolt/app/async_app.py diff --git a/docs/slack_bolt/app/async_server.py b/slack_bolt/app/async_server.py similarity index 100% rename from docs/slack_bolt/app/async_server.py rename to slack_bolt/app/async_server.py diff --git a/docs/slack_bolt/async_app.py b/slack_bolt/async_app.py similarity index 100% rename from docs/slack_bolt/async_app.py rename to slack_bolt/async_app.py diff --git a/docs/slack_bolt/authorization/__init__.py b/slack_bolt/authorization/__init__.py similarity index 100% rename from docs/slack_bolt/authorization/__init__.py rename to slack_bolt/authorization/__init__.py diff --git a/docs/slack_bolt/authorization/async_authorize.py b/slack_bolt/authorization/async_authorize.py similarity index 100% rename from docs/slack_bolt/authorization/async_authorize.py rename to slack_bolt/authorization/async_authorize.py diff --git a/docs/slack_bolt/authorization/async_authorize_args.py b/slack_bolt/authorization/async_authorize_args.py similarity index 100% rename from docs/slack_bolt/authorization/async_authorize_args.py rename to slack_bolt/authorization/async_authorize_args.py diff --git a/docs/slack_bolt/authorization/authorize.py b/slack_bolt/authorization/authorize.py similarity index 100% rename from docs/slack_bolt/authorization/authorize.py rename to slack_bolt/authorization/authorize.py diff --git a/docs/slack_bolt/authorization/authorize_args.py b/slack_bolt/authorization/authorize_args.py similarity index 100% rename from docs/slack_bolt/authorization/authorize_args.py rename to slack_bolt/authorization/authorize_args.py diff --git a/docs/slack_bolt/authorization/authorize_result.py b/slack_bolt/authorization/authorize_result.py similarity index 100% rename from docs/slack_bolt/authorization/authorize_result.py rename to slack_bolt/authorization/authorize_result.py diff --git a/docs/slack_bolt/context/__init__.py b/slack_bolt/context/__init__.py similarity index 100% rename from docs/slack_bolt/context/__init__.py rename to slack_bolt/context/__init__.py diff --git a/docs/slack_bolt/context/ack/__init__.py b/slack_bolt/context/ack/__init__.py similarity index 100% rename from docs/slack_bolt/context/ack/__init__.py rename to slack_bolt/context/ack/__init__.py diff --git a/docs/slack_bolt/context/ack/ack.py b/slack_bolt/context/ack/ack.py similarity index 100% rename from docs/slack_bolt/context/ack/ack.py rename to slack_bolt/context/ack/ack.py diff --git a/docs/slack_bolt/context/ack/async_ack.py b/slack_bolt/context/ack/async_ack.py similarity index 100% rename from docs/slack_bolt/context/ack/async_ack.py rename to slack_bolt/context/ack/async_ack.py diff --git a/docs/slack_bolt/context/ack/internals.py b/slack_bolt/context/ack/internals.py similarity index 100% rename from docs/slack_bolt/context/ack/internals.py rename to slack_bolt/context/ack/internals.py diff --git a/docs/slack_bolt/context/assistant/__init__.py b/slack_bolt/context/assistant/__init__.py similarity index 100% rename from docs/slack_bolt/context/assistant/__init__.py rename to slack_bolt/context/assistant/__init__.py diff --git a/docs/slack_bolt/context/assistant/assistant_utilities.py b/slack_bolt/context/assistant/assistant_utilities.py similarity index 100% rename from docs/slack_bolt/context/assistant/assistant_utilities.py rename to slack_bolt/context/assistant/assistant_utilities.py diff --git a/docs/slack_bolt/context/assistant/async_assistant_utilities.py b/slack_bolt/context/assistant/async_assistant_utilities.py similarity index 100% rename from docs/slack_bolt/context/assistant/async_assistant_utilities.py rename to slack_bolt/context/assistant/async_assistant_utilities.py diff --git a/docs/slack_bolt/context/assistant/internals.py b/slack_bolt/context/assistant/internals.py similarity index 100% rename from docs/slack_bolt/context/assistant/internals.py rename to slack_bolt/context/assistant/internals.py diff --git a/docs/slack_bolt/context/assistant/thread_context/__init__.py b/slack_bolt/context/assistant/thread_context/__init__.py similarity index 100% rename from docs/slack_bolt/context/assistant/thread_context/__init__.py rename to slack_bolt/context/assistant/thread_context/__init__.py diff --git a/docs/slack_bolt/context/assistant/thread_context_store/__init__.py b/slack_bolt/context/assistant/thread_context_store/__init__.py similarity index 100% rename from docs/slack_bolt/context/assistant/thread_context_store/__init__.py rename to slack_bolt/context/assistant/thread_context_store/__init__.py diff --git a/docs/slack_bolt/context/assistant/thread_context_store/async_store.py b/slack_bolt/context/assistant/thread_context_store/async_store.py similarity index 100% rename from docs/slack_bolt/context/assistant/thread_context_store/async_store.py rename to slack_bolt/context/assistant/thread_context_store/async_store.py diff --git a/docs/slack_bolt/context/assistant/thread_context_store/default_async_store.py b/slack_bolt/context/assistant/thread_context_store/default_async_store.py similarity index 100% rename from docs/slack_bolt/context/assistant/thread_context_store/default_async_store.py rename to slack_bolt/context/assistant/thread_context_store/default_async_store.py diff --git a/docs/slack_bolt/context/assistant/thread_context_store/default_store.py b/slack_bolt/context/assistant/thread_context_store/default_store.py similarity index 100% rename from docs/slack_bolt/context/assistant/thread_context_store/default_store.py rename to slack_bolt/context/assistant/thread_context_store/default_store.py diff --git a/docs/slack_bolt/context/assistant/thread_context_store/file/__init__.py b/slack_bolt/context/assistant/thread_context_store/file/__init__.py similarity index 100% rename from docs/slack_bolt/context/assistant/thread_context_store/file/__init__.py rename to slack_bolt/context/assistant/thread_context_store/file/__init__.py diff --git a/docs/slack_bolt/context/assistant/thread_context_store/store.py b/slack_bolt/context/assistant/thread_context_store/store.py similarity index 100% rename from docs/slack_bolt/context/assistant/thread_context_store/store.py rename to slack_bolt/context/assistant/thread_context_store/store.py diff --git a/docs/slack_bolt/context/async_context.py b/slack_bolt/context/async_context.py similarity index 100% rename from docs/slack_bolt/context/async_context.py rename to slack_bolt/context/async_context.py diff --git a/docs/slack_bolt/context/base_context.py b/slack_bolt/context/base_context.py similarity index 100% rename from docs/slack_bolt/context/base_context.py rename to slack_bolt/context/base_context.py diff --git a/docs/slack_bolt/context/complete/__init__.py b/slack_bolt/context/complete/__init__.py similarity index 100% rename from docs/slack_bolt/context/complete/__init__.py rename to slack_bolt/context/complete/__init__.py diff --git a/docs/slack_bolt/context/complete/async_complete.py b/slack_bolt/context/complete/async_complete.py similarity index 100% rename from docs/slack_bolt/context/complete/async_complete.py rename to slack_bolt/context/complete/async_complete.py diff --git a/docs/slack_bolt/context/complete/complete.py b/slack_bolt/context/complete/complete.py similarity index 100% rename from docs/slack_bolt/context/complete/complete.py rename to slack_bolt/context/complete/complete.py diff --git a/docs/slack_bolt/context/context.py b/slack_bolt/context/context.py similarity index 100% rename from docs/slack_bolt/context/context.py rename to slack_bolt/context/context.py diff --git a/docs/slack_bolt/context/fail/__init__.py b/slack_bolt/context/fail/__init__.py similarity index 100% rename from docs/slack_bolt/context/fail/__init__.py rename to slack_bolt/context/fail/__init__.py diff --git a/docs/slack_bolt/context/fail/async_fail.py b/slack_bolt/context/fail/async_fail.py similarity index 100% rename from docs/slack_bolt/context/fail/async_fail.py rename to slack_bolt/context/fail/async_fail.py diff --git a/docs/slack_bolt/context/fail/fail.py b/slack_bolt/context/fail/fail.py similarity index 100% rename from docs/slack_bolt/context/fail/fail.py rename to slack_bolt/context/fail/fail.py diff --git a/docs/slack_bolt/context/get_thread_context/__init__.py b/slack_bolt/context/get_thread_context/__init__.py similarity index 100% rename from docs/slack_bolt/context/get_thread_context/__init__.py rename to slack_bolt/context/get_thread_context/__init__.py diff --git a/docs/slack_bolt/context/get_thread_context/async_get_thread_context.py b/slack_bolt/context/get_thread_context/async_get_thread_context.py similarity index 100% rename from docs/slack_bolt/context/get_thread_context/async_get_thread_context.py rename to slack_bolt/context/get_thread_context/async_get_thread_context.py diff --git a/docs/slack_bolt/context/get_thread_context/get_thread_context.py b/slack_bolt/context/get_thread_context/get_thread_context.py similarity index 100% rename from docs/slack_bolt/context/get_thread_context/get_thread_context.py rename to slack_bolt/context/get_thread_context/get_thread_context.py diff --git a/docs/slack_bolt/context/respond/__init__.py b/slack_bolt/context/respond/__init__.py similarity index 100% rename from docs/slack_bolt/context/respond/__init__.py rename to slack_bolt/context/respond/__init__.py diff --git a/docs/slack_bolt/context/respond/async_respond.py b/slack_bolt/context/respond/async_respond.py similarity index 100% rename from docs/slack_bolt/context/respond/async_respond.py rename to slack_bolt/context/respond/async_respond.py diff --git a/docs/slack_bolt/context/respond/internals.py b/slack_bolt/context/respond/internals.py similarity index 100% rename from docs/slack_bolt/context/respond/internals.py rename to slack_bolt/context/respond/internals.py diff --git a/docs/slack_bolt/context/respond/respond.py b/slack_bolt/context/respond/respond.py similarity index 100% rename from docs/slack_bolt/context/respond/respond.py rename to slack_bolt/context/respond/respond.py diff --git a/docs/slack_bolt/context/save_thread_context/__init__.py b/slack_bolt/context/save_thread_context/__init__.py similarity index 100% rename from docs/slack_bolt/context/save_thread_context/__init__.py rename to slack_bolt/context/save_thread_context/__init__.py diff --git a/docs/slack_bolt/context/save_thread_context/async_save_thread_context.py b/slack_bolt/context/save_thread_context/async_save_thread_context.py similarity index 100% rename from docs/slack_bolt/context/save_thread_context/async_save_thread_context.py rename to slack_bolt/context/save_thread_context/async_save_thread_context.py diff --git a/docs/slack_bolt/context/save_thread_context/save_thread_context.py b/slack_bolt/context/save_thread_context/save_thread_context.py similarity index 100% rename from docs/slack_bolt/context/save_thread_context/save_thread_context.py rename to slack_bolt/context/save_thread_context/save_thread_context.py diff --git a/docs/slack_bolt/context/say/__init__.py b/slack_bolt/context/say/__init__.py similarity index 100% rename from docs/slack_bolt/context/say/__init__.py rename to slack_bolt/context/say/__init__.py diff --git a/docs/slack_bolt/context/say/async_say.py b/slack_bolt/context/say/async_say.py similarity index 100% rename from docs/slack_bolt/context/say/async_say.py rename to slack_bolt/context/say/async_say.py diff --git a/docs/slack_bolt/context/say/internals.py b/slack_bolt/context/say/internals.py similarity index 100% rename from docs/slack_bolt/context/say/internals.py rename to slack_bolt/context/say/internals.py diff --git a/docs/slack_bolt/context/say/say.py b/slack_bolt/context/say/say.py similarity index 100% rename from docs/slack_bolt/context/say/say.py rename to slack_bolt/context/say/say.py diff --git a/docs/slack_bolt/context/set_status/__init__.py b/slack_bolt/context/set_status/__init__.py similarity index 100% rename from docs/slack_bolt/context/set_status/__init__.py rename to slack_bolt/context/set_status/__init__.py diff --git a/docs/slack_bolt/context/set_status/async_set_status.py b/slack_bolt/context/set_status/async_set_status.py similarity index 100% rename from docs/slack_bolt/context/set_status/async_set_status.py rename to slack_bolt/context/set_status/async_set_status.py diff --git a/docs/slack_bolt/context/set_status/set_status.py b/slack_bolt/context/set_status/set_status.py similarity index 100% rename from docs/slack_bolt/context/set_status/set_status.py rename to slack_bolt/context/set_status/set_status.py diff --git a/docs/slack_bolt/context/set_suggested_prompts/__init__.py b/slack_bolt/context/set_suggested_prompts/__init__.py similarity index 100% rename from docs/slack_bolt/context/set_suggested_prompts/__init__.py rename to slack_bolt/context/set_suggested_prompts/__init__.py diff --git a/docs/slack_bolt/context/set_suggested_prompts/async_set_suggested_prompts.py b/slack_bolt/context/set_suggested_prompts/async_set_suggested_prompts.py similarity index 100% rename from docs/slack_bolt/context/set_suggested_prompts/async_set_suggested_prompts.py rename to slack_bolt/context/set_suggested_prompts/async_set_suggested_prompts.py diff --git a/docs/slack_bolt/context/set_suggested_prompts/set_suggested_prompts.py b/slack_bolt/context/set_suggested_prompts/set_suggested_prompts.py similarity index 100% rename from docs/slack_bolt/context/set_suggested_prompts/set_suggested_prompts.py rename to slack_bolt/context/set_suggested_prompts/set_suggested_prompts.py diff --git a/docs/slack_bolt/context/set_title/__init__.py b/slack_bolt/context/set_title/__init__.py similarity index 100% rename from docs/slack_bolt/context/set_title/__init__.py rename to slack_bolt/context/set_title/__init__.py diff --git a/docs/slack_bolt/context/set_title/async_set_title.py b/slack_bolt/context/set_title/async_set_title.py similarity index 100% rename from docs/slack_bolt/context/set_title/async_set_title.py rename to slack_bolt/context/set_title/async_set_title.py diff --git a/docs/slack_bolt/context/set_title/set_title.py b/slack_bolt/context/set_title/set_title.py similarity index 100% rename from docs/slack_bolt/context/set_title/set_title.py rename to slack_bolt/context/set_title/set_title.py diff --git a/docs/slack_bolt/error/__init__.py b/slack_bolt/error/__init__.py similarity index 100% rename from docs/slack_bolt/error/__init__.py rename to slack_bolt/error/__init__.py diff --git a/docs/slack_bolt/kwargs_injection/__init__.py b/slack_bolt/kwargs_injection/__init__.py similarity index 100% rename from docs/slack_bolt/kwargs_injection/__init__.py rename to slack_bolt/kwargs_injection/__init__.py diff --git a/docs/slack_bolt/kwargs_injection/args.py b/slack_bolt/kwargs_injection/args.py similarity index 100% rename from docs/slack_bolt/kwargs_injection/args.py rename to slack_bolt/kwargs_injection/args.py diff --git a/docs/slack_bolt/kwargs_injection/async_args.py b/slack_bolt/kwargs_injection/async_args.py similarity index 100% rename from docs/slack_bolt/kwargs_injection/async_args.py rename to slack_bolt/kwargs_injection/async_args.py diff --git a/docs/slack_bolt/kwargs_injection/async_utils.py b/slack_bolt/kwargs_injection/async_utils.py similarity index 100% rename from docs/slack_bolt/kwargs_injection/async_utils.py rename to slack_bolt/kwargs_injection/async_utils.py diff --git a/docs/slack_bolt/kwargs_injection/utils.py b/slack_bolt/kwargs_injection/utils.py similarity index 100% rename from docs/slack_bolt/kwargs_injection/utils.py rename to slack_bolt/kwargs_injection/utils.py diff --git a/docs/slack_bolt/lazy_listener/__init__.py b/slack_bolt/lazy_listener/__init__.py similarity index 100% rename from docs/slack_bolt/lazy_listener/__init__.py rename to slack_bolt/lazy_listener/__init__.py diff --git a/docs/slack_bolt/lazy_listener/async_internals.py b/slack_bolt/lazy_listener/async_internals.py similarity index 100% rename from docs/slack_bolt/lazy_listener/async_internals.py rename to slack_bolt/lazy_listener/async_internals.py diff --git a/docs/slack_bolt/lazy_listener/async_runner.py b/slack_bolt/lazy_listener/async_runner.py similarity index 100% rename from docs/slack_bolt/lazy_listener/async_runner.py rename to slack_bolt/lazy_listener/async_runner.py diff --git a/docs/slack_bolt/lazy_listener/asyncio_runner.py b/slack_bolt/lazy_listener/asyncio_runner.py similarity index 100% rename from docs/slack_bolt/lazy_listener/asyncio_runner.py rename to slack_bolt/lazy_listener/asyncio_runner.py diff --git a/docs/slack_bolt/lazy_listener/internals.py b/slack_bolt/lazy_listener/internals.py similarity index 100% rename from docs/slack_bolt/lazy_listener/internals.py rename to slack_bolt/lazy_listener/internals.py diff --git a/docs/slack_bolt/lazy_listener/runner.py b/slack_bolt/lazy_listener/runner.py similarity index 100% rename from docs/slack_bolt/lazy_listener/runner.py rename to slack_bolt/lazy_listener/runner.py diff --git a/docs/slack_bolt/lazy_listener/thread_runner.py b/slack_bolt/lazy_listener/thread_runner.py similarity index 100% rename from docs/slack_bolt/lazy_listener/thread_runner.py rename to slack_bolt/lazy_listener/thread_runner.py diff --git a/docs/slack_bolt/listener/__init__.py b/slack_bolt/listener/__init__.py similarity index 100% rename from docs/slack_bolt/listener/__init__.py rename to slack_bolt/listener/__init__.py diff --git a/docs/slack_bolt/listener/async_builtins.py b/slack_bolt/listener/async_builtins.py similarity index 100% rename from docs/slack_bolt/listener/async_builtins.py rename to slack_bolt/listener/async_builtins.py diff --git a/docs/slack_bolt/listener/async_listener.py b/slack_bolt/listener/async_listener.py similarity index 100% rename from docs/slack_bolt/listener/async_listener.py rename to slack_bolt/listener/async_listener.py diff --git a/docs/slack_bolt/listener/async_listener_completion_handler.py b/slack_bolt/listener/async_listener_completion_handler.py similarity index 100% rename from docs/slack_bolt/listener/async_listener_completion_handler.py rename to slack_bolt/listener/async_listener_completion_handler.py diff --git a/docs/slack_bolt/listener/async_listener_error_handler.py b/slack_bolt/listener/async_listener_error_handler.py similarity index 100% rename from docs/slack_bolt/listener/async_listener_error_handler.py rename to slack_bolt/listener/async_listener_error_handler.py diff --git a/docs/slack_bolt/listener/async_listener_start_handler.py b/slack_bolt/listener/async_listener_start_handler.py similarity index 100% rename from docs/slack_bolt/listener/async_listener_start_handler.py rename to slack_bolt/listener/async_listener_start_handler.py diff --git a/docs/slack_bolt/listener/asyncio_runner.py b/slack_bolt/listener/asyncio_runner.py similarity index 100% rename from docs/slack_bolt/listener/asyncio_runner.py rename to slack_bolt/listener/asyncio_runner.py diff --git a/docs/slack_bolt/listener/builtins.py b/slack_bolt/listener/builtins.py similarity index 100% rename from docs/slack_bolt/listener/builtins.py rename to slack_bolt/listener/builtins.py diff --git a/docs/slack_bolt/listener/custom_listener.py b/slack_bolt/listener/custom_listener.py similarity index 100% rename from docs/slack_bolt/listener/custom_listener.py rename to slack_bolt/listener/custom_listener.py diff --git a/docs/slack_bolt/listener/listener.py b/slack_bolt/listener/listener.py similarity index 100% rename from docs/slack_bolt/listener/listener.py rename to slack_bolt/listener/listener.py diff --git a/docs/slack_bolt/listener/listener_completion_handler.py b/slack_bolt/listener/listener_completion_handler.py similarity index 100% rename from docs/slack_bolt/listener/listener_completion_handler.py rename to slack_bolt/listener/listener_completion_handler.py diff --git a/docs/slack_bolt/listener/listener_error_handler.py b/slack_bolt/listener/listener_error_handler.py similarity index 100% rename from docs/slack_bolt/listener/listener_error_handler.py rename to slack_bolt/listener/listener_error_handler.py diff --git a/docs/slack_bolt/listener/listener_start_handler.py b/slack_bolt/listener/listener_start_handler.py similarity index 100% rename from docs/slack_bolt/listener/listener_start_handler.py rename to slack_bolt/listener/listener_start_handler.py diff --git a/docs/slack_bolt/listener/thread_runner.py b/slack_bolt/listener/thread_runner.py similarity index 100% rename from docs/slack_bolt/listener/thread_runner.py rename to slack_bolt/listener/thread_runner.py diff --git a/docs/slack_bolt/listener_matcher/__init__.py b/slack_bolt/listener_matcher/__init__.py similarity index 100% rename from docs/slack_bolt/listener_matcher/__init__.py rename to slack_bolt/listener_matcher/__init__.py diff --git a/docs/slack_bolt/listener_matcher/async_builtins.py b/slack_bolt/listener_matcher/async_builtins.py similarity index 100% rename from docs/slack_bolt/listener_matcher/async_builtins.py rename to slack_bolt/listener_matcher/async_builtins.py diff --git a/docs/slack_bolt/listener_matcher/async_listener_matcher.py b/slack_bolt/listener_matcher/async_listener_matcher.py similarity index 100% rename from docs/slack_bolt/listener_matcher/async_listener_matcher.py rename to slack_bolt/listener_matcher/async_listener_matcher.py diff --git a/docs/slack_bolt/listener_matcher/builtins.py b/slack_bolt/listener_matcher/builtins.py similarity index 100% rename from docs/slack_bolt/listener_matcher/builtins.py rename to slack_bolt/listener_matcher/builtins.py diff --git a/docs/slack_bolt/listener_matcher/custom_listener_matcher.py b/slack_bolt/listener_matcher/custom_listener_matcher.py similarity index 100% rename from docs/slack_bolt/listener_matcher/custom_listener_matcher.py rename to slack_bolt/listener_matcher/custom_listener_matcher.py diff --git a/docs/slack_bolt/listener_matcher/listener_matcher.py b/slack_bolt/listener_matcher/listener_matcher.py similarity index 100% rename from docs/slack_bolt/listener_matcher/listener_matcher.py rename to slack_bolt/listener_matcher/listener_matcher.py diff --git a/docs/slack_bolt/logger/__init__.py b/slack_bolt/logger/__init__.py similarity index 100% rename from docs/slack_bolt/logger/__init__.py rename to slack_bolt/logger/__init__.py diff --git a/docs/slack_bolt/logger/messages.py b/slack_bolt/logger/messages.py similarity index 100% rename from docs/slack_bolt/logger/messages.py rename to slack_bolt/logger/messages.py diff --git a/docs/slack_bolt/middleware/__init__.py b/slack_bolt/middleware/__init__.py similarity index 100% rename from docs/slack_bolt/middleware/__init__.py rename to slack_bolt/middleware/__init__.py diff --git a/docs/slack_bolt/middleware/assistant/__init__.py b/slack_bolt/middleware/assistant/__init__.py similarity index 100% rename from docs/slack_bolt/middleware/assistant/__init__.py rename to slack_bolt/middleware/assistant/__init__.py diff --git a/docs/slack_bolt/middleware/assistant/assistant.py b/slack_bolt/middleware/assistant/assistant.py similarity index 100% rename from docs/slack_bolt/middleware/assistant/assistant.py rename to slack_bolt/middleware/assistant/assistant.py diff --git a/docs/slack_bolt/middleware/assistant/async_assistant.py b/slack_bolt/middleware/assistant/async_assistant.py similarity index 100% rename from docs/slack_bolt/middleware/assistant/async_assistant.py rename to slack_bolt/middleware/assistant/async_assistant.py diff --git a/docs/slack_bolt/middleware/async_builtins.py b/slack_bolt/middleware/async_builtins.py similarity index 100% rename from docs/slack_bolt/middleware/async_builtins.py rename to slack_bolt/middleware/async_builtins.py diff --git a/docs/slack_bolt/middleware/async_custom_middleware.py b/slack_bolt/middleware/async_custom_middleware.py similarity index 100% rename from docs/slack_bolt/middleware/async_custom_middleware.py rename to slack_bolt/middleware/async_custom_middleware.py diff --git a/docs/slack_bolt/middleware/async_middleware.py b/slack_bolt/middleware/async_middleware.py similarity index 100% rename from docs/slack_bolt/middleware/async_middleware.py rename to slack_bolt/middleware/async_middleware.py diff --git a/docs/slack_bolt/middleware/async_middleware_error_handler.py b/slack_bolt/middleware/async_middleware_error_handler.py similarity index 100% rename from docs/slack_bolt/middleware/async_middleware_error_handler.py rename to slack_bolt/middleware/async_middleware_error_handler.py diff --git a/docs/slack_bolt/middleware/attaching_function_token/__init__.py b/slack_bolt/middleware/attaching_function_token/__init__.py similarity index 100% rename from docs/slack_bolt/middleware/attaching_function_token/__init__.py rename to slack_bolt/middleware/attaching_function_token/__init__.py diff --git a/docs/slack_bolt/middleware/attaching_function_token/async_attaching_function_token.py b/slack_bolt/middleware/attaching_function_token/async_attaching_function_token.py similarity index 100% rename from docs/slack_bolt/middleware/attaching_function_token/async_attaching_function_token.py rename to slack_bolt/middleware/attaching_function_token/async_attaching_function_token.py diff --git a/docs/slack_bolt/middleware/attaching_function_token/attaching_function_token.py b/slack_bolt/middleware/attaching_function_token/attaching_function_token.py similarity index 100% rename from docs/slack_bolt/middleware/attaching_function_token/attaching_function_token.py rename to slack_bolt/middleware/attaching_function_token/attaching_function_token.py diff --git a/docs/slack_bolt/middleware/authorization/__init__.py b/slack_bolt/middleware/authorization/__init__.py similarity index 100% rename from docs/slack_bolt/middleware/authorization/__init__.py rename to slack_bolt/middleware/authorization/__init__.py diff --git a/docs/slack_bolt/middleware/authorization/async_authorization.py b/slack_bolt/middleware/authorization/async_authorization.py similarity index 100% rename from docs/slack_bolt/middleware/authorization/async_authorization.py rename to slack_bolt/middleware/authorization/async_authorization.py diff --git a/docs/slack_bolt/middleware/authorization/async_internals.py b/slack_bolt/middleware/authorization/async_internals.py similarity index 100% rename from docs/slack_bolt/middleware/authorization/async_internals.py rename to slack_bolt/middleware/authorization/async_internals.py diff --git a/docs/slack_bolt/middleware/authorization/async_multi_teams_authorization.py b/slack_bolt/middleware/authorization/async_multi_teams_authorization.py similarity index 100% rename from docs/slack_bolt/middleware/authorization/async_multi_teams_authorization.py rename to slack_bolt/middleware/authorization/async_multi_teams_authorization.py diff --git a/docs/slack_bolt/middleware/authorization/async_single_team_authorization.py b/slack_bolt/middleware/authorization/async_single_team_authorization.py similarity index 100% rename from docs/slack_bolt/middleware/authorization/async_single_team_authorization.py rename to slack_bolt/middleware/authorization/async_single_team_authorization.py diff --git a/docs/slack_bolt/middleware/authorization/authorization.py b/slack_bolt/middleware/authorization/authorization.py similarity index 100% rename from docs/slack_bolt/middleware/authorization/authorization.py rename to slack_bolt/middleware/authorization/authorization.py diff --git a/docs/slack_bolt/middleware/authorization/internals.py b/slack_bolt/middleware/authorization/internals.py similarity index 100% rename from docs/slack_bolt/middleware/authorization/internals.py rename to slack_bolt/middleware/authorization/internals.py diff --git a/docs/slack_bolt/middleware/authorization/multi_teams_authorization.py b/slack_bolt/middleware/authorization/multi_teams_authorization.py similarity index 100% rename from docs/slack_bolt/middleware/authorization/multi_teams_authorization.py rename to slack_bolt/middleware/authorization/multi_teams_authorization.py diff --git a/docs/slack_bolt/middleware/authorization/single_team_authorization.py b/slack_bolt/middleware/authorization/single_team_authorization.py similarity index 100% rename from docs/slack_bolt/middleware/authorization/single_team_authorization.py rename to slack_bolt/middleware/authorization/single_team_authorization.py diff --git a/docs/slack_bolt/middleware/custom_middleware.py b/slack_bolt/middleware/custom_middleware.py similarity index 100% rename from docs/slack_bolt/middleware/custom_middleware.py rename to slack_bolt/middleware/custom_middleware.py diff --git a/docs/slack_bolt/middleware/ignoring_self_events/__init__.py b/slack_bolt/middleware/ignoring_self_events/__init__.py similarity index 100% rename from docs/slack_bolt/middleware/ignoring_self_events/__init__.py rename to slack_bolt/middleware/ignoring_self_events/__init__.py diff --git a/docs/slack_bolt/middleware/ignoring_self_events/async_ignoring_self_events.py b/slack_bolt/middleware/ignoring_self_events/async_ignoring_self_events.py similarity index 100% rename from docs/slack_bolt/middleware/ignoring_self_events/async_ignoring_self_events.py rename to slack_bolt/middleware/ignoring_self_events/async_ignoring_self_events.py diff --git a/docs/slack_bolt/middleware/ignoring_self_events/ignoring_self_events.py b/slack_bolt/middleware/ignoring_self_events/ignoring_self_events.py similarity index 100% rename from docs/slack_bolt/middleware/ignoring_self_events/ignoring_self_events.py rename to slack_bolt/middleware/ignoring_self_events/ignoring_self_events.py diff --git a/docs/slack_bolt/middleware/message_listener_matches/__init__.py b/slack_bolt/middleware/message_listener_matches/__init__.py similarity index 100% rename from docs/slack_bolt/middleware/message_listener_matches/__init__.py rename to slack_bolt/middleware/message_listener_matches/__init__.py diff --git a/docs/slack_bolt/middleware/message_listener_matches/async_message_listener_matches.py b/slack_bolt/middleware/message_listener_matches/async_message_listener_matches.py similarity index 100% rename from docs/slack_bolt/middleware/message_listener_matches/async_message_listener_matches.py rename to slack_bolt/middleware/message_listener_matches/async_message_listener_matches.py diff --git a/docs/slack_bolt/middleware/message_listener_matches/message_listener_matches.py b/slack_bolt/middleware/message_listener_matches/message_listener_matches.py similarity index 100% rename from docs/slack_bolt/middleware/message_listener_matches/message_listener_matches.py rename to slack_bolt/middleware/message_listener_matches/message_listener_matches.py diff --git a/docs/slack_bolt/middleware/middleware.py b/slack_bolt/middleware/middleware.py similarity index 100% rename from docs/slack_bolt/middleware/middleware.py rename to slack_bolt/middleware/middleware.py diff --git a/docs/slack_bolt/middleware/middleware_error_handler.py b/slack_bolt/middleware/middleware_error_handler.py similarity index 100% rename from docs/slack_bolt/middleware/middleware_error_handler.py rename to slack_bolt/middleware/middleware_error_handler.py diff --git a/docs/slack_bolt/middleware/request_verification/__init__.py b/slack_bolt/middleware/request_verification/__init__.py similarity index 100% rename from docs/slack_bolt/middleware/request_verification/__init__.py rename to slack_bolt/middleware/request_verification/__init__.py diff --git a/docs/slack_bolt/middleware/request_verification/async_request_verification.py b/slack_bolt/middleware/request_verification/async_request_verification.py similarity index 100% rename from docs/slack_bolt/middleware/request_verification/async_request_verification.py rename to slack_bolt/middleware/request_verification/async_request_verification.py diff --git a/docs/slack_bolt/middleware/request_verification/request_verification.py b/slack_bolt/middleware/request_verification/request_verification.py similarity index 100% rename from docs/slack_bolt/middleware/request_verification/request_verification.py rename to slack_bolt/middleware/request_verification/request_verification.py diff --git a/docs/slack_bolt/middleware/ssl_check/__init__.py b/slack_bolt/middleware/ssl_check/__init__.py similarity index 100% rename from docs/slack_bolt/middleware/ssl_check/__init__.py rename to slack_bolt/middleware/ssl_check/__init__.py diff --git a/docs/slack_bolt/middleware/ssl_check/async_ssl_check.py b/slack_bolt/middleware/ssl_check/async_ssl_check.py similarity index 100% rename from docs/slack_bolt/middleware/ssl_check/async_ssl_check.py rename to slack_bolt/middleware/ssl_check/async_ssl_check.py diff --git a/docs/slack_bolt/middleware/ssl_check/ssl_check.py b/slack_bolt/middleware/ssl_check/ssl_check.py similarity index 100% rename from docs/slack_bolt/middleware/ssl_check/ssl_check.py rename to slack_bolt/middleware/ssl_check/ssl_check.py diff --git a/docs/slack_bolt/middleware/url_verification/__init__.py b/slack_bolt/middleware/url_verification/__init__.py similarity index 100% rename from docs/slack_bolt/middleware/url_verification/__init__.py rename to slack_bolt/middleware/url_verification/__init__.py diff --git a/docs/slack_bolt/middleware/url_verification/async_url_verification.py b/slack_bolt/middleware/url_verification/async_url_verification.py similarity index 100% rename from docs/slack_bolt/middleware/url_verification/async_url_verification.py rename to slack_bolt/middleware/url_verification/async_url_verification.py diff --git a/docs/slack_bolt/middleware/url_verification/url_verification.py b/slack_bolt/middleware/url_verification/url_verification.py similarity index 100% rename from docs/slack_bolt/middleware/url_verification/url_verification.py rename to slack_bolt/middleware/url_verification/url_verification.py diff --git a/docs/slack_bolt/oauth/__init__.py b/slack_bolt/oauth/__init__.py similarity index 100% rename from docs/slack_bolt/oauth/__init__.py rename to slack_bolt/oauth/__init__.py diff --git a/docs/slack_bolt/oauth/async_callback_options.py b/slack_bolt/oauth/async_callback_options.py similarity index 100% rename from docs/slack_bolt/oauth/async_callback_options.py rename to slack_bolt/oauth/async_callback_options.py diff --git a/docs/slack_bolt/oauth/async_internals.py b/slack_bolt/oauth/async_internals.py similarity index 100% rename from docs/slack_bolt/oauth/async_internals.py rename to slack_bolt/oauth/async_internals.py diff --git a/docs/slack_bolt/oauth/async_oauth_flow.py b/slack_bolt/oauth/async_oauth_flow.py similarity index 100% rename from docs/slack_bolt/oauth/async_oauth_flow.py rename to slack_bolt/oauth/async_oauth_flow.py diff --git a/docs/slack_bolt/oauth/async_oauth_settings.py b/slack_bolt/oauth/async_oauth_settings.py similarity index 100% rename from docs/slack_bolt/oauth/async_oauth_settings.py rename to slack_bolt/oauth/async_oauth_settings.py diff --git a/docs/slack_bolt/oauth/callback_options.py b/slack_bolt/oauth/callback_options.py similarity index 100% rename from docs/slack_bolt/oauth/callback_options.py rename to slack_bolt/oauth/callback_options.py diff --git a/docs/slack_bolt/oauth/internals.py b/slack_bolt/oauth/internals.py similarity index 100% rename from docs/slack_bolt/oauth/internals.py rename to slack_bolt/oauth/internals.py diff --git a/docs/slack_bolt/oauth/oauth_flow.py b/slack_bolt/oauth/oauth_flow.py similarity index 100% rename from docs/slack_bolt/oauth/oauth_flow.py rename to slack_bolt/oauth/oauth_flow.py diff --git a/docs/slack_bolt/oauth/oauth_settings.py b/slack_bolt/oauth/oauth_settings.py similarity index 100% rename from docs/slack_bolt/oauth/oauth_settings.py rename to slack_bolt/oauth/oauth_settings.py diff --git a/docs/slack_bolt/py.typed b/slack_bolt/py.typed similarity index 100% rename from docs/slack_bolt/py.typed rename to slack_bolt/py.typed diff --git a/docs/slack_bolt/request/__init__.py b/slack_bolt/request/__init__.py similarity index 100% rename from docs/slack_bolt/request/__init__.py rename to slack_bolt/request/__init__.py diff --git a/docs/slack_bolt/request/async_internals.py b/slack_bolt/request/async_internals.py similarity index 100% rename from docs/slack_bolt/request/async_internals.py rename to slack_bolt/request/async_internals.py diff --git a/docs/slack_bolt/request/async_request.py b/slack_bolt/request/async_request.py similarity index 100% rename from docs/slack_bolt/request/async_request.py rename to slack_bolt/request/async_request.py diff --git a/docs/slack_bolt/request/internals.py b/slack_bolt/request/internals.py similarity index 100% rename from docs/slack_bolt/request/internals.py rename to slack_bolt/request/internals.py diff --git a/docs/slack_bolt/request/payload_utils.py b/slack_bolt/request/payload_utils.py similarity index 100% rename from docs/slack_bolt/request/payload_utils.py rename to slack_bolt/request/payload_utils.py diff --git a/docs/slack_bolt/request/request.py b/slack_bolt/request/request.py similarity index 100% rename from docs/slack_bolt/request/request.py rename to slack_bolt/request/request.py diff --git a/docs/slack_bolt/response/__init__.py b/slack_bolt/response/__init__.py similarity index 100% rename from docs/slack_bolt/response/__init__.py rename to slack_bolt/response/__init__.py diff --git a/docs/slack_bolt/response/response.py b/slack_bolt/response/response.py similarity index 100% rename from docs/slack_bolt/response/response.py rename to slack_bolt/response/response.py diff --git a/docs/slack_bolt/util/__init__.py b/slack_bolt/util/__init__.py similarity index 100% rename from docs/slack_bolt/util/__init__.py rename to slack_bolt/util/__init__.py diff --git a/docs/slack_bolt/util/async_utils.py b/slack_bolt/util/async_utils.py similarity index 100% rename from docs/slack_bolt/util/async_utils.py rename to slack_bolt/util/async_utils.py diff --git a/docs/slack_bolt/util/utils.py b/slack_bolt/util/utils.py similarity index 100% rename from docs/slack_bolt/util/utils.py rename to slack_bolt/util/utils.py diff --git a/docs/slack_bolt/version.py b/slack_bolt/version.py similarity index 100% rename from docs/slack_bolt/version.py rename to slack_bolt/version.py diff --git a/docs/slack_bolt/workflows/__init__.py b/slack_bolt/workflows/__init__.py similarity index 100% rename from docs/slack_bolt/workflows/__init__.py rename to slack_bolt/workflows/__init__.py diff --git a/docs/slack_bolt/workflows/step/__init__.py b/slack_bolt/workflows/step/__init__.py similarity index 100% rename from docs/slack_bolt/workflows/step/__init__.py rename to slack_bolt/workflows/step/__init__.py diff --git a/docs/slack_bolt/workflows/step/async_step.py b/slack_bolt/workflows/step/async_step.py similarity index 100% rename from docs/slack_bolt/workflows/step/async_step.py rename to slack_bolt/workflows/step/async_step.py diff --git a/docs/slack_bolt/workflows/step/async_step_middleware.py b/slack_bolt/workflows/step/async_step_middleware.py similarity index 100% rename from docs/slack_bolt/workflows/step/async_step_middleware.py rename to slack_bolt/workflows/step/async_step_middleware.py diff --git a/docs/slack_bolt/workflows/step/internals.py b/slack_bolt/workflows/step/internals.py similarity index 100% rename from docs/slack_bolt/workflows/step/internals.py rename to slack_bolt/workflows/step/internals.py diff --git a/docs/slack_bolt/workflows/step/step.py b/slack_bolt/workflows/step/step.py similarity index 100% rename from docs/slack_bolt/workflows/step/step.py rename to slack_bolt/workflows/step/step.py diff --git a/docs/slack_bolt/workflows/step/step_middleware.py b/slack_bolt/workflows/step/step_middleware.py similarity index 100% rename from docs/slack_bolt/workflows/step/step_middleware.py rename to slack_bolt/workflows/step/step_middleware.py diff --git a/docs/slack_bolt/workflows/step/utilities/__init__.py b/slack_bolt/workflows/step/utilities/__init__.py similarity index 100% rename from docs/slack_bolt/workflows/step/utilities/__init__.py rename to slack_bolt/workflows/step/utilities/__init__.py diff --git a/docs/slack_bolt/workflows/step/utilities/async_complete.py b/slack_bolt/workflows/step/utilities/async_complete.py similarity index 100% rename from docs/slack_bolt/workflows/step/utilities/async_complete.py rename to slack_bolt/workflows/step/utilities/async_complete.py diff --git a/docs/slack_bolt/workflows/step/utilities/async_configure.py b/slack_bolt/workflows/step/utilities/async_configure.py similarity index 100% rename from docs/slack_bolt/workflows/step/utilities/async_configure.py rename to slack_bolt/workflows/step/utilities/async_configure.py diff --git a/docs/slack_bolt/workflows/step/utilities/async_fail.py b/slack_bolt/workflows/step/utilities/async_fail.py similarity index 100% rename from docs/slack_bolt/workflows/step/utilities/async_fail.py rename to slack_bolt/workflows/step/utilities/async_fail.py diff --git a/docs/slack_bolt/workflows/step/utilities/async_update.py b/slack_bolt/workflows/step/utilities/async_update.py similarity index 100% rename from docs/slack_bolt/workflows/step/utilities/async_update.py rename to slack_bolt/workflows/step/utilities/async_update.py diff --git a/docs/slack_bolt/workflows/step/utilities/complete.py b/slack_bolt/workflows/step/utilities/complete.py similarity index 100% rename from docs/slack_bolt/workflows/step/utilities/complete.py rename to slack_bolt/workflows/step/utilities/complete.py diff --git a/docs/slack_bolt/workflows/step/utilities/configure.py b/slack_bolt/workflows/step/utilities/configure.py similarity index 100% rename from docs/slack_bolt/workflows/step/utilities/configure.py rename to slack_bolt/workflows/step/utilities/configure.py diff --git a/docs/slack_bolt/workflows/step/utilities/fail.py b/slack_bolt/workflows/step/utilities/fail.py similarity index 100% rename from docs/slack_bolt/workflows/step/utilities/fail.py rename to slack_bolt/workflows/step/utilities/fail.py diff --git a/docs/slack_bolt/workflows/step/utilities/update.py b/slack_bolt/workflows/step/utilities/update.py similarity index 100% rename from docs/slack_bolt/workflows/step/utilities/update.py rename to slack_bolt/workflows/step/utilities/update.py From 3fe9b80c5df561518e0fe66e415f7dde3e0f17b3 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 16 Jul 2025 10:22:58 -0700 Subject: [PATCH 13/42] actual reference --- .../{api-docs/slack_bolt => reference}/adapter/aiohttp/index.html | 0 .../slack_bolt => reference}/adapter/asgi/aiohttp/index.html | 0 .../slack_bolt => reference}/adapter/asgi/async_handler.html | 0 .../slack_bolt => reference}/adapter/asgi/base_handler.html | 0 .../slack_bolt => reference}/adapter/asgi/builtin/index.html | 0 .../slack_bolt => reference}/adapter/asgi/http_request.html | 0 .../slack_bolt => reference}/adapter/asgi/http_response.html | 0 docs/{api-docs/slack_bolt => reference}/adapter/asgi/index.html | 0 docs/{api-docs/slack_bolt => reference}/adapter/asgi/utils.html | 0 .../adapter/aws_lambda/chalice_handler.html | 0 .../adapter/aws_lambda/chalice_lazy_listener_runner.html | 0 .../slack_bolt => reference}/adapter/aws_lambda/handler.html | 0 .../slack_bolt => reference}/adapter/aws_lambda/index.html | 0 .../slack_bolt => reference}/adapter/aws_lambda/internals.html | 0 .../adapter/aws_lambda/lambda_s3_oauth_flow.html | 0 .../adapter/aws_lambda/lazy_listener_runner.html | 0 .../adapter/aws_lambda/local_lambda_client.html | 0 .../slack_bolt => reference}/adapter/bottle/handler.html | 0 docs/{api-docs/slack_bolt => reference}/adapter/bottle/index.html | 0 .../slack_bolt => reference}/adapter/cherrypy/handler.html | 0 .../slack_bolt => reference}/adapter/cherrypy/index.html | 0 .../slack_bolt => reference}/adapter/django/handler.html | 0 docs/{api-docs/slack_bolt => reference}/adapter/django/index.html | 0 .../slack_bolt => reference}/adapter/falcon/async_resource.html | 0 docs/{api-docs/slack_bolt => reference}/adapter/falcon/index.html | 0 .../slack_bolt => reference}/adapter/falcon/resource.html | 0 .../slack_bolt => reference}/adapter/fastapi/async_handler.html | 0 .../{api-docs/slack_bolt => reference}/adapter/fastapi/index.html | 0 .../{api-docs/slack_bolt => reference}/adapter/flask/handler.html | 0 docs/{api-docs/slack_bolt => reference}/adapter/flask/index.html | 0 .../adapter/google_cloud_functions/handler.html | 0 .../adapter/google_cloud_functions/index.html | 0 docs/{api-docs/slack_bolt => reference}/adapter/index.html | 0 .../slack_bolt => reference}/adapter/pyramid/handler.html | 0 .../{api-docs/slack_bolt => reference}/adapter/pyramid/index.html | 0 .../slack_bolt => reference}/adapter/sanic/async_handler.html | 0 docs/{api-docs/slack_bolt => reference}/adapter/sanic/index.html | 0 .../adapter/socket_mode/aiohttp/index.html | 0 .../adapter/socket_mode/async_base_handler.html | 0 .../adapter/socket_mode/async_handler.html | 0 .../adapter/socket_mode/async_internals.html | 0 .../adapter/socket_mode/base_handler.html | 0 .../adapter/socket_mode/builtin/index.html | 0 .../slack_bolt => reference}/adapter/socket_mode/index.html | 0 .../slack_bolt => reference}/adapter/socket_mode/internals.html | 0 .../adapter/socket_mode/websocket_client/index.html | 0 .../adapter/socket_mode/websockets/index.html | 0 .../slack_bolt => reference}/adapter/starlette/async_handler.html | 0 .../slack_bolt => reference}/adapter/starlette/handler.html | 0 .../slack_bolt => reference}/adapter/starlette/index.html | 0 .../slack_bolt => reference}/adapter/tornado/async_handler.html | 0 .../slack_bolt => reference}/adapter/tornado/handler.html | 0 .../{api-docs/slack_bolt => reference}/adapter/tornado/index.html | 0 docs/{api-docs/slack_bolt => reference}/adapter/wsgi/handler.html | 0 .../slack_bolt => reference}/adapter/wsgi/http_request.html | 0 .../slack_bolt => reference}/adapter/wsgi/http_response.html | 0 docs/{api-docs/slack_bolt => reference}/adapter/wsgi/index.html | 0 .../slack_bolt => reference}/adapter/wsgi/internals.html | 0 docs/{api-docs/slack_bolt => reference}/app/app.html | 0 docs/{api-docs/slack_bolt => reference}/app/async_app.html | 0 docs/{api-docs/slack_bolt => reference}/app/async_server.html | 0 docs/{api-docs/slack_bolt => reference}/app/index.html | 0 docs/{api-docs/slack_bolt => reference}/async_app.html | 0 .../slack_bolt => reference}/authorization/async_authorize.html | 0 .../authorization/async_authorize_args.html | 0 .../slack_bolt => reference}/authorization/authorize.html | 0 .../slack_bolt => reference}/authorization/authorize_args.html | 0 .../slack_bolt => reference}/authorization/authorize_result.html | 0 docs/{api-docs/slack_bolt => reference}/authorization/index.html | 0 docs/{api-docs/slack_bolt => reference}/context/ack/ack.html | 0 .../{api-docs/slack_bolt => reference}/context/ack/async_ack.html | 0 docs/{api-docs/slack_bolt => reference}/context/ack/index.html | 0 .../{api-docs/slack_bolt => reference}/context/ack/internals.html | 0 .../context/assistant/assistant_utilities.html | 0 .../context/assistant/async_assistant_utilities.html | 0 .../slack_bolt => reference}/context/assistant/index.html | 0 .../slack_bolt => reference}/context/assistant/internals.html | 0 .../context/assistant/thread_context/index.html | 0 .../context/assistant/thread_context_store/async_store.html | 0 .../assistant/thread_context_store/default_async_store.html | 0 .../context/assistant/thread_context_store/default_store.html | 0 .../context/assistant/thread_context_store/file/index.html | 0 .../context/assistant/thread_context_store/index.html | 0 .../context/assistant/thread_context_store/store.html | 0 .../{api-docs/slack_bolt => reference}/context/async_context.html | 0 docs/{api-docs/slack_bolt => reference}/context/base_context.html | 0 .../slack_bolt => reference}/context/complete/async_complete.html | 0 .../slack_bolt => reference}/context/complete/complete.html | 0 .../slack_bolt => reference}/context/complete/index.html | 0 docs/{api-docs/slack_bolt => reference}/context/context.html | 0 .../slack_bolt => reference}/context/fail/async_fail.html | 0 docs/{api-docs/slack_bolt => reference}/context/fail/fail.html | 0 docs/{api-docs/slack_bolt => reference}/context/fail/index.html | 0 .../context/get_thread_context/async_get_thread_context.html | 0 .../context/get_thread_context/get_thread_context.html | 0 .../context/get_thread_context/index.html | 0 docs/{api-docs/slack_bolt => reference}/context/index.html | 0 .../slack_bolt => reference}/context/respond/async_respond.html | 0 .../{api-docs/slack_bolt => reference}/context/respond/index.html | 0 .../slack_bolt => reference}/context/respond/internals.html | 0 .../slack_bolt => reference}/context/respond/respond.html | 0 .../context/save_thread_context/async_save_thread_context.html | 0 .../context/save_thread_context/index.html | 0 .../context/save_thread_context/save_thread_context.html | 0 .../{api-docs/slack_bolt => reference}/context/say/async_say.html | 0 docs/{api-docs/slack_bolt => reference}/context/say/index.html | 0 .../{api-docs/slack_bolt => reference}/context/say/internals.html | 0 docs/{api-docs/slack_bolt => reference}/context/say/say.html | 0 .../context/set_status/async_set_status.html | 0 .../slack_bolt => reference}/context/set_status/index.html | 0 .../slack_bolt => reference}/context/set_status/set_status.html | 0 .../set_suggested_prompts/async_set_suggested_prompts.html | 0 .../context/set_suggested_prompts/index.html | 0 .../context/set_suggested_prompts/set_suggested_prompts.html | 0 .../context/set_title/async_set_title.html | 0 .../slack_bolt => reference}/context/set_title/index.html | 0 .../slack_bolt => reference}/context/set_title/set_title.html | 0 docs/{api-docs/slack_bolt => reference}/error/index.html | 0 docs/{api-docs/slack_bolt => reference}/index.html | 0 .../{api-docs/slack_bolt => reference}/kwargs_injection/args.html | 0 .../slack_bolt => reference}/kwargs_injection/async_args.html | 0 .../slack_bolt => reference}/kwargs_injection/async_utils.html | 0 .../slack_bolt => reference}/kwargs_injection/index.html | 0 .../slack_bolt => reference}/kwargs_injection/utils.html | 0 .../slack_bolt => reference}/lazy_listener/async_internals.html | 0 .../slack_bolt => reference}/lazy_listener/async_runner.html | 0 .../slack_bolt => reference}/lazy_listener/asyncio_runner.html | 0 docs/{api-docs/slack_bolt => reference}/lazy_listener/index.html | 0 .../slack_bolt => reference}/lazy_listener/internals.html | 0 docs/{api-docs/slack_bolt => reference}/lazy_listener/runner.html | 0 .../slack_bolt => reference}/lazy_listener/thread_runner.html | 0 .../slack_bolt => reference}/listener/async_builtins.html | 0 .../slack_bolt => reference}/listener/async_listener.html | 0 .../listener/async_listener_completion_handler.html | 0 .../listener/async_listener_error_handler.html | 0 .../listener/async_listener_start_handler.html | 0 .../slack_bolt => reference}/listener/asyncio_runner.html | 0 docs/{api-docs/slack_bolt => reference}/listener/builtins.html | 0 .../slack_bolt => reference}/listener/custom_listener.html | 0 docs/{api-docs/slack_bolt => reference}/listener/index.html | 0 docs/{api-docs/slack_bolt => reference}/listener/listener.html | 0 .../listener/listener_completion_handler.html | 0 .../slack_bolt => reference}/listener/listener_error_handler.html | 0 .../slack_bolt => reference}/listener/listener_start_handler.html | 0 .../slack_bolt => reference}/listener/thread_runner.html | 0 .../slack_bolt => reference}/listener_matcher/async_builtins.html | 0 .../listener_matcher/async_listener_matcher.html | 0 .../slack_bolt => reference}/listener_matcher/builtins.html | 0 .../listener_matcher/custom_listener_matcher.html | 0 .../slack_bolt => reference}/listener_matcher/index.html | 0 .../listener_matcher/listener_matcher.html | 0 docs/{api-docs/slack_bolt => reference}/logger/index.html | 0 docs/{api-docs/slack_bolt => reference}/logger/messages.html | 0 .../slack_bolt => reference}/middleware/assistant/assistant.html | 0 .../middleware/assistant/async_assistant.html | 0 .../slack_bolt => reference}/middleware/assistant/index.html | 0 .../slack_bolt => reference}/middleware/async_builtins.html | 0 .../middleware/async_custom_middleware.html | 0 .../slack_bolt => reference}/middleware/async_middleware.html | 0 .../middleware/async_middleware_error_handler.html | 0 .../attaching_function_token/async_attaching_function_token.html | 0 .../attaching_function_token/attaching_function_token.html | 0 .../middleware/attaching_function_token/index.html | 0 .../middleware/authorization/async_authorization.html | 0 .../middleware/authorization/async_internals.html | 0 .../middleware/authorization/async_multi_teams_authorization.html | 0 .../middleware/authorization/async_single_team_authorization.html | 0 .../middleware/authorization/authorization.html | 0 .../slack_bolt => reference}/middleware/authorization/index.html | 0 .../middleware/authorization/internals.html | 0 .../middleware/authorization/multi_teams_authorization.html | 0 .../middleware/authorization/single_team_authorization.html | 0 .../slack_bolt => reference}/middleware/custom_middleware.html | 0 .../ignoring_self_events/async_ignoring_self_events.html | 0 .../middleware/ignoring_self_events/ignoring_self_events.html | 0 .../middleware/ignoring_self_events/index.html | 0 docs/{api-docs/slack_bolt => reference}/middleware/index.html | 0 .../message_listener_matches/async_message_listener_matches.html | 0 .../middleware/message_listener_matches/index.html | 0 .../message_listener_matches/message_listener_matches.html | 0 .../{api-docs/slack_bolt => reference}/middleware/middleware.html | 0 .../middleware/middleware_error_handler.html | 0 .../request_verification/async_request_verification.html | 0 .../middleware/request_verification/index.html | 0 .../middleware/request_verification/request_verification.html | 0 .../middleware/ssl_check/async_ssl_check.html | 0 .../slack_bolt => reference}/middleware/ssl_check/index.html | 0 .../slack_bolt => reference}/middleware/ssl_check/ssl_check.html | 0 .../middleware/url_verification/async_url_verification.html | 0 .../middleware/url_verification/index.html | 0 .../middleware/url_verification/url_verification.html | 0 .../slack_bolt => reference}/oauth/async_callback_options.html | 0 .../{api-docs/slack_bolt => reference}/oauth/async_internals.html | 0 .../slack_bolt => reference}/oauth/async_oauth_flow.html | 0 .../slack_bolt => reference}/oauth/async_oauth_settings.html | 0 .../slack_bolt => reference}/oauth/callback_options.html | 0 docs/{api-docs/slack_bolt => reference}/oauth/index.html | 0 docs/{api-docs/slack_bolt => reference}/oauth/internals.html | 0 docs/{api-docs/slack_bolt => reference}/oauth/oauth_flow.html | 0 docs/{api-docs/slack_bolt => reference}/oauth/oauth_settings.html | 0 .../slack_bolt => reference}/request/async_internals.html | 0 .../{api-docs/slack_bolt => reference}/request/async_request.html | 0 docs/{api-docs/slack_bolt => reference}/request/index.html | 0 docs/{api-docs/slack_bolt => reference}/request/internals.html | 0 .../{api-docs/slack_bolt => reference}/request/payload_utils.html | 0 docs/{api-docs/slack_bolt => reference}/request/request.html | 0 docs/{api-docs/slack_bolt => reference}/response/index.html | 0 docs/{api-docs/slack_bolt => reference}/response/response.html | 0 docs/{api-docs/slack_bolt => reference}/util/async_utils.html | 0 docs/{api-docs/slack_bolt => reference}/util/index.html | 0 docs/{api-docs/slack_bolt => reference}/util/utils.html | 0 docs/{api-docs/slack_bolt => reference}/version.html | 0 docs/{api-docs/slack_bolt => reference}/workflows/index.html | 0 .../slack_bolt => reference}/workflows/step/async_step.html | 0 .../workflows/step/async_step_middleware.html | 0 docs/{api-docs/slack_bolt => reference}/workflows/step/index.html | 0 .../slack_bolt => reference}/workflows/step/internals.html | 0 docs/{api-docs/slack_bolt => reference}/workflows/step/step.html | 0 .../slack_bolt => reference}/workflows/step/step_middleware.html | 0 .../workflows/step/utilities/async_complete.html | 0 .../workflows/step/utilities/async_configure.html | 0 .../workflows/step/utilities/async_fail.html | 0 .../workflows/step/utilities/async_update.html | 0 .../workflows/step/utilities/complete.html | 0 .../workflows/step/utilities/configure.html | 0 .../slack_bolt => reference}/workflows/step/utilities/fail.html | 0 .../slack_bolt => reference}/workflows/step/utilities/index.html | 0 .../slack_bolt => reference}/workflows/step/utilities/update.html | 0 228 files changed, 0 insertions(+), 0 deletions(-) rename docs/{api-docs/slack_bolt => reference}/adapter/aiohttp/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/asgi/aiohttp/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/asgi/async_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/asgi/base_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/asgi/builtin/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/asgi/http_request.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/asgi/http_response.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/asgi/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/asgi/utils.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/aws_lambda/chalice_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/aws_lambda/chalice_lazy_listener_runner.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/aws_lambda/handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/aws_lambda/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/aws_lambda/internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/aws_lambda/lambda_s3_oauth_flow.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/aws_lambda/lazy_listener_runner.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/aws_lambda/local_lambda_client.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/bottle/handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/bottle/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/cherrypy/handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/cherrypy/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/django/handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/django/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/falcon/async_resource.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/falcon/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/falcon/resource.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/fastapi/async_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/fastapi/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/flask/handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/flask/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/google_cloud_functions/handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/google_cloud_functions/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/pyramid/handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/pyramid/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/sanic/async_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/sanic/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/socket_mode/aiohttp/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/socket_mode/async_base_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/socket_mode/async_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/socket_mode/async_internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/socket_mode/base_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/socket_mode/builtin/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/socket_mode/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/socket_mode/internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/socket_mode/websocket_client/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/socket_mode/websockets/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/starlette/async_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/starlette/handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/starlette/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/tornado/async_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/tornado/handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/tornado/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/wsgi/handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/wsgi/http_request.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/wsgi/http_response.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/wsgi/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/adapter/wsgi/internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/app/app.html (100%) rename docs/{api-docs/slack_bolt => reference}/app/async_app.html (100%) rename docs/{api-docs/slack_bolt => reference}/app/async_server.html (100%) rename docs/{api-docs/slack_bolt => reference}/app/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/async_app.html (100%) rename docs/{api-docs/slack_bolt => reference}/authorization/async_authorize.html (100%) rename docs/{api-docs/slack_bolt => reference}/authorization/async_authorize_args.html (100%) rename docs/{api-docs/slack_bolt => reference}/authorization/authorize.html (100%) rename docs/{api-docs/slack_bolt => reference}/authorization/authorize_args.html (100%) rename docs/{api-docs/slack_bolt => reference}/authorization/authorize_result.html (100%) rename docs/{api-docs/slack_bolt => reference}/authorization/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/ack/ack.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/ack/async_ack.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/ack/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/ack/internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/assistant/assistant_utilities.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/assistant/async_assistant_utilities.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/assistant/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/assistant/internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/assistant/thread_context/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/assistant/thread_context_store/async_store.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/assistant/thread_context_store/default_async_store.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/assistant/thread_context_store/default_store.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/assistant/thread_context_store/file/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/assistant/thread_context_store/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/assistant/thread_context_store/store.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/async_context.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/base_context.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/complete/async_complete.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/complete/complete.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/complete/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/context.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/fail/async_fail.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/fail/fail.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/fail/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/get_thread_context/async_get_thread_context.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/get_thread_context/get_thread_context.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/get_thread_context/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/respond/async_respond.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/respond/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/respond/internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/respond/respond.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/save_thread_context/async_save_thread_context.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/save_thread_context/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/save_thread_context/save_thread_context.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/say/async_say.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/say/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/say/internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/say/say.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/set_status/async_set_status.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/set_status/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/set_status/set_status.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/set_suggested_prompts/async_set_suggested_prompts.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/set_suggested_prompts/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/set_suggested_prompts/set_suggested_prompts.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/set_title/async_set_title.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/set_title/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/context/set_title/set_title.html (100%) rename docs/{api-docs/slack_bolt => reference}/error/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/kwargs_injection/args.html (100%) rename docs/{api-docs/slack_bolt => reference}/kwargs_injection/async_args.html (100%) rename docs/{api-docs/slack_bolt => reference}/kwargs_injection/async_utils.html (100%) rename docs/{api-docs/slack_bolt => reference}/kwargs_injection/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/kwargs_injection/utils.html (100%) rename docs/{api-docs/slack_bolt => reference}/lazy_listener/async_internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/lazy_listener/async_runner.html (100%) rename docs/{api-docs/slack_bolt => reference}/lazy_listener/asyncio_runner.html (100%) rename docs/{api-docs/slack_bolt => reference}/lazy_listener/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/lazy_listener/internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/lazy_listener/runner.html (100%) rename docs/{api-docs/slack_bolt => reference}/lazy_listener/thread_runner.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener/async_builtins.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener/async_listener.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener/async_listener_completion_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener/async_listener_error_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener/async_listener_start_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener/asyncio_runner.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener/builtins.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener/custom_listener.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener/listener.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener/listener_completion_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener/listener_error_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener/listener_start_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener/thread_runner.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener_matcher/async_builtins.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener_matcher/async_listener_matcher.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener_matcher/builtins.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener_matcher/custom_listener_matcher.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener_matcher/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/listener_matcher/listener_matcher.html (100%) rename docs/{api-docs/slack_bolt => reference}/logger/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/logger/messages.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/assistant/assistant.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/assistant/async_assistant.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/assistant/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/async_builtins.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/async_custom_middleware.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/async_middleware.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/async_middleware_error_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/attaching_function_token/async_attaching_function_token.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/attaching_function_token/attaching_function_token.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/attaching_function_token/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/authorization/async_authorization.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/authorization/async_internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/authorization/async_multi_teams_authorization.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/authorization/async_single_team_authorization.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/authorization/authorization.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/authorization/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/authorization/internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/authorization/multi_teams_authorization.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/authorization/single_team_authorization.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/custom_middleware.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/ignoring_self_events/async_ignoring_self_events.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/ignoring_self_events/ignoring_self_events.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/ignoring_self_events/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/message_listener_matches/async_message_listener_matches.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/message_listener_matches/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/message_listener_matches/message_listener_matches.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/middleware.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/middleware_error_handler.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/request_verification/async_request_verification.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/request_verification/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/request_verification/request_verification.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/ssl_check/async_ssl_check.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/ssl_check/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/ssl_check/ssl_check.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/url_verification/async_url_verification.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/url_verification/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/middleware/url_verification/url_verification.html (100%) rename docs/{api-docs/slack_bolt => reference}/oauth/async_callback_options.html (100%) rename docs/{api-docs/slack_bolt => reference}/oauth/async_internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/oauth/async_oauth_flow.html (100%) rename docs/{api-docs/slack_bolt => reference}/oauth/async_oauth_settings.html (100%) rename docs/{api-docs/slack_bolt => reference}/oauth/callback_options.html (100%) rename docs/{api-docs/slack_bolt => reference}/oauth/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/oauth/internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/oauth/oauth_flow.html (100%) rename docs/{api-docs/slack_bolt => reference}/oauth/oauth_settings.html (100%) rename docs/{api-docs/slack_bolt => reference}/request/async_internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/request/async_request.html (100%) rename docs/{api-docs/slack_bolt => reference}/request/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/request/internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/request/payload_utils.html (100%) rename docs/{api-docs/slack_bolt => reference}/request/request.html (100%) rename docs/{api-docs/slack_bolt => reference}/response/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/response/response.html (100%) rename docs/{api-docs/slack_bolt => reference}/util/async_utils.html (100%) rename docs/{api-docs/slack_bolt => reference}/util/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/util/utils.html (100%) rename docs/{api-docs/slack_bolt => reference}/version.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/step/async_step.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/step/async_step_middleware.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/step/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/step/internals.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/step/step.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/step/step_middleware.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/step/utilities/async_complete.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/step/utilities/async_configure.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/step/utilities/async_fail.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/step/utilities/async_update.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/step/utilities/complete.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/step/utilities/configure.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/step/utilities/fail.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/step/utilities/index.html (100%) rename docs/{api-docs/slack_bolt => reference}/workflows/step/utilities/update.html (100%) diff --git a/docs/api-docs/slack_bolt/adapter/aiohttp/index.html b/docs/reference/adapter/aiohttp/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/aiohttp/index.html rename to docs/reference/adapter/aiohttp/index.html diff --git a/docs/api-docs/slack_bolt/adapter/asgi/aiohttp/index.html b/docs/reference/adapter/asgi/aiohttp/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/asgi/aiohttp/index.html rename to docs/reference/adapter/asgi/aiohttp/index.html diff --git a/docs/api-docs/slack_bolt/adapter/asgi/async_handler.html b/docs/reference/adapter/asgi/async_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/asgi/async_handler.html rename to docs/reference/adapter/asgi/async_handler.html diff --git a/docs/api-docs/slack_bolt/adapter/asgi/base_handler.html b/docs/reference/adapter/asgi/base_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/asgi/base_handler.html rename to docs/reference/adapter/asgi/base_handler.html diff --git a/docs/api-docs/slack_bolt/adapter/asgi/builtin/index.html b/docs/reference/adapter/asgi/builtin/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/asgi/builtin/index.html rename to docs/reference/adapter/asgi/builtin/index.html diff --git a/docs/api-docs/slack_bolt/adapter/asgi/http_request.html b/docs/reference/adapter/asgi/http_request.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/asgi/http_request.html rename to docs/reference/adapter/asgi/http_request.html diff --git a/docs/api-docs/slack_bolt/adapter/asgi/http_response.html b/docs/reference/adapter/asgi/http_response.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/asgi/http_response.html rename to docs/reference/adapter/asgi/http_response.html diff --git a/docs/api-docs/slack_bolt/adapter/asgi/index.html b/docs/reference/adapter/asgi/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/asgi/index.html rename to docs/reference/adapter/asgi/index.html diff --git a/docs/api-docs/slack_bolt/adapter/asgi/utils.html b/docs/reference/adapter/asgi/utils.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/asgi/utils.html rename to docs/reference/adapter/asgi/utils.html diff --git a/docs/api-docs/slack_bolt/adapter/aws_lambda/chalice_handler.html b/docs/reference/adapter/aws_lambda/chalice_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/aws_lambda/chalice_handler.html rename to docs/reference/adapter/aws_lambda/chalice_handler.html diff --git a/docs/api-docs/slack_bolt/adapter/aws_lambda/chalice_lazy_listener_runner.html b/docs/reference/adapter/aws_lambda/chalice_lazy_listener_runner.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/aws_lambda/chalice_lazy_listener_runner.html rename to docs/reference/adapter/aws_lambda/chalice_lazy_listener_runner.html diff --git a/docs/api-docs/slack_bolt/adapter/aws_lambda/handler.html b/docs/reference/adapter/aws_lambda/handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/aws_lambda/handler.html rename to docs/reference/adapter/aws_lambda/handler.html diff --git a/docs/api-docs/slack_bolt/adapter/aws_lambda/index.html b/docs/reference/adapter/aws_lambda/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/aws_lambda/index.html rename to docs/reference/adapter/aws_lambda/index.html diff --git a/docs/api-docs/slack_bolt/adapter/aws_lambda/internals.html b/docs/reference/adapter/aws_lambda/internals.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/aws_lambda/internals.html rename to docs/reference/adapter/aws_lambda/internals.html diff --git a/docs/api-docs/slack_bolt/adapter/aws_lambda/lambda_s3_oauth_flow.html b/docs/reference/adapter/aws_lambda/lambda_s3_oauth_flow.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/aws_lambda/lambda_s3_oauth_flow.html rename to docs/reference/adapter/aws_lambda/lambda_s3_oauth_flow.html diff --git a/docs/api-docs/slack_bolt/adapter/aws_lambda/lazy_listener_runner.html b/docs/reference/adapter/aws_lambda/lazy_listener_runner.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/aws_lambda/lazy_listener_runner.html rename to docs/reference/adapter/aws_lambda/lazy_listener_runner.html diff --git a/docs/api-docs/slack_bolt/adapter/aws_lambda/local_lambda_client.html b/docs/reference/adapter/aws_lambda/local_lambda_client.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/aws_lambda/local_lambda_client.html rename to docs/reference/adapter/aws_lambda/local_lambda_client.html diff --git a/docs/api-docs/slack_bolt/adapter/bottle/handler.html b/docs/reference/adapter/bottle/handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/bottle/handler.html rename to docs/reference/adapter/bottle/handler.html diff --git a/docs/api-docs/slack_bolt/adapter/bottle/index.html b/docs/reference/adapter/bottle/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/bottle/index.html rename to docs/reference/adapter/bottle/index.html diff --git a/docs/api-docs/slack_bolt/adapter/cherrypy/handler.html b/docs/reference/adapter/cherrypy/handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/cherrypy/handler.html rename to docs/reference/adapter/cherrypy/handler.html diff --git a/docs/api-docs/slack_bolt/adapter/cherrypy/index.html b/docs/reference/adapter/cherrypy/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/cherrypy/index.html rename to docs/reference/adapter/cherrypy/index.html diff --git a/docs/api-docs/slack_bolt/adapter/django/handler.html b/docs/reference/adapter/django/handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/django/handler.html rename to docs/reference/adapter/django/handler.html diff --git a/docs/api-docs/slack_bolt/adapter/django/index.html b/docs/reference/adapter/django/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/django/index.html rename to docs/reference/adapter/django/index.html diff --git a/docs/api-docs/slack_bolt/adapter/falcon/async_resource.html b/docs/reference/adapter/falcon/async_resource.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/falcon/async_resource.html rename to docs/reference/adapter/falcon/async_resource.html diff --git a/docs/api-docs/slack_bolt/adapter/falcon/index.html b/docs/reference/adapter/falcon/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/falcon/index.html rename to docs/reference/adapter/falcon/index.html diff --git a/docs/api-docs/slack_bolt/adapter/falcon/resource.html b/docs/reference/adapter/falcon/resource.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/falcon/resource.html rename to docs/reference/adapter/falcon/resource.html diff --git a/docs/api-docs/slack_bolt/adapter/fastapi/async_handler.html b/docs/reference/adapter/fastapi/async_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/fastapi/async_handler.html rename to docs/reference/adapter/fastapi/async_handler.html diff --git a/docs/api-docs/slack_bolt/adapter/fastapi/index.html b/docs/reference/adapter/fastapi/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/fastapi/index.html rename to docs/reference/adapter/fastapi/index.html diff --git a/docs/api-docs/slack_bolt/adapter/flask/handler.html b/docs/reference/adapter/flask/handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/flask/handler.html rename to docs/reference/adapter/flask/handler.html diff --git a/docs/api-docs/slack_bolt/adapter/flask/index.html b/docs/reference/adapter/flask/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/flask/index.html rename to docs/reference/adapter/flask/index.html diff --git a/docs/api-docs/slack_bolt/adapter/google_cloud_functions/handler.html b/docs/reference/adapter/google_cloud_functions/handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/google_cloud_functions/handler.html rename to docs/reference/adapter/google_cloud_functions/handler.html diff --git a/docs/api-docs/slack_bolt/adapter/google_cloud_functions/index.html b/docs/reference/adapter/google_cloud_functions/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/google_cloud_functions/index.html rename to docs/reference/adapter/google_cloud_functions/index.html diff --git a/docs/api-docs/slack_bolt/adapter/index.html b/docs/reference/adapter/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/index.html rename to docs/reference/adapter/index.html diff --git a/docs/api-docs/slack_bolt/adapter/pyramid/handler.html b/docs/reference/adapter/pyramid/handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/pyramid/handler.html rename to docs/reference/adapter/pyramid/handler.html diff --git a/docs/api-docs/slack_bolt/adapter/pyramid/index.html b/docs/reference/adapter/pyramid/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/pyramid/index.html rename to docs/reference/adapter/pyramid/index.html diff --git a/docs/api-docs/slack_bolt/adapter/sanic/async_handler.html b/docs/reference/adapter/sanic/async_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/sanic/async_handler.html rename to docs/reference/adapter/sanic/async_handler.html diff --git a/docs/api-docs/slack_bolt/adapter/sanic/index.html b/docs/reference/adapter/sanic/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/sanic/index.html rename to docs/reference/adapter/sanic/index.html diff --git a/docs/api-docs/slack_bolt/adapter/socket_mode/aiohttp/index.html b/docs/reference/adapter/socket_mode/aiohttp/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/socket_mode/aiohttp/index.html rename to docs/reference/adapter/socket_mode/aiohttp/index.html diff --git a/docs/api-docs/slack_bolt/adapter/socket_mode/async_base_handler.html b/docs/reference/adapter/socket_mode/async_base_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/socket_mode/async_base_handler.html rename to docs/reference/adapter/socket_mode/async_base_handler.html diff --git a/docs/api-docs/slack_bolt/adapter/socket_mode/async_handler.html b/docs/reference/adapter/socket_mode/async_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/socket_mode/async_handler.html rename to docs/reference/adapter/socket_mode/async_handler.html diff --git a/docs/api-docs/slack_bolt/adapter/socket_mode/async_internals.html b/docs/reference/adapter/socket_mode/async_internals.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/socket_mode/async_internals.html rename to docs/reference/adapter/socket_mode/async_internals.html diff --git a/docs/api-docs/slack_bolt/adapter/socket_mode/base_handler.html b/docs/reference/adapter/socket_mode/base_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/socket_mode/base_handler.html rename to docs/reference/adapter/socket_mode/base_handler.html diff --git a/docs/api-docs/slack_bolt/adapter/socket_mode/builtin/index.html b/docs/reference/adapter/socket_mode/builtin/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/socket_mode/builtin/index.html rename to docs/reference/adapter/socket_mode/builtin/index.html diff --git a/docs/api-docs/slack_bolt/adapter/socket_mode/index.html b/docs/reference/adapter/socket_mode/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/socket_mode/index.html rename to docs/reference/adapter/socket_mode/index.html diff --git a/docs/api-docs/slack_bolt/adapter/socket_mode/internals.html b/docs/reference/adapter/socket_mode/internals.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/socket_mode/internals.html rename to docs/reference/adapter/socket_mode/internals.html diff --git a/docs/api-docs/slack_bolt/adapter/socket_mode/websocket_client/index.html b/docs/reference/adapter/socket_mode/websocket_client/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/socket_mode/websocket_client/index.html rename to docs/reference/adapter/socket_mode/websocket_client/index.html diff --git a/docs/api-docs/slack_bolt/adapter/socket_mode/websockets/index.html b/docs/reference/adapter/socket_mode/websockets/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/socket_mode/websockets/index.html rename to docs/reference/adapter/socket_mode/websockets/index.html diff --git a/docs/api-docs/slack_bolt/adapter/starlette/async_handler.html b/docs/reference/adapter/starlette/async_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/starlette/async_handler.html rename to docs/reference/adapter/starlette/async_handler.html diff --git a/docs/api-docs/slack_bolt/adapter/starlette/handler.html b/docs/reference/adapter/starlette/handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/starlette/handler.html rename to docs/reference/adapter/starlette/handler.html diff --git a/docs/api-docs/slack_bolt/adapter/starlette/index.html b/docs/reference/adapter/starlette/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/starlette/index.html rename to docs/reference/adapter/starlette/index.html diff --git a/docs/api-docs/slack_bolt/adapter/tornado/async_handler.html b/docs/reference/adapter/tornado/async_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/tornado/async_handler.html rename to docs/reference/adapter/tornado/async_handler.html diff --git a/docs/api-docs/slack_bolt/adapter/tornado/handler.html b/docs/reference/adapter/tornado/handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/tornado/handler.html rename to docs/reference/adapter/tornado/handler.html diff --git a/docs/api-docs/slack_bolt/adapter/tornado/index.html b/docs/reference/adapter/tornado/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/tornado/index.html rename to docs/reference/adapter/tornado/index.html diff --git a/docs/api-docs/slack_bolt/adapter/wsgi/handler.html b/docs/reference/adapter/wsgi/handler.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/wsgi/handler.html rename to docs/reference/adapter/wsgi/handler.html diff --git a/docs/api-docs/slack_bolt/adapter/wsgi/http_request.html b/docs/reference/adapter/wsgi/http_request.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/wsgi/http_request.html rename to docs/reference/adapter/wsgi/http_request.html diff --git a/docs/api-docs/slack_bolt/adapter/wsgi/http_response.html b/docs/reference/adapter/wsgi/http_response.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/wsgi/http_response.html rename to docs/reference/adapter/wsgi/http_response.html diff --git a/docs/api-docs/slack_bolt/adapter/wsgi/index.html b/docs/reference/adapter/wsgi/index.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/wsgi/index.html rename to docs/reference/adapter/wsgi/index.html diff --git a/docs/api-docs/slack_bolt/adapter/wsgi/internals.html b/docs/reference/adapter/wsgi/internals.html similarity index 100% rename from docs/api-docs/slack_bolt/adapter/wsgi/internals.html rename to docs/reference/adapter/wsgi/internals.html diff --git a/docs/api-docs/slack_bolt/app/app.html b/docs/reference/app/app.html similarity index 100% rename from docs/api-docs/slack_bolt/app/app.html rename to docs/reference/app/app.html diff --git a/docs/api-docs/slack_bolt/app/async_app.html b/docs/reference/app/async_app.html similarity index 100% rename from docs/api-docs/slack_bolt/app/async_app.html rename to docs/reference/app/async_app.html diff --git a/docs/api-docs/slack_bolt/app/async_server.html b/docs/reference/app/async_server.html similarity index 100% rename from docs/api-docs/slack_bolt/app/async_server.html rename to docs/reference/app/async_server.html diff --git a/docs/api-docs/slack_bolt/app/index.html b/docs/reference/app/index.html similarity index 100% rename from docs/api-docs/slack_bolt/app/index.html rename to docs/reference/app/index.html diff --git a/docs/api-docs/slack_bolt/async_app.html b/docs/reference/async_app.html similarity index 100% rename from docs/api-docs/slack_bolt/async_app.html rename to docs/reference/async_app.html diff --git a/docs/api-docs/slack_bolt/authorization/async_authorize.html b/docs/reference/authorization/async_authorize.html similarity index 100% rename from docs/api-docs/slack_bolt/authorization/async_authorize.html rename to docs/reference/authorization/async_authorize.html diff --git a/docs/api-docs/slack_bolt/authorization/async_authorize_args.html b/docs/reference/authorization/async_authorize_args.html similarity index 100% rename from docs/api-docs/slack_bolt/authorization/async_authorize_args.html rename to docs/reference/authorization/async_authorize_args.html diff --git a/docs/api-docs/slack_bolt/authorization/authorize.html b/docs/reference/authorization/authorize.html similarity index 100% rename from docs/api-docs/slack_bolt/authorization/authorize.html rename to docs/reference/authorization/authorize.html diff --git a/docs/api-docs/slack_bolt/authorization/authorize_args.html b/docs/reference/authorization/authorize_args.html similarity index 100% rename from docs/api-docs/slack_bolt/authorization/authorize_args.html rename to docs/reference/authorization/authorize_args.html diff --git a/docs/api-docs/slack_bolt/authorization/authorize_result.html b/docs/reference/authorization/authorize_result.html similarity index 100% rename from docs/api-docs/slack_bolt/authorization/authorize_result.html rename to docs/reference/authorization/authorize_result.html diff --git a/docs/api-docs/slack_bolt/authorization/index.html b/docs/reference/authorization/index.html similarity index 100% rename from docs/api-docs/slack_bolt/authorization/index.html rename to docs/reference/authorization/index.html diff --git a/docs/api-docs/slack_bolt/context/ack/ack.html b/docs/reference/context/ack/ack.html similarity index 100% rename from docs/api-docs/slack_bolt/context/ack/ack.html rename to docs/reference/context/ack/ack.html diff --git a/docs/api-docs/slack_bolt/context/ack/async_ack.html b/docs/reference/context/ack/async_ack.html similarity index 100% rename from docs/api-docs/slack_bolt/context/ack/async_ack.html rename to docs/reference/context/ack/async_ack.html diff --git a/docs/api-docs/slack_bolt/context/ack/index.html b/docs/reference/context/ack/index.html similarity index 100% rename from docs/api-docs/slack_bolt/context/ack/index.html rename to docs/reference/context/ack/index.html diff --git a/docs/api-docs/slack_bolt/context/ack/internals.html b/docs/reference/context/ack/internals.html similarity index 100% rename from docs/api-docs/slack_bolt/context/ack/internals.html rename to docs/reference/context/ack/internals.html diff --git a/docs/api-docs/slack_bolt/context/assistant/assistant_utilities.html b/docs/reference/context/assistant/assistant_utilities.html similarity index 100% rename from docs/api-docs/slack_bolt/context/assistant/assistant_utilities.html rename to docs/reference/context/assistant/assistant_utilities.html diff --git a/docs/api-docs/slack_bolt/context/assistant/async_assistant_utilities.html b/docs/reference/context/assistant/async_assistant_utilities.html similarity index 100% rename from docs/api-docs/slack_bolt/context/assistant/async_assistant_utilities.html rename to docs/reference/context/assistant/async_assistant_utilities.html diff --git a/docs/api-docs/slack_bolt/context/assistant/index.html b/docs/reference/context/assistant/index.html similarity index 100% rename from docs/api-docs/slack_bolt/context/assistant/index.html rename to docs/reference/context/assistant/index.html diff --git a/docs/api-docs/slack_bolt/context/assistant/internals.html b/docs/reference/context/assistant/internals.html similarity index 100% rename from docs/api-docs/slack_bolt/context/assistant/internals.html rename to docs/reference/context/assistant/internals.html diff --git a/docs/api-docs/slack_bolt/context/assistant/thread_context/index.html b/docs/reference/context/assistant/thread_context/index.html similarity index 100% rename from docs/api-docs/slack_bolt/context/assistant/thread_context/index.html rename to docs/reference/context/assistant/thread_context/index.html diff --git a/docs/api-docs/slack_bolt/context/assistant/thread_context_store/async_store.html b/docs/reference/context/assistant/thread_context_store/async_store.html similarity index 100% rename from docs/api-docs/slack_bolt/context/assistant/thread_context_store/async_store.html rename to docs/reference/context/assistant/thread_context_store/async_store.html diff --git a/docs/api-docs/slack_bolt/context/assistant/thread_context_store/default_async_store.html b/docs/reference/context/assistant/thread_context_store/default_async_store.html similarity index 100% rename from docs/api-docs/slack_bolt/context/assistant/thread_context_store/default_async_store.html rename to docs/reference/context/assistant/thread_context_store/default_async_store.html diff --git a/docs/api-docs/slack_bolt/context/assistant/thread_context_store/default_store.html b/docs/reference/context/assistant/thread_context_store/default_store.html similarity index 100% rename from docs/api-docs/slack_bolt/context/assistant/thread_context_store/default_store.html rename to docs/reference/context/assistant/thread_context_store/default_store.html diff --git a/docs/api-docs/slack_bolt/context/assistant/thread_context_store/file/index.html b/docs/reference/context/assistant/thread_context_store/file/index.html similarity index 100% rename from docs/api-docs/slack_bolt/context/assistant/thread_context_store/file/index.html rename to docs/reference/context/assistant/thread_context_store/file/index.html diff --git a/docs/api-docs/slack_bolt/context/assistant/thread_context_store/index.html b/docs/reference/context/assistant/thread_context_store/index.html similarity index 100% rename from docs/api-docs/slack_bolt/context/assistant/thread_context_store/index.html rename to docs/reference/context/assistant/thread_context_store/index.html diff --git a/docs/api-docs/slack_bolt/context/assistant/thread_context_store/store.html b/docs/reference/context/assistant/thread_context_store/store.html similarity index 100% rename from docs/api-docs/slack_bolt/context/assistant/thread_context_store/store.html rename to docs/reference/context/assistant/thread_context_store/store.html diff --git a/docs/api-docs/slack_bolt/context/async_context.html b/docs/reference/context/async_context.html similarity index 100% rename from docs/api-docs/slack_bolt/context/async_context.html rename to docs/reference/context/async_context.html diff --git a/docs/api-docs/slack_bolt/context/base_context.html b/docs/reference/context/base_context.html similarity index 100% rename from docs/api-docs/slack_bolt/context/base_context.html rename to docs/reference/context/base_context.html diff --git a/docs/api-docs/slack_bolt/context/complete/async_complete.html b/docs/reference/context/complete/async_complete.html similarity index 100% rename from docs/api-docs/slack_bolt/context/complete/async_complete.html rename to docs/reference/context/complete/async_complete.html diff --git a/docs/api-docs/slack_bolt/context/complete/complete.html b/docs/reference/context/complete/complete.html similarity index 100% rename from docs/api-docs/slack_bolt/context/complete/complete.html rename to docs/reference/context/complete/complete.html diff --git a/docs/api-docs/slack_bolt/context/complete/index.html b/docs/reference/context/complete/index.html similarity index 100% rename from docs/api-docs/slack_bolt/context/complete/index.html rename to docs/reference/context/complete/index.html diff --git a/docs/api-docs/slack_bolt/context/context.html b/docs/reference/context/context.html similarity index 100% rename from docs/api-docs/slack_bolt/context/context.html rename to docs/reference/context/context.html diff --git a/docs/api-docs/slack_bolt/context/fail/async_fail.html b/docs/reference/context/fail/async_fail.html similarity index 100% rename from docs/api-docs/slack_bolt/context/fail/async_fail.html rename to docs/reference/context/fail/async_fail.html diff --git a/docs/api-docs/slack_bolt/context/fail/fail.html b/docs/reference/context/fail/fail.html similarity index 100% rename from docs/api-docs/slack_bolt/context/fail/fail.html rename to docs/reference/context/fail/fail.html diff --git a/docs/api-docs/slack_bolt/context/fail/index.html b/docs/reference/context/fail/index.html similarity index 100% rename from docs/api-docs/slack_bolt/context/fail/index.html rename to docs/reference/context/fail/index.html diff --git a/docs/api-docs/slack_bolt/context/get_thread_context/async_get_thread_context.html b/docs/reference/context/get_thread_context/async_get_thread_context.html similarity index 100% rename from docs/api-docs/slack_bolt/context/get_thread_context/async_get_thread_context.html rename to docs/reference/context/get_thread_context/async_get_thread_context.html diff --git a/docs/api-docs/slack_bolt/context/get_thread_context/get_thread_context.html b/docs/reference/context/get_thread_context/get_thread_context.html similarity index 100% rename from docs/api-docs/slack_bolt/context/get_thread_context/get_thread_context.html rename to docs/reference/context/get_thread_context/get_thread_context.html diff --git a/docs/api-docs/slack_bolt/context/get_thread_context/index.html b/docs/reference/context/get_thread_context/index.html similarity index 100% rename from docs/api-docs/slack_bolt/context/get_thread_context/index.html rename to docs/reference/context/get_thread_context/index.html diff --git a/docs/api-docs/slack_bolt/context/index.html b/docs/reference/context/index.html similarity index 100% rename from docs/api-docs/slack_bolt/context/index.html rename to docs/reference/context/index.html diff --git a/docs/api-docs/slack_bolt/context/respond/async_respond.html b/docs/reference/context/respond/async_respond.html similarity index 100% rename from docs/api-docs/slack_bolt/context/respond/async_respond.html rename to docs/reference/context/respond/async_respond.html diff --git a/docs/api-docs/slack_bolt/context/respond/index.html b/docs/reference/context/respond/index.html similarity index 100% rename from docs/api-docs/slack_bolt/context/respond/index.html rename to docs/reference/context/respond/index.html diff --git a/docs/api-docs/slack_bolt/context/respond/internals.html b/docs/reference/context/respond/internals.html similarity index 100% rename from docs/api-docs/slack_bolt/context/respond/internals.html rename to docs/reference/context/respond/internals.html diff --git a/docs/api-docs/slack_bolt/context/respond/respond.html b/docs/reference/context/respond/respond.html similarity index 100% rename from docs/api-docs/slack_bolt/context/respond/respond.html rename to docs/reference/context/respond/respond.html diff --git a/docs/api-docs/slack_bolt/context/save_thread_context/async_save_thread_context.html b/docs/reference/context/save_thread_context/async_save_thread_context.html similarity index 100% rename from docs/api-docs/slack_bolt/context/save_thread_context/async_save_thread_context.html rename to docs/reference/context/save_thread_context/async_save_thread_context.html diff --git a/docs/api-docs/slack_bolt/context/save_thread_context/index.html b/docs/reference/context/save_thread_context/index.html similarity index 100% rename from docs/api-docs/slack_bolt/context/save_thread_context/index.html rename to docs/reference/context/save_thread_context/index.html diff --git a/docs/api-docs/slack_bolt/context/save_thread_context/save_thread_context.html b/docs/reference/context/save_thread_context/save_thread_context.html similarity index 100% rename from docs/api-docs/slack_bolt/context/save_thread_context/save_thread_context.html rename to docs/reference/context/save_thread_context/save_thread_context.html diff --git a/docs/api-docs/slack_bolt/context/say/async_say.html b/docs/reference/context/say/async_say.html similarity index 100% rename from docs/api-docs/slack_bolt/context/say/async_say.html rename to docs/reference/context/say/async_say.html diff --git a/docs/api-docs/slack_bolt/context/say/index.html b/docs/reference/context/say/index.html similarity index 100% rename from docs/api-docs/slack_bolt/context/say/index.html rename to docs/reference/context/say/index.html diff --git a/docs/api-docs/slack_bolt/context/say/internals.html b/docs/reference/context/say/internals.html similarity index 100% rename from docs/api-docs/slack_bolt/context/say/internals.html rename to docs/reference/context/say/internals.html diff --git a/docs/api-docs/slack_bolt/context/say/say.html b/docs/reference/context/say/say.html similarity index 100% rename from docs/api-docs/slack_bolt/context/say/say.html rename to docs/reference/context/say/say.html diff --git a/docs/api-docs/slack_bolt/context/set_status/async_set_status.html b/docs/reference/context/set_status/async_set_status.html similarity index 100% rename from docs/api-docs/slack_bolt/context/set_status/async_set_status.html rename to docs/reference/context/set_status/async_set_status.html diff --git a/docs/api-docs/slack_bolt/context/set_status/index.html b/docs/reference/context/set_status/index.html similarity index 100% rename from docs/api-docs/slack_bolt/context/set_status/index.html rename to docs/reference/context/set_status/index.html diff --git a/docs/api-docs/slack_bolt/context/set_status/set_status.html b/docs/reference/context/set_status/set_status.html similarity index 100% rename from docs/api-docs/slack_bolt/context/set_status/set_status.html rename to docs/reference/context/set_status/set_status.html diff --git a/docs/api-docs/slack_bolt/context/set_suggested_prompts/async_set_suggested_prompts.html b/docs/reference/context/set_suggested_prompts/async_set_suggested_prompts.html similarity index 100% rename from docs/api-docs/slack_bolt/context/set_suggested_prompts/async_set_suggested_prompts.html rename to docs/reference/context/set_suggested_prompts/async_set_suggested_prompts.html diff --git a/docs/api-docs/slack_bolt/context/set_suggested_prompts/index.html b/docs/reference/context/set_suggested_prompts/index.html similarity index 100% rename from docs/api-docs/slack_bolt/context/set_suggested_prompts/index.html rename to docs/reference/context/set_suggested_prompts/index.html diff --git a/docs/api-docs/slack_bolt/context/set_suggested_prompts/set_suggested_prompts.html b/docs/reference/context/set_suggested_prompts/set_suggested_prompts.html similarity index 100% rename from docs/api-docs/slack_bolt/context/set_suggested_prompts/set_suggested_prompts.html rename to docs/reference/context/set_suggested_prompts/set_suggested_prompts.html diff --git a/docs/api-docs/slack_bolt/context/set_title/async_set_title.html b/docs/reference/context/set_title/async_set_title.html similarity index 100% rename from docs/api-docs/slack_bolt/context/set_title/async_set_title.html rename to docs/reference/context/set_title/async_set_title.html diff --git a/docs/api-docs/slack_bolt/context/set_title/index.html b/docs/reference/context/set_title/index.html similarity index 100% rename from docs/api-docs/slack_bolt/context/set_title/index.html rename to docs/reference/context/set_title/index.html diff --git a/docs/api-docs/slack_bolt/context/set_title/set_title.html b/docs/reference/context/set_title/set_title.html similarity index 100% rename from docs/api-docs/slack_bolt/context/set_title/set_title.html rename to docs/reference/context/set_title/set_title.html diff --git a/docs/api-docs/slack_bolt/error/index.html b/docs/reference/error/index.html similarity index 100% rename from docs/api-docs/slack_bolt/error/index.html rename to docs/reference/error/index.html diff --git a/docs/api-docs/slack_bolt/index.html b/docs/reference/index.html similarity index 100% rename from docs/api-docs/slack_bolt/index.html rename to docs/reference/index.html diff --git a/docs/api-docs/slack_bolt/kwargs_injection/args.html b/docs/reference/kwargs_injection/args.html similarity index 100% rename from docs/api-docs/slack_bolt/kwargs_injection/args.html rename to docs/reference/kwargs_injection/args.html diff --git a/docs/api-docs/slack_bolt/kwargs_injection/async_args.html b/docs/reference/kwargs_injection/async_args.html similarity index 100% rename from docs/api-docs/slack_bolt/kwargs_injection/async_args.html rename to docs/reference/kwargs_injection/async_args.html diff --git a/docs/api-docs/slack_bolt/kwargs_injection/async_utils.html b/docs/reference/kwargs_injection/async_utils.html similarity index 100% rename from docs/api-docs/slack_bolt/kwargs_injection/async_utils.html rename to docs/reference/kwargs_injection/async_utils.html diff --git a/docs/api-docs/slack_bolt/kwargs_injection/index.html b/docs/reference/kwargs_injection/index.html similarity index 100% rename from docs/api-docs/slack_bolt/kwargs_injection/index.html rename to docs/reference/kwargs_injection/index.html diff --git a/docs/api-docs/slack_bolt/kwargs_injection/utils.html b/docs/reference/kwargs_injection/utils.html similarity index 100% rename from docs/api-docs/slack_bolt/kwargs_injection/utils.html rename to docs/reference/kwargs_injection/utils.html diff --git a/docs/api-docs/slack_bolt/lazy_listener/async_internals.html b/docs/reference/lazy_listener/async_internals.html similarity index 100% rename from docs/api-docs/slack_bolt/lazy_listener/async_internals.html rename to docs/reference/lazy_listener/async_internals.html diff --git a/docs/api-docs/slack_bolt/lazy_listener/async_runner.html b/docs/reference/lazy_listener/async_runner.html similarity index 100% rename from docs/api-docs/slack_bolt/lazy_listener/async_runner.html rename to docs/reference/lazy_listener/async_runner.html diff --git a/docs/api-docs/slack_bolt/lazy_listener/asyncio_runner.html b/docs/reference/lazy_listener/asyncio_runner.html similarity index 100% rename from docs/api-docs/slack_bolt/lazy_listener/asyncio_runner.html rename to docs/reference/lazy_listener/asyncio_runner.html diff --git a/docs/api-docs/slack_bolt/lazy_listener/index.html b/docs/reference/lazy_listener/index.html similarity index 100% rename from docs/api-docs/slack_bolt/lazy_listener/index.html rename to docs/reference/lazy_listener/index.html diff --git a/docs/api-docs/slack_bolt/lazy_listener/internals.html b/docs/reference/lazy_listener/internals.html similarity index 100% rename from docs/api-docs/slack_bolt/lazy_listener/internals.html rename to docs/reference/lazy_listener/internals.html diff --git a/docs/api-docs/slack_bolt/lazy_listener/runner.html b/docs/reference/lazy_listener/runner.html similarity index 100% rename from docs/api-docs/slack_bolt/lazy_listener/runner.html rename to docs/reference/lazy_listener/runner.html diff --git a/docs/api-docs/slack_bolt/lazy_listener/thread_runner.html b/docs/reference/lazy_listener/thread_runner.html similarity index 100% rename from docs/api-docs/slack_bolt/lazy_listener/thread_runner.html rename to docs/reference/lazy_listener/thread_runner.html diff --git a/docs/api-docs/slack_bolt/listener/async_builtins.html b/docs/reference/listener/async_builtins.html similarity index 100% rename from docs/api-docs/slack_bolt/listener/async_builtins.html rename to docs/reference/listener/async_builtins.html diff --git a/docs/api-docs/slack_bolt/listener/async_listener.html b/docs/reference/listener/async_listener.html similarity index 100% rename from docs/api-docs/slack_bolt/listener/async_listener.html rename to docs/reference/listener/async_listener.html diff --git a/docs/api-docs/slack_bolt/listener/async_listener_completion_handler.html b/docs/reference/listener/async_listener_completion_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/listener/async_listener_completion_handler.html rename to docs/reference/listener/async_listener_completion_handler.html diff --git a/docs/api-docs/slack_bolt/listener/async_listener_error_handler.html b/docs/reference/listener/async_listener_error_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/listener/async_listener_error_handler.html rename to docs/reference/listener/async_listener_error_handler.html diff --git a/docs/api-docs/slack_bolt/listener/async_listener_start_handler.html b/docs/reference/listener/async_listener_start_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/listener/async_listener_start_handler.html rename to docs/reference/listener/async_listener_start_handler.html diff --git a/docs/api-docs/slack_bolt/listener/asyncio_runner.html b/docs/reference/listener/asyncio_runner.html similarity index 100% rename from docs/api-docs/slack_bolt/listener/asyncio_runner.html rename to docs/reference/listener/asyncio_runner.html diff --git a/docs/api-docs/slack_bolt/listener/builtins.html b/docs/reference/listener/builtins.html similarity index 100% rename from docs/api-docs/slack_bolt/listener/builtins.html rename to docs/reference/listener/builtins.html diff --git a/docs/api-docs/slack_bolt/listener/custom_listener.html b/docs/reference/listener/custom_listener.html similarity index 100% rename from docs/api-docs/slack_bolt/listener/custom_listener.html rename to docs/reference/listener/custom_listener.html diff --git a/docs/api-docs/slack_bolt/listener/index.html b/docs/reference/listener/index.html similarity index 100% rename from docs/api-docs/slack_bolt/listener/index.html rename to docs/reference/listener/index.html diff --git a/docs/api-docs/slack_bolt/listener/listener.html b/docs/reference/listener/listener.html similarity index 100% rename from docs/api-docs/slack_bolt/listener/listener.html rename to docs/reference/listener/listener.html diff --git a/docs/api-docs/slack_bolt/listener/listener_completion_handler.html b/docs/reference/listener/listener_completion_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/listener/listener_completion_handler.html rename to docs/reference/listener/listener_completion_handler.html diff --git a/docs/api-docs/slack_bolt/listener/listener_error_handler.html b/docs/reference/listener/listener_error_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/listener/listener_error_handler.html rename to docs/reference/listener/listener_error_handler.html diff --git a/docs/api-docs/slack_bolt/listener/listener_start_handler.html b/docs/reference/listener/listener_start_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/listener/listener_start_handler.html rename to docs/reference/listener/listener_start_handler.html diff --git a/docs/api-docs/slack_bolt/listener/thread_runner.html b/docs/reference/listener/thread_runner.html similarity index 100% rename from docs/api-docs/slack_bolt/listener/thread_runner.html rename to docs/reference/listener/thread_runner.html diff --git a/docs/api-docs/slack_bolt/listener_matcher/async_builtins.html b/docs/reference/listener_matcher/async_builtins.html similarity index 100% rename from docs/api-docs/slack_bolt/listener_matcher/async_builtins.html rename to docs/reference/listener_matcher/async_builtins.html diff --git a/docs/api-docs/slack_bolt/listener_matcher/async_listener_matcher.html b/docs/reference/listener_matcher/async_listener_matcher.html similarity index 100% rename from docs/api-docs/slack_bolt/listener_matcher/async_listener_matcher.html rename to docs/reference/listener_matcher/async_listener_matcher.html diff --git a/docs/api-docs/slack_bolt/listener_matcher/builtins.html b/docs/reference/listener_matcher/builtins.html similarity index 100% rename from docs/api-docs/slack_bolt/listener_matcher/builtins.html rename to docs/reference/listener_matcher/builtins.html diff --git a/docs/api-docs/slack_bolt/listener_matcher/custom_listener_matcher.html b/docs/reference/listener_matcher/custom_listener_matcher.html similarity index 100% rename from docs/api-docs/slack_bolt/listener_matcher/custom_listener_matcher.html rename to docs/reference/listener_matcher/custom_listener_matcher.html diff --git a/docs/api-docs/slack_bolt/listener_matcher/index.html b/docs/reference/listener_matcher/index.html similarity index 100% rename from docs/api-docs/slack_bolt/listener_matcher/index.html rename to docs/reference/listener_matcher/index.html diff --git a/docs/api-docs/slack_bolt/listener_matcher/listener_matcher.html b/docs/reference/listener_matcher/listener_matcher.html similarity index 100% rename from docs/api-docs/slack_bolt/listener_matcher/listener_matcher.html rename to docs/reference/listener_matcher/listener_matcher.html diff --git a/docs/api-docs/slack_bolt/logger/index.html b/docs/reference/logger/index.html similarity index 100% rename from docs/api-docs/slack_bolt/logger/index.html rename to docs/reference/logger/index.html diff --git a/docs/api-docs/slack_bolt/logger/messages.html b/docs/reference/logger/messages.html similarity index 100% rename from docs/api-docs/slack_bolt/logger/messages.html rename to docs/reference/logger/messages.html diff --git a/docs/api-docs/slack_bolt/middleware/assistant/assistant.html b/docs/reference/middleware/assistant/assistant.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/assistant/assistant.html rename to docs/reference/middleware/assistant/assistant.html diff --git a/docs/api-docs/slack_bolt/middleware/assistant/async_assistant.html b/docs/reference/middleware/assistant/async_assistant.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/assistant/async_assistant.html rename to docs/reference/middleware/assistant/async_assistant.html diff --git a/docs/api-docs/slack_bolt/middleware/assistant/index.html b/docs/reference/middleware/assistant/index.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/assistant/index.html rename to docs/reference/middleware/assistant/index.html diff --git a/docs/api-docs/slack_bolt/middleware/async_builtins.html b/docs/reference/middleware/async_builtins.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/async_builtins.html rename to docs/reference/middleware/async_builtins.html diff --git a/docs/api-docs/slack_bolt/middleware/async_custom_middleware.html b/docs/reference/middleware/async_custom_middleware.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/async_custom_middleware.html rename to docs/reference/middleware/async_custom_middleware.html diff --git a/docs/api-docs/slack_bolt/middleware/async_middleware.html b/docs/reference/middleware/async_middleware.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/async_middleware.html rename to docs/reference/middleware/async_middleware.html diff --git a/docs/api-docs/slack_bolt/middleware/async_middleware_error_handler.html b/docs/reference/middleware/async_middleware_error_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/async_middleware_error_handler.html rename to docs/reference/middleware/async_middleware_error_handler.html diff --git a/docs/api-docs/slack_bolt/middleware/attaching_function_token/async_attaching_function_token.html b/docs/reference/middleware/attaching_function_token/async_attaching_function_token.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/attaching_function_token/async_attaching_function_token.html rename to docs/reference/middleware/attaching_function_token/async_attaching_function_token.html diff --git a/docs/api-docs/slack_bolt/middleware/attaching_function_token/attaching_function_token.html b/docs/reference/middleware/attaching_function_token/attaching_function_token.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/attaching_function_token/attaching_function_token.html rename to docs/reference/middleware/attaching_function_token/attaching_function_token.html diff --git a/docs/api-docs/slack_bolt/middleware/attaching_function_token/index.html b/docs/reference/middleware/attaching_function_token/index.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/attaching_function_token/index.html rename to docs/reference/middleware/attaching_function_token/index.html diff --git a/docs/api-docs/slack_bolt/middleware/authorization/async_authorization.html b/docs/reference/middleware/authorization/async_authorization.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/authorization/async_authorization.html rename to docs/reference/middleware/authorization/async_authorization.html diff --git a/docs/api-docs/slack_bolt/middleware/authorization/async_internals.html b/docs/reference/middleware/authorization/async_internals.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/authorization/async_internals.html rename to docs/reference/middleware/authorization/async_internals.html diff --git a/docs/api-docs/slack_bolt/middleware/authorization/async_multi_teams_authorization.html b/docs/reference/middleware/authorization/async_multi_teams_authorization.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/authorization/async_multi_teams_authorization.html rename to docs/reference/middleware/authorization/async_multi_teams_authorization.html diff --git a/docs/api-docs/slack_bolt/middleware/authorization/async_single_team_authorization.html b/docs/reference/middleware/authorization/async_single_team_authorization.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/authorization/async_single_team_authorization.html rename to docs/reference/middleware/authorization/async_single_team_authorization.html diff --git a/docs/api-docs/slack_bolt/middleware/authorization/authorization.html b/docs/reference/middleware/authorization/authorization.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/authorization/authorization.html rename to docs/reference/middleware/authorization/authorization.html diff --git a/docs/api-docs/slack_bolt/middleware/authorization/index.html b/docs/reference/middleware/authorization/index.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/authorization/index.html rename to docs/reference/middleware/authorization/index.html diff --git a/docs/api-docs/slack_bolt/middleware/authorization/internals.html b/docs/reference/middleware/authorization/internals.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/authorization/internals.html rename to docs/reference/middleware/authorization/internals.html diff --git a/docs/api-docs/slack_bolt/middleware/authorization/multi_teams_authorization.html b/docs/reference/middleware/authorization/multi_teams_authorization.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/authorization/multi_teams_authorization.html rename to docs/reference/middleware/authorization/multi_teams_authorization.html diff --git a/docs/api-docs/slack_bolt/middleware/authorization/single_team_authorization.html b/docs/reference/middleware/authorization/single_team_authorization.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/authorization/single_team_authorization.html rename to docs/reference/middleware/authorization/single_team_authorization.html diff --git a/docs/api-docs/slack_bolt/middleware/custom_middleware.html b/docs/reference/middleware/custom_middleware.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/custom_middleware.html rename to docs/reference/middleware/custom_middleware.html diff --git a/docs/api-docs/slack_bolt/middleware/ignoring_self_events/async_ignoring_self_events.html b/docs/reference/middleware/ignoring_self_events/async_ignoring_self_events.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/ignoring_self_events/async_ignoring_self_events.html rename to docs/reference/middleware/ignoring_self_events/async_ignoring_self_events.html diff --git a/docs/api-docs/slack_bolt/middleware/ignoring_self_events/ignoring_self_events.html b/docs/reference/middleware/ignoring_self_events/ignoring_self_events.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/ignoring_self_events/ignoring_self_events.html rename to docs/reference/middleware/ignoring_self_events/ignoring_self_events.html diff --git a/docs/api-docs/slack_bolt/middleware/ignoring_self_events/index.html b/docs/reference/middleware/ignoring_self_events/index.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/ignoring_self_events/index.html rename to docs/reference/middleware/ignoring_self_events/index.html diff --git a/docs/api-docs/slack_bolt/middleware/index.html b/docs/reference/middleware/index.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/index.html rename to docs/reference/middleware/index.html diff --git a/docs/api-docs/slack_bolt/middleware/message_listener_matches/async_message_listener_matches.html b/docs/reference/middleware/message_listener_matches/async_message_listener_matches.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/message_listener_matches/async_message_listener_matches.html rename to docs/reference/middleware/message_listener_matches/async_message_listener_matches.html diff --git a/docs/api-docs/slack_bolt/middleware/message_listener_matches/index.html b/docs/reference/middleware/message_listener_matches/index.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/message_listener_matches/index.html rename to docs/reference/middleware/message_listener_matches/index.html diff --git a/docs/api-docs/slack_bolt/middleware/message_listener_matches/message_listener_matches.html b/docs/reference/middleware/message_listener_matches/message_listener_matches.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/message_listener_matches/message_listener_matches.html rename to docs/reference/middleware/message_listener_matches/message_listener_matches.html diff --git a/docs/api-docs/slack_bolt/middleware/middleware.html b/docs/reference/middleware/middleware.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/middleware.html rename to docs/reference/middleware/middleware.html diff --git a/docs/api-docs/slack_bolt/middleware/middleware_error_handler.html b/docs/reference/middleware/middleware_error_handler.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/middleware_error_handler.html rename to docs/reference/middleware/middleware_error_handler.html diff --git a/docs/api-docs/slack_bolt/middleware/request_verification/async_request_verification.html b/docs/reference/middleware/request_verification/async_request_verification.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/request_verification/async_request_verification.html rename to docs/reference/middleware/request_verification/async_request_verification.html diff --git a/docs/api-docs/slack_bolt/middleware/request_verification/index.html b/docs/reference/middleware/request_verification/index.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/request_verification/index.html rename to docs/reference/middleware/request_verification/index.html diff --git a/docs/api-docs/slack_bolt/middleware/request_verification/request_verification.html b/docs/reference/middleware/request_verification/request_verification.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/request_verification/request_verification.html rename to docs/reference/middleware/request_verification/request_verification.html diff --git a/docs/api-docs/slack_bolt/middleware/ssl_check/async_ssl_check.html b/docs/reference/middleware/ssl_check/async_ssl_check.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/ssl_check/async_ssl_check.html rename to docs/reference/middleware/ssl_check/async_ssl_check.html diff --git a/docs/api-docs/slack_bolt/middleware/ssl_check/index.html b/docs/reference/middleware/ssl_check/index.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/ssl_check/index.html rename to docs/reference/middleware/ssl_check/index.html diff --git a/docs/api-docs/slack_bolt/middleware/ssl_check/ssl_check.html b/docs/reference/middleware/ssl_check/ssl_check.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/ssl_check/ssl_check.html rename to docs/reference/middleware/ssl_check/ssl_check.html diff --git a/docs/api-docs/slack_bolt/middleware/url_verification/async_url_verification.html b/docs/reference/middleware/url_verification/async_url_verification.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/url_verification/async_url_verification.html rename to docs/reference/middleware/url_verification/async_url_verification.html diff --git a/docs/api-docs/slack_bolt/middleware/url_verification/index.html b/docs/reference/middleware/url_verification/index.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/url_verification/index.html rename to docs/reference/middleware/url_verification/index.html diff --git a/docs/api-docs/slack_bolt/middleware/url_verification/url_verification.html b/docs/reference/middleware/url_verification/url_verification.html similarity index 100% rename from docs/api-docs/slack_bolt/middleware/url_verification/url_verification.html rename to docs/reference/middleware/url_verification/url_verification.html diff --git a/docs/api-docs/slack_bolt/oauth/async_callback_options.html b/docs/reference/oauth/async_callback_options.html similarity index 100% rename from docs/api-docs/slack_bolt/oauth/async_callback_options.html rename to docs/reference/oauth/async_callback_options.html diff --git a/docs/api-docs/slack_bolt/oauth/async_internals.html b/docs/reference/oauth/async_internals.html similarity index 100% rename from docs/api-docs/slack_bolt/oauth/async_internals.html rename to docs/reference/oauth/async_internals.html diff --git a/docs/api-docs/slack_bolt/oauth/async_oauth_flow.html b/docs/reference/oauth/async_oauth_flow.html similarity index 100% rename from docs/api-docs/slack_bolt/oauth/async_oauth_flow.html rename to docs/reference/oauth/async_oauth_flow.html diff --git a/docs/api-docs/slack_bolt/oauth/async_oauth_settings.html b/docs/reference/oauth/async_oauth_settings.html similarity index 100% rename from docs/api-docs/slack_bolt/oauth/async_oauth_settings.html rename to docs/reference/oauth/async_oauth_settings.html diff --git a/docs/api-docs/slack_bolt/oauth/callback_options.html b/docs/reference/oauth/callback_options.html similarity index 100% rename from docs/api-docs/slack_bolt/oauth/callback_options.html rename to docs/reference/oauth/callback_options.html diff --git a/docs/api-docs/slack_bolt/oauth/index.html b/docs/reference/oauth/index.html similarity index 100% rename from docs/api-docs/slack_bolt/oauth/index.html rename to docs/reference/oauth/index.html diff --git a/docs/api-docs/slack_bolt/oauth/internals.html b/docs/reference/oauth/internals.html similarity index 100% rename from docs/api-docs/slack_bolt/oauth/internals.html rename to docs/reference/oauth/internals.html diff --git a/docs/api-docs/slack_bolt/oauth/oauth_flow.html b/docs/reference/oauth/oauth_flow.html similarity index 100% rename from docs/api-docs/slack_bolt/oauth/oauth_flow.html rename to docs/reference/oauth/oauth_flow.html diff --git a/docs/api-docs/slack_bolt/oauth/oauth_settings.html b/docs/reference/oauth/oauth_settings.html similarity index 100% rename from docs/api-docs/slack_bolt/oauth/oauth_settings.html rename to docs/reference/oauth/oauth_settings.html diff --git a/docs/api-docs/slack_bolt/request/async_internals.html b/docs/reference/request/async_internals.html similarity index 100% rename from docs/api-docs/slack_bolt/request/async_internals.html rename to docs/reference/request/async_internals.html diff --git a/docs/api-docs/slack_bolt/request/async_request.html b/docs/reference/request/async_request.html similarity index 100% rename from docs/api-docs/slack_bolt/request/async_request.html rename to docs/reference/request/async_request.html diff --git a/docs/api-docs/slack_bolt/request/index.html b/docs/reference/request/index.html similarity index 100% rename from docs/api-docs/slack_bolt/request/index.html rename to docs/reference/request/index.html diff --git a/docs/api-docs/slack_bolt/request/internals.html b/docs/reference/request/internals.html similarity index 100% rename from docs/api-docs/slack_bolt/request/internals.html rename to docs/reference/request/internals.html diff --git a/docs/api-docs/slack_bolt/request/payload_utils.html b/docs/reference/request/payload_utils.html similarity index 100% rename from docs/api-docs/slack_bolt/request/payload_utils.html rename to docs/reference/request/payload_utils.html diff --git a/docs/api-docs/slack_bolt/request/request.html b/docs/reference/request/request.html similarity index 100% rename from docs/api-docs/slack_bolt/request/request.html rename to docs/reference/request/request.html diff --git a/docs/api-docs/slack_bolt/response/index.html b/docs/reference/response/index.html similarity index 100% rename from docs/api-docs/slack_bolt/response/index.html rename to docs/reference/response/index.html diff --git a/docs/api-docs/slack_bolt/response/response.html b/docs/reference/response/response.html similarity index 100% rename from docs/api-docs/slack_bolt/response/response.html rename to docs/reference/response/response.html diff --git a/docs/api-docs/slack_bolt/util/async_utils.html b/docs/reference/util/async_utils.html similarity index 100% rename from docs/api-docs/slack_bolt/util/async_utils.html rename to docs/reference/util/async_utils.html diff --git a/docs/api-docs/slack_bolt/util/index.html b/docs/reference/util/index.html similarity index 100% rename from docs/api-docs/slack_bolt/util/index.html rename to docs/reference/util/index.html diff --git a/docs/api-docs/slack_bolt/util/utils.html b/docs/reference/util/utils.html similarity index 100% rename from docs/api-docs/slack_bolt/util/utils.html rename to docs/reference/util/utils.html diff --git a/docs/api-docs/slack_bolt/version.html b/docs/reference/version.html similarity index 100% rename from docs/api-docs/slack_bolt/version.html rename to docs/reference/version.html diff --git a/docs/api-docs/slack_bolt/workflows/index.html b/docs/reference/workflows/index.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/index.html rename to docs/reference/workflows/index.html diff --git a/docs/api-docs/slack_bolt/workflows/step/async_step.html b/docs/reference/workflows/step/async_step.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/step/async_step.html rename to docs/reference/workflows/step/async_step.html diff --git a/docs/api-docs/slack_bolt/workflows/step/async_step_middleware.html b/docs/reference/workflows/step/async_step_middleware.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/step/async_step_middleware.html rename to docs/reference/workflows/step/async_step_middleware.html diff --git a/docs/api-docs/slack_bolt/workflows/step/index.html b/docs/reference/workflows/step/index.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/step/index.html rename to docs/reference/workflows/step/index.html diff --git a/docs/api-docs/slack_bolt/workflows/step/internals.html b/docs/reference/workflows/step/internals.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/step/internals.html rename to docs/reference/workflows/step/internals.html diff --git a/docs/api-docs/slack_bolt/workflows/step/step.html b/docs/reference/workflows/step/step.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/step/step.html rename to docs/reference/workflows/step/step.html diff --git a/docs/api-docs/slack_bolt/workflows/step/step_middleware.html b/docs/reference/workflows/step/step_middleware.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/step/step_middleware.html rename to docs/reference/workflows/step/step_middleware.html diff --git a/docs/api-docs/slack_bolt/workflows/step/utilities/async_complete.html b/docs/reference/workflows/step/utilities/async_complete.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/step/utilities/async_complete.html rename to docs/reference/workflows/step/utilities/async_complete.html diff --git a/docs/api-docs/slack_bolt/workflows/step/utilities/async_configure.html b/docs/reference/workflows/step/utilities/async_configure.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/step/utilities/async_configure.html rename to docs/reference/workflows/step/utilities/async_configure.html diff --git a/docs/api-docs/slack_bolt/workflows/step/utilities/async_fail.html b/docs/reference/workflows/step/utilities/async_fail.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/step/utilities/async_fail.html rename to docs/reference/workflows/step/utilities/async_fail.html diff --git a/docs/api-docs/slack_bolt/workflows/step/utilities/async_update.html b/docs/reference/workflows/step/utilities/async_update.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/step/utilities/async_update.html rename to docs/reference/workflows/step/utilities/async_update.html diff --git a/docs/api-docs/slack_bolt/workflows/step/utilities/complete.html b/docs/reference/workflows/step/utilities/complete.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/step/utilities/complete.html rename to docs/reference/workflows/step/utilities/complete.html diff --git a/docs/api-docs/slack_bolt/workflows/step/utilities/configure.html b/docs/reference/workflows/step/utilities/configure.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/step/utilities/configure.html rename to docs/reference/workflows/step/utilities/configure.html diff --git a/docs/api-docs/slack_bolt/workflows/step/utilities/fail.html b/docs/reference/workflows/step/utilities/fail.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/step/utilities/fail.html rename to docs/reference/workflows/step/utilities/fail.html diff --git a/docs/api-docs/slack_bolt/workflows/step/utilities/index.html b/docs/reference/workflows/step/utilities/index.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/step/utilities/index.html rename to docs/reference/workflows/step/utilities/index.html diff --git a/docs/api-docs/slack_bolt/workflows/step/utilities/update.html b/docs/reference/workflows/step/utilities/update.html similarity index 100% rename from docs/api-docs/slack_bolt/workflows/step/utilities/update.html rename to docs/reference/workflows/step/utilities/update.html From 913ca1d8b7febb7a386c04894c7abf6bca86baf0 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 16 Jul 2025 10:52:30 -0700 Subject: [PATCH 14/42] adds sidebar reference --- docs/english/_sidebar.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json index 3c4308e36..2dc5b531d 100644 --- a/docs/english/_sidebar.json +++ b/docs/english/_sidebar.json @@ -104,7 +104,7 @@ { "type": "link", "label": "Reference", - "href": "https://tools.slack.dev/bolt-python/api-docs/slack_bolt/" + "href": "/bolt-python/reference/index.html" }, { "type": "html", "value": "
" }, { From 74b7ee42eb6639baaec9784bcb23395f83391e93 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 16 Jul 2025 10:54:18 -0700 Subject: [PATCH 15/42] full link for reference --- docs/english/_sidebar.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json index 2dc5b531d..c0cf2d6b1 100644 --- a/docs/english/_sidebar.json +++ b/docs/english/_sidebar.json @@ -104,7 +104,7 @@ { "type": "link", "label": "Reference", - "href": "/bolt-python/reference/index.html" + "href": "https://docs.slack.dev/bolt-python/reference/index.html" }, { "type": "html", "value": "
" }, { From f12a645675dfcba2a812e65ab93f847d74552b5d Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Thu, 17 Jul 2025 09:03:57 -0700 Subject: [PATCH 16/42] matching sidebar --- docs/english/_sidebar.json | 250 +++++++++++++++++++------------------ 1 file changed, 126 insertions(+), 124 deletions(-) diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json index c0cf2d6b1..74e6bd09d 100644 --- a/docs/english/_sidebar.json +++ b/docs/english/_sidebar.json @@ -1,125 +1,127 @@ [ - { - "type": "doc", - "id": "bolt-python/index", - "label": "Bolt for Python", - "className": "sidebar-title" - }, - { "type": "html", "value": "
" }, - { - "type": "category", - "label": "Guides", - "collapsed": false, - "items": [ - "bolt-python/getting-started", - { - "type": "category", - "label": "Slack API calls", - "items": ["bolt-python/concepts/message-sending", "bolt-python/concepts/web-api"] - }, - { - "type": "category", - "label": "Events", - "items": ["bolt-python/concepts/message-listening", "bolt-python/concepts/event-listening"] - }, - { - "type": "category", - "label": "App UI & Interactivity", - "items": [ - "bolt-python/concepts/acknowledge", - "bolt-python/concepts/shortcuts", - "bolt-python/concepts/commands", - "bolt-python/concepts/actions", - "bolt-python/concepts/opening-modals", - "bolt-python/concepts/updating-pushing-views", - "bolt-python/concepts/view-submissions", - "bolt-python/concepts/select-menu-options", - "bolt-python/concepts/app-home" - ] - }, - "bolt-python/concepts/ai-apps", - { - "type": "category", - "label": "Custom Steps", - "items": [ - "bolt-python/concepts/custom-steps", - "bolt-python/concepts/custom-steps-dynamic-options" - ] - }, - { - "type": "category", - "label": "App Configuration", - "items": [ - "bolt-python/concepts/socket-mode", - "bolt-python/concepts/errors", - "bolt-python/concepts/logging", - "bolt-python/concepts/async" - ] - }, - { - "type": "category", - "label": "Middleware & Context", - "items": [ - "bolt-python/concepts/global-middleware", - "bolt-python/concepts/listener-middleware", - "bolt-python/concepts/context" - ] - }, - "bolt-python/concepts/lazy-listeners", - { - "type": "category", - "label": "Adaptors", - "items": ["bolt-python/concepts/adapters", "bolt-python/concepts/custom-adapters"] - }, - { - "type": "category", - "label": "Authorization & Security", - "items": [ - "bolt-python/concepts/authenticating-oauth", - "bolt-python/concepts/authorization", - "bolt-python/concepts/token-rotation" - ] - }, - { - "type": "category", - "label": "Legacy", - "items": ["bolt-python/legacy/steps-from-apps"] - } - ] - }, - { "type": "html", "value": "
" }, - { - "type": "category", - "label": "Tutorials", - "items": [ - "bolt-python/tutorial/ai-chatbot/ai-chatbot", - "bolt-python/tutorial/custom-steps", - "bolt-python/tutorial/custom-steps-for-jira/custom-steps-for-jira", - "bolt-python/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new", - "bolt-python/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing", - "bolt-python/tutorial/modals/modals" - ] - }, - { "type": "html", "value": "
" }, - { - "type": "link", - "label": "Reference", - "href": "https://docs.slack.dev/bolt-python/reference/index.html" - }, - { "type": "html", "value": "
" }, - { - "type": "link", - "label": "Release notes", - "href": "https://github.com/slackapi/bolt-python/releases" - }, - { - "type": "link", - "label": "Code on GitHub", - "href": "https://github.com/SlackAPI/bolt-python" - }, - { - "type": "link", - "label": "Contributors Guide", - "href": "https://github.com/SlackAPI/bolt-python/blob/main/.github/contributing.md" - } - ] + { + "type": "doc", + "id": "bolt-python/index", + "label": "Bolt for Python", + "className": "sidebar-title" + }, + { "type": "html", "value": "
" }, + "bolt-python/getting-started", + { + "type": "category", + "label": "Slack API calls", + "items": [ + "bolt-python/concepts/message-sending", + "bolt-python/concepts/web-api" + ] + }, + { + "type": "category", + "label": "Events", + "items": [ + "bolt-python/concepts/message-listening", + "bolt-python/concepts/event-listening" + ] + }, + { + "type": "category", + "label": "App UI & Interactivity", + "items": [ + "bolt-python/concepts/acknowledge", + "bolt-python/concepts/shortcuts", + "bolt-python/concepts/commands", + "bolt-python/concepts/actions", + "bolt-python/concepts/opening-modals", + "bolt-python/concepts/updating-pushing-views", + "bolt-python/concepts/view-submissions", + "bolt-python/concepts/select-menu-options", + "bolt-python/concepts/app-home" + ] + }, + "bolt-python/concepts/ai-apps", + { + "type": "category", + "label": "Custom Steps", + "items": [ + "bolt-python/concepts/custom-steps", + "bolt-python/concepts/custom-steps-dynamic-options" + ] + }, + { + "type": "category", + "label": "App Configuration", + "items": [ + "bolt-python/concepts/socket-mode", + "bolt-python/concepts/errors", + "bolt-python/concepts/logging", + "bolt-python/concepts/async" + ] + }, + { + "type": "category", + "label": "Middleware & Context", + "items": [ + "bolt-python/concepts/global-middleware", + "bolt-python/concepts/listener-middleware", + "bolt-python/concepts/context" + ] + }, + "bolt-python/concepts/lazy-listeners", + { + "type": "category", + "label": "Adaptors", + "items": [ + "bolt-python/concepts/adapters", + "bolt-python/concepts/custom-adapters" + ] + }, + { + "type": "category", + "label": "Authorization & Security", + "items": [ + "bolt-python/concepts/authenticating-oauth", + "bolt-python/concepts/authorization", + "bolt-python/concepts/token-rotation" + ] + }, + { + "type": "category", + "label": "Legacy", + "items": ["bolt-python/legacy/steps-from-apps"] + }, + { "type": "html", "value": "
" }, + { + "type": "category", + "label": "Tutorials", + "items": [ + "bolt-python/tutorial/ai-chatbot/ai-chatbot", + "bolt-python/tutorial/custom-steps", + "bolt-python/tutorial/custom-steps-for-jira/custom-steps-for-jira", + "bolt-python/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new", + "bolt-python/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing", + "bolt-python/tutorial/modals/modals" + ] + }, + { "type": "html", "value": "
" }, + { + "type": "link", + "label": "Reference", + "href": "https://docs.slack.dev/bolt-python/reference/index.html" + }, + { "type": "html", "value": "
" }, + { + "type": "link", + "label": "Release notes", + "href": "https://github.com/slackapi/bolt-python/releases" + }, + { + "type": "link", + "label": "Code on GitHub", + "href": "https://github.com/SlackAPI/bolt-python" + }, + { + "type": "link", + "label": "Contributors Guide", + "href": "https://github.com/SlackAPI/bolt-python/blob/main/.github/contributing.md" + } +] From 53ceb1cf229f1c1ab4663ec7975df099afbd7aab Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Thu, 17 Jul 2025 09:05:24 -0700 Subject: [PATCH 17/42] quickstart uptop --- docs/english/_sidebar.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json index 74e6bd09d..f6ada5acb 100644 --- a/docs/english/_sidebar.json +++ b/docs/english/_sidebar.json @@ -5,8 +5,8 @@ "label": "Bolt for Python", "className": "sidebar-title" }, - { "type": "html", "value": "
" }, "bolt-python/getting-started", + { "type": "html", "value": "
" }, { "type": "category", "label": "Slack API calls", From 7675e83993f05c27405bd070ebb72ebecc79ad24 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Thu, 17 Jul 2025 12:10:06 -0700 Subject: [PATCH 18/42] links --- docs/english/_sidebar.json | 2 +- docs/english/building-an-app.md | 40 +++++++++--------- docs/english/concepts/acknowledge.md | 6 +-- docs/english/concepts/actions.md | 8 ++-- docs/english/concepts/ai-apps.md | 42 +++++++++---------- docs/english/concepts/app-home.md | 8 ++-- docs/english/concepts/authenticating-oauth.md | 6 +-- docs/english/concepts/authorization.md | 2 +- docs/english/concepts/commands.md | 4 +- docs/english/concepts/custom-adapters.md | 2 +- .../concepts/custom-steps-dynamic-options.md | 32 +++++++------- docs/english/concepts/custom-steps.md | 10 ++--- docs/english/concepts/event-listening.md | 6 +-- docs/english/concepts/global-middleware.md | 2 +- docs/english/concepts/listener-middleware.md | 2 +- docs/english/concepts/message-listening.md | 4 +- docs/english/concepts/message-sending.md | 6 +-- docs/english/concepts/opening-modals.md | 6 +-- docs/english/concepts/select-menu-options.md | 8 ++-- docs/english/concepts/shortcuts.md | 12 +++--- docs/english/concepts/socket-mode.md | 4 +- docs/english/concepts/token-rotation.md | 4 +- .../concepts/updating-pushing-views.md | 8 ++-- docs/english/concepts/view-submissions.md | 10 ++--- docs/english/concepts/web-api.md | 4 +- docs/english/getting-started.md | 28 ++++++------- docs/english/index.md | 2 +- docs/english/legacy/steps-from-apps.md | 28 ++++++------- .../english/tutorial/ai-chatbot/ai-chatbot.md | 8 ++-- .../custom-steps-for-jira.md | 8 ++-- .../custom-steps-workflow-builder-existing.md | 6 +-- .../custom-steps-workflow-builder-new.md | 8 ++-- docs/english/tutorial/custom-steps.md | 12 +++--- docs/english/tutorial/modals/modals.md | 10 ++--- docs/japanese/concepts/acknowledge.md | 6 +-- docs/japanese/concepts/actions.md | 8 ++-- docs/japanese/concepts/app-home.md | 8 ++-- docs/japanese/concepts/assistant.md | 10 ++--- .../japanese/concepts/authenticating-oauth.md | 6 +-- docs/japanese/concepts/authorization.md | 2 +- docs/japanese/concepts/commands.md | 4 +- docs/japanese/concepts/custom-adapters.md | 2 +- docs/japanese/concepts/custom-steps.md | 10 ++--- docs/japanese/concepts/event-listening.md | 6 +-- docs/japanese/concepts/global-middleware.md | 2 +- docs/japanese/concepts/listener-middleware.md | 2 +- docs/japanese/concepts/message-listening.md | 4 +- docs/japanese/concepts/message-sending.md | 6 +-- docs/japanese/concepts/opening-modals.md | 6 +-- docs/japanese/concepts/select-menu-options.md | 8 ++-- docs/japanese/concepts/shortcuts.md | 12 +++--- docs/japanese/concepts/socket-mode.md | 4 +- docs/japanese/concepts/token-rotation.md | 4 +- .../concepts/updating-pushing-views.md | 8 ++-- docs/japanese/concepts/view-submissions.md | 10 ++--- docs/japanese/concepts/web-api.md | 4 +- docs/japanese/current.json | 2 +- docs/japanese/getting-started.md | 38 ++++++++--------- docs/japanese/legacy/steps-from-apps.md | 24 +++++------ 59 files changed, 272 insertions(+), 272 deletions(-) diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json index f6ada5acb..4286c72e5 100644 --- a/docs/english/_sidebar.json +++ b/docs/english/_sidebar.json @@ -106,7 +106,7 @@ { "type": "link", "label": "Reference", - "href": "https://docs.slack.dev/bolt-python/reference/index.html" + "href": "/bolt-python/reference/index.html" }, { "type": "html", "value": "
" }, { diff --git a/docs/english/building-an-app.md b/docs/english/building-an-app.md index e0b147490..f8fbe061b 100644 --- a/docs/english/building-an-app.md +++ b/docs/english/building-an-app.md @@ -31,18 +31,18 @@ Look around, add an app icon and description, and then let's start configuring y --- ### Tokens and installing apps {#tokens-and-installing-apps} -Slack apps use [OAuth to manage access to Slack's APIs](https://docs.slack.dev/authentication/installing-with-oauth). When an app is installed, you'll receive a token that the app can use to call API methods. +Slack apps use [OAuth to manage access to Slack's APIs](/authentication/installing-with-oauth). When an app is installed, you'll receive a token that the app can use to call API methods. There are three main token types available to a Slack app: user (`xoxp`), bot (`xoxb`), and app-level (`xapp`) tokens. -- [User tokens](https://docs.slack.dev/authentication/tokens#user) allow you to call API methods on behalf of users after they install or authenticate the app. There may be several user tokens for a single workspace. -- [Bot tokens](https://docs.slack.dev/authentication/tokens#bot) are associated with bot users, and are only granted once in a workspace where someone installs the app. The bot token your app uses will be the same no matter which user performed the installation. Bot tokens are the token type that _most_ apps use. -- [App-level tokens](https://docs.slack.dev/authentication/tokens#app-level) represent your app across organizations, including installations by all individual users on all workspaces in a given organization and are commonly used for creating WebSocket connections to your app. +- [User tokens](/authentication/tokens#user) allow you to call API methods on behalf of users after they install or authenticate the app. There may be several user tokens for a single workspace. +- [Bot tokens](/authentication/tokens#bot) are associated with bot users, and are only granted once in a workspace where someone installs the app. The bot token your app uses will be the same no matter which user performed the installation. Bot tokens are the token type that _most_ apps use. +- [App-level tokens](/authentication/tokens#app-level) represent your app across organizations, including installations by all individual users on all workspaces in a given organization and are commonly used for creating WebSocket connections to your app. We're going to use bot and app-level tokens for this guide. 1. Navigate to **OAuth & Permissions** on the left sidebar and scroll down to the **Bot Token Scopes** section. Click **Add an OAuth Scope**. -2. For now, we'll just add one scope: [`chat:write`](https://docs.slack.dev/reference/scopes/chat.write). This grants your app the permission to post messages in channels it's a member of. +2. For now, we'll just add one scope: [`chat:write`](/reference/scopes/chat.write). This grants your app the permission to post messages in channels it's a member of. 3. Scroll up to the top of the **OAuth & Permissions** page and click **Install App to Workspace**. You'll be led through Slack's OAuth UI, where you should allow your app to be installed to your development workspace. @@ -56,7 +56,7 @@ We're going to use bot and app-level tokens for this guide. :::tip[Not sharing is sometimes caring] -Treat your tokens like passwords and [keep them safe](https://docs.slack.dev/authentication/best-practices-for-security). Your app uses tokens to post and retrieve information from Slack workspaces. +Treat your tokens like passwords and [keep them safe](/authentication/best-practices-for-security). Your app uses tokens to post and retrieve information from Slack workspaces. ::: @@ -104,7 +104,7 @@ $ export SLACK_APP_TOKEN= :::warning[Keep it secret. Keep it safe.] -Remember to keep your tokens secure. At a minimum, you should avoid checking them into public version control, and access them via environment variables as we've done above. Check out the API documentation for more on [best practices for app security](https://docs.slack.dev/authentication/best-practices-for-security). +Remember to keep your tokens secure. At a minimum, you should avoid checking them into public version control, and access them via environment variables as we've done above. Check out the API documentation for more on [best practices for app security](/authentication/best-practices-for-security). ::: @@ -142,9 +142,9 @@ Your app should let you know that it's up and running. 🎉 ### Setting up events {#setting-up-events} Your app behaves similarly to people on your team — it can post messages, add emoji reactions, and listen and respond to events. -To listen for events happening in a Slack workspace (like when a message is posted or when a reaction is posted to a message) you'll use the [Events API to subscribe to event types](https://docs.slack.dev/apis/events-api/). +To listen for events happening in a Slack workspace (like when a message is posted or when a reaction is posted to a message) you'll use the [Events API to subscribe to event types](/apis/events-api/). -For those just starting, we recommend using [Socket Mode](https://docs.slack.dev/apis/events-api/using-socket-mode). Socket Mode allows your app to use the Events API and interactive features without exposing a public HTTP Request URL. This can be helpful during development, or if you're receiving requests from behind a firewall. +For those just starting, we recommend using [Socket Mode](/apis/events-api/using-socket-mode). Socket Mode allows your app to use the Events API and interactive features without exposing a public HTTP Request URL. This can be helpful during development, or if you're receiving requests from behind a firewall. That being said, you're welcome to set up an app with a public HTTP Request URL. HTTP is more useful for apps being deployed to hosting environments to respond within a large corporate Slack workspaces/organization, or apps intended for distribution via the Slack Marketplace. @@ -169,11 +169,11 @@ When an event occurs, Slack will send your app some information about the event, 1. Go back to your app configuration page (click on the app [from your app management page](https://api.slack.com/apps)). Click **Event Subscriptions** on the left sidebar. Toggle the switch labeled **Enable Events**. -2. Add your Request URL. Slack will send HTTP POST requests corresponding to events to this [Request URL](https://docs.slack.dev/apis/events-api/#subscribing) endpoint. Bolt uses the `/slack/events` path to listen to all incoming requests (whether shortcuts, events, or interactivity payloads). When configuring your Request URL within your app configuration, you'll append `/slack/events`, e.g. `https:///slack/events`. 💡 As long as your Bolt app is still running, your URL should become verified. +2. Add your Request URL. Slack will send HTTP POST requests corresponding to events to this [Request URL](/apis/events-api/#subscribing) endpoint. Bolt uses the `/slack/events` path to listen to all incoming requests (whether shortcuts, events, or interactivity payloads). When configuring your Request URL within your app configuration, you'll append `/slack/events`, e.g. `https:///slack/events`. 💡 As long as your Bolt app is still running, your URL should become verified. :::tip[Using proxy services] -For local development, you can use a proxy service like ngrok to create a public URL and tunnel requests to your development environment. Refer to [ngrok's getting started guide](https://ngrok.com/docs#getting-started-expose) on how to create this tunnel. And when you get to hosting your app, we've collected some of the most common hosting providers Slack developers use to host their apps [on our API site](https://docs.slack.dev/distribution/hosting-slack-apps/). +For local development, you can use a proxy service like ngrok to create a public URL and tunnel requests to your development environment. Refer to [ngrok's getting started guide](https://ngrok.com/docs#getting-started-expose) on how to create this tunnel. And when you get to hosting your app, we've collected some of the most common hosting providers Slack developers use to host their apps [on our API site](/distribution/hosting-slack-apps/). ::: @@ -181,10 +181,10 @@ For local development, you can use a proxy service like ngrok to create a public Navigate to **Event Subscriptions** on the left sidebar and toggle to enable. Under **Subscribe to Bot Events**, you can add events for your bot to respond to. There are four events related to messages: -- [`message.channels`](https://docs.slack.dev/reference/events/message.channels) listens for messages in public channels that your app is added to. -- [`message.groups`](https://docs.slack.dev/reference/events/message.groups) listens for messages in 🔒 private channels that your app is added to. -- [`message.im`](https://docs.slack.dev/reference/events/message.im) listens for messages in your app's DMs with users. -- [`message.mpim`](https://docs.slack.dev/reference/events/message.mpim) listens for messages in multi-person DMs that your app is added to. +- [`message.channels`](/reference/events/message.channels) listens for messages in public channels that your app is added to. +- [`message.groups`](/reference/events/message.groups) listens for messages in 🔒 private channels that your app is added to. +- [`message.im`](/reference/events/message.im) listens for messages in your app's DMs with users. +- [`message.mpim`](/reference/events/message.mpim) listens for messages in multi-person DMs that your app is added to. If you want your bot to listen to messages from everywhere it is added to, choose all four message events. After you’ve selected the events you want your bot to listen to, click the green **Save Changes** button. @@ -208,7 +208,7 @@ app = App(token=os.environ.get("SLACK_BOT_TOKEN")) # Listens to incoming messages that contain "hello" # To learn available listener arguments, -# visit https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html +# visit https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html @app.message("hello") def message_hello(message, say): # say() sends a message to the channel where the event was triggered @@ -234,7 +234,7 @@ app = App( # Listens to incoming messages that contain "hello" # To learn available listener arguments, -# visit https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html +# visit https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html @app.message("hello") def message_hello(message, say): # say() sends a message to the channel where the event was triggered @@ -476,8 +476,8 @@ Now that you have a basic app up and running, you can start exploring how to mak * Read through the concepts pages to learn about the different methods and features your Bolt app has access to. -* Explore the different events your bot can listen to with the [`app.event()`](/concepts/event-listening) method. All of the events are listed [on the API docs site](https://docs.slack.dev/reference/events). +* Explore the different events your bot can listen to with the [`app.event()`](/bolt-python/concepts/event-listening) method. All of the events are listed [on the API docs site](/reference/events). -* Bolt allows you to [call Web API methods](/concepts/web-api) with the client attached to your app. There are [over 200 methods](https://docs.slack.dev/reference/methods) on our API site. +* Bolt allows you to [call Web API methods](/bolt-python/concepts/web-api) with the client attached to your app. There are [over 200 methods](/reference/methods) on our API site. -* Learn more about the different token types [on the API docs site](https://docs.slack.dev/authentication/tokens). Your app may need different tokens depending on the actions you want it to perform. +* Learn more about the different token types [on the API docs site](/authentication/tokens). Your app may need different tokens depending on the actions you want it to perform. diff --git a/docs/english/concepts/acknowledge.md b/docs/english/concepts/acknowledge.md index 1ddc1db0f..b51075315 100644 --- a/docs/english/concepts/acknowledge.md +++ b/docs/english/concepts/acknowledge.md @@ -6,15 +6,15 @@ slug: /concepts/acknowledge Actions, commands, shortcuts, options requests, and view submissions must **always** be acknowledged using the `ack()` function. This lets Slack know that the request was received so that it may update the Slack user interface accordingly. -Depending on the type of request, your acknowledgement may be different. For example, when acknowledging a menu selection associated with an external data source, you would call `ack()` with a list of relevant [options](https://docs.slack.dev/reference/block-kit/composition-objects/option-object/). When acknowledging a view submission, you may supply a `response_action` as part of your acknowledgement to [update the view](/concepts/view_submissions). +Depending on the type of request, your acknowledgement may be different. For example, when acknowledging a menu selection associated with an external data source, you would call `ack()` with a list of relevant [options](/reference/block-kit/composition-objects/option-object/). When acknowledging a view submission, you may supply a `response_action` as part of your acknowledgement to [update the view](/bolt-python/concepts/view_submissions). We recommend calling `ack()` right away before initiating any time-consuming processes such as fetching information from your database or sending a new message, since you only have 3 seconds to respond before Slack registers a timeout error. -:::info[When working in a FaaS / serverless environment, our guidelines for when to `ack()` are different. See the section on [Lazy listeners (FaaS)](/concepts/lazy-listeners) for more detail on this.] +:::info[When working in a FaaS / serverless environment, our guidelines for when to `ack()` are different. See the section on [Lazy listeners (FaaS)](/bolt-python/concepts/lazy-listeners) for more detail on this.] ::: -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. ```python # Example of responding to an external_select options request @app.options("menu_selection") diff --git a/docs/english/concepts/actions.md b/docs/english/concepts/actions.md index 018642b4a..f1a691e58 100644 --- a/docs/english/concepts/actions.md +++ b/docs/english/concepts/actions.md @@ -10,9 +10,9 @@ Your app can listen and respond to user actions, like button clicks, and menu se Actions can be filtered on an `action_id` parameter of type `str` or `re.Pattern`. The `action_id` parameter acts as a unique identifier for interactive components on the Slack platform. -You'll notice in all `action()` examples, `ack()` is used. It is required to call the `ack()` function within an action listener to acknowledge that the request was received from Slack. This is discussed in the [acknowledging requests guide](/concepts/acknowledge). +You'll notice in all `action()` examples, `ack()` is used. It is required to call the `ack()` function within an action listener to acknowledge that the request was received from Slack. This is discussed in the [acknowledging requests guide](/bolt-python/concepts/acknowledge). -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. ```python # Your listener will be called every time a block element with the action_id "approve_button" is triggered @@ -49,7 +49,7 @@ There are two main ways to respond to actions. The first (and most common) way i The second way to respond to actions is using `respond()`, which is a utility to use the `response_url` associated with the action. -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. ```python # Your listener will be called every time an interactive component with the action_id “approve_button” is triggered @@ -62,7 +62,7 @@ def approve_request(ack, say): ### Using `respond()` method -Since `respond()` is a utility for calling the `response_url`, it behaves in the same way. You can pass [all the message payload properties](https://docs.slack.dev/messaging/#payloads) as keyword arguments along with optional properties like `response_type` (which has a value of `"in_channel"` or `"ephemeral"`), `replace_original`, `delete_original`, `unfurl_links`, and `unfurl_media`. With that, your app can send a new message payload that will be published back to the source of the original interaction. +Since `respond()` is a utility for calling the `response_url`, it behaves in the same way. You can pass [all the message payload properties](/messaging/#payloads) as keyword arguments along with optional properties like `response_type` (which has a value of `"in_channel"` or `"ephemeral"`), `replace_original`, `delete_original`, `unfurl_links`, and `unfurl_media`. With that, your app can send a new message payload that will be published back to the source of the original interaction. ```python # Listens to actions triggered with action_id of “user_select” diff --git a/docs/english/concepts/ai-apps.md b/docs/english/concepts/ai-apps.md index 6134171b2..e40c9f9c9 100644 --- a/docs/english/concepts/ai-apps.md +++ b/docs/english/concepts/ai-apps.md @@ -8,21 +8,21 @@ slug: /concepts/ai-apps If you don't have a paid workspace for development, you can join the [Developer Program](https://api.slack.com/developer-program) and provision a sandbox with access to all Slack features for free. ::: -AI apps comprise a new messaging experience for Slack. If you're unfamiliar with using AI apps within Slack, you'll want to read the [API documentation on the subject](https://docs.slack.dev/ai/). Then come back here to implement them with Bolt! +AI apps comprise a new messaging experience for Slack. If you're unfamiliar with using AI apps within Slack, you'll want to read the [API documentation on the subject](/ai/). Then come back here to implement them with Bolt! ## Configuring your app to support AI features {#configuring-your-app} 1. Within [App Settings](https://api.slack.com/apps), enable the **Agents & AI Apps** feature. 2. Within the App Settings **OAuth & Permissions** page, add the following scopes: -* [`assistant:write`](https://docs.slack.dev/reference/scopes/assistant.write) -* [`chat:write`](https://docs.slack.dev/reference/scopes/chat.write) -* [`im:history`](https://docs.slack.dev/reference/scopes/im.history) +* [`assistant:write`](/reference/scopes/assistant.write) +* [`chat:write`](/reference/scopes/chat.write) +* [`im:history`](/reference/scopes/im.history) 3. Within the App Settings **Event Subscriptions** page, subscribe to the following events: -* [`assistant_thread_started`](https://docs.slack.dev/reference/events/assistant_thread_started) -* [`assistant_thread_context_changed`](https://docs.slack.dev/reference/events/assistant_thread_context_changed) -* [`message.im`](https://docs.slack.dev/reference/events/message.im) +* [`assistant_thread_started`](/reference/events/assistant_thread_started) +* [`assistant_thread_context_changed`](/reference/events/assistant_thread_context_changed) +* [`message.im`](/reference/events/message.im) :::info[You _could_ implement your own AI app by [listening](event-listening) for the `assistant_thread_started`, `assistant_thread_context_changed`, and `message.im` events (see implementation details below).] @@ -34,9 +34,9 @@ That being said, using the `Assistant` class will streamline the process. And we The `Assistant` class can be used to handle the incoming events expected from a user interacting with an AI app in Slack. A typical flow would look like: -1. [The user starts a thread](#handling-a-new-thread). The `Assistant` class handles the incoming [`assistant_thread_started`](https://docs.slack.dev/reference/events/assistant_thread_started) event. -2. [The thread context may change at any point](#handling-thread-context-changes). The `Assistant` class can handle any incoming [`assistant_thread_context_changed`](https://docs.slack.dev/reference/events/assistant_thread_context_changed) events. The class also provides a default context store to keep track of thread context changes as the user moves through Slack. -3. [The user responds](#handling-the-user-response). The `Assistant` class handles the incoming [`message.im`](https://docs.slack.dev/reference/events/message.im) event. +1. [The user starts a thread](#handling-a-new-thread). The `Assistant` class handles the incoming [`assistant_thread_started`](/reference/events/assistant_thread_started) event. +2. [The thread context may change at any point](#handling-thread-context-changes). The `Assistant` class can handle any incoming [`assistant_thread_context_changed`](/reference/events/assistant_thread_context_changed) events. The class also provides a default context store to keep track of thread context changes as the user moves through Slack. +3. [The user responds](#handling-the-user-response). The `Assistant` class handles the incoming [`message.im`](/reference/events/message.im) event. ```python @@ -99,23 +99,23 @@ def respond_in_assistant_thread( app.use(assistant) ``` -While the `assistant_thread_started` and `assistant_thread_context_changed` events do provide Slack-client thread context information, the `message.im` event does not. Any subsequent user message events won't contain thread context data. For that reason, Bolt not only provides a way to store thread context — the `threadContextStore` property — but it also provides an instance that is utilized by default. This implementation relies on storing and retrieving [message metadata](https://docs.slack.dev/messaging/message-metadata/) as the user interacts with the app. +While the `assistant_thread_started` and `assistant_thread_context_changed` events do provide Slack-client thread context information, the `message.im` event does not. Any subsequent user message events won't contain thread context data. For that reason, Bolt not only provides a way to store thread context — the `threadContextStore` property — but it also provides an instance that is utilized by default. This implementation relies on storing and retrieving [message metadata](/messaging/message-metadata/) as the user interacts with the app. If you do provide your own `threadContextStore` property, it must feature `get` and `save` methods. -:::tip[Refer to the [module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments.] +:::tip[Refer to the [module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments.] ::: ## Handling a new thread {#handling-a-new-thread} -When the user opens a new thread with your AI app, the [`assistant_thread_started`](https://docs.slack.dev/reference/events/assistant_thread_started) event will be sent to your app. +When the user opens a new thread with your AI app, the [`assistant_thread_started`](/reference/events/assistant_thread_started) event will be sent to your app. :::tip[When a user opens an AI app thread while in a channel, the channel info is stored as the thread's `AssistantThreadContext` data. You can grab that info by using the `get_thread_context` utility, as subsequent user message event payloads won't include the channel info.] ::: ### Block Kit interactions in the AI app thread {#block-kit-interactions} -For advanced use cases, Block Kit buttons may be used instead of suggested prompts, as well as the sending of messages with structured [metadata](https://docs.slack.dev/messaging/message-metadata/) to trigger subsequent interactions with the user. +For advanced use cases, Block Kit buttons may be used instead of suggested prompts, as well as the sending of messages with structured [metadata](/messaging/message-metadata/) to trigger subsequent interactions with the user. For example, an app can display a button such as "Summarize the referring channel" in the initial reply. When the user clicks the button and submits detailed information (such as the number of messages, days to check, purpose of the summary, etc.), the app can handle that information and post a message that describes the request with structured metadata. @@ -241,9 +241,9 @@ def respond_to_bot_messages(logger: logging.Logger, set_status: SetStatus, say: ## Handling thread context changes {#handling-thread-context-changes} -When the user switches channels, the [`assistant_thread_context_changed`](https://docs.slack.dev/reference/events/assistant_thread_context_changed) event will be sent to your app. +When the user switches channels, the [`assistant_thread_context_changed`](/reference/events/assistant_thread_context_changed) event will be sent to your app. -If you use the built-in `Assistant` middleware without any custom configuration, the updated context data is automatically saved as [message metadata](https://docs.slack.dev/messaging/message-metadata/) of the first reply from the app. +If you use the built-in `Assistant` middleware without any custom configuration, the updated context data is automatically saved as [message metadata](/messaging/message-metadata/) of the first reply from the app. As long as you use the built-in approach, you don't need to store the context data within a datastore. The downside of this default behavior is the overhead of additional calls to the Slack API. These calls include those to `conversations.history`, which are used to look up the stored message metadata that contains the thread context (via `get_thread_context`). @@ -256,14 +256,14 @@ assistant = Assistant(thread_context_store=FileAssistantThreadContextStore()) ## Handling the user response {#handling-the-user-response} -When the user messages your app, the [`message.im`](https://docs.slack.dev/reference/events/message.im) event will be sent to your app. +When the user messages your app, the [`message.im`](/reference/events/message.im) event will be sent to your app. -Messages sent to the app do not contain a [subtype](https://docs.slack.dev/reference/events/message#subtypes) and must be deduced based on their shape and any provided [message metadata](https://docs.slack.dev/messaging/message-metadata/). +Messages sent to the app do not contain a [subtype](/reference/events/message#subtypes) and must be deduced based on their shape and any provided [message metadata](/messaging/message-metadata/). There are three utilities that are particularly useful in curating the user experience: -* [`say`](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/#slack_bolt.Say) -* [`setTitle`](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/#slack_bolt.SetTitle) -* [`setStatus`](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/#slack_bolt.SetStatus) +* [`say`](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/#slack_bolt.Say) +* [`setTitle`](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/#slack_bolt.SetTitle) +* [`setStatus`](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/#slack_bolt.SetStatus) ```python ... diff --git a/docs/english/concepts/app-home.md b/docs/english/concepts/app-home.md index d29bfc4d6..8e27fadf4 100644 --- a/docs/english/concepts/app-home.md +++ b/docs/english/concepts/app-home.md @@ -4,11 +4,11 @@ lang: en slug: /concepts/app-home --- -[Home tabs](https://docs.slack.dev/surfaces/app-home) are customizable surfaces accessible via the sidebar and search that allow apps to display views on a per-user basis. After enabling App Home within your app configuration, home tabs can be published and updated by passing a `user_id` and [view payload](https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload/#view_submission) to the [`views.publish`](https://docs.slack.dev/reference/methods/views.publis) method. +[Home tabs](/surfaces/app-home) are customizable surfaces accessible via the sidebar and search that allow apps to display views on a per-user basis. After enabling App Home within your app configuration, home tabs can be published and updated by passing a `user_id` and [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission) to the [`views.publish`](/reference/methods/views.publis) method. -You can subscribe to the [`app_home_opened`](https://docs.slack.dev/reference/events/app_home_opened) event to listen for when users open your App Home. +You can subscribe to the [`app_home_opened`](/reference/events/app_home_opened) event to listen for when users open your App Home. -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. ```python @app.event("app_home_opened") def update_home_tab(client, event, logger): @@ -32,7 +32,7 @@ def update_home_tab(client, event, logger): "type": "section", "text": { "type": "mrkdwn", - "text": "Learn how home tabs can be more useful and interactive ." + "text": "Learn how home tabs can be more useful and interactive ." } } ] diff --git a/docs/english/concepts/authenticating-oauth.md b/docs/english/concepts/authenticating-oauth.md index 1fabe3522..880687a15 100644 --- a/docs/english/concepts/authenticating-oauth.md +++ b/docs/english/concepts/authenticating-oauth.md @@ -4,15 +4,15 @@ lang: en slug: /concepts/authenticating-oauth --- -Slack apps installed on multiple workspaces will need to implement OAuth, then store installation information (like access tokens) securely. By providing `client_id`, `client_secret`, `scopes`, `installation_store`, and `state_store` when initializing App, Bolt for Python will handle the work of setting up OAuth routes and verifying state. If you're implementing a custom adapter, you can make use of our [OAuth library](https://tools.slack.dev/python-slack-sdk/oauth/), which is what Bolt for Python uses under the hood. +Slack apps installed on multiple workspaces will need to implement OAuth, then store installation information (like access tokens) securely. By providing `client_id`, `client_secret`, `scopes`, `installation_store`, and `state_store` when initializing App, Bolt for Python will handle the work of setting up OAuth routes and verifying state. If you're implementing a custom adapter, you can make use of our [OAuth library](/python-slack-sdk/oauth/), which is what Bolt for Python uses under the hood. Bolt for Python will create a **Redirect URL** `slack/oauth_redirect`, which Slack uses to redirect users after they complete your app's installation flow. You will need to add this **Redirect URL** in your app configuration settings under **OAuth and Permissions**. This path can be configured in the `OAuthSettings` argument described below. Bolt for Python will also create a `slack/install` route, where you can find an **Add to Slack** button for your app to perform direct installs of your app. If you need any additional authorizations (user tokens) from users inside a team when your app is already installed or a reason to dynamically generate an install URL, you can pass your own custom URL generator to `oauth_settings` as `authorize_url_generator`. -Bolt for Python automatically includes support for [org wide installations](https://docs.slack.dev/enterprise-grid/) in version `1.1.0+`. Org wide installations can be enabled in your app configuration settings under **Org Level Apps**. +Bolt for Python automatically includes support for [org wide installations](/enterprise-grid/) in version `1.1.0+`. Org wide installations can be enabled in your app configuration settings under **Org Level Apps**. -To learn more about the OAuth installation flow with Slack, [read the API documentation](https://docs.slack.dev/authentication/installing-with-oauth). +To learn more about the OAuth installation flow with Slack, [read the API documentation](/authentication/installing-with-oauth). ```python import os diff --git a/docs/english/concepts/authorization.md b/docs/english/concepts/authorization.md index 4c293b5c2..bb9bfc10f 100644 --- a/docs/english/concepts/authorization.md +++ b/docs/english/concepts/authorization.md @@ -6,7 +6,7 @@ slug: /concepts/authorization Authorization is the process of determining which Slack credentials should be available while processing an incoming Slack request. -Apps installed on a single workspace can simply pass their bot token into the `App` constructor using the `token` parameter. However, if your app will be installed on multiple workspaces, you have two options. The easier option is to use the built-in OAuth support. This will handle setting up OAuth routes and verifying state. Read the section on [authenticating with OAuth](/concepts/authenticating-oauth) for details. +Apps installed on a single workspace can simply pass their bot token into the `App` constructor using the `token` parameter. However, if your app will be installed on multiple workspaces, you have two options. The easier option is to use the built-in OAuth support. This will handle setting up OAuth routes and verifying state. Read the section on [authenticating with OAuth](/bolt-python/concepts/authenticating-oauth) for details. For a more custom solution, you can set the `authorize` parameter to a function upon `App` instantiation. The `authorize` function should return [an instance of `AuthorizeResult`](https://github.com/slackapi/bolt-python/blob/main/slack_bolt/authorization/authorize_result.py), which contains information about who and where the request is coming from. diff --git a/docs/english/concepts/commands.md b/docs/english/concepts/commands.md index 4c99f6628..be01f8b56 100644 --- a/docs/english/concepts/commands.md +++ b/docs/english/concepts/commands.md @@ -8,11 +8,11 @@ Your app can use the `command()` method to listen to incoming slash command requ Commands must be acknowledged with `ack()` to inform Slack your app has received the request. -There are two ways to respond to slash commands. The first way is to use `say()`, which accepts a string or JSON payload. The second is `respond()` which is a utility for the `response_url`. These are explained in more depth in the [responding to actions](/concepts/actions) section. +There are two ways to respond to slash commands. The first way is to use `say()`, which accepts a string or JSON payload. The second is `respond()` which is a utility for the `response_url`. These are explained in more depth in the [responding to actions](/bolt-python/concepts/actions) section. When setting up commands within your app configuration, you'll append `/slack/events` to your request URL. -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. ```python # The echo command simply echoes on command @app.command("/echo") diff --git a/docs/english/concepts/custom-adapters.md b/docs/english/concepts/custom-adapters.md index 55c73130d..805ce1869 100644 --- a/docs/english/concepts/custom-adapters.md +++ b/docs/english/concepts/custom-adapters.md @@ -4,7 +4,7 @@ lang: en slug: /concepts/custom-adapters --- -[Adapters](/concepts/adapters) are flexible and can be adjusted based on the framework you prefer. There are two necessary components of adapters: +[Adapters](/bolt-python/concepts/adapters) are flexible and can be adjusted based on the framework you prefer. There are two necessary components of adapters: - `__init__(app: App)`: Constructor that accepts and stores an instance of the Bolt `App`. - `handle(req: Request)`: Function (typically named `handle()`) that receives incoming Slack requests, parses them to conform to an instance of [`BoltRequest`](https://github.com/slackapi/bolt-python/blob/main/slack_bolt/request/request.py), then dispatches them to the stored Bolt app. diff --git a/docs/english/concepts/custom-steps-dynamic-options.md b/docs/english/concepts/custom-steps-dynamic-options.md index cab3f7a61..47ed6c7f4 100644 --- a/docs/english/concepts/custom-steps-dynamic-options.md +++ b/docs/english/concepts/custom-steps-dynamic-options.md @@ -2,7 +2,7 @@ ## Background {#background} -[Legacy steps from apps](https://docs.slack.dev/changelog/2023-08-workflow-steps-from-apps-step-back) previously enabled Slack apps to create and process custom workflow steps, which could then be shared and used by anyone in Workflow Builder. To support your transition away from them, custom steps used as dynamic options are available. These allow you to use data defined when referencing the step in Workflow Builder as inputs to the step. +[Legacy steps from apps](/changelog/2023-08-workflow-steps-from-apps-step-back) previously enabled Slack apps to create and process custom workflow steps, which could then be shared and used by anyone in Workflow Builder. To support your transition away from them, custom steps used as dynamic options are available. These allow you to use data defined when referencing the step in Workflow Builder as inputs to the step. ## Example use case {#use-case} @@ -88,13 +88,13 @@ The `inputs` attribute defines the parameters to be passed as inputs to the step The following format can be used to reference any input parameter defined by the step: `{{input_parameters.}}`. -In addition, the `{{client.query}}` parameter can be used as a placeholder for an input value. The `{{client.builder_context}}` parameter will inject the [`slack#/types/user_context`](https://tools.slack.dev/deno-slack-sdk/reference/slack-types/#usercontext) of the user building the workflow as the value to the input parameter. +In addition, the `{{client.query}}` parameter can be used as a placeholder for an input value. The `{{client.builder_context}}` parameter will inject the [`slack#/types/user_context`](/deno-slack-sdk/reference/slack-types/#usercontext) of the user building the workflow as the value to the input parameter. ### Types of dynamic options UIs {#dynamic-option-UIs} The above example demonstrates one possible UI to be rendered for builders: a single-select drop-down menu of dynamic options. However, dynamic options in Workflow Builder can be rendered in one of two ways: as a drop-down menu (single-select or multi-select), or as a set of fields. -The type is dictated by the output parameter of the custom step used as a dynamic option. In order to use a custom step in a dynamic option context, its output must adhere to a defined interface, that is, it must have an `options` parameter of type [`options_select`](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#options_select) or [`options_field`](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#options_field), as shown in the following code snippet. +The type is dictated by the output parameter of the custom step used as a dynamic option. In order to use a custom step in a dynamic option context, its output must adhere to a defined interface, that is, it must have an `options` parameter of type [`options_select`](/deno-slack-sdk/reference/slack-types#options_select) or [`options_field`](/deno-slack-sdk/reference/slack-types#options_field), as shown in the following code snippet. ```js "output_parameters": { @@ -109,9 +109,9 @@ The type is dictated by the output parameter of the custom step used as a dynami #### Drop-down menus {#drop-down} -Your dynamic input parameter can be rendered as a drop-down menu, which will use the options obtained from a custom step with an `options` output parameter of the type [`options_select`](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#options_select). +Your dynamic input parameter can be rendered as a drop-down menu, which will use the options obtained from a custom step with an `options` output parameter of the type [`options_select`](/deno-slack-sdk/reference/slack-types#options_select). -The drop-down menu UI component can be rendered in two ways: single-select, or multi-select. To render the dynamic input as a single-select menu, the input parameter defining the dynamic option must be of the type [`string`](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#string). +The drop-down menu UI component can be rendered in two ways: single-select, or multi-select. To render the dynamic input as a single-select menu, the input parameter defining the dynamic option must be of the type [`string`](/deno-slack-sdk/reference/slack-types#string). ```js "step-with-dynamic-input": { @@ -133,7 +133,7 @@ The drop-down menu UI component can be rendered in two ways: single-select, or m } ``` -To render the dynamic input as a multi-select menu, the input parameter defining the dynamic option must be of the type [`array`](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#array), and its `items` must be of type [`string`](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#string). +To render the dynamic input as a multi-select menu, the input parameter defining the dynamic option must be of the type [`array`](/deno-slack-sdk/reference/slack-types#array), and its `items` must be of type [`string`](/deno-slack-sdk/reference/slack-types#string). ```js "step-with-dynamic-input": { @@ -159,9 +159,9 @@ To render the dynamic input as a multi-select menu, the input parameter defining #### Fields {#fields} -In the code snippet below, the input parameter is rendered as a set of fields with keys and values. The option fields are obtained from a custom step with an `options` output parameter of type [`options_field`](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#options_field). +In the code snippet below, the input parameter is rendered as a set of fields with keys and values. The option fields are obtained from a custom step with an `options` output parameter of type [`options_field`](/deno-slack-sdk/reference/slack-types#options_field). -The input parameter that defines the dynamic option must be of type [`object`](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#object), as the completed set of fields in Workflow Builder will be passed to the custom step as an [untyped object](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#untyped-object) during workflow execution. +The input parameter that defines the dynamic option must be of type [`object`](/deno-slack-sdk/reference/slack-types#object), as the completed set of fields in Workflow Builder will be passed to the custom step as an [untyped object](/deno-slack-sdk/reference/slack-types#untyped-object) during workflow execution. ```js "test-field-dynamic-options": { @@ -185,20 +185,20 @@ The input parameter that defines the dynamic option must be of type [`object`](h ### Dynamic option types {#dynamic-option-types} -As mentioned earlier, in order to use a custom step as a dynamic option, its output must adhere to a defined interface: it must have an `options` output parameter of the type either [`options_select`](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#options_select) or [`options_field`](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#options_field). +As mentioned earlier, in order to use a custom step as a dynamic option, its output must adhere to a defined interface: it must have an `options` output parameter of the type either [`options_select`](/deno-slack-sdk/reference/slack-types#options_select) or [`options_field`](/deno-slack-sdk/reference/slack-types#options_field). -To take a look at these in more detail, refer to our [Options Slack type](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#options) documentation. +To take a look at these in more detail, refer to our [Options Slack type](/deno-slack-sdk/reference/slack-types#options) documentation. ## Dynamic options handler {#dynamic-option-handler} Each custom step defined in the manifest needs a corresponding handler in your Slack app. Although implemented similarly to existing function execution event handlers, there are two key differences between regular custom step invocations and those used for dynamic options: -* The custom step must have an `options` output parameter that is of type [`options_select`](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#options_select) or [`options_field`](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#options_field). -* The [`function_executed`](https://docs.slack.dev/reference/events/function_executed) event must be handled synchronously. This optimizes the response time of returned dynamic options and provides a crisp builder experience. +* The custom step must have an `options` output parameter that is of type [`options_select`](/deno-slack-sdk/reference/slack-types#options_select) or [`options_field`](/deno-slack-sdk/reference/slack-types#options_field). +* The [`function_executed`](/reference/events/function_executed) event must be handled synchronously. This optimizes the response time of returned dynamic options and provides a crisp builder experience. ### Asynchronous event handling {#async} -By default, the [Bolt family of frameworks](https://tools.slack.dev/) handles `function_executed` events asynchronously. +By default, the Bolt family of frameworks handles `function_executed` events asynchronously. For example, the various modal-related API methods provide two ways to update a view: synchronously using a `response_action` HTTP response, or asynchronously using a separate HTTP API call. Using the asynchronous approach allows developers to handle events free of timeouts, but this isn't desired for dynamic options as it introduces delays and violates our stated goal of providing a crisp builder experience. @@ -208,13 +208,13 @@ Dynamic options support synchronous handling of `function_executed` events. By e ### Implementation {#implementation} -To optimize the response time of dynamic options, you must acknowledge the incoming event after calling the [`function.completeSuccess`](https://docs.slack.dev/reference/methods/functions.completeSuccess) or [`function.completeError`](https://docs.slack.dev/reference/methods/functions.completeError) API methods, minimizing asynchronous latency. The `function.completeSuccess` and `function.completeError` API methods are invoked in the complete and fail helper functions. ([For example](https://github.com/slackapi/bolt-python?tab=readme-ov-file#making-things-happen)). +To optimize the response time of dynamic options, you must acknowledge the incoming event after calling the [`function.completeSuccess`](/reference/methods/functions.completeSuccess) or [`function.completeError`](/reference/methods/functions.completeError) API methods, minimizing asynchronous latency. The `function.completeSuccess` and `function.completeError` API methods are invoked in the complete and fail helper functions. ([For example](https://github.com/slackapi/bolt-python?tab=readme-ov-file#making-things-happen)). A new `auto_acknowledge` flag allows you more granular control over whether specific event handlers should operate in synchronous or asynchronous response modes in order to enable a smooth dynamic options experience. #### Example {#bolt-py} -In [Bolt for Python](https://tools.slack.dev/bolt-python/), you can set `auto_acknowledge=False` on a specific function decorator. This allows you to manually control when the `ack()` event acknowledgement helper function is executed. It flips Bolt to synchronous `function_executed` event handling mode for the specific handler. +In [Bolt for Python](https://docs.slack.dev/bolt-python/), you can set `auto_acknowledge=False` on a specific function decorator. This allows you to manually control when the `ack()` event acknowledgement helper function is executed. It flips Bolt to synchronous `function_executed` event handling mode for the specific handler. ```py @app.function("get-projects", auto_acknowledge=False) @@ -244,4 +244,4 @@ def handle_get_projects(ack: Ack, complete: Complete): ack() ``` -✨ **To learn more about the Bolt family of frameworks and tools**, check out our [Slack Developer Tools](https://tools.slack.dev/). +✨ **To learn more about the Bolt family of frameworks and tools**, check out our [Slack Developer Tools](/tools). diff --git a/docs/english/concepts/custom-steps.md b/docs/english/concepts/custom-steps.md index 52e3d76e2..53241ec6d 100644 --- a/docs/english/concepts/custom-steps.md +++ b/docs/english/concepts/custom-steps.md @@ -5,14 +5,14 @@ lang: en slug: /concepts/custom-steps --- -Your app can use the `function()` method to listen to incoming [custom step requests](https://docs.slack.dev/workflows/workflow-steps). Custom steps are used in Workflow Builder to build workflows. The method requires a step `callback_id` of type `str`. This `callback_id` must also be defined in your [Function](https://docs.slack.dev/reference/app-manifest#functions) definition. Custom steps must be finalized using the `complete()` or `fail()` listener arguments to notify Slack that your app has processed the request. +Your app can use the `function()` method to listen to incoming [custom step requests](/workflows/workflow-steps). Custom steps are used in Workflow Builder to build workflows. The method requires a step `callback_id` of type `str`. This `callback_id` must also be defined in your [Function](/reference/app-manifest#functions) definition. Custom steps must be finalized using the `complete()` or `fail()` listener arguments to notify Slack that your app has processed the request. * `complete()` requires **one** argument: `outputs` of type `dict`. It ends your custom step **successfully** and provides a dictionary containing the outputs of your custom step as per its definition. * `fail()` requires **one** argument: `error` of type `str`. It ends your custom step **unsuccessfully** and provides a message containing information regarding why your custom step failed. You can reference your custom step's inputs using the `inputs` listener argument of type `dict`. -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn about the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn about the available listener arguments. ```python # This sample custom step formats an input and outputs it @@ -69,13 +69,13 @@ Example app manifest definition Your app's custom steps may create interactivity points for users, for example: Post a message with a button. -If such interaction points originate from a custom step execution, the events sent to your app representing the end-user interaction with these points are considered to be _function-scoped interactivity events_. These interactivity events can be handled by your app using the same concepts we covered earlier, such as [Listening to actions](/concepts/action-listening). +If such interaction points originate from a custom step execution, the events sent to your app representing the end-user interaction with these points are considered to be _function-scoped interactivity events_. These interactivity events can be handled by your app using the same concepts we covered earlier, such as [Listening to actions](/bolt-python/concepts/action-listening). _function-scoped interactivity events_ will contain data related to the custom step (`function_executed` event) they were spawned from, such as custom step `inputs` and access to `complete()` and `fail()` listener arguments. Your app can skip calling `complete()` or `fail()` in the `function()` handler method if the custom step creates an interaction point that requires user interaction before the step can end. However, in the relevant interactivity handler method, your app must invoke `complete()` or `fail()` to notify Slack that the custom step has been processed. -You’ll notice in all interactivity handler examples, `ack()` is used. It is required to call the `ack()` function within an interactivity listener to acknowledge that the request was received from Slack. This is discussed in the [acknowledging requests section](/concepts/acknowledge). +You’ll notice in all interactivity handler examples, `ack()` is used. It is required to call the `ack()` function within an interactivity listener to acknowledge that the request was received from Slack. This is discussed in the [acknowledging requests section](/bolt-python/concepts/acknowledge). ```python # This sample custom step posts a message with a button @@ -151,4 +151,4 @@ Example app manifest definition -Learn more about responding to interactivity, see the [Slack API documentation](https://docs.slack.dev/interactivity/handling-user-interaction). +Learn more about responding to interactivity, see the [Slack API documentation](/interactivity/handling-user-interaction). diff --git a/docs/english/concepts/event-listening.md b/docs/english/concepts/event-listening.md index 7ffa9e3a2..756201b4b 100644 --- a/docs/english/concepts/event-listening.md +++ b/docs/english/concepts/event-listening.md @@ -4,11 +4,11 @@ lang: en slug: /concepts/event-listening --- -You can listen to [any Events API event](https://docs.slack.dev/reference/events) using the `event()` method after subscribing to it in your app configuration. This allows your app to take action when something happens in a workspace where it's installed, like a user reacting to a message or joining a channel. +You can listen to [any Events API event](/reference/events) using the `event()` method after subscribing to it in your app configuration. This allows your app to take action when something happens in a workspace where it's installed, like a user reacting to a message or joining a channel. The `event()` method requires an `eventType` of type `str`. -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. ```python # When a user joins the workspace, send a message in a predefined channel asking them to introduce themselves @app.event("team_join") @@ -23,7 +23,7 @@ def ask_for_introduction(event, say): The `message()` listener is equivalent to `event("message")`. -You can filter on subtypes of events by passing in the additional key `subtype`. Common message subtypes like `bot_message` and `message_replied` can be found [on the message event page](https://docs.slack.dev/reference/events/message#subtypes). +You can filter on subtypes of events by passing in the additional key `subtype`. Common message subtypes like `bot_message` and `message_replied` can be found [on the message event page](/reference/events/message#subtypes). You can explicitly filter for events without a subtype by explicitly setting `None`. ```python diff --git a/docs/english/concepts/global-middleware.md b/docs/english/concepts/global-middleware.md index ec748c000..81026feeb 100644 --- a/docs/english/concepts/global-middleware.md +++ b/docs/english/concepts/global-middleware.md @@ -8,7 +8,7 @@ Global middleware is run for all incoming requests, before any listener middlewa Both global and listener middleware must call `next()` to pass control of the execution chain to the next middleware. -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. ```python @app.use def auth_acme(client, context, logger, payload, next): diff --git a/docs/english/concepts/listener-middleware.md b/docs/english/concepts/listener-middleware.md index 338cb0d4f..a2d432333 100644 --- a/docs/english/concepts/listener-middleware.md +++ b/docs/english/concepts/listener-middleware.md @@ -8,7 +8,7 @@ Listener middleware is only run for the listener in which it's passed. You can p If your listener middleware is a quite simple one, you can use a listener matcher, which returns `bool` value (`True` for proceeding) instead of requiring `next()` method call. -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. ```python # Listener middleware which filters out messages with "bot_message" subtype diff --git a/docs/english/concepts/message-listening.md b/docs/english/concepts/message-listening.md index c03695a09..c9e3533a5 100644 --- a/docs/english/concepts/message-listening.md +++ b/docs/english/concepts/message-listening.md @@ -4,11 +4,11 @@ lang: en slug: /concepts/message-listening --- -To listen to messages that [your app has access to receive](https://docs.slack.dev/messaging/retrieving-messages), you can use the `message()` method which filters out events that aren't of type `message`. +To listen to messages that [your app has access to receive](/messaging/retrieving-messages), you can use the `message()` method which filters out events that aren't of type `message`. `message()` accepts an argument of type `str` or `re.Pattern` object that filters out any messages that don't match the pattern. -:::info[Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments.] +:::info[Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments.] ::: diff --git a/docs/english/concepts/message-sending.md b/docs/english/concepts/message-sending.md index b4a2f309e..5a15925cf 100644 --- a/docs/english/concepts/message-sending.md +++ b/docs/english/concepts/message-sending.md @@ -6,9 +6,9 @@ slug: /concepts/message-sending Within your listener function, `say()` is available whenever there is an associated conversation (for example, a conversation where the event or action which triggered the listener occurred). `say()` accepts a string to post simple messages and JSON payloads to send more complex messages. The message payload you pass in will be sent to the associated conversation. -In the case that you'd like to send a message outside of a listener or you want to do something more advanced (like handle specific errors), you can call `client.chat_postMessage` [using the client attached to your Bolt instance](/concepts/web-api). +In the case that you'd like to send a message outside of a listener or you want to do something more advanced (like handle specific errors), you can call `client.chat_postMessage` [using the client attached to your Bolt instance](/bolt-python/concepts/web-api). -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. ```python # Listens for messages containing "knock knock" and responds with an italicized "who's there?" @app.message("knock knock") @@ -20,7 +20,7 @@ def ask_who(message, say): `say()` accepts more complex message payloads to make it easy to add functionality and structure to your messages. -To explore adding rich message layouts to your app, read through [the guide on our API site](https://docs.slack.dev/messaging/#structure) and look through templates of common app flows [in the Block Kit Builder](https://api.slack.com/tools/block-kit-builder?template=1). +To explore adding rich message layouts to your app, read through [the guide on our API site](/messaging/#structure) and look through templates of common app flows [in the Block Kit Builder](https://api.slack.com/tools/block-kit-builder?template=1). ```python # Sends a section block with datepicker when someone reacts with a 📅 emoji diff --git a/docs/english/concepts/opening-modals.md b/docs/english/concepts/opening-modals.md index e7daceafc..477686663 100644 --- a/docs/english/concepts/opening-modals.md +++ b/docs/english/concepts/opening-modals.md @@ -4,13 +4,13 @@ lang: en slug: /concepts/opening-modals --- -[Modals](https://docs.slack.dev/surfaces/modals) are focused surfaces that allow you to collect user data and display dynamic information. You can open a modal by passing a valid `trigger_id` and a [view payload](https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload/#view_submission) to the built-in client's [`views.open`](https://docs.slack.dev/reference/methods/views.open/) method. +[Modals](/surfaces/modals) are focused surfaces that allow you to collect user data and display dynamic information. You can open a modal by passing a valid `trigger_id` and a [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission) to the built-in client's [`views.open`](/reference/methods/views.open/) method. Your app receives `trigger_id` parameters in payloads sent to your Request URL triggered user invocation like a slash command, button press, or interaction with a select menu. -Read more about modal composition in the [API documentation](https://docs.slack.dev/surfaces/modals#composing_views). +Read more about modal composition in the [API documentation](/surfaces/modals#composing_views). -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. ```python # Listen for a shortcut invocation diff --git a/docs/english/concepts/select-menu-options.md b/docs/english/concepts/select-menu-options.md index d699e6370..762c114c1 100644 --- a/docs/english/concepts/select-menu-options.md +++ b/docs/english/concepts/select-menu-options.md @@ -4,16 +4,16 @@ lang: en slug: /concepts/options --- -The `options()` method listens for incoming option request payloads from Slack. [Similar to `action()`](/concepts/action-listening), +The `options()` method listens for incoming option request payloads from Slack. [Similar to `action()`](/bolt-python/concepts/action-listening), an `action_id` or constraints object is required. In order to load external data into your select menus, you must provide an options load URL in your app configuration, appended with `/slack/events`. While it's recommended to use `action_id` for `external_select` menus, dialogs do not support Block Kit so you'll have to use the constraints object to filter on a `callback_id`. -To respond to options requests, you'll need to call `ack()` with a valid `options` or `option_groups` list. Both [external select response examples](https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select) and [dialog response examples](https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#conversation_multi_select) can be found on our API site. +To respond to options requests, you'll need to call `ack()` with a valid `options` or `option_groups` list. Both [external select response examples](/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select) and [dialog response examples](/reference/block-kit/block-elements/multi-select-menu-element#conversation_multi_select) can be found on our API site. -Additionally, you may want to apply filtering logic to the returned options based on user input. This can be accomplished by using the `payload` argument to your options listener and checking for the contents of the `value` property within it. Based on the `value` you can return different options. All listeners and middleware handlers in Bolt for Python have access to [many useful arguments](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) - be sure to check them out! +Additionally, you may want to apply filtering logic to the returned options based on user input. This can be accomplished by using the `payload` argument to your options listener and checking for the contents of the `value` property within it. Based on the `value` you can return different options. All listeners and middleware handlers in Bolt for Python have access to [many useful arguments](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) - be sure to check them out! -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. ```python # Example of responding to an external_select options request @app.options("external_action") diff --git a/docs/english/concepts/shortcuts.md b/docs/english/concepts/shortcuts.md index 6833d468d..d313444b2 100644 --- a/docs/english/concepts/shortcuts.md +++ b/docs/english/concepts/shortcuts.md @@ -4,19 +4,19 @@ lang: en slug: /concepts/shortcuts --- -The `shortcut()` method supports both [global shortcuts](https://docs.slack.dev/interactivity/implementing-shortcuts#global) and [message shortcuts](https://docs.slack.dev/interactivity/implementing-shortcuts#messages). +The `shortcut()` method supports both [global shortcuts](/interactivity/implementing-shortcuts#global) and [message shortcuts](/interactivity/implementing-shortcuts#messages). Shortcuts are invokable entry points to apps. Global shortcuts are available from within search and text composer area in Slack. Message shortcuts are available in the context menus of messages. Your app can use the `shortcut()` method to listen to incoming shortcut requests. The method requires a `callback_id` parameter of type `str` or `re.Pattern`. Shortcuts must be acknowledged with `ack()` to inform Slack that your app has received the request. -Shortcuts include a `trigger_id` which an app can use to [open a modal](/concepts/opening-modals) that confirms the action the user is taking. +Shortcuts include a `trigger_id` which an app can use to [open a modal](/bolt-python/concepts/opening-modals) that confirms the action the user is taking. When setting up shortcuts within your app configuration, as with other URLs, you'll append `/slack/events` to your request URL. -⚠️ Note that global shortcuts do **not** include a channel ID. If your app needs access to a channel ID, you may use a [`conversations_select`](https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#conversation_multi_select) element within a modal. Message shortcuts do include a channel ID. +⚠️ Note that global shortcuts do **not** include a channel ID. If your app needs access to a channel ID, you may use a [`conversations_select`](/reference/block-kit/block-elements/multi-select-menu-element#conversation_multi_select) element within a modal. Message shortcuts do include a channel ID. -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. ```python # The open_modal shortcut listens to a shortcut with the callback_id "open_modal" @app.shortcut("open_modal") @@ -36,7 +36,7 @@ def open_modal(ack, shortcut, client): "type": "section", "text": { "type": "mrkdwn", - "text": "About the simplest modal you could conceive of :smile:\n\nMaybe or ." + "text": "About the simplest modal you could conceive of :smile:\n\nMaybe or ." } }, { @@ -75,7 +75,7 @@ def open_modal(ack, shortcut, client): "type": "section", "text": { "type": "mrkdwn", - "text": "About the simplest modal you could conceive of :smile:\n\nMaybe or ." + "text": "About the simplest modal you could conceive of :smile:\n\nMaybe or ." } }, { diff --git a/docs/english/concepts/socket-mode.md b/docs/english/concepts/socket-mode.md index 301fbf94e..38c2cdfcf 100644 --- a/docs/english/concepts/socket-mode.md +++ b/docs/english/concepts/socket-mode.md @@ -4,7 +4,7 @@ lang: en slug: /concepts/socket-mode --- -With the introduction of [Socket Mode](https://docs.slack.dev/apis/events-api/using-socket-mode), Bolt for Python introduced support in version `1.2.0`. With Socket Mode, instead of creating a server with endpoints that Slack sends payloads too, the app will instead connect to Slack via a WebSocket connection and receive data from Slack over the socket connection. Make sure to enable Socket Mode in your app configuration settings. +With the introduction of [Socket Mode](/apis/events-api/using-socket-mode), Bolt for Python introduced support in version `1.2.0`. With Socket Mode, instead of creating a server with endpoints that Slack sends payloads too, the app will instead connect to Slack via a WebSocket connection and receive data from Slack over the socket connection. Make sure to enable Socket Mode in your app configuration settings. To use the Socket Mode, add `SLACK_APP_TOKEN` as an environment variable. You can get your App Token in your app configuration settings under the **Basic Information** section. @@ -38,7 +38,7 @@ if __name__ == "__main__": To use the asyncio-based adapters such as aiohttp, your whole app needs to be compatible with asyncio's async/await programming model. `AsyncSocketModeHandler` is available for running `AsyncApp` and its async middleware and listeners. -To learn how to use `AsyncApp`, checkout the [using Async](/concepts/async) document and relevant [examples](https://github.com/slackapi/bolt-python/tree/main/examples). +To learn how to use `AsyncApp`, checkout the [using Async](/bolt-python/concepts/async) document and relevant [examples](https://github.com/slackapi/bolt-python/tree/main/examples). ```python from slack_bolt.app.async_app import AsyncApp diff --git a/docs/english/concepts/token-rotation.md b/docs/english/concepts/token-rotation.md index 88af29ffa..e69b15e0f 100644 --- a/docs/english/concepts/token-rotation.md +++ b/docs/english/concepts/token-rotation.md @@ -8,6 +8,6 @@ Supported in Bolt for Python as of [v1.7.0](https://github.com/slackapi/bolt-pyt Instead of an access token representing an existing installation of your Slack app indefinitely, with token rotation enabled, access tokens expire. A refresh token acts as a long-lived way to refresh your access tokens. -Bolt for Python supports and will handle token rotation automatically so long as the [built-in OAuth](/concepts/authenticating-oauth) functionality is used. +Bolt for Python supports and will handle token rotation automatically so long as the [built-in OAuth](/bolt-python/concepts/authenticating-oauth) functionality is used. -For more information about token rotation, please see the [documentation](https://docs.slack.dev/authentication/using-token-rotation). \ No newline at end of file +For more information about token rotation, please see the [documentation](/authentication/using-token-rotation). \ No newline at end of file diff --git a/docs/english/concepts/updating-pushing-views.md b/docs/english/concepts/updating-pushing-views.md index aa1efa3fa..3c7c2eba3 100644 --- a/docs/english/concepts/updating-pushing-views.md +++ b/docs/english/concepts/updating-pushing-views.md @@ -4,7 +4,7 @@ lang: en slug: /concepts/updating-pushing-views --- -Modals contain a stack of views. When you call [`views_open`](https://api.https://docs.slack.dev/reference/methods/views.open/slack.com/methods/views.open), you add the root view to the modal. After the initial call, you can dynamically update a view by calling [`views_update`](https://docs.slack.dev/reference/methods/views.update/), or stack a new view on top of the root view by calling [`views_push`](https://docs.slack.dev/reference/methods/views.push/) +Modals contain a stack of views. When you call [`views_open`](https://api./reference/methods/views.open/slack.com/methods/views.open), you add the root view to the modal. After the initial call, you can dynamically update a view by calling [`views_update`](/reference/methods/views.update/), or stack a new view on top of the root view by calling [`views_push`](/reference/methods/views.push/) ## The `views_update` method @@ -12,11 +12,11 @@ To update a view, you can use the built-in client to call `views_update` with th ## The `views_push` method -To push a new view onto the view stack, you can use the built-in client to call `views_push` with a valid `trigger_id` a new [view payload](https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload/#view_submission). The arguments for `views_push` is the same as [opening modals](/concepts/creating-models). After you open a modal, you may only push two additional views onto the view stack. +To push a new view onto the view stack, you can use the built-in client to call `views_push` with a valid `trigger_id` a new [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission). The arguments for `views_push` is the same as [opening modals](/bolt-python/concepts/creating-models). After you open a modal, you may only push two additional views onto the view stack. -Learn more about updating and pushing views in our [API documentation](https://docs.slack.dev/surfaces/modals) +Learn more about updating and pushing views in our [API documentation](/surfaces/modals) -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. ```python # Listen for a button invocation with action_id `button_abc` (assume it's inside of a modal) @app.action("button_abc") diff --git a/docs/english/concepts/view-submissions.md b/docs/english/concepts/view-submissions.md index 60b78cd54..4294f5d5f 100644 --- a/docs/english/concepts/view-submissions.md +++ b/docs/english/concepts/view-submissions.md @@ -4,7 +4,7 @@ lang: en slug: /concepts/view_submissions --- -If a [view payload](https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload/#view_submission) contains any input blocks, you must listen to `view_submission` requests to receive their values. To listen to `view_submission` requests, you can use the built-in `view()` method. `view()` requires a `callback_id` of type `str` or `re.Pattern`. +If a [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission) contains any input blocks, you must listen to `view_submission` requests to receive their values. To listen to `view_submission` requests, you can use the built-in `view()` method. `view()` requires a `callback_id` of type `str` or `re.Pattern`. You can access the value of the `input` blocks by accessing the `state` object. `state` contains a `values` object that uses the `block_id` and unique `action_id` to store the input values. @@ -23,9 +23,9 @@ def handle_submission(ack, body): # https://app.slack.com/block-kit-builder/#%7B%22type%22:%22modal%22,%22callback_id%22:%22view_1%22,%22title%22:%7B%22type%22:%22plain_text%22,%22text%22:%22My%20App%22,%22emoji%22:true%7D,%22blocks%22:%5B%5D%7D ack(response_action="update", view=build_new_view(body)) ``` -Similarly, there are options for [displaying errors](https://docs.slack.dev/surfaces/modals#displaying_errors) in response to view submissions. +Similarly, there are options for [displaying errors](/surfaces/modals#displaying_errors) in response to view submissions. -Read more about view submissions in our [API documentation](https://docs.slack.dev/surfaces/modals#interactions) +Read more about view submissions in our [API documentation](/surfaces/modals#interactions) --- @@ -33,7 +33,7 @@ Read more about view submissions in our [API documentation](https://docs.slack.d When listening for `view_closed` requests, you must pass `callback_id` and add a `notify_on_close` property to the view during creation. See below for an example of this: -See the [API documentation](https://docs.slack.dev/surfaces/modals#interactions) for more information about `view_closed`. +See the [API documentation](/surfaces/modals#interactions) for more information about `view_closed`. ```python @@ -62,7 +62,7 @@ def handle_view_closed(ack, body, logger): logger.info(body) ``` -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. ```python # Handle a view_submission request @app.view("view_1") diff --git a/docs/english/concepts/web-api.md b/docs/english/concepts/web-api.md index 40db163e5..4be240e87 100644 --- a/docs/english/concepts/web-api.md +++ b/docs/english/concepts/web-api.md @@ -4,11 +4,11 @@ lang: en slug: /concepts/web-api --- -You can call [any Web API method](https://docs.slack.dev/reference/methods) using the [`WebClient`](https://tools.slack.dev/python-slack-sdk/web) provided to your Bolt app as either `app.client` or `client` in middleware/listener arguments (given that your app has the appropriate scopes). When you call one the client's methods, it returns a `SlackResponse` which contains the response from Slack. +You can call [any Web API method](/reference/methods) using the [`WebClient`](/python-slack-sdk/web) provided to your Bolt app as either `app.client` or `client` in middleware/listener arguments (given that your app has the appropriate scopes). When you call one the client's methods, it returns a `SlackResponse` which contains the response from Slack. The token used to initialize Bolt can be found in the `context` object, which is required to call most Web API methods. -:::info[Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments.] +:::info[Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments.] ::: diff --git a/docs/english/getting-started.md b/docs/english/getting-started.md index 96984c96c..f155b1530 100644 --- a/docs/english/getting-started.md +++ b/docs/english/getting-started.md @@ -14,20 +14,20 @@ When complete, you'll have a local environment configured with a customized [app :::tip[Reference for readers] -In search of the complete guide to building an app from scratch? Check out the [building an app](/building-an-app) guide. +In search of the complete guide to building an app from scratch? Check out the [building an app](/bolt-python/building-an-app) guide. ::: #### Prerequisites -A few tools are needed for the following steps. We recommend using the [**Slack CLI**](https://tools.slack.dev/slack-cli/) for the smoothest experience, but other options remain available. +A few tools are needed for the following steps. We recommend using the [**Slack CLI**](/slack-cli/) for the smoothest experience, but other options remain available. You can also begin by installing git and downloading [Python 3.6 or later](https://www.python.org/downloads/), or the latest stable version of Python. Refer to [Python's setup and building guide](https://devguide.python.org/getting-started/setup-building/) for more details. Install the latest version of the Slack CLI to get started: -- [Slack CLI for macOS & Linux](https://tools.slack.dev/slack-cli/guides/installing-the-slack-cli-for-mac-and-linux) -- [Slack CLI for Windows](https://tools.slack.dev/slack-cli/guides/installing-the-slack-cli-for-windows) +- [Slack CLI for macOS & Linux](/slack-cli/guides/installing-the-slack-cli-for-mac-and-linux) +- [Slack CLI for Windows](/slack-cli/guides/installing-the-slack-cli-for-windows) Then confirm a successful installation with the following command: @@ -45,7 +45,7 @@ $ slack login A workspace where development can happen is also needed. -We recommend using [developer sandboxes](https://docs.slack.dev/tools/developer-sandboxes) to avoid disruptions where real work gets done. +We recommend using [developer sandboxes](/tools/developer-sandboxes) to avoid disruptions where real work gets done. ::: @@ -135,7 +135,7 @@ You'll then land on your app's **Basic Information** page, which is an overview ![Basic Information page](/img/bolt-python/basic-information-page.png "Basic Information page") -To listen for events happening in Slack (such as a new posted message) without opening a port or exposing an endpoint, we will use [Socket Mode](/concepts/socket-mode). This connection requires a specific app token: +To listen for events happening in Slack (such as a new posted message) without opening a port or exposing an endpoint, we will use [Socket Mode](/bolt-python/concepts/socket-mode). This connection requires a specific app token: 1. On the **Basic Information** page, scroll to the **App-Level Tokens** section and click **Generate Token and Scopes**. 2. Name the token "Development" or something similar and add the `connections:write` scope, then click **Generate**. @@ -149,7 +149,7 @@ The above command works on Linux and macOS but [similar commands are available o :::warning[Keep it secret. Keep it safe.] -Treat your tokens like a password and [keep it safe](https://docs.slack.dev/authentication/best-practices-for-security). Your app uses these to retrieve and send information to Slack. +Treat your tokens like a password and [keep it safe](/authentication/best-practices-for-security). Your app uses these to retrieve and send information to Slack. ::: @@ -252,7 +252,7 @@ Your app can be stopped again by pressing `CTRL+C` in the terminal to end these #### Customizing app settings -The created app will have some placeholder values and a small set of [scopes](https://docs.slack.dev/reference/scopes) to start, but we recommend exploring the customizations possible on app settings. +The created app will have some placeholder values and a small set of [scopes](/reference/scopes) to start, but we recommend exploring the customizations possible on app settings. @@ -287,14 +287,14 @@ Congrats once more on getting up and running with this quick start. :::info[Dive deeper] -Follow along with the steps that went into making this app on the [building an app](/building-an-app) guide for an educational overview. +Follow along with the steps that went into making this app on the [building an app](/bolt-python/building-an-app) guide for an educational overview. ::: You can now continue customizing your app with various features to make it right for whatever job's at hand. Here are some ideas about what to explore next: -- Explore the different events your bot can listen to with the [`app.event()`](/concepts/event-listening) method. All of the [events](https://docs.slack.dev/reference/events) are listed on the API docs site. -- Bolt allows you to call [Web API](/concepts/web-api) methods with the client attached to your app. There are [over 200 methods](https://docs.slack.dev/reference/methods) on the API docs site. -- Learn more about the different [token types](https://docs.slack.dev/authentication/tokens) and [authentication setups](/concepts/authenticating-oauth). Your app might need different tokens depending on the actions you want to perform or for installations to multiple workspaces. -- Receive events using HTTP for various deployment methods, such as deploying to [Heroku](/deployments/heroku) or [AWS Lambda](/deployments/aws-lambda). -- Read on [app design](https://docs.slack.dev/surfaces/app-design) and compose fancy messages with blocks using [Block Kit Builder](https://app.slack.com/block-kit-builder) to prototype messages. +- Explore the different events your bot can listen to with the [`app.event()`](/bolt-python/concepts/event-listening) method. All of the [events](/reference/events) are listed on the API docs site. +- Bolt allows you to call [Web API](/bolt-python/concepts/web-api) methods with the client attached to your app. There are [over 200 methods](/reference/methods) on the API docs site. +- Learn more about the different [token types](/authentication/tokens) and [authentication setups](/bolt-python/concepts/authenticating-oauth). Your app might need different tokens depending on the actions you want to perform or for installations to multiple workspaces. +- Receive events using HTTP for various deployment methods, such as deploying to [Heroku](/bolt-python/deployments/heroku) or [AWS Lambda](/bolt-python/deployments/aws-lambda). +- Read on [app design](/surfaces/app-design) and compose fancy messages with blocks using [Block Kit Builder](https://app.slack.com/block-kit-builder) to prototype messages. diff --git a/docs/english/index.md b/docs/english/index.md index 33204bca1..e6f767e5f 100644 --- a/docs/english/index.md +++ b/docs/english/index.md @@ -1,6 +1,6 @@ # Bolt for Python -Bolt for Python is a Python framework to build Slack apps with the latest Slack platform features. Read the [Getting Started Guide](/getting-started) to set up and run your first Bolt app. +Bolt for Python is a Python framework to build Slack apps with the latest Slack platform features. Read the [Getting Started Guide](/bolt-python/getting-started) to set up and run your first Bolt app. Then, explore the rest of the pages within the Guides section. The documentation there will help you build a Bolt app for whatever use case you may have. diff --git a/docs/english/legacy/steps-from-apps.md b/docs/english/legacy/steps-from-apps.md index 7259e562f..c56190e65 100644 --- a/docs/english/legacy/steps-from-apps.md +++ b/docs/english/legacy/steps-from-apps.md @@ -6,13 +6,13 @@ slug: /legacy/steps-from-apps :::danger[Steps from Apps is a deprecated feature.] -Steps from Apps are different than, and not interchangeable with, Slack automation workflows. We encourage those who are currently publishing steps from apps to consider the new [Slack automation features](https://docs.slack.dev/workflows/), such as [custom steps for Bolt](https://docs.slack.dev/workflows/workflow-steps). +Steps from Apps are different than, and not interchangeable with, Slack automation workflows. We encourage those who are currently publishing steps from apps to consider the new [Slack automation features](/workflows/), such as [custom steps for Bolt](/workflows/workflow-steps). -Please [read the Slack API changelog entry](https://docs.slack.dev/changelog/2023-08-workflow-steps-from-apps-step-back) for more information. +Please [read the Slack API changelog entry](/changelog/2023-08-workflow-steps-from-apps-step-back) for more information. ::: -Steps from apps allow your app to create and process steps that users can add using [Workflow Builder](https://docs.slack.dev/workflows/workflow-builder). +Steps from apps allow your app to create and process steps that users can add using [Workflow Builder](/workflows/workflow-builder). Steps from apps are made up of three distinct user events: @@ -22,7 +22,7 @@ Steps from apps are made up of three distinct user events: All three events must be handled for a step from app to function. -Read more about steps from apps in the [API documentation](https://docs.slack.dev/workflows/workflow-steps). +Read more about steps from apps in the [API documentation](/workflows/workflow-steps). ## Creating steps from apps @@ -34,9 +34,9 @@ The configuration object contains three keys: `edit`, `save`, and `execute`. Eac After instantiating a `WorkflowStep`, you can pass it into `app.step()`. Behind the scenes, your app will listen and respond to the step’s events using the callbacks provided in the configuration object. -Alternatively, steps from apps can also be created using the `WorkflowStepBuilder` class alongside a decorator pattern. For more information, including an example of this approach, [refer to the documentation](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/step.html#slack_bolt.workflows.step.step.WorkflowStepBuilder). +Alternatively, steps from apps can also be created using the `WorkflowStepBuilder` class alongside a decorator pattern. For more information, including an example of this approach, [refer to the documentation](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/step.html#slack_bolt.workflows.step.step.WorkflowStepBuilder). -Refer to the module documents ([common](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) / [step-specific](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/utilities/index.html)) to learn the available arguments. +Refer to the module documents ([common](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/utilities/index.html)) to learn the available arguments. ```python import os @@ -72,15 +72,15 @@ app.step(ws) ## Adding or editing steps from apps -When a builder adds (or later edits) your step in their workflow, your app will receive a [`workflow_step_edit` event](https://docs.slack.dev/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step_edit-payload). The `edit` callback in your `WorkflowStep` configuration will be run when this event is received. +When a builder adds (or later edits) your step in their workflow, your app will receive a [`workflow_step_edit` event](/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step_edit-payload). The `edit` callback in your `WorkflowStep` configuration will be run when this event is received. -Whether a builder is adding or editing a step, you need to send them a [step from app configuration modal](https://docs.slack.dev/legacy/legacy-steps-from-apps/legacy-steps-from-apps-configuration-view-object). This modal is where step-specific settings are chosen, and it has more restrictions than typical modals—most notably, it cannot include `title`, `submit`, or `close` properties. By default, the configuration modal's `callback_id` will be the same as the step from app. +Whether a builder is adding or editing a step, you need to send them a [step from app configuration modal](/legacy/legacy-steps-from-apps/legacy-steps-from-apps-configuration-view-object). This modal is where step-specific settings are chosen, and it has more restrictions than typical modals—most notably, it cannot include `title`, `submit`, or `close` properties. By default, the configuration modal's `callback_id` will be the same as the step from app. Within the `edit` callback, the `configure()` utility can be used to easily open your step's configuration modal by passing in the view's blocks with the corresponding `blocks` argument. To disable saving the configuration before certain conditions are met, you can also pass in `submit_disabled` with a value of `True`. -To learn more about opening configuration modals, [read the documentation](https://docs.slack.dev/legacy/legacy-steps-from-apps/). +To learn more about opening configuration modals, [read the documentation](/legacy/legacy-steps-from-apps/). -Refer to the module documents ([common](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) / [step-specific](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/utilities/index.html)) to learn the available arguments. +Refer to the module documents ([common](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/utilities/index.html)) to learn the available arguments. ```python def edit(ack, step, configure): @@ -130,9 +130,9 @@ Within the `save` callback, the `update()` method can be used to save the builde - `step_name` overrides the default Step name - `step_image_url` overrides the default Step image -To learn more about how to structure these parameters, [read the documentation](https://docs.slack.dev/legacy/legacy-steps-from-apps/). +To learn more about how to structure these parameters, [read the documentation](/legacy/legacy-steps-from-apps/). -Refer to the module documents ([common](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) / [step-specific](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/utilities/index.html)) to learn the available arguments. +Refer to the module documents ([common](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/utilities/index.html)) to learn the available arguments. ```python def save(ack, view, update): @@ -171,13 +171,13 @@ app.step(ws) ## Executing steps from apps -When your step from app is executed by an end user, your app will receive a [`workflow_step_execute` event](https://docs.slack.dev/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step-object). The `execute` callback in your `WorkflowStep` configuration will be run when this event is received. +When your step from app is executed by an end user, your app will receive a [`workflow_step_execute` event](/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step-object). The `execute` callback in your `WorkflowStep` configuration will be run when this event is received. Using the `inputs` from the `save` callback, this is where you can make third-party API calls, save information to a database, update the user's Home tab, or decide the outputs that will be available to subsequent steps from apps by mapping values to the `outputs` object. Within the `execute` callback, your app must either call `complete()` to indicate that the step's execution was successful, or `fail()` to indicate that the step's execution failed. -Refer to the module documents ([common](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) / [step-specific](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/utilities/index.html)) to learn the available arguments. +Refer to the module documents ([common](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/utilities/index.html)) to learn the available arguments. ```python def execute(step, complete, fail): diff --git a/docs/english/tutorial/ai-chatbot/ai-chatbot.md b/docs/english/tutorial/ai-chatbot/ai-chatbot.md index f6906c478..9146df04e 100644 --- a/docs/english/tutorial/ai-chatbot/ai-chatbot.md +++ b/docs/english/tutorial/ai-chatbot/ai-chatbot.md @@ -32,7 +32,7 @@ If you'd rather skip the tutorial and just head straight to the code, you can us Before you'll be able to successfully run the app, you'll need to first obtain and set some environment variables. 1. On the **Install App** page, copy your **Bot User OAuth Token**. You will store this in your environment as `SLACK_BOT_TOKEN` (we'll get to that next). -2. Navigate to **Basic Information** and in the **App-Level Tokens** section , click **Generate Token and Scopes**. Add the [`connections:write`](https://docs.slack.dev/reference/scopes/connections.write) scope, name the token, and click **Generate**. (For more details, refer to [understanding OAuth scopes for bots](https://docs.slack.dev/authentication/tokens#bot)). Copy this token. You will store this in your environment as `SLACK_APP_TOKEN`. +2. Navigate to **Basic Information** and in the **App-Level Tokens** section , click **Generate Token and Scopes**. Add the [`connections:write`](/reference/scopes/connections.write) scope, name the token, and click **Generate**. (For more details, refer to [understanding OAuth scopes for bots](/authentication/tokens#bot)). Copy this token. You will store this in your environment as `SLACK_APP_TOKEN`. To store your tokens and environment variables, run the following commands in the terminal. Replace the placeholder values with your bot and app tokens collected above, as well as the key or keys for the AI provider or providers you want to use: @@ -151,7 +151,7 @@ To test this, leave the channel you just invited Bolty to and rejoin it. This wi ![Channel summary](7.png) -The central part of this functionality is shown in the following code snippet. Note the use of the [`user_context`](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#usercontext) object, a Slack type that represents the user who is interacting with our workflow, as well as the `history` of the channel that will be summarized, which includes the ten most recent messages. +The central part of this functionality is shown in the following code snippet. Note the use of the [`user_context`](/deno-slack-sdk/reference/slack-types#usercontext) object, a Slack type that represents the user who is interacting with our workflow, as well as the `history` of the channel that will be summarized, which includes the ten most recent messages. ```python from ai.providers import get_provider_response @@ -198,5 +198,5 @@ You can also navigate to **Bolty** in your **Apps** list and select the **Messag Congratulations! You've successfully integrated the power of AI into your workspace. Check out these links to take the next steps in your Bolt for Python journey. * To learn more about Bolt for Python, refer to the [Getting started](../getting-started) documentation. -* For more details about creating workflow steps using the Bolt SDK, refer to the [workflow steps for Bolt](https://docs.slack.dev/workflows/workflow-steps) guide. -* To use the Bolt for Python SDK to develop on the automations platform, refer to the [Create a workflow step for Workflow Builder: Bolt for Python](/bolt-python/tutorial/custom-steps) tutorial. +* For more details about creating workflow steps using the Bolt SDK, refer to the [workflow steps for Bolt](/workflows/workflow-steps) guide. +* To use the Bolt for Python SDK to develop on the automations platform, refer to the [Create a workflow step for Workflow Builder: Bolt for Python](/bolt-python/bolt-python/tutorial/custom-steps) tutorial. diff --git a/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md b/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md index a8ba3adf4..412bb828c 100644 --- a/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md +++ b/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md @@ -35,7 +35,7 @@ https://github.com/slack-samples/bolt-python-jira-functions/blob/main/manifest.j Before you'll be able to successfully run the app, you'll need to obtain and set some environment variables. 1. Once you have installed the app to your workspace, copy the **Bot User OAuth Token** from the **Install App** page. You will store this in your environment as `SLACK_BOT_TOKEN` (we'll get to that next). -2. Navigate to **Basic Information** and in the **App-Level Tokens** section , click **Generate Token and Scopes**. Add the [`connections:write`](https://docs.slack.dev/reference/scopes/connections.write) scope, name the token, and click **Generate**. Copy this token. You will store this in your environment as `SLACK_APP_TOKEN`. +2. Navigate to **Basic Information** and in the **App-Level Tokens** section , click **Generate Token and Scopes**. Add the [`connections:write`](/reference/scopes/connections.write) scope, name the token, and click **Generate**. Copy this token. You will store this in your environment as `SLACK_APP_TOKEN`. 3. Follow [these instructions](https://confluence.atlassian.com/adminjiraserver0909/configure-an-incoming-link-1251415519.html) to create an external app link and to generate its redirect URL (the base of which will be stored as your APP_BASE_URL variable below), client ID, and client secret. 4. Run the following commands in your terminal to store your environment variables, client ID, and client secret. 5. You'll also need to know your team ID (found by opening your Slack instance in a web browser and copying the value within the link that starts with the letter **T**) and your app ID (found under **Basic Information**). @@ -167,6 +167,6 @@ When finished, you can click the **Disconnect Account** button in the home tab t Congratulations! You've successfully customized your workspace with custom steps in Workflow Builder. Check out these links to take the next steps in your journey. -* To learn more about Bolt for Python, refer to the [getting started](/getting-started) documentation. -* For more details about creating workflow steps using the Bolt SDK, refer to the [workflow steps for Bolt](https://docs.slack.dev/workflows/workflow-steps) guide. -* For information about custom steps dynamic options, refer to [custom steps dynamic options in Workflow Builder](https://docs.slack.dev/workflows/creating-custom-steps-dynamic-options). +* To learn more about Bolt for Python, refer to the [getting started](/bolt-python/getting-started) documentation. +* For more details about creating workflow steps using the Bolt SDK, refer to the [workflow steps for Bolt](/workflows/workflow-steps) guide. +* For information about custom steps dynamic options, refer to [custom steps dynamic options in Workflow Builder](/workflows/creating-custom-steps-dynamic-options). diff --git a/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md b/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md index e30e59ffe..2832b3e3f 100644 --- a/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md +++ b/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md @@ -6,7 +6,7 @@ title: Custom Steps for Workflow Builder (existing app) If you don't have a paid workspace for development, you can join the [Developer Program](https://api.slack.com/developer-program) and provision a sandbox with access to all Slack features for free. ::: -If you followed along with our [create a custom step for Workflow Builder: new app](/tutorial/custom-steps-workflow-builder-new) tutorial, you have seen how to add custom steps to a brand new app. But what if you have an app up and running currently to which you'd like to add custom steps? You've come to the right place! +If you followed along with our [create a custom step for Workflow Builder: new app](/bolt-python/tutorial/custom-steps-workflow-builder-new) tutorial, you have seen how to add custom steps to a brand new app. But what if you have an app up and running currently to which you'd like to add custom steps? You've come to the right place! In this tutorial we will: - Start with an existing Bolt app @@ -278,6 +278,6 @@ In any channel where your app is installed, paste the link you copied and send i Nice work! Now that you've added a workflow step to your Bolt app, a world of possibilities is open to you! Create and share workflow steps across your organization to optimize Slack users' time and make their working lives more productive. -If you're looking to create a brand new Bolt app with custom workflow steps, check out [the tutorial here](/tutorial/custom-steps-workflow-builder-new). +If you're looking to create a brand new Bolt app with custom workflow steps, check out [the tutorial here](/bolt-python/tutorial/custom-steps-workflow-builder-new). -If you're interested in exploring how to create custom steps to use in Workflow Builder as steps with our Deno Slack SDK, too, that tutorial can be found [here](https://tools.slack.dev/deno-slack-sdk/tutorials/workflow-builder-custom-step/). +If you're interested in exploring how to create custom steps to use in Workflow Builder as steps with our Deno Slack SDK, too, that tutorial can be found [here](/deno-slack-sdk/tutorials/workflow-builder-custom-step/). diff --git a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md index 1b345da38..b4396466c 100644 --- a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md +++ b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md @@ -6,7 +6,7 @@ title: Custom Steps for Workflow Builder (new app) If you don't have a paid workspace for development, you can join the [Developer Program](https://api.slack.com/developer-program) and provision a sandbox with access to all Slack features for free. ::: -Adding a workflow step to your app and implementing a corresponding function listener is how you define a custom Workflow Builder step. In this tutorial, you'll use [Bolt for Python](/bolt-python/) to add your workflow step, then wire it up in [Workflow Builder](https://slack.com/help/articles/360035692513-Guide-to-Workflow-Builder). +Adding a workflow step to your app and implementing a corresponding function listener is how you define a custom Workflow Builder step. In this tutorial, you'll use [Bolt for Python](/bolt-python/bolt-python/) to add your workflow step, then wire it up in [Workflow Builder](https://slack.com/help/articles/360035692513-Guide-to-Workflow-Builder). When finished, you'll be ready to build scalable and innovative workflow steps for anyone using Workflow Builder in your workspace. @@ -70,7 +70,7 @@ All of your app's settings can be configured within these screens. By creating a Navigate to **Event Subscriptions** and expand **Subscribe to bot events** to see that we have subscribed to the `function_executed` event. This is also a requirement for adding workflow steps to our app, as it lets our app know when a step has been triggered, allowing our app to respond to it. -Another configuration setting to note is **Socket Mode**. We have turned this on for our local development, but socket mode is not intended for use in a production environment. When you are satisfied with your app and ready to deploy it to a production environment, you should switch to using public HTTP request URLs. Read more about getting started with HTTP in [Bolt for Python here](/bolt-python/getting-started). +Another configuration setting to note is **Socket Mode**. We have turned this on for our local development, but socket mode is not intended for use in a production environment. When you are satisfied with your app and ready to deploy it to a production environment, you should switch to using public HTTP request URLs. Read more about getting started with HTTP in [Bolt for Python here](/bolt-python/bolt-python/getting-started). Clicking on **Workflow Steps** in the left nav will show you that one workflow step has been added! This reflects the `function` defined in our manifest: functions are workflow steps. We will get to this step's implementation later. @@ -353,6 +353,6 @@ Slack will send an action event payload to your app when the button is clicked o That's it — we hope you learned a lot! -In this tutorial, we added custom steps via the manifest, but if you'd like to see how to add custom steps in the [app settings](https://api.slack.com/apps) to an existing app, follow along with the [Create a custom step for Workflow Builder: existing Bolt app](/tutorials/custom-steps-workflow-builder-existing) tutorial. +In this tutorial, we added custom steps via the manifest, but if you'd like to see how to add custom steps in the [app settings](https://api.slack.com/apps) to an existing app, follow along with the [Create a custom step for Workflow Builder: existing Bolt app](/bolt-python/tutorials/custom-steps-workflow-builder-existing) tutorial. -If you're interested in exploring how to create custom steps to use in Workflow Builder as steps with our Deno Slack SDK, too, that tutorial can be found [here](https://tools.slack.dev/deno-slack-sdk/tutorials/workflow-builder-custom-step/). +If you're interested in exploring how to create custom steps to use in Workflow Builder as steps with our Deno Slack SDK, too, that tutorial can be found [here](/deno-slack-sdk/tutorials/workflow-builder-custom-step/). diff --git a/docs/english/tutorial/custom-steps.md b/docs/english/tutorial/custom-steps.md index 2486a49ef..a345d7063 100644 --- a/docs/english/tutorial/custom-steps.md +++ b/docs/english/tutorial/custom-steps.md @@ -9,7 +9,7 @@ If you don't have a paid workspace for development, you can join the [Developer With custom steps for Bolt apps, your app can create and process workflow steps that users later add in Workflow Builder. This guide goes through how to build a custom step for your app using the [app settings](https://api.slack.com/apps). -If you're looking to build a custom step using the Deno Slack SDK, check out our guide on [creating a custom step for Workflow Builder with the Deno Slack SDK](https://tools.slack.dev/deno-slack-sdk/tutorials/workflow-builder-custom-step/). +If you're looking to build a custom step using the Deno Slack SDK, check out our guide on [creating a custom step for Workflow Builder with the Deno Slack SDK](/deno-slack-sdk/tutorials/workflow-builder-custom-step/). You can also take a look at the template for the [Bolt for Python custom workflow step](https://github.com/slack-samples/bolt-python-custom-step-template) on GitHub. @@ -69,7 +69,7 @@ Field | Type | Description `type` | String | Defines the data type and can fall into one of two categories: primitives or Slack-specific. `title` | String | The label that appears in Workflow Builder when a user sets up this step in their workflow. `description` | String | The description that accompanies the input when a user sets up this step in their workflow. -`dynamic_options` | Object | For custom steps dynamic options in Workflow Builder, define this property and point to a custom step designed to return the set of dynamic elements once the step is added to a workflow within Workflow Builder. Dynamic options in Workflow Builder can be rendered in one of two ways: as a drop-down menu (single-select or multi-select), or as a set of fields. Refer to custom steps dynamic options for Workflow Builder using [Bolt for JavaScript](https://tools.slack.dev/bolt-js/concepts/custom-steps-dynamic-options/) or [Bolt for Python](https://tools.slack.dev/bolt-python/concepts/custom-steps-dynamic-options/) for more details. +`dynamic_options` | Object | For custom steps dynamic options in Workflow Builder, define this property and point to a custom step designed to return the set of dynamic elements once the step is added to a workflow within Workflow Builder. Dynamic options in Workflow Builder can be rendered in one of two ways: as a drop-down menu (single-select or multi-select), or as a set of fields. Refer to custom steps dynamic options for Workflow Builder using [Bolt for JavaScript](/bolt-js/concepts/custom-steps-dynamic-options/) or [Bolt for Python](https://docs.slack.dev/bolt-python/concepts/custom-steps-dynamic-options/) for more details. `is_required` | Boolean | Indicates whether or not the input is required by the step in order to run. If it’s required and not provided, the user will not be able to save the configuration nor use the step in their workflow. This property is available only in v1 of the manifest. We recommend v2, using the `required` array as noted in the example above. `hint` | String | Helper text that appears below the input when a user sets up this step in their workflow. @@ -225,7 +225,7 @@ The second argument is the callback function, or the logic that will run when yo Field | Description ------|------------ -`client` | A `WebClient` instance used to make things happen in Slack. From sending messages to opening modals, `client` makes it all happen. For a full list of available methods, refer to the [Web API methods](/methods). Read more about the `WebClient` for Bolt Python [here](https://tools.slack.dev/bolt-python/concepts/web-api/). +`client` | A `WebClient` instance used to make things happen in Slack. From sending messages to opening modals, `client` makes it all happen. For a full list of available methods, refer to the [Web API methods](/bolt-python/methods). Read more about the `WebClient` for Bolt Python [here](https://docs.slack.dev/bolt-python/concepts/web-api/). `complete` | A utility method that invokes `functions.completeSuccess`. This method indicates to Slack that a step has completed successfully without issue. When called, `complete` requires you include an `outputs` object that matches your step definition in [`output_parameters`](#inputs-outputs). `fail` | A utility method that invokes `functions.completeError`. True to its name, this method signals to Slack that a step has failed to complete. The `fail` method requires an argument of `error` to be sent along with it, which is used to help users understand what went wrong. `inputs` | An alias for the `input_parameters` that were provided to the step upon execution. @@ -255,7 +255,7 @@ When you're ready to deploy your steps for wider use, you'll need to decide *whe ### Control step access {#access} -You can choose who has access to your custom steps. To define this, refer to the [custom function access](/automation/functions/access) page. +You can choose who has access to your custom steps. To define this, refer to the [custom function access](/bolt-python/automation/functions/access) page. ### Distribution {#distribution} @@ -268,5 +268,5 @@ Apps containing custom steps cannot be distributed publicly or submitted to the ## Related tutorials {#tutorials} -* [Custom steps for Workflow Builder (new app)](/tutorial/custom-steps-WB-new) -* [Custom steps for Workflow Builder (existing app)](/tutorial/custom-steps-WB-existing) +* [Custom steps for Workflow Builder (new app)](/bolt-python/tutorial/custom-steps-WB-new) +* [Custom steps for Workflow Builder (existing app)](/bolt-python/tutorial/custom-steps-WB-existing) diff --git a/docs/english/tutorial/modals/modals.md b/docs/english/tutorial/modals/modals.md index b6d672d08..c9f7b4fbe 100644 --- a/docs/english/tutorial/modals/modals.md +++ b/docs/english/tutorial/modals/modals.md @@ -13,9 +13,9 @@ At the end of this tutorial, your final app will look like this: ![announce](https://github.com/user-attachments/assets/0bf1c2f0-4b22-4c9c-98b3-b21e9bcc14a8) And will make use of these Slack concepts: -* [**Block Kit**](https://docs.slack.dev/block-kit/) is a UI framework for Slack apps that allows you to create beautiful, interactive messages within Slack. If you've ever seen a message in Slack with buttons or a select menu, that's Block Kit. -* [**Modals**](https://docs.slack.dev/surfaces/modals) are a pop-up window that displays right in Slack. They grab the attention of the user, and are normally used to prompt users to provide some kind of information or input in a form. -* [**Slash Commands**](https://docs.slack.dev/interactivity/implementing-slash-commands) allow you to invoke your app within Slack by just typing into the message composer box. e.g. `/remind`, `/topic`. +* [**Block Kit**](/block-kit/) is a UI framework for Slack apps that allows you to create beautiful, interactive messages within Slack. If you've ever seen a message in Slack with buttons or a select menu, that's Block Kit. +* [**Modals**](/surfaces/modals) are a pop-up window that displays right in Slack. They grab the attention of the user, and are normally used to prompt users to provide some kind of information or input in a form. +* [**Slash Commands**](/interactivity/implementing-slash-commands) allow you to invoke your app within Slack by just typing into the message composer box. e.g. `/remind`, `/topic`. If you're familiar with using Heroku you can also deploy directly to Heroku with the following button. @@ -66,7 +66,7 @@ You'll need to create an app and configure it properly within App Settings befor } ``` -2. Once your app has been created, scroll down to `App-Level Tokens` and create a token that requests for the [`connections:write`](https://docs.slack.dev/reference/scopes/connections.write) scope, which allows you to use [Socket Mode](https://docs.slack.dev/apis/events-api/using-socket-mode), a secure way to develop on Slack through the use of WebSockets. Copy the value of your app token and keep it for safe-keeping. +2. Once your app has been created, scroll down to `App-Level Tokens` and create a token that requests for the [`connections:write`](/reference/scopes/connections.write) scope, which allows you to use [Socket Mode](/apis/events-api/using-socket-mode), a secure way to develop on Slack through the use of WebSockets. Copy the value of your app token and keep it for safe-keeping. 3. Install your app by heading to `Install App` in the left sidebar. Hit `Allow`, which means you're agreeing to install your app with the permissions that it is requesting. Be sure to copy the token that you receive, and keep it somewhere secret and safe. @@ -132,4 +132,4 @@ All done! 🎉 You've created your first slash command using Block Kit and modal ## Next steps {#next-steps} -If you want to learn more about Bolt for Python, refer to the [Getting Started guide](https://tools.slack.dev/bolt-python/getting-started). \ No newline at end of file +If you want to learn more about Bolt for Python, refer to the [Getting Started guide](https://docs.slack.dev/bolt-python/getting-started). \ No newline at end of file diff --git a/docs/japanese/concepts/acknowledge.md b/docs/japanese/concepts/acknowledge.md index 72cc39257..f60797da6 100644 --- a/docs/japanese/concepts/acknowledge.md +++ b/docs/japanese/concepts/acknowledge.md @@ -6,13 +6,13 @@ slug: /concepts/acknowledge アクション(action)、コマンド(command)、ショートカット(shortcut)、オプション(options)、およびモーダルからのデータ送信(view_submission)の各リクエストは、**必ず** `ack()` 関数を使って確認を行う必要があります。これによってリクエストが受信されたことが Slack に認識され、Slack のユーザーインターフェイスが適切に更新されます。 -リクエストの種類によっては、確認で通知方法が異なる場合があります。例えば、外部データソースを使用する選択メニューのオプションのリクエストに対する確認では、適切な[オプション](https://docs.slack.dev/reference/block-kit/composition-objects/option-object)のリストとともに `ack()` を呼び出します。モーダルからのデータ送信に対する確認では、 `response_action` を渡すことで[モーダルの更新](/concepts/view_submissions)などを行えます。 +リクエストの種類によっては、確認で通知方法が異なる場合があります。例えば、外部データソースを使用する選択メニューのオプションのリクエストに対する確認では、適切な[オプション](/reference/block-kit/composition-objects/option-object)のリストとともに `ack()` を呼び出します。モーダルからのデータ送信に対する確認では、 `response_action` を渡すことで[モーダルの更新](/bolt-python/concepts/view_submissions)などを行えます。 確認までの猶予は 3 秒しかないため、新しいメッセージの送信やデータベースからの情報の取得といった時間のかかる処理は、`ack()` を呼び出した後で行うことをおすすめします。 - FaaS / serverless 環境を使う場合、 `ack()` するタイミングが異なります。 これに関する詳細は [Lazy listeners (FaaS)](/concepts/lazy-listeners) を参照してください。 + FaaS / serverless 環境を使う場合、 `ack()` するタイミングが異なります。 これに関する詳細は [Lazy listeners (FaaS)](/bolt-python/concepts/lazy-listeners) を参照してください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 外部データを使用する選択メニューオプションに応答するサンプル @app.options("menu_selection") diff --git a/docs/japanese/concepts/actions.md b/docs/japanese/concepts/actions.md index 82d243e99..dd69ef264 100644 --- a/docs/japanese/concepts/actions.md +++ b/docs/japanese/concepts/actions.md @@ -10,9 +10,9 @@ Bolt アプリは `action` メソッドを用いて、ボタンのクリック アクションは `str` 型または `re.Pattern` 型の `action_id` でフィルタリングできます。`action_id` は、Slack プラットフォーム上のインタラクティブコンポーネントを区別する一意の識別子として機能します。 -`action()` を使ったすべての例で `ack()` が使用されていることに注目してください。アクションのリスナー内では、Slack からのリクエストを受信したことを確認するために、`ack()` 関数を呼び出す必要があります。これについては、[リクエストの確認](/concepts/acknowledge)セクションで説明しています。 +`action()` を使ったすべての例で `ack()` が使用されていることに注目してください。アクションのリスナー内では、Slack からのリクエストを受信したことを確認するために、`ack()` 関数を呼び出す必要があります。これについては、[リクエストの確認](/bolt-python/concepts/acknowledge)セクションで説明しています。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 'approve_button' という action_id のブロックエレメントがトリガーされるたびに、このリスナーが呼び出させれる @app.action("approve_button") @@ -49,7 +49,7 @@ def update_message(ack, body, client): 2 つ目は、`respond()` を使用する方法です。これは、アクションに関連づけられた `response_url` を使ったメッセージ送信を行うためのユーティリティです。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 'approve_button' という action_id のインタラクティブコンポーネントがトリガーされると、このリスナーが呼ばれる @app.action("approve_button") @@ -61,7 +61,7 @@ def approve_request(ack, say): ### respond() の利用 -`respond()` は `response_url` を使って送信するときに便利なメソッドで、これらと同じような動作をします。投稿するメッセージのペイロードには、全ての[メッセージペイロードのプロパティ](https://docs.slack.dev/messaging/#payloads)とオプションのプロパティとして `response_type`(値は `"in_channel"` または `"ephemeral"`)、`replace_original`、`delete_original`、`unfurl_links`、`unfurl_media` などを指定できます。こうすることによってアプリから送信されるメッセージは、やり取りの発生元に反映されます。 +`respond()` は `response_url` を使って送信するときに便利なメソッドで、これらと同じような動作をします。投稿するメッセージのペイロードには、全ての[メッセージペイロードのプロパティ](/messaging/#payloads)とオプションのプロパティとして `response_type`(値は `"in_channel"` または `"ephemeral"`)、`replace_original`、`delete_original`、`unfurl_links`、`unfurl_media` などを指定できます。こうすることによってアプリから送信されるメッセージは、やり取りの発生元に反映されます。 ```python # 'user_select' という action_id を持つアクションのトリガーをリッスン diff --git a/docs/japanese/concepts/app-home.md b/docs/japanese/concepts/app-home.md index 2dc5fd6c0..251684759 100644 --- a/docs/japanese/concepts/app-home.md +++ b/docs/japanese/concepts/app-home.md @@ -4,11 +4,11 @@ lang: ja-jp slug: /concepts/app-home --- -ホームタブは、サイドバーや検索画面からアクセス可能なサーフェスエリアです。アプリはこのエリアを使ってユーザーごとのビューを表示することができます。アプリ設定ページで App Home の機能を有効にすると、`views.publish` API メソッドの呼び出しで `user_id` と[ビューのペイロード](https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload/#view_submission)を指定して、ホームタブを公開・更新することができるようになります。 +ホームタブは、サイドバーや検索画面からアクセス可能なサーフェスエリアです。アプリはこのエリアを使ってユーザーごとのビューを表示することができます。アプリ設定ページで App Home の機能を有効にすると、`views.publish` API メソッドの呼び出しで `user_id` と[ビューのペイロード](/reference/interaction-payloads/view-interactions-payload/#view_submission)を指定して、ホームタブを公開・更新することができるようになります。 -`app_home_opened` イベントをサブスクライブすると、ユーザーが App Home を開く操作をリッスンできます。 +`app_home_opened` イベントをサブスクライブすると、ユーザーが App Home を開く操作をリッスンできます。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python @app.event("app_home_opened") def update_home_tab(client, event, logger): @@ -32,7 +32,7 @@ def update_home_tab(client, event, logger): "type": "section", "text": { "type": "mrkdwn", - "text":"Learn how home tabs can be more useful and interactive ." + "text":"Learn how home tabs can be more useful and interactive ." } } ] diff --git a/docs/japanese/concepts/assistant.md b/docs/japanese/concepts/assistant.md index 5ffcb6f10..dbe5adb5d 100644 --- a/docs/japanese/concepts/assistant.md +++ b/docs/japanese/concepts/assistant.md @@ -4,9 +4,9 @@ lang: en slug: /concepts/assistant --- -このページは、Bolt を使ってエージェント・アシスタントを実装するための方法を紹介します。この機能に関する一般的な情報については、[こちらのドキュメントページ(英語)](https://docs.slack.dev/ai/)を参照してください。 +このページは、Bolt を使ってエージェント・アシスタントを実装するための方法を紹介します。この機能に関する一般的な情報については、[こちらのドキュメントページ(英語)](/ai/)を参照してください。 -この機能を実装するためには、まず[アプリの設定画面](https://api.slack.com/apps)で **Agents & Assistants** 機能を有効にし、**OAuth & Permissions** のページで [`assistant:write`](https://docs.slack.dev/reference/scopes/assistant.write)、[chat:write](https://docs.slack.dev/reference/scopes/chat.write)、[`im:history`](https://docs.slack.dev/reference/scopes/im.history) を**ボットの**スコープに追加し、**Event Subscriptions** のページで [`assistant_thread_started`](https://docs.slack.dev/reference/events/assistant_thread_started)、[`assistant_thread_context_changed`](https://docs.slack.dev/reference/events/assistant_thread_context_changed)、[`message.im`](https://docs.slack.dev/reference/events/message.im) イベントを有効にしてください。 +この機能を実装するためには、まず[アプリの設定画面](https://api.slack.com/apps)で **Agents & Assistants** 機能を有効にし、**OAuth & Permissions** のページで [`assistant:write`](/reference/scopes/assistant.write)、[chat:write](/reference/scopes/chat.write)、[`im:history`](/reference/scopes/im.history) を**ボットの**スコープに追加し、**Event Subscriptions** のページで [`assistant_thread_started`](/reference/events/assistant_thread_started)、[`assistant_thread_context_changed`](/reference/events/assistant_thread_context_changed)、[`message.im`](/reference/events/message.im) イベントを有効にしてください。 また、この機能は Slack の有料プランでのみ利用可能です。もし開発用の有料プランのワークスペースをお持ちでない場合は、[Developer Program](https://api.slack.com/developer-program) に参加し、全ての有料プラン向け機能を利用可能なサンドボックス環境をつくることができます。 @@ -72,7 +72,7 @@ def respond_in_assistant_thread( app.use(assistant) ``` -リスナーに指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +リスナーに指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ユーザーがチャンネルの横でアシスタントスレッドを開いた場合、そのチャンネルの情報は、そのスレッドの `AssistantThreadContext` データとして保持され、 `get_thread_context` ユーティリティを使ってアクセスすることができます。Bolt がこのユーティリティを提供している理由は、後続のユーザーメッセージ投稿のイベントペイロードに最新のスレッドのコンテキスト情報は含まれないためです。そのため、アプリはコンテキスト情報が変更されたタイミングでそれを何らかの方法で保存し、後続のメッセージイベントのリスナーコードから参照できるようにする必要があります。 @@ -92,7 +92,7 @@ assistant = Assistant(thread_context_store=FileAssistantThreadContextStore()) ## アシスタントスレッドでの Block Kit インタラクション -より高度なユースケースでは、上のようなプロンプト例の提案ではなく Block Kit のボタンなどを使いたいという場合があるかもしれません。そして、後続の処理のために[構造化されたメッセージメタデータ](https://docs.slack.dev/messaging/message-metadata/)を含むメッセージを送信したいという場合もあるでしょう。 +より高度なユースケースでは、上のようなプロンプト例の提案ではなく Block Kit のボタンなどを使いたいという場合があるかもしれません。そして、後続の処理のために[構造化されたメッセージメタデータ](/messaging/message-metadata/)を含むメッセージを送信したいという場合もあるでしょう。 例えば、アプリが最初の返信で「参照しているチャンネルを要約」のようなボタンを表示し、ユーザーがそれをクリックして、より詳細な情報(例:要約するメッセージ数・日数、要約の目的など)を送信、アプリがそれを構造化されたメータデータに整理した上でリクエスト内容をボットのメッセージとして送信するようなシナリオです。 @@ -107,7 +107,7 @@ app = App( assistant = Assistant() -# リスナーに指定可能な引数の一覧は https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html を参照してください +# リスナーに指定可能な引数の一覧は https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html を参照してください @assistant.thread_started def start_assistant_thread(say: Say): diff --git a/docs/japanese/concepts/authenticating-oauth.md b/docs/japanese/concepts/authenticating-oauth.md index 82bbaf562..e25542101 100644 --- a/docs/japanese/concepts/authenticating-oauth.md +++ b/docs/japanese/concepts/authenticating-oauth.md @@ -4,15 +4,15 @@ lang: ja-jp slug: /concepts/authenticating-oauth --- -Slack アプリを複数のワークスペースにインストールできるようにするためには、OAuth フローを実装した上で、アクセストークンなどのインストールに関する情報をセキュアな方法で保存する必要があります。アプリを初期化する際に `client_id`、`client_secret`、`scopes`、`installation_store`、`state_store` を指定することで、OAuth のエンドポイントのルート情報や stateパラメーターの検証をBolt for Python にハンドリングさせることができます。カスタムのアダプターを実装する場合は、SDK が提供する組み込みの[OAuth ライブラリ](https://tools.slack.dev/python-slack-sdk/oauth/)を利用するのが便利です。これは Slack が開発したモジュールで、Bolt for Python 内部でも利用しています。 +Slack アプリを複数のワークスペースにインストールできるようにするためには、OAuth フローを実装した上で、アクセストークンなどのインストールに関する情報をセキュアな方法で保存する必要があります。アプリを初期化する際に `client_id`、`client_secret`、`scopes`、`installation_store`、`state_store` を指定することで、OAuth のエンドポイントのルート情報や stateパラメーターの検証をBolt for Python にハンドリングさせることができます。カスタムのアダプターを実装する場合は、SDK が提供する組み込みの[OAuth ライブラリ](/python-slack-sdk/oauth/)を利用するのが便利です。これは Slack が開発したモジュールで、Bolt for Python 内部でも利用しています。 Bolt for Python によって `slack/oauth_redirect` という**リダイレクト URL** が生成されます。Slack はアプリのインストールフローを完了させたユーザーをこの URL にリダイレクトします。この**リダイレクト URL** は、アプリの設定の「**OAuth and Permissions**」であらかじめ追加しておく必要があります。この URL は、後ほど説明するように `OAuthSettings` というコンストラクタの引数で指定することもできます。 Bolt for Python は `slack/install` というルートも生成します。これはアプリを直接インストールするための「**Add to Slack**」ボタンを表示するために使われます。すでにワークスペースへのアプリのインストールが済んでいる場合に追加で各ユーザーのユーザートークンなどの情報を取得する場合や、カスタムのインストール用の URL を動的に生成したい場合などは、`oauth_settings` の `authorize_url_generator` でカスタムの URL ジェネレーターを指定することができます。 -バージョン 1.1.0 以降の Bolt for Python では、[OrG 全体へのインストール](https://docs.slack.dev/enterprise-grid/)がデフォルトでサポートされています。OrG 全体へのインストールは、アプリの設定の「**Org Level Apps**」で有効化できます。 +バージョン 1.1.0 以降の Bolt for Python では、[OrG 全体へのインストール](/enterprise-grid/)がデフォルトでサポートされています。OrG 全体へのインストールは、アプリの設定の「**Org Level Apps**」で有効化できます。 -Slack での OAuth を使ったインストールフローについて詳しくは、[API ドキュメントを参照してください](https://docs.slack.dev/authentication/installing-with-oauth)。 +Slack での OAuth を使ったインストールフローについて詳しくは、[API ドキュメントを参照してください](/authentication/installing-with-oauth)。 ```python import os diff --git a/docs/japanese/concepts/authorization.md b/docs/japanese/concepts/authorization.md index 1a8797bb5..760bb0903 100644 --- a/docs/japanese/concepts/authorization.md +++ b/docs/japanese/concepts/authorization.md @@ -7,7 +7,7 @@ slug: /concepts/authorization 認可(Authorization)は、Slack からの受信リクエストを処理するにあたって、どのようなSlack クレデンシャル (ボットトークンなど) を使用可能にするかを決定するプロセスです。 -単一のワークスペースにインストールされるアプリでは、`token` パラメーターを使って `App` のコンストラクターにボットトークンを渡すという、シンプルな方法が使えます。それに対して、複数のワークスペースにインストールされるアプリでは、次の 2 つの方法のいずれかを使用する必要があります。簡単なのは、組み込みの OAuth サポートを使用する方法です。OAuth サポートは、OAuth フロー用のURLのセットアップとstateの検証を行います。詳細は「[OAuth を使った認証](/concepts/authenticating-oauth)」セクションを参照してください。 +単一のワークスペースにインストールされるアプリでは、`token` パラメーターを使って `App` のコンストラクターにボットトークンを渡すという、シンプルな方法が使えます。それに対して、複数のワークスペースにインストールされるアプリでは、次の 2 つの方法のいずれかを使用する必要があります。簡単なのは、組み込みの OAuth サポートを使用する方法です。OAuth サポートは、OAuth フロー用のURLのセットアップとstateの検証を行います。詳細は「[OAuth を使った認証](/bolt-python/concepts/authenticating-oauth)」セクションを参照してください。 よりカスタマイズできる方法として、`App` をインスタンス化する関数に`authorize` パラメーターを指定する方法があります。`authorize` 関数から返される [`AuthorizeResult` のインスタンス](https://github.com/slackapi/bolt-python/blob/main/slack_bolt/authorization/authorize_result.py)には、どのユーザーがどこで発生させたリクエストかを示す情報が含まれます。 diff --git a/docs/japanese/concepts/commands.md b/docs/japanese/concepts/commands.md index 73d262446..4854a0ac2 100644 --- a/docs/japanese/concepts/commands.md +++ b/docs/japanese/concepts/commands.md @@ -8,11 +8,11 @@ slug: /concepts/commands コマンドリクエストをアプリが受信し確認したことを Slack に通知するため、`ack()` を呼び出す必要があります。 -スラッシュコマンドに応答する方法は 2 つあります。1 つ目は `say()` を使う方法で、文字列または JSON のペイロードを渡すことができます。2 つ目は `respond()` を使う方法です。これは `response_url` がある場合に活躍します。これらの方法は[アクションへの応答](/concepts/action-respond)セクションで詳しく説明しています。 +スラッシュコマンドに応答する方法は 2 つあります。1 つ目は `say()` を使う方法で、文字列または JSON のペイロードを渡すことができます。2 つ目は `respond()` を使う方法です。これは `response_url` がある場合に活躍します。これらの方法は[アクションへの応答](/bolt-python/concepts/action-respond)セクションで詳しく説明しています。 アプリの設定でコマンドを登録するときは、リクエスト URL の末尾に `/slack/events` をつけます。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # echoコマンドは受け取ったコマンドをそのまま返す @app.command("/echo") diff --git a/docs/japanese/concepts/custom-adapters.md b/docs/japanese/concepts/custom-adapters.md index b72d48ded..e751c01da 100644 --- a/docs/japanese/concepts/custom-adapters.md +++ b/docs/japanese/concepts/custom-adapters.md @@ -4,7 +4,7 @@ lang: ja-jp slug: /concepts/custom-adapters --- -[アダプター](/concepts/adapters)はフレキシブルで、あなたが使用したいフレームワークに合わせた調整も可能です。アダプターでは、次の 2 つの要素が必須となっています。 +[アダプター](/bolt-python/concepts/adapters)はフレキシブルで、あなたが使用したいフレームワークに合わせた調整も可能です。アダプターでは、次の 2 つの要素が必須となっています。 - `__init__(app:App)` : コンストラクター。Bolt の `App` のインスタンスを受け取り、保持します。 - `handle(req:Request)` : Slack からの受信リクエストを受け取り、解析を行う関数。通常は `handle()` という名前です。リクエストを [`BoltRequest`](https://github.com/slackapi/bolt-python/blob/main/slack_bolt/request/request.py) のインスタンスに合った形にして、保持している Bolt アプリに引き渡します。 diff --git a/docs/japanese/concepts/custom-steps.md b/docs/japanese/concepts/custom-steps.md index e022c3e38..f0f6f26f7 100644 --- a/docs/japanese/concepts/custom-steps.md +++ b/docs/japanese/concepts/custom-steps.md @@ -4,14 +4,14 @@ lang: ja-jp slug: /concepts/custom-steps --- -Your app can use the `function()` method to listen to incoming [custom step requests](https://docs.slack.dev/workflows/workflow-steps). Custom steps are used in Workflow Builder to build workflows. The method requires a step `callback_id` of type `str`. This `callback_id` must also be defined in your [Function](https://docs.slack.dev/reference/app-manifest#functions) definition. Custom steps must be finalized using the `complete()` or `fail()` listener arguments to notify Slack that your app has processed the request. +Your app can use the `function()` method to listen to incoming [custom step requests](/workflows/workflow-steps). Custom steps are used in Workflow Builder to build workflows. The method requires a step `callback_id` of type `str`. This `callback_id` must also be defined in your [Function](/reference/app-manifest#functions) definition. Custom steps must be finalized using the `complete()` or `fail()` listener arguments to notify Slack that your app has processed the request. * `complete()` requires **one** argument: `outputs` of type `dict`. It ends your custom step **successfully** and provides a dictionary containing the outputs of your custom step as per its definition. * `fail()` requires **one** argument: `error` of type `str`. It ends your custom step **unsuccessfully** and provides a message containing information regarding why your custom step failed. You can reference your custom step's inputs using the `inputs` listener argument of type `dict`. -Refer to [the module document](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn about the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn about the available listener arguments. ```python # This sample custom step formats an input and outputs it @@ -68,13 +68,13 @@ Example app manifest definition Your app's custom steps may create interactivity points for users, for example: Post a message with a button. -If such interaction points originate from a custom step execution, the events sent to your app representing the end-user interaction with these points are considered to be _function-scoped interactivity events_. These interactivity events can be handled by your app using the same concepts we covered earlier, such as [Listening to actions](/concepts/action-listening). +If such interaction points originate from a custom step execution, the events sent to your app representing the end-user interaction with these points are considered to be _function-scoped interactivity events_. These interactivity events can be handled by your app using the same concepts we covered earlier, such as [Listening to actions](/bolt-python/concepts/action-listening). _function-scoped interactivity events_ will contain data related to the custom step (`function_executed` event) they were spawned from, such as custom step `inputs` and access to `complete()` and `fail()` listener arguments. Your app can skip calling `complete()` or `fail()` in the `function()` handler method if the custom step creates an interaction point that requires user interaction before the step can end. However, in the relevant interactivity handler method, your app must invoke `complete()` or `fail()` to notify Slack that the custom step has been processed. -You’ll notice in all interactivity handler examples, `ack()` is used. It is required to call the `ack()` function within an interactivity listener to acknowledge that the request was received from Slack. This is discussed in the [acknowledging requests section](/concepts/acknowledge). +You’ll notice in all interactivity handler examples, `ack()` is used. It is required to call the `ack()` function within an interactivity listener to acknowledge that the request was received from Slack. This is discussed in the [acknowledging requests section](/bolt-python/concepts/acknowledge). ```python # This sample custom step posts a message with a button @@ -150,4 +150,4 @@ Example app manifest definition -Learn more about responding to interactivity, see the [Slack API documentation](https://docs.slack.dev/interactivity/). +Learn more about responding to interactivity, see the [Slack API documentation](/interactivity/). diff --git a/docs/japanese/concepts/event-listening.md b/docs/japanese/concepts/event-listening.md index 2790ad5b7..3b7c4a062 100644 --- a/docs/japanese/concepts/event-listening.md +++ b/docs/japanese/concepts/event-listening.md @@ -4,11 +4,11 @@ lang: ja-jp slug: /concepts/event-listening --- -`event()` メソッドを使うと、[Events API](https://docs.slack.dev/reference/events) の任意のイベントをリッスンできます。リッスンするイベントは、アプリの設定であらかじめサブスクライブしておく必要があります。これを利用することで、アプリがインストールされたワークスペースで何らかのイベント(例:ユーザーがメッセージにリアクションをつけた、ユーザーがチャンネルに参加した)が発生したときに、アプリに何らかのアクションを実行させることができます。 +`event()` メソッドを使うと、[Events API](/reference/events) の任意のイベントをリッスンできます。リッスンするイベントは、アプリの設定であらかじめサブスクライブしておく必要があります。これを利用することで、アプリがインストールされたワークスペースで何らかのイベント(例:ユーザーがメッセージにリアクションをつけた、ユーザーがチャンネルに参加した)が発生したときに、アプリに何らかのアクションを実行させることができます。 `event()` メソッドには `str` 型の `eventType` を指定する必要があります。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # ユーザーがワークスペースに参加した際に、自己紹介を促すメッセージを指定のチャンネルに送信 @app.event("team_join") @@ -23,7 +23,7 @@ def ask_for_introduction(event, say): `message()` リスナーは `event("message")` と等価の機能を提供します。 -`subtype` という追加のキーを指定して、イベントのサブタイプでフィルタリングすることもできます。よく使われるサブタイプには、`bot_message` や `message_replied` があります。詳しくは[メッセージイベントページ](https://docs.slack.dev/reference/events/message#subtypes)を参照してください。サブタイプなしのイベントだけにフィルターするために明に `None` を指定することもできます。 +`subtype` という追加のキーを指定して、イベントのサブタイプでフィルタリングすることもできます。よく使われるサブタイプには、`bot_message` や `message_replied` があります。詳しくは[メッセージイベントページ](/reference/events/message#subtypes)を参照してください。サブタイプなしのイベントだけにフィルターするために明に `None` を指定することもできます。 ```python # 変更されたすべてのメッセージに一致 diff --git a/docs/japanese/concepts/global-middleware.md b/docs/japanese/concepts/global-middleware.md index caace0621..475a5999a 100644 --- a/docs/japanese/concepts/global-middleware.md +++ b/docs/japanese/concepts/global-middleware.md @@ -9,7 +9,7 @@ order: 8 グローバルミドルウェアでもリスナーミドルウェアでも、次のミドルウェアに実行チェーンの制御をリレーするために、`next()` を呼び出す必要があります。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python @app.use diff --git a/docs/japanese/concepts/listener-middleware.md b/docs/japanese/concepts/listener-middleware.md index 822b5ac63..38730c06b 100644 --- a/docs/japanese/concepts/listener-middleware.md +++ b/docs/japanese/concepts/listener-middleware.md @@ -8,7 +8,7 @@ slug: /concepts/listener-middleware 非常にシンプルなリスナーミドルウェアの場合であれば、`next()` メソッドを呼び出す代わりに `bool` 値(処理を継続したい場合は `True`)を返すだけで済む「リスナーマッチャー」を使うとよいでしょう。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # "bot_message" サブタイプのメッセージを抽出するリスナーミドルウェア diff --git a/docs/japanese/concepts/message-listening.md b/docs/japanese/concepts/message-listening.md index e7d538e69..71771cf5a 100644 --- a/docs/japanese/concepts/message-listening.md +++ b/docs/japanese/concepts/message-listening.md @@ -4,11 +4,11 @@ lang: ja-jp slug: /concepts/message-listening --- -[あなたのアプリがアクセス権限を持つ](https://docs.slack.dev/messaging/retrieving-messages)メッセージの投稿イベントをリッスンするには `message()` メソッドを利用します。このメソッドは `type` が `message` ではないイベントを処理対象から除外します。 +[あなたのアプリがアクセス権限を持つ](/messaging/retrieving-messages)メッセージの投稿イベントをリッスンするには `message()` メソッドを利用します。このメソッドは `type` が `message` ではないイベントを処理対象から除外します。 `message()` の引数には `str` 型または `re.Pattern` オブジェクトを指定できます。この条件のパターンに一致しないメッセージは除外されます。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # '👋' が含まれるすべてのメッセージに一致 @app.message(":wave:") diff --git a/docs/japanese/concepts/message-sending.md b/docs/japanese/concepts/message-sending.md index fbcf0ac6b..1eb9bd954 100644 --- a/docs/japanese/concepts/message-sending.md +++ b/docs/japanese/concepts/message-sending.md @@ -6,9 +6,9 @@ slug: /concepts/message-sending リスナー関数内では、関連づけられた会話(例:リスナー実行のトリガーとなったイベントまたはアクションの発生元の会話)がある場合はいつでも `say()` を使用できます。`say()` には文字列または JSON ペイロードを指定できます。文字列の場合、送信できるのはテキストベースの単純なメッセージです。より複雑なメッセージを送信するには JSON ペイロードを指定します。指定したメッセージのペイロードは、関連づけられた会話内のメッセージとして送信されます。 -リスナー関数の外でメッセージを送信したい場合や、より高度な処理(特定のエラーの処理など)を実行したい場合は、[Bolt インスタンスにアタッチされたクライアント](/concepts/web-api)の `client.chat_postMessage` を呼び出します。 +リスナー関数の外でメッセージを送信したい場合や、より高度な処理(特定のエラーの処理など)を実行したい場合は、[Bolt インスタンスにアタッチされたクライアント](/bolt-python/concepts/web-api)の `client.chat_postMessage` を呼び出します。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 'knock knock' が含まれるメッセージをリッスンし、イタリック体で 'Who's there?' と返信 @app.message("knock knock") @@ -20,7 +20,7 @@ def ask_who(message, say): `say()` は、より複雑なメッセージペイロードを受け付けるので、メッセージに機能やリッチな構造を与えることが容易です。 -リッチなメッセージレイアウトをアプリに追加する方法については、[API サイトのガイド](https://docs.slack.dev/messaging/#structure)を参照してください。また、[Block Kit ビルダー](https://api.slack.com/tools/block-kit-builder?template=1)の一般的なアプリフローのテンプレートも見てみてください。 +リッチなメッセージレイアウトをアプリに追加する方法については、[API サイトのガイド](/messaging/#structure)を参照してください。また、[Block Kit ビルダー](https://api.slack.com/tools/block-kit-builder?template=1)の一般的なアプリフローのテンプレートも見てみてください。 ```python # ユーザーが 📅 のリアクションをつけたら、日付ピッカーのついた section ブロックを送信 diff --git a/docs/japanese/concepts/opening-modals.md b/docs/japanese/concepts/opening-modals.md index a954a658b..48eee2170 100644 --- a/docs/japanese/concepts/opening-modals.md +++ b/docs/japanese/concepts/opening-modals.md @@ -4,13 +4,13 @@ lang: ja-jp slug: /concepts/opening-modals --- -モーダルは、ユーザーからのデータの入力を受け付けたり、動的な情報を表示したりするためのインターフェイスです。組み込みの APIクライアントの `views.open` メソッドに、有効な `trigger_id` とビューのペイロードを指定してモーダルを開始します。 +モーダルは、ユーザーからのデータの入力を受け付けたり、動的な情報を表示したりするためのインターフェイスです。組み込みの APIクライアントの `views.open` メソッドに、有効な `trigger_id` とビューのペイロードを指定してモーダルを開始します。 ショートカットの実行、ボタンを押下、選択メニューの操作などの操作の場合、Request URL に送信されるペイロードには `trigger_id` が含まれます。 -モーダルの生成方法についての詳細は、API ドキュメントを参照してください。 +モーダルの生成方法についての詳細は、API ドキュメントを参照してください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # ショートカットの呼び出しをリッスン diff --git a/docs/japanese/concepts/select-menu-options.md b/docs/japanese/concepts/select-menu-options.md index 598fb1cc6..0e26af498 100644 --- a/docs/japanese/concepts/select-menu-options.md +++ b/docs/japanese/concepts/select-menu-options.md @@ -4,17 +4,17 @@ lang: ja-jp slug: /concepts/options --- -`options()` メソッドは、Slack からのオプション(セレクトメニュー内の動的な選択肢)をリクエストするペイロードをリッスンします。 [`action()` と同様に](/concepts/action-listening)、文字列型の `action_id` または制約付きオブジェクトが必要です。 +`options()` メソッドは、Slack からのオプション(セレクトメニュー内の動的な選択肢)をリクエストするペイロードをリッスンします。 [`action()` と同様に](/bolt-python/concepts/action-listening)、文字列型の `action_id` または制約付きオブジェクトが必要です。 外部データソースを使って選択メニューをロードするためには、末部に `/slack/events` が付加された URL を Options Load URL として予め設定しておく必要があります。 `external_select` メニューでは `action_id` を指定することをおすすめしています。ただし、ダイアログを利用している場合、ダイアログが Block Kit に対応していないため、`callback_id` をフィルタリングするための制約オブジェクトを使用する必要があります。 -オプションのリクエストに応答するときは、有効なオプションを含む `options` または `option_groups` のリストとともに `ack()` を呼び出す必要があります。API サイトにある[外部データを使用する選択メニューに応答するサンプル例](https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select)と、[ダイアログでの応答例](https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external)を参考にしてください。 +オプションのリクエストに応答するときは、有効なオプションを含む `options` または `option_groups` のリストとともに `ack()` を呼び出す必要があります。API サイトにある[外部データを使用する選択メニューに応答するサンプル例](/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select)と、[ダイアログでの応答例](/legacy/legacy-dialogs/#dynamic_select_elements_external)を参考にしてください。 -さらに、ユーザーが入力したキーワードに基づいたオプションを返すようフィルタリングロジックを適用することもできます。 これは `payload` という引数の ` value` の値に基づいて、それぞれのパターンで異なるオプションの一覧を返すように実装することができます。 Bolt for Python のすべてのリスナーやミドルウェアでは、[多くの有用な引数](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html)にアクセスすることができますので、チェックしてみてください。 +さらに、ユーザーが入力したキーワードに基づいたオプションを返すようフィルタリングロジックを適用することもできます。 これは `payload` という引数の ` value` の値に基づいて、それぞれのパターンで異なるオプションの一覧を返すように実装することができます。 Bolt for Python のすべてのリスナーやミドルウェアでは、[多くの有用な引数](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html)にアクセスすることができますので、チェックしてみてください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 外部データを使用する選択メニューオプションに応答するサンプル例 @app.options("external_action") diff --git a/docs/japanese/concepts/shortcuts.md b/docs/japanese/concepts/shortcuts.md index 995b6e0d7..30ca85e12 100644 --- a/docs/japanese/concepts/shortcuts.md +++ b/docs/japanese/concepts/shortcuts.md @@ -4,19 +4,19 @@ lang: ja-jp slug: /concepts/shortcuts --- -`shortcut()` メソッドは、[グローバルショートカット](https://docs.slack.dev/interactivity/implementing-shortcuts#global)と[メッセージショートカット](https://docs.slack.dev/interactivity/implementing-shortcuts#messages)の 2 つをサポートしています。 +`shortcut()` メソッドは、[グローバルショートカット](/interactivity/implementing-shortcuts#global)と[メッセージショートカット](/interactivity/implementing-shortcuts#messages)の 2 つをサポートしています。 ショートカットは、いつでも呼び出せるアプリのエントリーポイントを提供するものです。グローバルショートカットは Slack のテキスト入力エリアや検索ウィンドウからアクセスできます。メッセージショートカットはメッセージのコンテキストメニューからアクセスできます。アプリは、ショートカットリクエストをリッスンするために `shortcut()` メソッドを使用します。このメソッドには `str` 型または `re.Pattern` 型の `callback_id` パラメーターを指定します。 ショートカットリクエストがアプリによって確認されたことを Slack に伝えるため、`ack()` を呼び出す必要があります。 -ショートカットのペイロードには `trigger_id` が含まれます。アプリはこれを使って、ユーザーにやろうとしていることを確認するための[モーダルを開く](/concepts/opening-modals)ことができます。 +ショートカットのペイロードには `trigger_id` が含まれます。アプリはこれを使って、ユーザーにやろうとしていることを確認するための[モーダルを開く](/bolt-python/concepts/opening-modals)ことができます。 アプリの設定でショートカットを登録する際は、他の URL と同じように、リクエスト URL の末尾に `/slack/events` をつけます。 -⚠️ グローバルショートカットのペイロードにはチャンネル ID が **含まれません**。アプリでチャンネル ID を取得する必要がある場合は、モーダル内に [`conversations_select`](https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#conversation_multi_select) エレメントを配置します。メッセージショートカットにはチャンネル ID が含まれます。 +⚠️ グローバルショートカットのペイロードにはチャンネル ID が **含まれません**。アプリでチャンネル ID を取得する必要がある場合は、モーダル内に [`conversations_select`](/reference/block-kit/block-elements/multi-select-menu-element#conversation_multi_select) エレメントを配置します。メッセージショートカットにはチャンネル ID が含まれます。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 'open_modal' という callback_id のショートカットをリッスン @app.shortcut("open_modal") @@ -36,7 +36,7 @@ def open_modal(ack, shortcut, client): "type": "section", "text": { "type": "mrkdwn", - "text":"About the simplest modal you could conceive of :smile:\n\nMaybe or ." + "text":"About the simplest modal you could conceive of :smile:\n\nMaybe or ." } }, { @@ -76,7 +76,7 @@ def open_modal(ack, shortcut, client): "type": "section", "text": { "type": "mrkdwn", - "text":"About the simplest modal you could conceive of :smile:\n\nMaybe or ." + "text":"About the simplest modal you could conceive of :smile:\n\nMaybe or ." } }, { diff --git a/docs/japanese/concepts/socket-mode.md b/docs/japanese/concepts/socket-mode.md index 061daf853..ec22fbd68 100644 --- a/docs/japanese/concepts/socket-mode.md +++ b/docs/japanese/concepts/socket-mode.md @@ -4,7 +4,7 @@ lang: ja-jp slug: /concepts/socket-mode --- -[ソケットモード](https://docs.slack.dev/apis/events-api/using-socket-mode)は、アプリに WebSocket での接続と、そのコネクション経由でのデータ受信を可能とします。Bolt for Python は、バージョン 1.2.0 からこれに対応しています。 +[ソケットモード](/apis/events-api/using-socket-mode)は、アプリに WebSocket での接続と、そのコネクション経由でのデータ受信を可能とします。Bolt for Python は、バージョン 1.2.0 からこれに対応しています。 ソケットモードでは、Slack からのペイロード送信を受け付けるエンドポイントをホストする HTTP サーバーを起動する代わりに WebSocket で Slack に接続し、そのコネクション経由でデータを受信します。ソケットモードを使う前に、アプリの管理画面でソケットモードの機能が有効になっていることを確認しておいてください。 @@ -40,7 +40,7 @@ if __name__ == "__main__": aiohttp のような asyncio をベースとしたアダプターを使う場合、アプリケーション全体が asyncio の async/await プログラミングモデルで実装されている必要があります。`AsyncApp` を動作させるためには `AsyncSocketModeHandler` とその async なミドルウェアやリスナーを利用します。 -`AsyncApp` の使い方についての詳細は、[Async (asyncio) の利用](/concepts/async)や、関連する[サンプルコード例](https://github.com/slackapi/bolt-python/tree/main/examples)を参考にしてください。 +`AsyncApp` の使い方についての詳細は、[Async (asyncio) の利用](/bolt-python/concepts/async)や、関連する[サンプルコード例](https://github.com/slackapi/bolt-python/tree/main/examples)を参考にしてください。 ```python from slack_bolt.app.async_app import AsyncApp diff --git a/docs/japanese/concepts/token-rotation.md b/docs/japanese/concepts/token-rotation.md index bc622fe98..80d58d5ca 100644 --- a/docs/japanese/concepts/token-rotation.md +++ b/docs/japanese/concepts/token-rotation.md @@ -8,6 +8,6 @@ Bolt for Python [v1.7.0](https://github.com/slackapi/bolt-python/releases/tag/v1 既存の Slack アプリではアクセストークンが無期限に存在し続けるのに対して、トークンローテーションを有効にしたアプリではアクセストークンが失効するようになります。リフレッシュトークンを利用して、アクセストークンを長期間にわたって更新し続けることができます。 -[Bolt for Python の組み込みの OAuth 機能](/concepts/authenticating-oauth) を使用していれば、Bolt for Python が自動的にトークンローテーションの処理をハンドリングします。 +[Bolt for Python の組み込みの OAuth 機能](/bolt-python/concepts/authenticating-oauth) を使用していれば、Bolt for Python が自動的にトークンローテーションの処理をハンドリングします。 -トークンローテーションに関する詳細は [API ドキュメント](https://docs.slack.dev/authentication/using-token-rotation)を参照してください。 \ No newline at end of file +トークンローテーションに関する詳細は [API ドキュメント](/authentication/using-token-rotation)を参照してください。 \ No newline at end of file diff --git a/docs/japanese/concepts/updating-pushing-views.md b/docs/japanese/concepts/updating-pushing-views.md index 42c89157e..32d21b1ca 100644 --- a/docs/japanese/concepts/updating-pushing-views.md +++ b/docs/japanese/concepts/updating-pushing-views.md @@ -4,7 +4,7 @@ lang: ja-jp slug: /concepts/updating-pushing-views --- -モーダル内では、複数のモーダルをスタックのように重ねることができます。`views_open` という APIを呼び出すと、親となるとなるモーダルビューが追加されます。この最初の呼び出しの後、`views_update` を呼び出すことでそのビューを更新することができます。また、`views_push` を呼び出すと、親のモーダルの上にさらに新しいモーダルビューを重ねることもできます。 +モーダル内では、複数のモーダルをスタックのように重ねることができます。`views_open` という APIを呼び出すと、親となるとなるモーダルビューが追加されます。この最初の呼び出しの後、`views_update` を呼び出すことでそのビューを更新することができます。また、`views_push` を呼び出すと、親のモーダルの上にさらに新しいモーダルビューを重ねることもできます。 **`views_update`** @@ -12,11 +12,11 @@ slug: /concepts/updating-pushing-views **`views_push`** -既存のモーダルの上に新しいモーダルをスタックのように追加する場合は、組み込みのクライアントで `views_push` API を呼び出します。この API 呼び出しでは、有効な `trigger_id` と新しいビューのペイロードを指定します。`views_push` の引数は モーダルの開始 と同じです。モーダルを開いた後、このモーダルのスタックに追加できるモーダルビューは 2 つまでです。 +既存のモーダルの上に新しいモーダルをスタックのように追加する場合は、組み込みのクライアントで `views_push` API を呼び出します。この API 呼び出しでは、有効な `trigger_id` と新しいビューのペイロードを指定します。`views_push` の引数は モーダルの開始 と同じです。モーダルを開いた後、このモーダルのスタックに追加できるモーダルビューは 2 つまでです。 -モーダルの更新と多重表示に関する詳細は、API ドキュメントを参照してください。 +モーダルの更新と多重表示に関する詳細は、API ドキュメントを参照してください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # モーダルに含まれる、`button_abc` という action_id のボタンの呼び出しをリッスン diff --git a/docs/japanese/concepts/view-submissions.md b/docs/japanese/concepts/view-submissions.md index 7ad6637bb..eddbbdd47 100644 --- a/docs/japanese/concepts/view-submissions.md +++ b/docs/japanese/concepts/view-submissions.md @@ -4,7 +4,7 @@ lang: ja-jp slug: /concepts/view_submissions --- -モーダルのペイロードに `input` ブロックを含める場合、その入力値を受け取るために`view_submission` リクエストをリッスンする必要があります。`view_submission` リクエストのリッスンには、組み込みの`view()` メソッドを利用することができます。`view()` の引数には、`str` 型または `re.Pattern` 型の `callback_id` を指定します。 +モーダルのペイロードに `input` ブロックを含める場合、その入力値を受け取るために`view_submission` リクエストをリッスンする必要があります。`view_submission` リクエストのリッスンには、組み込みの`view()` メソッドを利用することができます。`view()` の引数には、`str` 型または `re.Pattern` 型の `callback_id` を指定します。 `input` ブロックの値にアクセスするには `state` オブジェクトを参照します。`state` 内には `values` というオブジェクトがあり、`block_id` と一意の `action_id` に紐づける形で入力値を保持しています。 @@ -23,9 +23,9 @@ def handle_submission(ack, body): # https://app.slack.com/block-kit-builder/#%7B%22type%22:%22modal%22,%22callback_id%22:%22view_1%22,%22title%22:%7B%22type%22:%22plain_text%22,%22text%22:%22My%20App%22,%22emoji%22:true%7D,%22blocks%22:%5B%5D%7D ack(response_action="update", view=build_new_view(body)) ``` -この例と同様に、モーダルでの送信リクエストに対して、エラーを表示するためのオプションもあります。 +この例と同様に、モーダルでの送信リクエストに対して、エラーを表示するためのオプションもあります。 -モーダルの送信について詳しくは、API ドキュメントを参照してください。 +モーダルの送信について詳しくは、API ドキュメントを参照してください。 --- @@ -33,7 +33,7 @@ def handle_submission(ack, body): `view_closed` リクエストをリッスンするためには `callback_id` を指定して、かつ `notify_on_close` 属性をモーダルのビューに設定する必要があります。以下のコード例をご覧ください。 -よく詳しい情報は、API ドキュメントを参照してください。 +よく詳しい情報は、API ドキュメントを参照してください。 ```python client.views_open( @@ -60,7 +60,7 @@ def handle_view_closed(ack, body, logger): logger.info(body) ``` -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # view_submission リクエストを処理 diff --git a/docs/japanese/concepts/web-api.md b/docs/japanese/concepts/web-api.md index 75953b5bd..9b580cc8a 100644 --- a/docs/japanese/concepts/web-api.md +++ b/docs/japanese/concepts/web-api.md @@ -4,11 +4,11 @@ lang: ja-jp slug: /concepts/web-api --- -`app.client`、またはミドルウェア・リスナーの引数 `client` として Bolt アプリに提供されている [`WebClient`](https://tools.slack.dev/python-slack-sdk/basic_usage.html) は必要な権限を付与されており、これを利用することで[あらゆる Web API メソッド](https://docs.slack.dev/reference/methods)を呼び出すことができます。このクライアントのメソッドを呼び出すと `SlackResponse` という Slack からの応答情報を含むオブジェクトが返されます。 +`app.client`、またはミドルウェア・リスナーの引数 `client` として Bolt アプリに提供されている [`WebClient`](/python-slack-sdk/basic_usage.html) は必要な権限を付与されており、これを利用することで[あらゆる Web API メソッド](/reference/methods)を呼び出すことができます。このクライアントのメソッドを呼び出すと `SlackResponse` という Slack からの応答情報を含むオブジェクトが返されます。 Bolt の初期化に使用するトークンは `context` オブジェクトに設定されます。このトークンは、多くの Web API メソッドを呼び出す際に必要となります。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python @app.message("wake me up") def say_hello(client, message): diff --git a/docs/japanese/current.json b/docs/japanese/current.json index eb3b5be26..9b9787805 100644 --- a/docs/japanese/current.json +++ b/docs/japanese/current.json @@ -65,7 +65,7 @@ }, "sidebar.sidebarBoltPy.link.Reference": { "message": "リファレンス", - "description": "The label for link Reference in sidebar sidebarBoltPy, linking to https://tools.slack.dev/bolt-python/api-docs/slack_bolt/" + "description": "The label for link Reference in sidebar sidebarBoltPy, linking to https://docs.slack.dev/bolt-python/api-docs/slack_bolt/" }, "sidebar.sidebarBoltPy.link.Release notes": { "message": "リリースノート", diff --git a/docs/japanese/getting-started.md b/docs/japanese/getting-started.md index 14a84b2e1..53127bb9d 100644 --- a/docs/japanese/getting-started.md +++ b/docs/japanese/getting-started.md @@ -31,18 +31,18 @@ lang: ja-jp --- ### トークンとアプリのインストール {#tokens-and-installing-apps} -Slack アプリでは、[Slack API へのアクセスの管理に OAuth を使用します](https://docs.slack.dev/authentication/installing-with-oauth)。アプリがインストールされると、トークンが発行されます。アプリはそのトークンを使って API メソッドを呼び出すことができます。 +Slack アプリでは、[Slack API へのアクセスの管理に OAuth を使用します](/authentication/installing-with-oauth)。アプリがインストールされると、トークンが発行されます。アプリはそのトークンを使って API メソッドを呼び出すことができます。 Slack アプリで使用できるトークンには、ユーザートークン(`xoxp`)とボットトークン(`xoxb`)、アプリレベルトークン(`xapp`)の 3 種類があります。 -- [ユーザートークン](https://docs.slack.dev/authentication/tokens#user) を使用すると、アプリをインストールまたは認証したユーザーに成り代わって API メソッドを呼び出すことができます。1 つのワークスペースに複数のユーザートークンが存在する可能性があります。 -- [ボットトークン](https://docs.slack.dev/authentication/tokens#bot) はボットユーザーに関連づけられ、1 つのワークスペースでは最初に誰かがそのアプリをインストールした際に一度だけ発行されます。どのユーザーがインストールを実行しても、アプリが使用するボットトークンは同じになります。_ほとんど_のアプリで使用されるのは、ボットトークンです。 -- [アプリレベルトークン](https://docs.slack.dev/authentication/tokens#app-level) は、全ての組織(とその配下のワークスペースでの個々のユーザーによるインストール)を横断して、あなたのアプリを代理するものです。アプリレベルトークンは、アプリの WebSocket コネクションを確立するためによく使われます。 +- [ユーザートークン](/authentication/tokens#user) を使用すると、アプリをインストールまたは認証したユーザーに成り代わって API メソッドを呼び出すことができます。1 つのワークスペースに複数のユーザートークンが存在する可能性があります。 +- [ボットトークン](/authentication/tokens#bot) はボットユーザーに関連づけられ、1 つのワークスペースでは最初に誰かがそのアプリをインストールした際に一度だけ発行されます。どのユーザーがインストールを実行しても、アプリが使用するボットトークンは同じになります。_ほとんど_のアプリで使用されるのは、ボットトークンです。 +- [アプリレベルトークン](/authentication/tokens#app-level) は、全ての組織(とその配下のワークスペースでの個々のユーザーによるインストール)を横断して、あなたのアプリを代理するものです。アプリレベルトークンは、アプリの WebSocket コネクションを確立するためによく使われます。 このガイドではボットトークンとアプリレベルトークンを使用します。 1. 左サイドバーの「**OAuth & Permissions**」をクリックし、「**Bot Token Scopes**」セクションまで下にスクロールします。「**Add an OAuth Scope**」をクリックします。 -2. ここでは [`chat:write`](https://docs.slack.dev/reference/scopes/chat.write) というスコープのみを追加します。このスコープはアプリが参加しているチャンネルにメッセージを投稿することを許可します。 +2. ここでは [`chat:write`](/reference/scopes/chat.write) というスコープのみを追加します。このスコープはアプリが参加しているチャンネルにメッセージを投稿することを許可します。 3. OAuth & Permissions ページの一番上までスクロールし、「**Install App to Workspace**」をクリックします。Slack の OAuth 確認画面 が表示されます。この画面で開発用ワークスペースへのアプリのインストールを承認します。 @@ -54,7 +54,7 @@ Slack アプリで使用できるトークンには、ユーザートークン 6. 左サイドメニューの「**Socket Mode**」を有効にします。 -:::tip[トークンはパスワードと同様に取り扱い、[安全な方法で保管してください](https://docs.slack.dev/authentication/best-practices-for-security)。アプリはこのトークンを使って Slack ワークスペースで投稿をしたり、情報の取得をしたりします。] +:::tip[トークンはパスワードと同様に取り扱い、[安全な方法で保管してください](/authentication/best-practices-for-security)。アプリはこのトークンを使って Slack ワークスペースで投稿をしたり、情報の取得をしたりします。] ::: @@ -97,7 +97,7 @@ export SLACK_APP_TOKEN=<アプリレベルトークン> ``` :::warning[🔒 全てのトークンは安全に保管してください。] -少なくともパブリックなバージョン管理にチェックインするようなことは避けるべきでしょう。また、上にあった例のように環境変数を介してアクセスするようにしてください。詳細な情報は [アプリのセキュリティのベストプラクティス](https://docs.slack.dev/authentication/best-practices-for-security)のドキュメントを参照してください。 +少なくともパブリックなバージョン管理にチェックインするようなことは避けるべきでしょう。また、上にあった例のように環境変数を介してアクセスするようにしてください。詳細な情報は [アプリのセキュリティのベストプラクティス](/authentication/best-practices-for-security)のドキュメントを参照してください。 ::: @@ -135,7 +135,7 @@ python3 app.py ### イベントを設定する {#setting-up-events} アプリはワークスペース内の他のメンバーと同じように振る舞い、メッセージを投稿したり、絵文字リアクションを追加したり、イベントをリッスンして返答したりできます。 -Slack ワークスペースで発生するイベント(メッセージが投稿されたときや、メッセージに対するリアクションがつけられたときなど)をリッスンするには、[Events API を使って特定の種類のイベントをサブスクライブします](https://docs.slack.dev/apis/events-api/)。 +Slack ワークスペースで発生するイベント(メッセージが投稿されたときや、メッセージに対するリアクションがつけられたときなど)をリッスンするには、[Events API を使って特定の種類のイベントをサブスクライブします](/apis/events-api/)。 このチュートリアルの序盤でソケットモードを有効にしました。ソケットモードを使うことで、アプリが公開された HTTP エンドポイントを公開せずに Events API やインタラクティブコンポーネントを利用できるようになります。このことは、開発時やファイヤーウォールの裏からのリクエストを受ける際に便利です。HTTP での方式は、ホスティング環境にデプロイするアプリや Slack App Directory で配布されるアプリの開発・運用に適しています。 @@ -160,11 +160,11 @@ import TabItem from '@theme/TabItem'; 1. アプリ構成ページに戻ります ([アプリ管理ページから](https://api.slack.com/apps) アプリをクリックします)。左側のサイドバーで [**イベント サブスクリプション**] をクリックします。 **イベントを有効にする**というラベルの付いたスイッチを切り替えます。 -2. リクエスト URL を追加します。 Slack は、イベントに対応する HTTP POST リクエストをこの [リクエスト URL](https://docs.slack.dev/apis/events-api/#subscribing) に送信します。 Bolt は、`/slack/events` パスを使用して、すべての受信リクエスト (ショートカット、イベント、対話性ペイロードなど) をリッスンします。アプリ構成内でリクエスト URL を構成する場合は、`/slack/events` を追加します。 「https://あなたのドメイン/slack/events」。 💡 Bolt アプリが実行されている限り、URL は検証されるはずです。 +2. リクエスト URL を追加します。 Slack は、イベントに対応する HTTP POST リクエストをこの [リクエスト URL](/apis/events-api/#subscribing) に送信します。 Bolt は、`/slack/events` パスを使用して、すべての受信リクエスト (ショートカット、イベント、対話性ペイロードなど) をリッスンします。アプリ構成内でリクエスト URL を構成する場合は、`/slack/events` を追加します。 「https://あなたのドメイン/slack/events」。 💡 Bolt アプリが実行されている限り、URL は検証されるはずです。 :::tip -ローカル開発の場合、ngrok などのプロキシ サービスを使用してパブリック URL を作成し、リクエストを開発環境にトンネリングできます。このトンネルの作成方法については、[ngrok のスタート ガイド](https://ngrok.com/docs#getting-started-expose) を参照してください。アプリをホスティングする際には、Slack 開発者がアプリをホストするために使用する最も一般的なホスティング プロバイダーを [API サイト](https://docs.slack.dev/distribution/hosting-slack-apps/) に集めました。 +ローカル開発の場合、ngrok などのプロキシ サービスを使用してパブリック URL を作成し、リクエストを開発環境にトンネリングできます。このトンネルの作成方法については、[ngrok のスタート ガイド](https://ngrok.com/docs#getting-started-expose) を参照してください。アプリをホスティングする際には、Slack 開発者がアプリをホストするために使用する最も一般的なホスティング プロバイダーを [API サイト](/distribution/hosting-slack-apps/) に集めました。 ::: @@ -172,10 +172,10 @@ import TabItem from '@theme/TabItem'; 左側のサイドバーから **Event Subscriptions** にアクセスして、機能を有効にしてください。 **Subscribe to Bot Events** 配下で、ボットが受け取れるイベントを追加することができます。4つのメッセージに関するイベントがあります。 -- [`message.channels`](https://docs.slack.dev/reference/events/message.channels) アプリが参加しているパブリックチャンネルのメッセージをリッスン -- [`message.groups`](https://docs.slack.dev/reference/events/message.groups) アプリが参加しているプライベートチャンネルのメッセージをリッスン -- [`message.im`](https://docs.slack.dev/reference/events/message.im) あなたのアプリとユーザーのダイレクトメッセージをリッスン -- [`message.mpim`](https://docs.slack.dev/reference/events/message.mpim) あなたのアプリが追加されているグループ DM をリッスン +- [`message.channels`](/reference/events/message.channels) アプリが参加しているパブリックチャンネルのメッセージをリッスン +- [`message.groups`](/reference/events/message.groups) アプリが参加しているプライベートチャンネルのメッセージをリッスン +- [`message.im`](/reference/events/message.im) あなたのアプリとユーザーのダイレクトメッセージをリッスン +- [`message.mpim`](/reference/events/message.mpim) あなたのアプリが追加されているグループ DM をリッスン ボットが参加するすべての場所のメッセージをリッスンさせるには、これら 4 つのメッセージイベントをすべて選択します。ボットにリッスンさせるメッセージイベントの種類を選択したら、「**Save Changes**」ボタンをクリックします。 @@ -199,7 +199,7 @@ app = App(token=os.environ.get("SLACK_BOT_TOKEN")) # 'こんにちは' を含むメッセージをリッスンします # 指定可能なリスナーのメソッド引数の一覧は以下のモジュールドキュメントを参考にしてください: -# https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html +# https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html @app.message("こんにちは") def message_hello(message, say): # イベントがトリガーされたチャンネルへ say() でメッセージを送信します @@ -225,7 +225,7 @@ app = App( # 'hello' を含むメッセージをリッスンします # 指定可能なリスナーのメソッド引数の一覧は以下のモジュールドキュメントを参考にしてください: -# https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html +# https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html @app.message("hello") def message_hello(message, say): # イベントがトリガーされたチャンネルへ say() でメッセージを送信します @@ -464,6 +464,6 @@ if __name__ == "__main__": ここまでで基本的なアプリをセットアップして実行することはできたので、次は自分だけの Bolt アプリを作る方法について調べてみてください。参考になりそうなリソースをいくつかご紹介します。 * 基本的な概念について読んでみてください。Bolt アプリがアクセスできるさまざまメソッドや機能について知ることができます。 -* [`app.event()` メソッド](/concepts/event-listening)でボットがリッスンできるイベントをほかにも試してみましょう。すべてのイベントの一覧は [API サイト](https://docs.slack.dev/reference/events)で確認できます。 -* Bolt では、アプリにアタッチされたクライアントから [Web API メソッドを呼び出す](/concepts/web-api)ことができます。API サイトに [220 以上のメソッド](https://docs.slack.dev/reference/methods)を一覧しています。 -* [API サイト](https://docs.slack.dev/authentication/tokens)でほかのタイプのトークンを確認してみてください。アプリで実行したいアクションによって、異なるトークンが必要になる場合があります。 +* [`app.event()` メソッド](/bolt-python/concepts/event-listening)でボットがリッスンできるイベントをほかにも試してみましょう。すべてのイベントの一覧は [API サイト](/reference/events)で確認できます。 +* Bolt では、アプリにアタッチされたクライアントから [Web API メソッドを呼び出す](/bolt-python/concepts/web-api)ことができます。API サイトに [220 以上のメソッド](/reference/methods)を一覧しています。 +* [API サイト](/authentication/tokens)でほかのタイプのトークンを確認してみてください。アプリで実行したいアクションによって、異なるトークンが必要になる場合があります。 diff --git a/docs/japanese/legacy/steps-from-apps.md b/docs/japanese/legacy/steps-from-apps.md index 9706e52cc..1c829af51 100644 --- a/docs/japanese/legacy/steps-from-apps.md +++ b/docs/japanese/legacy/steps-from-apps.md @@ -4,7 +4,7 @@ lang: ja-jp slug: /legacy/steps-from-apps --- -(アプリによる)ワークフローステップでは、処理をアプリ側で行うカスタムのワークフローステップを提供することができます。ユーザーは[ワークフロービルダー](https://docs.slack.dev/workflows/workflow-builder)を使ってこれらのステップをワークフローに追加できます。 +(アプリによる)ワークフローステップでは、処理をアプリ側で行うカスタムのワークフローステップを提供することができます。ユーザーは[ワークフロービルダー](/workflows/workflow-builder)を使ってこれらのステップをワークフローに追加できます。 ワークフローステップは、次の 3 つのユーザーイベントで構成されます。 @@ -14,7 +14,7 @@ slug: /legacy/steps-from-apps ワークフローステップを機能させるためには、これら 3 つのイベントすべてに対応する必要があります。 -アプリを使ったワークフローステップに関する詳細は、[API ドキュメント](https://docs.slack.dev/legacy/legacy-steps-from-apps/)を参照してください。 +アプリを使ったワークフローステップに関する詳細は、[API ドキュメント](/legacy/legacy-steps-from-apps/)を参照してください。 ## ステップの定義 @@ -26,9 +26,9 @@ slug: /legacy/steps-from-apps `WorkflowStep` のインスタンスを作成したら、それを`app.step()` メソッドに渡します。これによって、アプリがワークフローステップのイベントをリッスンし、設定オブジェクトで指定されたコールバックを使ってそれに応答できるようになります。 -また、デコレーターとして利用できる `WorkflowStepBuilder` クラスを使ってワークフローステップを定義することもできます。 詳細は、[こちらのドキュメント](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/step.html#slack_bolt.workflows.step.step.WorkflowStepBuilder)のコード例などを参考にしてください。 +また、デコレーターとして利用できる `WorkflowStepBuilder` クラスを使ってワークフローステップを定義することもできます。 詳細は、[こちらのドキュメント](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/step.html#slack_bolt.workflows.step.step.WorkflowStepBuilder)のコード例などを参考にしてください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 ```python import os @@ -63,15 +63,15 @@ app.step(ws) ## ステップの追加・編集 -作成したワークフローステップがワークフローに追加またはその設定を変更されるタイミングで、[`workflow_step_edit` イベントがアプリに送信されます](https://docs.slack.dev/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step_edit-payload)。このイベントがアプリに届くと、`WorkflowStep` で設定した `edit` コールバックが実行されます。 +作成したワークフローステップがワークフローに追加またはその設定を変更されるタイミングで、[`workflow_step_edit` イベントがアプリに送信されます](/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step_edit-payload)。このイベントがアプリに届くと、`WorkflowStep` で設定した `edit` コールバックが実行されます。 -ステップの追加と編集のどちらが行われるときも、[ワークフローステップの設定モーダル](https://docs.slack.dev/legacy/legacy-steps-from-apps/legacy-steps-from-apps-configuration-view-object)をビルダーに送信する必要があります。このモーダルは、そのステップ独自の設定を選択するための場所です。通常のモーダルより制限が強く、例えば `title`、`submit`、`close` のプロパティを含めることができません。設定モーダルの `callback_id` は、デフォルトではワークフローステップと同じものになります。 +ステップの追加と編集のどちらが行われるときも、[ワークフローステップの設定モーダル](/legacy/legacy-steps-from-apps/legacy-steps-from-apps-configuration-view-object)をビルダーに送信する必要があります。このモーダルは、そのステップ独自の設定を選択するための場所です。通常のモーダルより制限が強く、例えば `title`、`submit`、`close` のプロパティを含めることができません。設定モーダルの `callback_id` は、デフォルトではワークフローステップと同じものになります。 `edit` コールバック内で `configure()` ユーティリティを使用すると、対応する `blocks` 引数にビューのblocks 部分だけを渡して、ステップの設定モーダルを簡単に表示させることができます。必要な入力内容が揃うまで設定の保存を無効にするには、`True` の値をセットした `submit_disabled` を渡します。 -設定モーダルの開き方に関する詳細は、[こちらのドキュメント](https://docs.slack.dev/legacy/legacy-steps-from-apps/legacy-steps-from-apps-configuration-view-object)を参照してください。 +設定モーダルの開き方に関する詳細は、[こちらのドキュメント](/legacy/legacy-steps-from-apps/legacy-steps-from-apps-configuration-view-object)を参照してください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 ```python def edit(ack, step, configure): @@ -121,9 +121,9 @@ app.step(ws) - `step_name` : ステップのデフォルトの名前をオーバーライドします。 - `step_image_url` : ステップのデフォルトの画像をオーバーライドします。 -これらのパラメータの構成方法に関する詳細は、[こちらのドキュメント](https://docs.slack.dev/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step-object)を参照してください。 +これらのパラメータの構成方法に関する詳細は、[こちらのドキュメント](/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step-object)を参照してください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 ```python def save(ack, view, update): @@ -162,13 +162,13 @@ app.step(ws) ## ステップの実行 -エンドユーザーがワークフローステップを実行すると、アプリに [`workflow_step_execute` イベントが送信されます](https://docs.slack.dev/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step-object)。このイベントがアプリに届くと、`WorkflowStep` で設定した `execute` コールバックが実行されます。 +エンドユーザーがワークフローステップを実行すると、アプリに [`workflow_step_execute` イベントが送信されます](/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step-object)。このイベントがアプリに届くと、`WorkflowStep` で設定した `execute` コールバックが実行されます。 `save` コールバックで取り出した `inputs` を使って、サードパーティの API を呼び出す、情報をデータベースに保存する、ユーザーのホームタブを更新するといった処理を実行することができます。また、ワークフローの後続のステップで利用する出力値を `outputs` オブジェクトに設定します。 `execute` コールバック内では、`complete()` を呼び出してステップの実行が成功したことを示すか、`fail()` を呼び出してステップの実行が失敗したことを示す必要があります。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 ```python def execute(step, complete, fail): inputs = step["inputs"] From fd63c542cbe8a5fd8b5e68a5340b48b1b3d136e6 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 30 Jul 2025 16:15:39 -0700 Subject: [PATCH 19/42] removes doc deploy workflow --- .github/workflows/docs-deploy.yml | 65 ------------------------------- 1 file changed, 65 deletions(-) delete mode 100644 .github/workflows/docs-deploy.yml diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml deleted file mode 100644 index ed18c4b1d..000000000 --- a/.github/workflows/docs-deploy.yml +++ /dev/null @@ -1,65 +0,0 @@ -name: Deploy to GitHub Pages - -on: - pull_request: - branches: - - main - paths: - - "docs/**" - push: - branches: - - main - paths: - - "docs/**" - workflow_dispatch: - -jobs: - build: - name: Build Docusaurus - runs-on: ubuntu-latest - permissions: - contents: read - steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - fetch-depth: 0 - persist-credentials: false - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - with: - node-version: 20 - cache: npm - cache-dependency-path: docs/package-lock.json - - - name: Install dependencies - run: npm ci - working-directory: ./docs - - - name: Build website - run: npm run build - working-directory: ./docs - - - name: Upload Build Artifact - uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3.0.1 - with: - path: ./docs/build - - deploy: - name: Deploy to GitHub Pages - if: github.event_name != 'pull_request' - needs: build - - # Grant GITHUB_TOKEN the permissions required to make a Pages deployment - permissions: - pages: write # to deploy to Pages - id-token: write # verifies deployment is from an appropriate source - - # Deploy to the github-pages environment - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - - runs-on: ubuntu-latest - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5 From d538225dc5159859b4a4e5d63b14a8d5f6e39efd Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Fri, 1 Aug 2025 17:16:33 -0700 Subject: [PATCH 20/42] merge conflicts --- docs/english/concepts/ai-apps.md | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/docs/english/concepts/ai-apps.md b/docs/english/concepts/ai-apps.md index 368d84fa6..c7c7f8ea5 100644 --- a/docs/english/concepts/ai-apps.md +++ b/docs/english/concepts/ai-apps.md @@ -28,11 +28,8 @@ The Agents & AI Apps feature comprises a unique messaging experience for Slack. That being said, using the `Assistant` class will streamline the process. And we already wrote this nice guide for you! -<<<<<<< HEAD:docs/english/concepts/ai-apps.md -======= :::info -You _could_ go it alone and [listen](event-listening) for the `assistant_thread_started`, `assistant_thread_context_changed`, and `message.im` events (see implementation details below) in order to implement the AI features in your app. That being said, using the `Assistant` class will streamline the process. And we already wrote this nice guide for you! ->>>>>>> origin:docs/content/concepts/ai-apps.md +You _could_ go it alone and [listen](/bolt-python/event-listening) for the `assistant_thread_started`, `assistant_thread_context_changed`, and `message.im` events (see implementation details below) in order to implement the AI features in your app. That being said, using the `Assistant` class will streamline the process. And we already wrote this nice guide for you! ::: ## The `Assistant` class instance {#assistant-class} @@ -113,16 +110,10 @@ If you do provide your own `threadContextStore` property, it must feature `get` ## Handling a new thread {#handling-a-new-thread} -<<<<<<< HEAD:docs/english/concepts/ai-apps.md -When the user opens a new thread with your AI app, the [`assistant_thread_started`](/reference/events/assistant_thread_started) event will be sent to your app. - -:::tip[When a user opens an AI app thread while in a channel, the channel info is stored as the thread's `AssistantThreadContext` data. You can grab that info by using the `get_thread_context` utility, as subsequent user message event payloads won't include the channel info.] -======= -When the user opens a new thread with your AI-enabled app, the [`assistant_thread_started`](https://docs.slack.dev/reference/events/assistant_thread_started) event will be sent to your app. +When the user opens a new thread with your AI-enabled app, the [`assistant_thread_started`](/reference/events/assistant_thread_started) event will be sent to your app. :::tip When a user opens an app thread while in a channel, the channel info is stored as the thread's `AssistantThreadContext` data. You can grab that info by using the `get_thread_context` utility, as subsequent user message event payloads won't include the channel info. ->>>>>>> origin:docs/content/concepts/ai-apps.md ::: ### Block Kit interactions in the app thread {#block-kit-interactions} From fb7920b16ac74b719003326bbb238b924316f11a Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Fri, 1 Aug 2025 17:49:58 -0700 Subject: [PATCH 21/42] reference link --- docs/english/_sidebar.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json index 4286c72e5..f6ada5acb 100644 --- a/docs/english/_sidebar.json +++ b/docs/english/_sidebar.json @@ -106,7 +106,7 @@ { "type": "link", "label": "Reference", - "href": "/bolt-python/reference/index.html" + "href": "https://docs.slack.dev/bolt-python/reference/index.html" }, { "type": "html", "value": "
" }, { From 68bd0f15a79d3d0b5cee9ab4d3b5dbca4cd9d49b Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Mon, 4 Aug 2025 10:56:01 -0700 Subject: [PATCH 22/42] proper links --- docs/english/concepts/acknowledge.md | 2 +- docs/english/concepts/actions.md | 2 +- docs/english/concepts/adapters.md | 2 +- docs/english/concepts/ai-apps.md | 2 +- docs/english/concepts/app-home.md | 2 +- docs/english/concepts/async.md | 2 +- docs/english/concepts/authenticating-oauth.md | 2 +- docs/english/concepts/authorization.md | 2 +- docs/english/concepts/commands.md | 2 +- docs/english/concepts/context.md | 2 +- docs/english/concepts/custom-adapters.md | 2 +- docs/english/concepts/custom-steps.md | 2 +- docs/english/concepts/errors.md | 2 +- docs/english/concepts/event-listening.md | 2 +- docs/english/concepts/global-middleware.md | 2 +- docs/english/concepts/lazy-listeners.md | 2 +- docs/english/concepts/listener-middleware.md | 2 +- docs/english/concepts/logging.md | 2 +- docs/english/concepts/message-listening.md | 2 +- docs/english/concepts/message-sending.md | 2 +- docs/english/concepts/opening-modals.md | 2 +- docs/english/concepts/select-menu-options.md | 2 +- docs/english/concepts/shortcuts.md | 2 +- docs/english/concepts/socket-mode.md | 2 +- docs/english/concepts/token-rotation.md | 2 +- docs/english/concepts/updating-pushing-views.md | 2 +- docs/english/concepts/view-submissions.md | 2 +- docs/english/concepts/web-api.md | 2 +- docs/english/legacy/steps-from-apps.md | 2 +- docs/japanese/concepts/acknowledge.md | 2 +- docs/japanese/concepts/actions.md | 2 +- docs/japanese/concepts/adapters.md | 2 +- docs/japanese/concepts/app-home.md | 2 +- docs/japanese/concepts/assistant.md | 2 +- docs/japanese/concepts/async.md | 2 +- docs/japanese/concepts/authenticating-oauth.md | 2 +- docs/japanese/concepts/authorization.md | 2 +- docs/japanese/concepts/commands.md | 2 +- docs/japanese/concepts/context.md | 2 +- docs/japanese/concepts/custom-adapters.md | 2 +- docs/japanese/concepts/custom-steps.md | 2 +- docs/japanese/concepts/errors.md | 2 +- docs/japanese/concepts/event-listening.md | 2 +- docs/japanese/concepts/global-middleware.md | 2 +- docs/japanese/concepts/lazy-listeners.md | 2 +- docs/japanese/concepts/listener-middleware.md | 2 +- docs/japanese/concepts/logging.md | 2 +- docs/japanese/concepts/message-listening.md | 2 +- docs/japanese/concepts/message-sending.md | 2 +- docs/japanese/concepts/opening-modals.md | 2 +- docs/japanese/concepts/select-menu-options.md | 2 +- docs/japanese/concepts/shortcuts.md | 2 +- docs/japanese/concepts/socket-mode.md | 2 +- docs/japanese/concepts/token-rotation.md | 2 +- docs/japanese/concepts/updating-pushing-views.md | 2 +- docs/japanese/concepts/view-submissions.md | 2 +- docs/japanese/concepts/web-api.md | 2 +- docs/japanese/legacy/steps-from-apps.md | 2 +- 58 files changed, 58 insertions(+), 58 deletions(-) diff --git a/docs/english/concepts/acknowledge.md b/docs/english/concepts/acknowledge.md index b51075315..3d0a12024 100644 --- a/docs/english/concepts/acknowledge.md +++ b/docs/english/concepts/acknowledge.md @@ -1,7 +1,7 @@ --- title: Acknowledging requests lang: en -slug: /concepts/acknowledge +slug: /bolt-python/concepts/acknowledge --- Actions, commands, shortcuts, options requests, and view submissions must **always** be acknowledged using the `ack()` function. This lets Slack know that the request was received so that it may update the Slack user interface accordingly. diff --git a/docs/english/concepts/actions.md b/docs/english/concepts/actions.md index f1a691e58..168839706 100644 --- a/docs/english/concepts/actions.md +++ b/docs/english/concepts/actions.md @@ -1,7 +1,7 @@ --- title: Listening & responding to actions lang: en -slug: /concepts/actions +slug: /bolt-python/concepts/actions --- Your app can listen and respond to user actions, like button clicks, and menu selects, using the `action` method. diff --git a/docs/english/concepts/adapters.md b/docs/english/concepts/adapters.md index ad4303b15..6c73cc1e5 100644 --- a/docs/english/concepts/adapters.md +++ b/docs/english/concepts/adapters.md @@ -1,7 +1,7 @@ --- title: Adapters lang: en -slug: /concepts/adapters +slug: /bolt-python/concepts/adapters --- Adapters are responsible for handling and parsing incoming requests from Slack to conform to [`BoltRequest`](https://github.com/slackapi/bolt-python/blob/main/slack_bolt/request/request.py), then dispatching those requests to your Bolt app. diff --git a/docs/english/concepts/ai-apps.md b/docs/english/concepts/ai-apps.md index c7c7f8ea5..83448e52d 100644 --- a/docs/english/concepts/ai-apps.md +++ b/docs/english/concepts/ai-apps.md @@ -1,7 +1,7 @@ --- title: Using AI in Apps lang: en -slug: /concepts/ai-apps +slug: /bolt-python/concepts/ai-apps --- :::info This feature requires a paid plan diff --git a/docs/english/concepts/app-home.md b/docs/english/concepts/app-home.md index 8e27fadf4..83758ea08 100644 --- a/docs/english/concepts/app-home.md +++ b/docs/english/concepts/app-home.md @@ -1,7 +1,7 @@ --- title: Publishing views to App Home lang: en -slug: /concepts/app-home +slug: /bolt-python/concepts/app-home --- [Home tabs](/surfaces/app-home) are customizable surfaces accessible via the sidebar and search that allow apps to display views on a per-user basis. After enabling App Home within your app configuration, home tabs can be published and updated by passing a `user_id` and [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission) to the [`views.publish`](/reference/methods/views.publis) method. diff --git a/docs/english/concepts/async.md b/docs/english/concepts/async.md index 197377f93..f96be5fc2 100644 --- a/docs/english/concepts/async.md +++ b/docs/english/concepts/async.md @@ -1,7 +1,7 @@ --- title: Using async (asyncio) lang: en -slug: /concepts/async +slug: /bolt-python/concepts/async --- To use the async version of Bolt, you can import and initialize an `AsyncApp` instance (rather than `App`). `AsyncApp` relies on [AIOHTTP](https://docs.aiohttp.org) to make API requests, which means you'll need to install `aiohttp` (by adding to `requirements.txt` or running `pip install aiohttp`). diff --git a/docs/english/concepts/authenticating-oauth.md b/docs/english/concepts/authenticating-oauth.md index 880687a15..3ed395d6b 100644 --- a/docs/english/concepts/authenticating-oauth.md +++ b/docs/english/concepts/authenticating-oauth.md @@ -1,7 +1,7 @@ --- title: Authenticating with OAuth lang: en -slug: /concepts/authenticating-oauth +slug: /bolt-python/concepts/authenticating-oauth --- Slack apps installed on multiple workspaces will need to implement OAuth, then store installation information (like access tokens) securely. By providing `client_id`, `client_secret`, `scopes`, `installation_store`, and `state_store` when initializing App, Bolt for Python will handle the work of setting up OAuth routes and verifying state. If you're implementing a custom adapter, you can make use of our [OAuth library](/python-slack-sdk/oauth/), which is what Bolt for Python uses under the hood. diff --git a/docs/english/concepts/authorization.md b/docs/english/concepts/authorization.md index bb9bfc10f..3fce7c06e 100644 --- a/docs/english/concepts/authorization.md +++ b/docs/english/concepts/authorization.md @@ -1,7 +1,7 @@ --- title: Authorization lang: en -slug: /concepts/authorization +slug: /bolt-python/concepts/authorization --- Authorization is the process of determining which Slack credentials should be available while processing an incoming Slack request. diff --git a/docs/english/concepts/commands.md b/docs/english/concepts/commands.md index be01f8b56..6a49bd997 100644 --- a/docs/english/concepts/commands.md +++ b/docs/english/concepts/commands.md @@ -1,7 +1,7 @@ --- title: Listening & responding to commands lang: en -slug: /concepts/commands +slug: /bolt-python/concepts/commands --- Your app can use the `command()` method to listen to incoming slash command requests. The method requires a `command_name` of type `str`. diff --git a/docs/english/concepts/context.md b/docs/english/concepts/context.md index cf7fa45f1..d019dae85 100644 --- a/docs/english/concepts/context.md +++ b/docs/english/concepts/context.md @@ -1,7 +1,7 @@ --- title: Adding context lang: en -slug: /concepts/context +slug: /bolt-python/concepts/context --- All listeners have access to a `context` dictionary, which can be used to enrich requests with additional information. Bolt automatically attaches information that is included in the incoming request, like `user_id`, `team_id`, `channel_id`, and `enterprise_id`. diff --git a/docs/english/concepts/custom-adapters.md b/docs/english/concepts/custom-adapters.md index 805ce1869..cd86172b6 100644 --- a/docs/english/concepts/custom-adapters.md +++ b/docs/english/concepts/custom-adapters.md @@ -1,7 +1,7 @@ --- title: Custom adapters lang: en -slug: /concepts/custom-adapters +slug: /bolt-python/concepts/custom-adapters --- [Adapters](/bolt-python/concepts/adapters) are flexible and can be adjusted based on the framework you prefer. There are two necessary components of adapters: diff --git a/docs/english/concepts/custom-steps.md b/docs/english/concepts/custom-steps.md index 53241ec6d..868d447ee 100644 --- a/docs/english/concepts/custom-steps.md +++ b/docs/english/concepts/custom-steps.md @@ -2,7 +2,7 @@ title: Listening and responding to custom steps sidebar_label: Custom Steps lang: en -slug: /concepts/custom-steps +slug: /bolt-python/concepts/custom-steps --- Your app can use the `function()` method to listen to incoming [custom step requests](/workflows/workflow-steps). Custom steps are used in Workflow Builder to build workflows. The method requires a step `callback_id` of type `str`. This `callback_id` must also be defined in your [Function](/reference/app-manifest#functions) definition. Custom steps must be finalized using the `complete()` or `fail()` listener arguments to notify Slack that your app has processed the request. diff --git a/docs/english/concepts/errors.md b/docs/english/concepts/errors.md index d0e5cccad..ed48ff4ee 100644 --- a/docs/english/concepts/errors.md +++ b/docs/english/concepts/errors.md @@ -1,7 +1,7 @@ --- title: Handling errors lang: en -slug: /concepts/errors +slug: /bolt-python/concepts/errors --- If an error occurs in a listener, you can handle it directly using a try/except block. Errors associated with your app will be of type `BoltError`. Errors associated with calling Slack APIs will be of type `SlackApiError`. diff --git a/docs/english/concepts/event-listening.md b/docs/english/concepts/event-listening.md index 756201b4b..562873e4c 100644 --- a/docs/english/concepts/event-listening.md +++ b/docs/english/concepts/event-listening.md @@ -1,7 +1,7 @@ --- title: Listening to events lang: en -slug: /concepts/event-listening +slug: /bolt-python/concepts/event-listening --- You can listen to [any Events API event](/reference/events) using the `event()` method after subscribing to it in your app configuration. This allows your app to take action when something happens in a workspace where it's installed, like a user reacting to a message or joining a channel. diff --git a/docs/english/concepts/global-middleware.md b/docs/english/concepts/global-middleware.md index 81026feeb..71cb0a683 100644 --- a/docs/english/concepts/global-middleware.md +++ b/docs/english/concepts/global-middleware.md @@ -1,7 +1,7 @@ --- title: Global middleware lang: en -slug: /concepts/global-middleware +slug: /bolt-python/concepts/global-middleware --- Global middleware is run for all incoming requests, before any listener middleware. You can add any number of global middleware to your app by passing middleware functions to `app.use()`. Middleware functions are called with the same arguments as listeners, with an additional `next()` function. diff --git a/docs/english/concepts/lazy-listeners.md b/docs/english/concepts/lazy-listeners.md index d72c2f9c0..c0b1c1878 100644 --- a/docs/english/concepts/lazy-listeners.md +++ b/docs/english/concepts/lazy-listeners.md @@ -1,7 +1,7 @@ --- title: Lazy listeners (FaaS) lang: en -slug: /concepts/lazy-listeners +slug: /bolt-python/concepts/lazy-listeners --- Lazy Listeners are a feature which make it easier to deploy Slack apps to FaaS (Function-as-a-Service) environments. Please note that this feature is only available in Bolt for Python, and we are not planning to add the same to other Bolt frameworks. diff --git a/docs/english/concepts/listener-middleware.md b/docs/english/concepts/listener-middleware.md index 902fcbdb8..9733820be 100644 --- a/docs/english/concepts/listener-middleware.md +++ b/docs/english/concepts/listener-middleware.md @@ -1,7 +1,7 @@ --- title: Listener middleware lang: en -slug: /concepts/listener-middleware +slug: /bolt-python/concepts/listener-middleware --- Listener middleware is only run for the listener in which it's passed. You can pass any number of middleware functions to the listener using the `middleware` parameter, which must be a list that contains one to many middleware functions. diff --git a/docs/english/concepts/logging.md b/docs/english/concepts/logging.md index 5f82d168a..7dc29554a 100644 --- a/docs/english/concepts/logging.md +++ b/docs/english/concepts/logging.md @@ -1,7 +1,7 @@ --- title: Logging lang: en -slug: /concepts/logging +slug: /bolt-python/concepts/logging --- By default, Bolt will log information from your app to the output destination. After you've imported the `logging` module, you can customize the root log level by passing the `level` parameter to `basicConfig()`. The available log levels in order of least to most severe are `debug`, `info`, `warning`, `error`, and `critical`. diff --git a/docs/english/concepts/message-listening.md b/docs/english/concepts/message-listening.md index c9e3533a5..6711066e0 100644 --- a/docs/english/concepts/message-listening.md +++ b/docs/english/concepts/message-listening.md @@ -1,7 +1,7 @@ --- title: Listening to messages lang: en -slug: /concepts/message-listening +slug: /bolt-python/concepts/message-listening --- To listen to messages that [your app has access to receive](/messaging/retrieving-messages), you can use the `message()` method which filters out events that aren't of type `message`. diff --git a/docs/english/concepts/message-sending.md b/docs/english/concepts/message-sending.md index 5a15925cf..05acbd75d 100644 --- a/docs/english/concepts/message-sending.md +++ b/docs/english/concepts/message-sending.md @@ -1,7 +1,7 @@ --- title: Sending messages lang: en -slug: /concepts/message-sending +slug: /bolt-python/concepts/message-sending --- Within your listener function, `say()` is available whenever there is an associated conversation (for example, a conversation where the event or action which triggered the listener occurred). `say()` accepts a string to post simple messages and JSON payloads to send more complex messages. The message payload you pass in will be sent to the associated conversation. diff --git a/docs/english/concepts/opening-modals.md b/docs/english/concepts/opening-modals.md index 477686663..c0b8a837f 100644 --- a/docs/english/concepts/opening-modals.md +++ b/docs/english/concepts/opening-modals.md @@ -1,7 +1,7 @@ --- title: Opening modals lang: en -slug: /concepts/opening-modals +slug: /bolt-python/concepts/opening-modals --- [Modals](/surfaces/modals) are focused surfaces that allow you to collect user data and display dynamic information. You can open a modal by passing a valid `trigger_id` and a [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission) to the built-in client's [`views.open`](/reference/methods/views.open/) method. diff --git a/docs/english/concepts/select-menu-options.md b/docs/english/concepts/select-menu-options.md index 762c114c1..79ef799a9 100644 --- a/docs/english/concepts/select-menu-options.md +++ b/docs/english/concepts/select-menu-options.md @@ -1,7 +1,7 @@ --- title: Listening & responding to select menu options lang: en -slug: /concepts/options +slug: /bolt-python/concepts/options --- The `options()` method listens for incoming option request payloads from Slack. [Similar to `action()`](/bolt-python/concepts/action-listening), diff --git a/docs/english/concepts/shortcuts.md b/docs/english/concepts/shortcuts.md index d313444b2..9e83b1d0c 100644 --- a/docs/english/concepts/shortcuts.md +++ b/docs/english/concepts/shortcuts.md @@ -1,7 +1,7 @@ --- title: Listening & responding to shortcuts lang: en -slug: /concepts/shortcuts +slug: /bolt-python/concepts/shortcuts --- The `shortcut()` method supports both [global shortcuts](/interactivity/implementing-shortcuts#global) and [message shortcuts](/interactivity/implementing-shortcuts#messages). diff --git a/docs/english/concepts/socket-mode.md b/docs/english/concepts/socket-mode.md index 38c2cdfcf..e84598e3a 100644 --- a/docs/english/concepts/socket-mode.md +++ b/docs/english/concepts/socket-mode.md @@ -1,7 +1,7 @@ --- title: Using Socket Mode lang: en -slug: /concepts/socket-mode +slug: /bolt-python/concepts/socket-mode --- With the introduction of [Socket Mode](/apis/events-api/using-socket-mode), Bolt for Python introduced support in version `1.2.0`. With Socket Mode, instead of creating a server with endpoints that Slack sends payloads too, the app will instead connect to Slack via a WebSocket connection and receive data from Slack over the socket connection. Make sure to enable Socket Mode in your app configuration settings. diff --git a/docs/english/concepts/token-rotation.md b/docs/english/concepts/token-rotation.md index e69b15e0f..f3e14c6b4 100644 --- a/docs/english/concepts/token-rotation.md +++ b/docs/english/concepts/token-rotation.md @@ -1,7 +1,7 @@ --- title: Token rotation lang: en -slug: /concepts/token-rotation +slug: /bolt-python/concepts/token-rotation --- Supported in Bolt for Python as of [v1.7.0](https://github.com/slackapi/bolt-python/releases/tag/v1.7.0), token rotation provides an extra layer of security for your access tokens and is defined by the [OAuth V2 RFC](https://datatracker.ietf.org/doc/html/rfc6749#section-10.4). diff --git a/docs/english/concepts/updating-pushing-views.md b/docs/english/concepts/updating-pushing-views.md index 3c7c2eba3..1111db347 100644 --- a/docs/english/concepts/updating-pushing-views.md +++ b/docs/english/concepts/updating-pushing-views.md @@ -1,7 +1,7 @@ --- title: Updating & pushing views lang: en -slug: /concepts/updating-pushing-views +slug: /bolt-python/concepts/updating-pushing-views --- Modals contain a stack of views. When you call [`views_open`](https://api./reference/methods/views.open/slack.com/methods/views.open), you add the root view to the modal. After the initial call, you can dynamically update a view by calling [`views_update`](/reference/methods/views.update/), or stack a new view on top of the root view by calling [`views_push`](/reference/methods/views.push/) diff --git a/docs/english/concepts/view-submissions.md b/docs/english/concepts/view-submissions.md index 4294f5d5f..d8d2aed39 100644 --- a/docs/english/concepts/view-submissions.md +++ b/docs/english/concepts/view-submissions.md @@ -1,7 +1,7 @@ --- title: Listening to views lang: en -slug: /concepts/view_submissions +slug: /bolt-python/concepts/view_submissions --- If a [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission) contains any input blocks, you must listen to `view_submission` requests to receive their values. To listen to `view_submission` requests, you can use the built-in `view()` method. `view()` requires a `callback_id` of type `str` or `re.Pattern`. diff --git a/docs/english/concepts/web-api.md b/docs/english/concepts/web-api.md index 4be240e87..82dbc0453 100644 --- a/docs/english/concepts/web-api.md +++ b/docs/english/concepts/web-api.md @@ -1,7 +1,7 @@ --- title: Using the Web API lang: en -slug: /concepts/web-api +slug: /bolt-python/concepts/web-api --- You can call [any Web API method](/reference/methods) using the [`WebClient`](/python-slack-sdk/web) provided to your Bolt app as either `app.client` or `client` in middleware/listener arguments (given that your app has the appropriate scopes). When you call one the client's methods, it returns a `SlackResponse` which contains the response from Slack. diff --git a/docs/english/legacy/steps-from-apps.md b/docs/english/legacy/steps-from-apps.md index c56190e65..0e042ebbc 100644 --- a/docs/english/legacy/steps-from-apps.md +++ b/docs/english/legacy/steps-from-apps.md @@ -1,7 +1,7 @@ --- title: Steps from apps lang: en -slug: /legacy/steps-from-apps +slug: /bolt-python/legacy/steps-from-apps --- :::danger[Steps from Apps is a deprecated feature.] diff --git a/docs/japanese/concepts/acknowledge.md b/docs/japanese/concepts/acknowledge.md index f60797da6..39f860e12 100644 --- a/docs/japanese/concepts/acknowledge.md +++ b/docs/japanese/concepts/acknowledge.md @@ -1,7 +1,7 @@ --- title: リクエストの確認 lang: ja-jp -slug: /concepts/acknowledge +slug: /bolt-python/concepts/acknowledge --- アクション(action)、コマンド(command)、ショートカット(shortcut)、オプション(options)、およびモーダルからのデータ送信(view_submission)の各リクエストは、**必ず** `ack()` 関数を使って確認を行う必要があります。これによってリクエストが受信されたことが Slack に認識され、Slack のユーザーインターフェイスが適切に更新されます。 diff --git a/docs/japanese/concepts/actions.md b/docs/japanese/concepts/actions.md index dd69ef264..6eb32a861 100644 --- a/docs/japanese/concepts/actions.md +++ b/docs/japanese/concepts/actions.md @@ -1,7 +1,7 @@ --- title: アクション lang: ja-jp -slug: /concepts/actions +slug: /bolt-python/concepts/actions --- ## アクションのリスニング diff --git a/docs/japanese/concepts/adapters.md b/docs/japanese/concepts/adapters.md index 78c94fca4..c344ac888 100644 --- a/docs/japanese/concepts/adapters.md +++ b/docs/japanese/concepts/adapters.md @@ -1,7 +1,7 @@ --- title: アダプター lang: ja-jp -slug: /concepts/adapters +slug: /bolt-python/concepts/adapters --- アダプターは Slack から届く受信リクエストの受付とパーズを担当し、それらのリクエストを `BoltRequest` の形式に変換して Bolt アプリに引き渡します。 diff --git a/docs/japanese/concepts/app-home.md b/docs/japanese/concepts/app-home.md index 251684759..798be282e 100644 --- a/docs/japanese/concepts/app-home.md +++ b/docs/japanese/concepts/app-home.md @@ -1,7 +1,7 @@ --- title: ホームタブの更新 lang: ja-jp -slug: /concepts/app-home +slug: /bolt-python/concepts/app-home --- ホームタブは、サイドバーや検索画面からアクセス可能なサーフェスエリアです。アプリはこのエリアを使ってユーザーごとのビューを表示することができます。アプリ設定ページで App Home の機能を有効にすると、`views.publish` API メソッドの呼び出しで `user_id` と[ビューのペイロード](/reference/interaction-payloads/view-interactions-payload/#view_submission)を指定して、ホームタブを公開・更新することができるようになります。 diff --git a/docs/japanese/concepts/assistant.md b/docs/japanese/concepts/assistant.md index dbe5adb5d..018ca4ef5 100644 --- a/docs/japanese/concepts/assistant.md +++ b/docs/japanese/concepts/assistant.md @@ -1,7 +1,7 @@ --- title: エージェント・アシスタント lang: en -slug: /concepts/assistant +slug: /bolt-python/concepts/assistant --- このページは、Bolt を使ってエージェント・アシスタントを実装するための方法を紹介します。この機能に関する一般的な情報については、[こちらのドキュメントページ(英語)](/ai/)を参照してください。 diff --git a/docs/japanese/concepts/async.md b/docs/japanese/concepts/async.md index 19609be89..b3b4a0f9c 100644 --- a/docs/japanese/concepts/async.md +++ b/docs/japanese/concepts/async.md @@ -1,7 +1,7 @@ --- title: Async(asyncio)の使用 lang: ja-jp -slug: /concepts/async +slug: /bolt-python/concepts/async --- 非同期バージョンの Bolt を使用する場合は、`App` の代わりに `AsyncApp` インスタンスをインポートして初期化します。`AsyncApp` では AIOHTTP を使って API リクエストを行うため、`aiohttp` をインストールする必要があります(`requirements.txt` に追記するか、`pip install aiohttp` を実行します)。 diff --git a/docs/japanese/concepts/authenticating-oauth.md b/docs/japanese/concepts/authenticating-oauth.md index e25542101..76f226d2e 100644 --- a/docs/japanese/concepts/authenticating-oauth.md +++ b/docs/japanese/concepts/authenticating-oauth.md @@ -1,7 +1,7 @@ --- title: OAuth を使った認証 lang: ja-jp -slug: /concepts/authenticating-oauth +slug: /bolt-python/concepts/authenticating-oauth --- Slack アプリを複数のワークスペースにインストールできるようにするためには、OAuth フローを実装した上で、アクセストークンなどのインストールに関する情報をセキュアな方法で保存する必要があります。アプリを初期化する際に `client_id`、`client_secret`、`scopes`、`installation_store`、`state_store` を指定することで、OAuth のエンドポイントのルート情報や stateパラメーターの検証をBolt for Python にハンドリングさせることができます。カスタムのアダプターを実装する場合は、SDK が提供する組み込みの[OAuth ライブラリ](/python-slack-sdk/oauth/)を利用するのが便利です。これは Slack が開発したモジュールで、Bolt for Python 内部でも利用しています。 diff --git a/docs/japanese/concepts/authorization.md b/docs/japanese/concepts/authorization.md index 760bb0903..91407f6ef 100644 --- a/docs/japanese/concepts/authorization.md +++ b/docs/japanese/concepts/authorization.md @@ -1,7 +1,7 @@ --- title: 認可(Authorization) lang: ja-jp -slug: /concepts/authorization +slug: /bolt-python/concepts/authorization --- 認可(Authorization)は、Slack からの受信リクエストを処理するにあたって、どのようなSlack diff --git a/docs/japanese/concepts/commands.md b/docs/japanese/concepts/commands.md index 4854a0ac2..0acb858a2 100644 --- a/docs/japanese/concepts/commands.md +++ b/docs/japanese/concepts/commands.md @@ -1,7 +1,7 @@ --- title: コマンドのリスニングと応答 lang: ja-jp -slug: /concepts/commands +slug: /bolt-python/concepts/commands --- スラッシュコマンドが実行されたリクエストをリッスンするには、`command()` メソッドを使用します。このメソッドでは `str` 型の `command_name` の指定が必要です。 diff --git a/docs/japanese/concepts/context.md b/docs/japanese/concepts/context.md index 6f4dd8257..66f82a9d2 100644 --- a/docs/japanese/concepts/context.md +++ b/docs/japanese/concepts/context.md @@ -1,7 +1,7 @@ --- title: コンテキストの追加 lang: ja-jp -slug: /concepts/context +slug: /bolt-python/concepts/context --- すべてのリスナーは `context` ディクショナリにアクセスできます。リスナーはこれを使ってリクエストの付加情報を得ることができます。受信リクエストに含まれる `user_id`、`team_id`、`channel_id`、`enterprise_id` などの情報は、Bolt によって自動的に設定されます。 diff --git a/docs/japanese/concepts/custom-adapters.md b/docs/japanese/concepts/custom-adapters.md index e751c01da..3c58c9672 100644 --- a/docs/japanese/concepts/custom-adapters.md +++ b/docs/japanese/concepts/custom-adapters.md @@ -1,7 +1,7 @@ --- title: カスタムのアダプター lang: ja-jp -slug: /concepts/custom-adapters +slug: /bolt-python/concepts/custom-adapters --- [アダプター](/bolt-python/concepts/adapters)はフレキシブルで、あなたが使用したいフレームワークに合わせた調整も可能です。アダプターでは、次の 2 つの要素が必須となっています。 diff --git a/docs/japanese/concepts/custom-steps.md b/docs/japanese/concepts/custom-steps.md index f0f6f26f7..9182510ad 100644 --- a/docs/japanese/concepts/custom-steps.md +++ b/docs/japanese/concepts/custom-steps.md @@ -1,7 +1,7 @@ --- title: Listening and responding to custom steps lang: ja-jp -slug: /concepts/custom-steps +slug: /bolt-python/concepts/custom-steps --- Your app can use the `function()` method to listen to incoming [custom step requests](/workflows/workflow-steps). Custom steps are used in Workflow Builder to build workflows. The method requires a step `callback_id` of type `str`. This `callback_id` must also be defined in your [Function](/reference/app-manifest#functions) definition. Custom steps must be finalized using the `complete()` or `fail()` listener arguments to notify Slack that your app has processed the request. diff --git a/docs/japanese/concepts/errors.md b/docs/japanese/concepts/errors.md index 6d715c1d7..6a1daa747 100644 --- a/docs/japanese/concepts/errors.md +++ b/docs/japanese/concepts/errors.md @@ -1,7 +1,7 @@ --- title: エラーの処理 lang: ja-jp -slug: /concepts/errors +slug: /bolt-python/concepts/errors --- リスナー内でエラーが発生した場合に try/except ブロックを使用して直接エラーを処理することができます。アプリに関連するエラーは、`BoltError` 型です。Slack API の呼び出しに関連するエラーは、`SlackApiError` 型となります。 diff --git a/docs/japanese/concepts/event-listening.md b/docs/japanese/concepts/event-listening.md index 3b7c4a062..cd9fd3009 100644 --- a/docs/japanese/concepts/event-listening.md +++ b/docs/japanese/concepts/event-listening.md @@ -1,7 +1,7 @@ --- title: イベントのリスニング lang: ja-jp -slug: /concepts/event-listening +slug: /bolt-python/concepts/event-listening --- `event()` メソッドを使うと、[Events API](/reference/events) の任意のイベントをリッスンできます。リッスンするイベントは、アプリの設定であらかじめサブスクライブしておく必要があります。これを利用することで、アプリがインストールされたワークスペースで何らかのイベント(例:ユーザーがメッセージにリアクションをつけた、ユーザーがチャンネルに参加した)が発生したときに、アプリに何らかのアクションを実行させることができます。 diff --git a/docs/japanese/concepts/global-middleware.md b/docs/japanese/concepts/global-middleware.md index 475a5999a..f78a67f12 100644 --- a/docs/japanese/concepts/global-middleware.md +++ b/docs/japanese/concepts/global-middleware.md @@ -1,7 +1,7 @@ --- title: グローバルミドルウェア lang: ja-jp -slug: /concepts/global-middleware +slug: /bolt-python/concepts/global-middleware order: 8 --- diff --git a/docs/japanese/concepts/lazy-listeners.md b/docs/japanese/concepts/lazy-listeners.md index 25eb6294c..bc0bb4127 100644 --- a/docs/japanese/concepts/lazy-listeners.md +++ b/docs/japanese/concepts/lazy-listeners.md @@ -1,7 +1,7 @@ --- title: Lazy リスナー(FaaS) lang: ja-jp -slug: /concepts/lazy-listeners +slug: /bolt-python/concepts/lazy-listeners --- Lazy リスナー関数は、FaaS 環境への Slack アプリのデプロイを容易にする機能です。この機能は Bolt for Python でのみ利用可能で、他の Bolt フレームワークでこの機能に対応することは予定していません。 diff --git a/docs/japanese/concepts/listener-middleware.md b/docs/japanese/concepts/listener-middleware.md index 61cc69b86..ad3f43f12 100644 --- a/docs/japanese/concepts/listener-middleware.md +++ b/docs/japanese/concepts/listener-middleware.md @@ -1,7 +1,7 @@ --- title: リスナーミドルウェア lang: ja-jp -slug: /concepts/listener-middleware +slug: /bolt-python/concepts/listener-middleware --- リスナーミドルウェアは、それを渡したリスナーでのみ実行されるミドルウェアです。リスナーには、`middleware` パラメーターを使ってミドルウェア関数をいくつでも渡すことができます。このパラメーターには、1 つまたは複数のミドルウェア関数からなるリストを指定します。 diff --git a/docs/japanese/concepts/logging.md b/docs/japanese/concepts/logging.md index 22223fb08..448b77b0a 100644 --- a/docs/japanese/concepts/logging.md +++ b/docs/japanese/concepts/logging.md @@ -1,7 +1,7 @@ --- title: ロギング lang: ja-jp -slug: /concepts/logging +slug: /bolt-python/concepts/logging --- デフォルトでは、アプリからのログ情報は、既定の出力先に出力されます。`logging` モジュールをインポートすれば、`basicConfig()` の `level` パラメーターでrootのログレベルを変更することができます。指定できるログレベルは、重要度の低い方から `debug`、`info`、`warning`、`error`、および `critical` です。 diff --git a/docs/japanese/concepts/message-listening.md b/docs/japanese/concepts/message-listening.md index 71771cf5a..3e89fb753 100644 --- a/docs/japanese/concepts/message-listening.md +++ b/docs/japanese/concepts/message-listening.md @@ -1,7 +1,7 @@ --- title: メッセージのリスニング lang: ja-jp -slug: /concepts/message-listening +slug: /bolt-python/concepts/message-listening --- [あなたのアプリがアクセス権限を持つ](/messaging/retrieving-messages)メッセージの投稿イベントをリッスンするには `message()` メソッドを利用します。このメソッドは `type` が `message` ではないイベントを処理対象から除外します。 diff --git a/docs/japanese/concepts/message-sending.md b/docs/japanese/concepts/message-sending.md index 1eb9bd954..1e6cd7d7d 100644 --- a/docs/japanese/concepts/message-sending.md +++ b/docs/japanese/concepts/message-sending.md @@ -1,7 +1,7 @@ --- title: メッセージの送信 lang: ja-jp -slug: /concepts/message-sending +slug: /bolt-python/concepts/message-sending --- リスナー関数内では、関連づけられた会話(例:リスナー実行のトリガーとなったイベントまたはアクションの発生元の会話)がある場合はいつでも `say()` を使用できます。`say()` には文字列または JSON ペイロードを指定できます。文字列の場合、送信できるのはテキストベースの単純なメッセージです。より複雑なメッセージを送信するには JSON ペイロードを指定します。指定したメッセージのペイロードは、関連づけられた会話内のメッセージとして送信されます。 diff --git a/docs/japanese/concepts/opening-modals.md b/docs/japanese/concepts/opening-modals.md index 48eee2170..0a659be10 100644 --- a/docs/japanese/concepts/opening-modals.md +++ b/docs/japanese/concepts/opening-modals.md @@ -1,7 +1,7 @@ --- title: モーダルの開始 lang: ja-jp -slug: /concepts/opening-modals +slug: /bolt-python/concepts/opening-modals --- モーダルは、ユーザーからのデータの入力を受け付けたり、動的な情報を表示したりするためのインターフェイスです。組み込みの APIクライアントの `views.open` メソッドに、有効な `trigger_id` とビューのペイロードを指定してモーダルを開始します。 diff --git a/docs/japanese/concepts/select-menu-options.md b/docs/japanese/concepts/select-menu-options.md index 0e26af498..bf534f924 100644 --- a/docs/japanese/concepts/select-menu-options.md +++ b/docs/japanese/concepts/select-menu-options.md @@ -1,7 +1,7 @@ --- title: オプションのリスニングと応答 lang: ja-jp -slug: /concepts/options +slug: /bolt-python/concepts/options --- `options()` メソッドは、Slack からのオプション(セレクトメニュー内の動的な選択肢)をリクエストするペイロードをリッスンします。 [`action()` と同様に](/bolt-python/concepts/action-listening)、文字列型の `action_id` または制約付きオブジェクトが必要です。 diff --git a/docs/japanese/concepts/shortcuts.md b/docs/japanese/concepts/shortcuts.md index 30ca85e12..04008f0b3 100644 --- a/docs/japanese/concepts/shortcuts.md +++ b/docs/japanese/concepts/shortcuts.md @@ -1,7 +1,7 @@ --- title: ショートカットのリスニングと応答 lang: ja-jp -slug: /concepts/shortcuts +slug: /bolt-python/concepts/shortcuts --- `shortcut()` メソッドは、[グローバルショートカット](/interactivity/implementing-shortcuts#global)と[メッセージショートカット](/interactivity/implementing-shortcuts#messages)の 2 つをサポートしています。 diff --git a/docs/japanese/concepts/socket-mode.md b/docs/japanese/concepts/socket-mode.md index ec22fbd68..6f92d195d 100644 --- a/docs/japanese/concepts/socket-mode.md +++ b/docs/japanese/concepts/socket-mode.md @@ -1,7 +1,7 @@ --- title: ソケットモードの利用 lang: ja-jp -slug: /concepts/socket-mode +slug: /bolt-python/concepts/socket-mode --- [ソケットモード](/apis/events-api/using-socket-mode)は、アプリに WebSocket での接続と、そのコネクション経由でのデータ受信を可能とします。Bolt for Python は、バージョン 1.2.0 からこれに対応しています。 diff --git a/docs/japanese/concepts/token-rotation.md b/docs/japanese/concepts/token-rotation.md index 80d58d5ca..2d37239d7 100644 --- a/docs/japanese/concepts/token-rotation.md +++ b/docs/japanese/concepts/token-rotation.md @@ -1,7 +1,7 @@ --- title: トークンのローテーション lang: ja-jp -slug: /concepts/token-rotation +slug: /bolt-python/concepts/token-rotation --- Bolt for Python [v1.7.0](https://github.com/slackapi/bolt-python/releases/tag/v1.7.0) から、アクセストークンのさらなるセキュリティ強化のレイヤーであるトークンローテーションの機能に対応しています。トークンローテーションは [OAuth V2 の RFC](https://datatracker.ietf.org/doc/html/rfc6749#section-10.4) で規定されているものです。 diff --git a/docs/japanese/concepts/updating-pushing-views.md b/docs/japanese/concepts/updating-pushing-views.md index 32d21b1ca..095c12ba4 100644 --- a/docs/japanese/concepts/updating-pushing-views.md +++ b/docs/japanese/concepts/updating-pushing-views.md @@ -1,7 +1,7 @@ --- title: モーダルの更新と多重表示 lang: ja-jp -slug: /concepts/updating-pushing-views +slug: /bolt-python/concepts/updating-pushing-views --- モーダル内では、複数のモーダルをスタックのように重ねることができます。`views_open` という APIを呼び出すと、親となるとなるモーダルビューが追加されます。この最初の呼び出しの後、`views_update` を呼び出すことでそのビューを更新することができます。また、`views_push` を呼び出すと、親のモーダルの上にさらに新しいモーダルビューを重ねることもできます。 diff --git a/docs/japanese/concepts/view-submissions.md b/docs/japanese/concepts/view-submissions.md index eddbbdd47..b44d24718 100644 --- a/docs/japanese/concepts/view-submissions.md +++ b/docs/japanese/concepts/view-submissions.md @@ -1,7 +1,7 @@ --- title: モーダルの送信のリスニング lang: ja-jp -slug: /concepts/view_submissions +slug: /bolt-python/concepts/view_submissions --- モーダルのペイロードに `input` ブロックを含める場合、その入力値を受け取るために`view_submission` リクエストをリッスンする必要があります。`view_submission` リクエストのリッスンには、組み込みの`view()` メソッドを利用することができます。`view()` の引数には、`str` 型または `re.Pattern` 型の `callback_id` を指定します。 diff --git a/docs/japanese/concepts/web-api.md b/docs/japanese/concepts/web-api.md index 9b580cc8a..336604053 100644 --- a/docs/japanese/concepts/web-api.md +++ b/docs/japanese/concepts/web-api.md @@ -1,7 +1,7 @@ --- title: Web API の使い方 lang: ja-jp -slug: /concepts/web-api +slug: /bolt-python/concepts/web-api --- `app.client`、またはミドルウェア・リスナーの引数 `client` として Bolt アプリに提供されている [`WebClient`](/python-slack-sdk/basic_usage.html) は必要な権限を付与されており、これを利用することで[あらゆる Web API メソッド](/reference/methods)を呼び出すことができます。このクライアントのメソッドを呼び出すと `SlackResponse` という Slack からの応答情報を含むオブジェクトが返されます。 diff --git a/docs/japanese/legacy/steps-from-apps.md b/docs/japanese/legacy/steps-from-apps.md index 1c829af51..95162d26f 100644 --- a/docs/japanese/legacy/steps-from-apps.md +++ b/docs/japanese/legacy/steps-from-apps.md @@ -1,7 +1,7 @@ --- title: ワークフローステップの概要 lang: ja-jp -slug: /legacy/steps-from-apps +slug: /bolt-python/legacy/steps-from-apps --- (アプリによる)ワークフローステップでは、処理をアプリ側で行うカスタムのワークフローステップを提供することができます。ユーザーは[ワークフロービルダー](/workflows/workflow-builder)を使ってこれらのステップをワークフローに追加できます。 From 5c61bd744080abcac67153547ae454d7368842b9 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Mon, 4 Aug 2025 13:56:15 -0700 Subject: [PATCH 23/42] links --- docs/english/building-an-app.md | 2 +- docs/english/concepts/ai-apps.md | 2 +- docs/english/concepts/custom-steps.md | 2 +- docs/english/concepts/select-menu-options.md | 2 +- docs/english/concepts/updating-pushing-views.md | 2 +- docs/english/getting-started.md | 2 +- docs/english/tutorial/ai-chatbot/ai-chatbot.md | 4 ++-- .../custom-steps-workflow-builder-new.md | 4 ++-- docs/english/tutorial/custom-steps.md | 8 ++++---- docs/japanese/concepts/app-home.md | 7 ++++--- docs/japanese/concepts/custom-steps.md | 2 +- docs/japanese/concepts/select-menu-options.md | 2 +- docs/japanese/getting-started.md | 2 +- 13 files changed, 21 insertions(+), 20 deletions(-) diff --git a/docs/english/building-an-app.md b/docs/english/building-an-app.md index f8fbe061b..54cb58348 100644 --- a/docs/english/building-an-app.md +++ b/docs/english/building-an-app.md @@ -173,7 +173,7 @@ When an event occurs, Slack will send your app some information about the event, :::tip[Using proxy services] -For local development, you can use a proxy service like ngrok to create a public URL and tunnel requests to your development environment. Refer to [ngrok's getting started guide](https://ngrok.com/docs#getting-started-expose) on how to create this tunnel. And when you get to hosting your app, we've collected some of the most common hosting providers Slack developers use to host their apps [on our API site](/distribution/hosting-slack-apps/). +For local development, you can use a proxy service like ngrok to create a public URL and tunnel requests to your development environment. Refer to [ngrok's getting started guide](https://ngrok.com/docs#getting-started-expose) on how to create this tunnel. And when you get to hosting your app, we've collected some of the most common hosting providers Slack developers use to host their apps [on our API site](/app-management/hosting-slack-apps). ::: diff --git a/docs/english/concepts/ai-apps.md b/docs/english/concepts/ai-apps.md index 83448e52d..c6c5c7773 100644 --- a/docs/english/concepts/ai-apps.md +++ b/docs/english/concepts/ai-apps.md @@ -29,7 +29,7 @@ The Agents & AI Apps feature comprises a unique messaging experience for Slack. That being said, using the `Assistant` class will streamline the process. And we already wrote this nice guide for you! :::info -You _could_ go it alone and [listen](/bolt-python/event-listening) for the `assistant_thread_started`, `assistant_thread_context_changed`, and `message.im` events (see implementation details below) in order to implement the AI features in your app. That being said, using the `Assistant` class will streamline the process. And we already wrote this nice guide for you! +You _could_ go it alone and [listen](/bolt-python/concepts/event-listening) for the `assistant_thread_started`, `assistant_thread_context_changed`, and `message.im` events (see implementation details below) in order to implement the AI features in your app. That being said, using the `Assistant` class will streamline the process. And we already wrote this nice guide for you! ::: ## The `Assistant` class instance {#assistant-class} diff --git a/docs/english/concepts/custom-steps.md b/docs/english/concepts/custom-steps.md index 868d447ee..68965fee7 100644 --- a/docs/english/concepts/custom-steps.md +++ b/docs/english/concepts/custom-steps.md @@ -69,7 +69,7 @@ Example app manifest definition Your app's custom steps may create interactivity points for users, for example: Post a message with a button. -If such interaction points originate from a custom step execution, the events sent to your app representing the end-user interaction with these points are considered to be _function-scoped interactivity events_. These interactivity events can be handled by your app using the same concepts we covered earlier, such as [Listening to actions](/bolt-python/concepts/action-listening). +If such interaction points originate from a custom step execution, the events sent to your app representing the end-user interaction with these points are considered to be _function-scoped interactivity events_. These interactivity events can be handled by your app using the same concepts we covered earlier, such as [Listening to actions](/bolt-python/concepts/actions). _function-scoped interactivity events_ will contain data related to the custom step (`function_executed` event) they were spawned from, such as custom step `inputs` and access to `complete()` and `fail()` listener arguments. diff --git a/docs/english/concepts/select-menu-options.md b/docs/english/concepts/select-menu-options.md index 79ef799a9..f4a4c75ce 100644 --- a/docs/english/concepts/select-menu-options.md +++ b/docs/english/concepts/select-menu-options.md @@ -4,7 +4,7 @@ lang: en slug: /bolt-python/concepts/options --- -The `options()` method listens for incoming option request payloads from Slack. [Similar to `action()`](/bolt-python/concepts/action-listening), +The `options()` method listens for incoming option request payloads from Slack. [Similar to `action()`](/bolt-python/concepts/actions), an `action_id` or constraints object is required. In order to load external data into your select menus, you must provide an options load URL in your app configuration, appended with `/slack/events`. While it's recommended to use `action_id` for `external_select` menus, dialogs do not support Block Kit so you'll have to use the constraints object to filter on a `callback_id`. diff --git a/docs/english/concepts/updating-pushing-views.md b/docs/english/concepts/updating-pushing-views.md index 1111db347..9f087ad6a 100644 --- a/docs/english/concepts/updating-pushing-views.md +++ b/docs/english/concepts/updating-pushing-views.md @@ -12,7 +12,7 @@ To update a view, you can use the built-in client to call `views_update` with th ## The `views_push` method -To push a new view onto the view stack, you can use the built-in client to call `views_push` with a valid `trigger_id` a new [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission). The arguments for `views_push` is the same as [opening modals](/bolt-python/concepts/creating-models). After you open a modal, you may only push two additional views onto the view stack. +To push a new view onto the view stack, you can use the built-in client to call `views_push` with a valid `trigger_id` a new [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission). The arguments for `views_push` is the same as [opening modals](/bolt-python/concepts/opening-models). After you open a modal, you may only push two additional views onto the view stack. Learn more about updating and pushing views in our [API documentation](/surfaces/modals) diff --git a/docs/english/getting-started.md b/docs/english/getting-started.md index f155b1530..0d6fe8ec5 100644 --- a/docs/english/getting-started.md +++ b/docs/english/getting-started.md @@ -296,5 +296,5 @@ You can now continue customizing your app with various features to make it right - Explore the different events your bot can listen to with the [`app.event()`](/bolt-python/concepts/event-listening) method. All of the [events](/reference/events) are listed on the API docs site. - Bolt allows you to call [Web API](/bolt-python/concepts/web-api) methods with the client attached to your app. There are [over 200 methods](/reference/methods) on the API docs site. - Learn more about the different [token types](/authentication/tokens) and [authentication setups](/bolt-python/concepts/authenticating-oauth). Your app might need different tokens depending on the actions you want to perform or for installations to multiple workspaces. -- Receive events using HTTP for various deployment methods, such as deploying to [Heroku](/bolt-python/deployments/heroku) or [AWS Lambda](/bolt-python/deployments/aws-lambda). +- Receive events using HTTP for various deployment methods, such as deploying to Heroku or AWS Lambda. - Read on [app design](/surfaces/app-design) and compose fancy messages with blocks using [Block Kit Builder](https://app.slack.com/block-kit-builder) to prototype messages. diff --git a/docs/english/tutorial/ai-chatbot/ai-chatbot.md b/docs/english/tutorial/ai-chatbot/ai-chatbot.md index 9146df04e..e609d8e05 100644 --- a/docs/english/tutorial/ai-chatbot/ai-chatbot.md +++ b/docs/english/tutorial/ai-chatbot/ai-chatbot.md @@ -197,6 +197,6 @@ You can also navigate to **Bolty** in your **Apps** list and select the **Messag Congratulations! You've successfully integrated the power of AI into your workspace. Check out these links to take the next steps in your Bolt for Python journey. -* To learn more about Bolt for Python, refer to the [Getting started](../getting-started) documentation. +* To learn more about Bolt for Python, refer to the [Getting started](/getting-started) documentation. * For more details about creating workflow steps using the Bolt SDK, refer to the [workflow steps for Bolt](/workflows/workflow-steps) guide. -* To use the Bolt for Python SDK to develop on the automations platform, refer to the [Create a workflow step for Workflow Builder: Bolt for Python](/bolt-python/bolt-python/tutorial/custom-steps) tutorial. +* To use the Bolt for Python SDK to develop on the automations platform, refer to the [Create a workflow step for Workflow Builder: Bolt for Python](/bolt-python/tutorial/custom-steps-workflow-builder-new) tutorial. diff --git a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md index b4396466c..f77e18aba 100644 --- a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md +++ b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md @@ -6,7 +6,7 @@ title: Custom Steps for Workflow Builder (new app) If you don't have a paid workspace for development, you can join the [Developer Program](https://api.slack.com/developer-program) and provision a sandbox with access to all Slack features for free. ::: -Adding a workflow step to your app and implementing a corresponding function listener is how you define a custom Workflow Builder step. In this tutorial, you'll use [Bolt for Python](/bolt-python/bolt-python/) to add your workflow step, then wire it up in [Workflow Builder](https://slack.com/help/articles/360035692513-Guide-to-Workflow-Builder). +Adding a workflow step to your app and implementing a corresponding function listener is how you define a custom Workflow Builder step. In this tutorial, you'll use [Bolt for Python](/bolt-python/) to add your workflow step, then wire it up in [Workflow Builder](https://slack.com/help/articles/360035692513-Guide-to-Workflow-Builder). When finished, you'll be ready to build scalable and innovative workflow steps for anyone using Workflow Builder in your workspace. @@ -70,7 +70,7 @@ All of your app's settings can be configured within these screens. By creating a Navigate to **Event Subscriptions** and expand **Subscribe to bot events** to see that we have subscribed to the `function_executed` event. This is also a requirement for adding workflow steps to our app, as it lets our app know when a step has been triggered, allowing our app to respond to it. -Another configuration setting to note is **Socket Mode**. We have turned this on for our local development, but socket mode is not intended for use in a production environment. When you are satisfied with your app and ready to deploy it to a production environment, you should switch to using public HTTP request URLs. Read more about getting started with HTTP in [Bolt for Python here](/bolt-python/bolt-python/getting-started). +Another configuration setting to note is **Socket Mode**. We have turned this on for our local development, but socket mode is not intended for use in a production environment. When you are satisfied with your app and ready to deploy it to a production environment, you should switch to using public HTTP request URLs. Read more about getting started with HTTP in [Bolt for Python here](/bolt-python/getting-started). Clicking on **Workflow Steps** in the left nav will show you that one workflow step has been added! This reflects the `function` defined in our manifest: functions are workflow steps. We will get to this step's implementation later. diff --git a/docs/english/tutorial/custom-steps.md b/docs/english/tutorial/custom-steps.md index a345d7063..8fa6a354b 100644 --- a/docs/english/tutorial/custom-steps.md +++ b/docs/english/tutorial/custom-steps.md @@ -225,7 +225,7 @@ The second argument is the callback function, or the logic that will run when yo Field | Description ------|------------ -`client` | A `WebClient` instance used to make things happen in Slack. From sending messages to opening modals, `client` makes it all happen. For a full list of available methods, refer to the [Web API methods](/bolt-python/methods). Read more about the `WebClient` for Bolt Python [here](https://docs.slack.dev/bolt-python/concepts/web-api/). +`client` | A `WebClient` instance used to make things happen in Slack. From sending messages to opening modals, `client` makes it all happen. For a full list of available methods, refer to the [Web API methods](/reference/methods). Read more about the `WebClient` for Bolt Python [here](https://docs.slack.dev/bolt-python/concepts/web-api/). `complete` | A utility method that invokes `functions.completeSuccess`. This method indicates to Slack that a step has completed successfully without issue. When called, `complete` requires you include an `outputs` object that matches your step definition in [`output_parameters`](#inputs-outputs). `fail` | A utility method that invokes `functions.completeError`. True to its name, this method signals to Slack that a step has failed to complete. The `fail` method requires an argument of `error` to be sent along with it, which is used to help users understand what went wrong. `inputs` | An alias for the `input_parameters` that were provided to the step upon execution. @@ -255,7 +255,7 @@ When you're ready to deploy your steps for wider use, you'll need to decide *whe ### Control step access {#access} -You can choose who has access to your custom steps. To define this, refer to the [custom function access](/bolt-python/automation/functions/access) page. +You can choose who has access to your custom steps. To define this, refer to the [custom function access](/deno-slack-sdk/guides/controlling-access-to-custom-functions) page. ### Distribution {#distribution} @@ -268,5 +268,5 @@ Apps containing custom steps cannot be distributed publicly or submitted to the ## Related tutorials {#tutorials} -* [Custom steps for Workflow Builder (new app)](/bolt-python/tutorial/custom-steps-WB-new) -* [Custom steps for Workflow Builder (existing app)](/bolt-python/tutorial/custom-steps-WB-existing) +* [Custom steps for Workflow Builder (new app)](/bolt-python/tutorial/custom-steps-workflow-builder-new) +* [Custom steps for Workflow Builder (existing app)](/bolt-python/tutorial/custom-steps-workflow-builder-existing/) \ No newline at end of file diff --git a/docs/japanese/concepts/app-home.md b/docs/japanese/concepts/app-home.md index 798be282e..f7539f377 100644 --- a/docs/japanese/concepts/app-home.md +++ b/docs/japanese/concepts/app-home.md @@ -4,11 +4,12 @@ lang: ja-jp slug: /bolt-python/concepts/app-home --- -ホームタブは、サイドバーや検索画面からアクセス可能なサーフェスエリアです。アプリはこのエリアを使ってユーザーごとのビューを表示することができます。アプリ設定ページで App Home の機能を有効にすると、`views.publish` API メソッドの呼び出しで `user_id` と[ビューのペイロード](/reference/interaction-payloads/view-interactions-payload/#view_submission)を指定して、ホームタブを公開・更新することができるようになります。 +[ホームタブ](/surfaces/app-home)は、サイドバーや検索画面からアクセス可能なサーフェスエリアです。アプリはこのエリアを使ってユーザーごとのビューを表示することができます。アプリ設定ページで App Home の機能を有効にすると、[`views.publish`](/reference/methods/views.publish) API メソッドの呼び出しで `user_id` と[ビューのペイロード](/reference/interaction-payloads/view-interactions-payload/#view_submission)を指定して、ホームタブを公開・更新することができるようになります。 -`app_home_opened` イベントをサブスクライブすると、ユーザーが App Home を開く操作をリッスンできます。 +[`app_home_opened`](/reference/events/app_home_opened) イベントをサブスクライブすると、ユーザーが App Home を開く操作をリッスンできます。 + +指定可能な引数の一覧は [モジュールドキュメント](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html)を参考にしてください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python @app.event("app_home_opened") def update_home_tab(client, event, logger): diff --git a/docs/japanese/concepts/custom-steps.md b/docs/japanese/concepts/custom-steps.md index 9182510ad..afb2504ed 100644 --- a/docs/japanese/concepts/custom-steps.md +++ b/docs/japanese/concepts/custom-steps.md @@ -68,7 +68,7 @@ Example app manifest definition Your app's custom steps may create interactivity points for users, for example: Post a message with a button. -If such interaction points originate from a custom step execution, the events sent to your app representing the end-user interaction with these points are considered to be _function-scoped interactivity events_. These interactivity events can be handled by your app using the same concepts we covered earlier, such as [Listening to actions](/bolt-python/concepts/action-listening). +If such interaction points originate from a custom step execution, the events sent to your app representing the end-user interaction with these points are considered to be _function-scoped interactivity events_. These interactivity events can be handled by your app using the same concepts we covered earlier, such as [Listening to actions](/bolt-python/concepts/actions). _function-scoped interactivity events_ will contain data related to the custom step (`function_executed` event) they were spawned from, such as custom step `inputs` and access to `complete()` and `fail()` listener arguments. diff --git a/docs/japanese/concepts/select-menu-options.md b/docs/japanese/concepts/select-menu-options.md index bf534f924..c1a5a3b70 100644 --- a/docs/japanese/concepts/select-menu-options.md +++ b/docs/japanese/concepts/select-menu-options.md @@ -4,7 +4,7 @@ lang: ja-jp slug: /bolt-python/concepts/options --- -`options()` メソッドは、Slack からのオプション(セレクトメニュー内の動的な選択肢)をリクエストするペイロードをリッスンします。 [`action()` と同様に](/bolt-python/concepts/action-listening)、文字列型の `action_id` または制約付きオブジェクトが必要です。 +`options()` メソッドは、Slack からのオプション(セレクトメニュー内の動的な選択肢)をリクエストするペイロードをリッスンします。 [`action()` と同様に](/bolt-python/concepts/actions)、文字列型の `action_id` または制約付きオブジェクトが必要です。 外部データソースを使って選択メニューをロードするためには、末部に `/slack/events` が付加された URL を Options Load URL として予め設定しておく必要があります。 diff --git a/docs/japanese/getting-started.md b/docs/japanese/getting-started.md index 53127bb9d..5040691e7 100644 --- a/docs/japanese/getting-started.md +++ b/docs/japanese/getting-started.md @@ -164,7 +164,7 @@ import TabItem from '@theme/TabItem'; :::tip -ローカル開発の場合、ngrok などのプロキシ サービスを使用してパブリック URL を作成し、リクエストを開発環境にトンネリングできます。このトンネルの作成方法については、[ngrok のスタート ガイド](https://ngrok.com/docs#getting-started-expose) を参照してください。アプリをホスティングする際には、Slack 開発者がアプリをホストするために使用する最も一般的なホスティング プロバイダーを [API サイト](/distribution/hosting-slack-apps/) に集めました。 +ローカル開発の場合、ngrok などのプロキシ サービスを使用してパブリック URL を作成し、リクエストを開発環境にトンネリングできます。このトンネルの作成方法については、[ngrok のスタート ガイド](https://ngrok.com/docs#getting-started-expose) を参照してください。アプリをホスティングする際には、Slack 開発者がアプリをホストするために使用する最も一般的なホスティング プロバイダーを [API サイト](/app-management/hosting-slack-apps) に集めました。 ::: From af2b73796abf5214bdb6f821c3599b0037b56fd5 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Mon, 4 Aug 2025 14:40:02 -0700 Subject: [PATCH 24/42] reference links --- README.md | 4 ++-- docs/english/building-an-app.md | 4 ++-- docs/english/concepts/acknowledge.md | 2 +- docs/english/concepts/actions.md | 4 ++-- docs/english/concepts/ai-apps.md | 8 ++++---- docs/english/concepts/app-home.md | 2 +- docs/english/concepts/commands.md | 2 +- docs/english/concepts/custom-steps.md | 2 +- docs/english/concepts/event-listening.md | 2 +- docs/english/concepts/global-middleware.md | 2 +- docs/english/concepts/listener-middleware.md | 2 +- docs/english/concepts/message-listening.md | 2 +- docs/english/concepts/message-sending.md | 2 +- docs/english/concepts/opening-modals.md | 2 +- docs/english/concepts/select-menu-options.md | 4 ++-- docs/english/concepts/shortcuts.md | 2 +- docs/english/concepts/updating-pushing-views.md | 2 +- docs/english/concepts/view-submissions.md | 2 +- docs/english/concepts/web-api.md | 4 ++-- docs/english/legacy/steps-from-apps.md | 10 +++++----- .../custom-steps-for-jira/custom-steps-for-jira.md | 2 +- .../custom-steps-workflow-builder-new.md | 2 +- docs/japanese/concepts/acknowledge.md | 2 +- docs/japanese/concepts/actions.md | 4 ++-- docs/japanese/concepts/app-home.md | 2 +- docs/japanese/concepts/assistant.md | 4 ++-- docs/japanese/concepts/commands.md | 4 ++-- docs/japanese/concepts/custom-steps.md | 2 +- docs/japanese/concepts/event-listening.md | 2 +- docs/japanese/concepts/global-middleware.md | 2 +- docs/japanese/concepts/listener-middleware.md | 2 +- docs/japanese/concepts/message-listening.md | 2 +- docs/japanese/concepts/message-sending.md | 2 +- docs/japanese/concepts/opening-modals.md | 2 +- docs/japanese/concepts/select-menu-options.md | 4 ++-- docs/japanese/concepts/shortcuts.md | 2 +- docs/japanese/concepts/updating-pushing-views.md | 2 +- docs/japanese/concepts/view-submissions.md | 2 +- docs/japanese/concepts/web-api.md | 4 ++-- docs/japanese/current.json | 2 +- docs/japanese/getting-started.md | 5 ++--- docs/japanese/legacy/steps-from-apps.md | 10 +++++----- examples/getting_started/app.py | 2 +- scripts/generate_api_docs.sh | 6 +++--- 44 files changed, 68 insertions(+), 69 deletions(-) diff --git a/README.md b/README.md index 7576597d5..55dc0ef2f 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Documentation

-A Python framework to build Slack apps in a flash with the latest platform features. Read the [getting started guide](https://tools.slack.dev/bolt-python/getting-started) and look at our [code examples](https://github.com/slackapi/bolt-python/tree/main/examples) to learn how to build apps using Bolt. The Python module documents are available [here](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/). +A Python framework to build Slack apps in a flash with the latest platform features. Read the [getting started guide](https://tools.slack.dev/bolt-python/getting-started) and look at our [code examples](https://github.com/slackapi/bolt-python/tree/main/examples) to learn how to build apps using Bolt. The Python module documents are available [here](https://tools.slack.dev/bolt-python/reference/). ## Setup @@ -192,7 +192,7 @@ Apps can be run the same way as the syncronous example above. If you'd prefer an ## Getting Help -[The documentation](https://tools.slack.dev/bolt-python) has more information on basic and advanced concepts for Bolt for Python. Also, all the Python module documents of this library are available [here](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/). +[The documentation](https://tools.slack.dev/bolt-python) has more information on basic and advanced concepts for Bolt for Python. Also, all the Python module documents of this library are available [here](https://tools.slack.dev/bolt-python/reference/). If you otherwise get stuck, we're here to help. The following are the best ways to get assistance working through your issue: diff --git a/docs/english/building-an-app.md b/docs/english/building-an-app.md index 54cb58348..b1b60332d 100644 --- a/docs/english/building-an-app.md +++ b/docs/english/building-an-app.md @@ -208,7 +208,7 @@ app = App(token=os.environ.get("SLACK_BOT_TOKEN")) # Listens to incoming messages that contain "hello" # To learn available listener arguments, -# visit https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html +# visit https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html @app.message("hello") def message_hello(message, say): # say() sends a message to the channel where the event was triggered @@ -234,7 +234,7 @@ app = App( # Listens to incoming messages that contain "hello" # To learn available listener arguments, -# visit https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html +# visit https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html @app.message("hello") def message_hello(message, say): # say() sends a message to the channel where the event was triggered diff --git a/docs/english/concepts/acknowledge.md b/docs/english/concepts/acknowledge.md index 3d0a12024..19030da55 100644 --- a/docs/english/concepts/acknowledge.md +++ b/docs/english/concepts/acknowledge.md @@ -14,7 +14,7 @@ We recommend calling `ack()` right away before initiating any time-consuming pro ::: -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Example of responding to an external_select options request @app.options("menu_selection") diff --git a/docs/english/concepts/actions.md b/docs/english/concepts/actions.md index 168839706..df1eab633 100644 --- a/docs/english/concepts/actions.md +++ b/docs/english/concepts/actions.md @@ -12,7 +12,7 @@ Actions can be filtered on an `action_id` parameter of type `str` or `re.Pattern You'll notice in all `action()` examples, `ack()` is used. It is required to call the `ack()` function within an action listener to acknowledge that the request was received from Slack. This is discussed in the [acknowledging requests guide](/bolt-python/concepts/acknowledge). -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Your listener will be called every time a block element with the action_id "approve_button" is triggered @@ -49,7 +49,7 @@ There are two main ways to respond to actions. The first (and most common) way i The second way to respond to actions is using `respond()`, which is a utility to use the `response_url` associated with the action. -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Your listener will be called every time an interactive component with the action_id “approve_button” is triggered diff --git a/docs/english/concepts/ai-apps.md b/docs/english/concepts/ai-apps.md index c6c5c7773..c6481872d 100644 --- a/docs/english/concepts/ai-apps.md +++ b/docs/english/concepts/ai-apps.md @@ -105,7 +105,7 @@ While the `assistant_thread_started` and `assistant_thread_context_changed` even If you do provide your own `threadContextStore` property, it must feature `get` and `save` methods. -:::tip[Refer to the [module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments.] +:::tip[Refer to the [module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments.] ::: ## Handling a new thread {#handling-a-new-thread} @@ -264,9 +264,9 @@ When the user messages your app, the [`message.im`](/reference/events/message.im Messages sent to the app do not contain a [subtype](/reference/events/message#subtypes) and must be deduced based on their shape and any provided [message metadata](/messaging/message-metadata/). There are three utilities that are particularly useful in curating the user experience: -* [`say`](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/#slack_bolt.Say) -* [`setTitle`](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/#slack_bolt.SetTitle) -* [`setStatus`](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/#slack_bolt.SetStatus) +* [`say`](https://docs.slack.dev/bolt-python/reference/#slack_bolt.Say) +* [`setTitle`](https://docs.slack.dev/bolt-python/reference/#slack_bolt.SetTitle) +* [`setStatus`](https://docs.slack.dev/bolt-python/reference/#slack_bolt.SetStatus) ```python ... diff --git a/docs/english/concepts/app-home.md b/docs/english/concepts/app-home.md index 83758ea08..cdec93a67 100644 --- a/docs/english/concepts/app-home.md +++ b/docs/english/concepts/app-home.md @@ -8,7 +8,7 @@ slug: /bolt-python/concepts/app-home You can subscribe to the [`app_home_opened`](/reference/events/app_home_opened) event to listen for when users open your App Home. -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python @app.event("app_home_opened") def update_home_tab(client, event, logger): diff --git a/docs/english/concepts/commands.md b/docs/english/concepts/commands.md index 6a49bd997..211c42916 100644 --- a/docs/english/concepts/commands.md +++ b/docs/english/concepts/commands.md @@ -12,7 +12,7 @@ There are two ways to respond to slash commands. The first way is to use `say()` When setting up commands within your app configuration, you'll append `/slack/events` to your request URL. -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # The echo command simply echoes on command @app.command("/echo") diff --git a/docs/english/concepts/custom-steps.md b/docs/english/concepts/custom-steps.md index 68965fee7..6de8a7e36 100644 --- a/docs/english/concepts/custom-steps.md +++ b/docs/english/concepts/custom-steps.md @@ -12,7 +12,7 @@ Your app can use the `function()` method to listen to incoming [custom step requ You can reference your custom step's inputs using the `inputs` listener argument of type `dict`. -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn about the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn about the available listener arguments. ```python # This sample custom step formats an input and outputs it diff --git a/docs/english/concepts/event-listening.md b/docs/english/concepts/event-listening.md index 562873e4c..fd32fd8b8 100644 --- a/docs/english/concepts/event-listening.md +++ b/docs/english/concepts/event-listening.md @@ -8,7 +8,7 @@ You can listen to [any Events API event](/reference/events) using the `event()` The `event()` method requires an `eventType` of type `str`. -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # When a user joins the workspace, send a message in a predefined channel asking them to introduce themselves @app.event("team_join") diff --git a/docs/english/concepts/global-middleware.md b/docs/english/concepts/global-middleware.md index 71cb0a683..e6fda335f 100644 --- a/docs/english/concepts/global-middleware.md +++ b/docs/english/concepts/global-middleware.md @@ -8,7 +8,7 @@ Global middleware is run for all incoming requests, before any listener middlewa Both global and listener middleware must call `next()` to pass control of the execution chain to the next middleware. -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python @app.use def auth_acme(client, context, logger, payload, next): diff --git a/docs/english/concepts/listener-middleware.md b/docs/english/concepts/listener-middleware.md index 9733820be..0b934a088 100644 --- a/docs/english/concepts/listener-middleware.md +++ b/docs/english/concepts/listener-middleware.md @@ -8,7 +8,7 @@ Listener middleware is only run for the listener in which it's passed. You can p If your listener middleware is a quite simple one, you can use a listener matcher, which returns `bool` value (`True` for proceeding) instead of requiring `next()` method call. -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Listener middleware which filters out messages from a bot diff --git a/docs/english/concepts/message-listening.md b/docs/english/concepts/message-listening.md index 6711066e0..5c671644d 100644 --- a/docs/english/concepts/message-listening.md +++ b/docs/english/concepts/message-listening.md @@ -8,7 +8,7 @@ To listen to messages that [your app has access to receive](/messaging/retrievin `message()` accepts an argument of type `str` or `re.Pattern` object that filters out any messages that don't match the pattern. -:::info[Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments.] +:::info[Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments.] ::: diff --git a/docs/english/concepts/message-sending.md b/docs/english/concepts/message-sending.md index 05acbd75d..6fe46f79f 100644 --- a/docs/english/concepts/message-sending.md +++ b/docs/english/concepts/message-sending.md @@ -8,7 +8,7 @@ Within your listener function, `say()` is available whenever there is an associa In the case that you'd like to send a message outside of a listener or you want to do something more advanced (like handle specific errors), you can call `client.chat_postMessage` [using the client attached to your Bolt instance](/bolt-python/concepts/web-api). -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Listens for messages containing "knock knock" and responds with an italicized "who's there?" @app.message("knock knock") diff --git a/docs/english/concepts/opening-modals.md b/docs/english/concepts/opening-modals.md index c0b8a837f..4acad497e 100644 --- a/docs/english/concepts/opening-modals.md +++ b/docs/english/concepts/opening-modals.md @@ -10,7 +10,7 @@ Your app receives `trigger_id` parameters in payloads sent to your Request URL t Read more about modal composition in the [API documentation](/surfaces/modals#composing_views). -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Listen for a shortcut invocation diff --git a/docs/english/concepts/select-menu-options.md b/docs/english/concepts/select-menu-options.md index f4a4c75ce..8b4362d5d 100644 --- a/docs/english/concepts/select-menu-options.md +++ b/docs/english/concepts/select-menu-options.md @@ -11,9 +11,9 @@ While it's recommended to use `action_id` for `external_select` menus, dialogs d To respond to options requests, you'll need to call `ack()` with a valid `options` or `option_groups` list. Both [external select response examples](/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select) and [dialog response examples](/reference/block-kit/block-elements/multi-select-menu-element#conversation_multi_select) can be found on our API site. -Additionally, you may want to apply filtering logic to the returned options based on user input. This can be accomplished by using the `payload` argument to your options listener and checking for the contents of the `value` property within it. Based on the `value` you can return different options. All listeners and middleware handlers in Bolt for Python have access to [many useful arguments](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) - be sure to check them out! +Additionally, you may want to apply filtering logic to the returned options based on user input. This can be accomplished by using the `payload` argument to your options listener and checking for the contents of the `value` property within it. Based on the `value` you can return different options. All listeners and middleware handlers in Bolt for Python have access to [many useful arguments](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) - be sure to check them out! -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Example of responding to an external_select options request @app.options("external_action") diff --git a/docs/english/concepts/shortcuts.md b/docs/english/concepts/shortcuts.md index 9e83b1d0c..fb65c9b42 100644 --- a/docs/english/concepts/shortcuts.md +++ b/docs/english/concepts/shortcuts.md @@ -16,7 +16,7 @@ When setting up shortcuts within your app configuration, as with other URLs, you ⚠️ Note that global shortcuts do **not** include a channel ID. If your app needs access to a channel ID, you may use a [`conversations_select`](/reference/block-kit/block-elements/multi-select-menu-element#conversation_multi_select) element within a modal. Message shortcuts do include a channel ID. -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # The open_modal shortcut listens to a shortcut with the callback_id "open_modal" @app.shortcut("open_modal") diff --git a/docs/english/concepts/updating-pushing-views.md b/docs/english/concepts/updating-pushing-views.md index 9f087ad6a..1a0f0cf78 100644 --- a/docs/english/concepts/updating-pushing-views.md +++ b/docs/english/concepts/updating-pushing-views.md @@ -16,7 +16,7 @@ To push a new view onto the view stack, you can use the built-in client to call Learn more about updating and pushing views in our [API documentation](/surfaces/modals) -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Listen for a button invocation with action_id `button_abc` (assume it's inside of a modal) @app.action("button_abc") diff --git a/docs/english/concepts/view-submissions.md b/docs/english/concepts/view-submissions.md index d8d2aed39..b8903c870 100644 --- a/docs/english/concepts/view-submissions.md +++ b/docs/english/concepts/view-submissions.md @@ -62,7 +62,7 @@ def handle_view_closed(ack, body, logger): logger.info(body) ``` -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Handle a view_submission request @app.view("view_1") diff --git a/docs/english/concepts/web-api.md b/docs/english/concepts/web-api.md index 82dbc0453..e43e5b08a 100644 --- a/docs/english/concepts/web-api.md +++ b/docs/english/concepts/web-api.md @@ -4,11 +4,11 @@ lang: en slug: /bolt-python/concepts/web-api --- -You can call [any Web API method](/reference/methods) using the [`WebClient`](/python-slack-sdk/web) provided to your Bolt app as either `app.client` or `client` in middleware/listener arguments (given that your app has the appropriate scopes). When you call one the client's methods, it returns a `SlackResponse` which contains the response from Slack. +You can call [any Web API method](/reference/methods) using the `WebClient` provided to your Bolt app as either `app.client` or `client` in middleware/listener arguments (given that your app has the appropriate scopes). When you call one the client's methods, it returns a `SlackResponse` which contains the response from Slack. The token used to initialize Bolt can be found in the `context` object, which is required to call most Web API methods. -:::info[Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn the available listener arguments.] +:::info[Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments.] ::: diff --git a/docs/english/legacy/steps-from-apps.md b/docs/english/legacy/steps-from-apps.md index 0e042ebbc..88d15178e 100644 --- a/docs/english/legacy/steps-from-apps.md +++ b/docs/english/legacy/steps-from-apps.md @@ -34,9 +34,9 @@ The configuration object contains three keys: `edit`, `save`, and `execute`. Eac After instantiating a `WorkflowStep`, you can pass it into `app.step()`. Behind the scenes, your app will listen and respond to the step’s events using the callbacks provided in the configuration object. -Alternatively, steps from apps can also be created using the `WorkflowStepBuilder` class alongside a decorator pattern. For more information, including an example of this approach, [refer to the documentation](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/step.html#slack_bolt.workflows.step.step.WorkflowStepBuilder). +Alternatively, steps from apps can also be created using the `WorkflowStepBuilder` class alongside a decorator pattern. For more information, including an example of this approach, [refer to the documentation](https://docs.slack.dev/bolt-python/reference/workflows/step/step.html#slack_bolt.workflows.step.step.WorkflowStepBuilder). -Refer to the module documents ([common](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/utilities/index.html)) to learn the available arguments. +Refer to the module documents ([common](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/reference/workflows/step/utilities/index.html)) to learn the available arguments. ```python import os @@ -80,7 +80,7 @@ Within the `edit` callback, the `configure()` utility can be used to easily open To learn more about opening configuration modals, [read the documentation](/legacy/legacy-steps-from-apps/). -Refer to the module documents ([common](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/utilities/index.html)) to learn the available arguments. +Refer to the module documents ([common](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/reference/workflows/step/utilities/index.html)) to learn the available arguments. ```python def edit(ack, step, configure): @@ -132,7 +132,7 @@ Within the `save` callback, the `update()` method can be used to save the builde To learn more about how to structure these parameters, [read the documentation](/legacy/legacy-steps-from-apps/). -Refer to the module documents ([common](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/utilities/index.html)) to learn the available arguments. +Refer to the module documents ([common](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/reference/workflows/step/utilities/index.html)) to learn the available arguments. ```python def save(ack, view, update): @@ -177,7 +177,7 @@ Using the `inputs` from the `save` callback, this is where you can make third-pa Within the `execute` callback, your app must either call `complete()` to indicate that the step's execution was successful, or `fail()` to indicate that the step's execution failed. -Refer to the module documents ([common](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/utilities/index.html)) to learn the available arguments. +Refer to the module documents ([common](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/reference/workflows/step/utilities/index.html)) to learn the available arguments. ```python def execute(step, complete, fail): diff --git a/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md b/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md index 412bb828c..db88d1f2e 100644 --- a/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md +++ b/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md @@ -169,4 +169,4 @@ Congratulations! You've successfully customized your workspace with custom steps * To learn more about Bolt for Python, refer to the [getting started](/bolt-python/getting-started) documentation. * For more details about creating workflow steps using the Bolt SDK, refer to the [workflow steps for Bolt](/workflows/workflow-steps) guide. -* For information about custom steps dynamic options, refer to [custom steps dynamic options in Workflow Builder](/workflows/creating-custom-steps-dynamic-options). +* For information about custom steps dynamic options, refer to [custom steps dynamic options in Workflow Builder](/custom-steps-dynamic-options). diff --git a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md index f77e18aba..cae7dfc96 100644 --- a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md +++ b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md @@ -353,6 +353,6 @@ Slack will send an action event payload to your app when the button is clicked o That's it — we hope you learned a lot! -In this tutorial, we added custom steps via the manifest, but if you'd like to see how to add custom steps in the [app settings](https://api.slack.com/apps) to an existing app, follow along with the [Create a custom step for Workflow Builder: existing Bolt app](/bolt-python/tutorials/custom-steps-workflow-builder-existing) tutorial. +In this tutorial, we added custom steps via the manifest, but if you'd like to see how to add custom steps in the [app settings](https://api.slack.com/apps) to an existing app, follow along with the [Create a custom step for Workflow Builder: existing Bolt app](/bolt-python/tutorial/custom-steps-workflow-builder-existing) tutorial. If you're interested in exploring how to create custom steps to use in Workflow Builder as steps with our Deno Slack SDK, too, that tutorial can be found [here](/deno-slack-sdk/tutorials/workflow-builder-custom-step/). diff --git a/docs/japanese/concepts/acknowledge.md b/docs/japanese/concepts/acknowledge.md index 39f860e12..e1c42b0ea 100644 --- a/docs/japanese/concepts/acknowledge.md +++ b/docs/japanese/concepts/acknowledge.md @@ -12,7 +12,7 @@ slug: /bolt-python/concepts/acknowledge FaaS / serverless 環境を使う場合、 `ack()` するタイミングが異なります。 これに関する詳細は [Lazy listeners (FaaS)](/bolt-python/concepts/lazy-listeners) を参照してください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 外部データを使用する選択メニューオプションに応答するサンプル @app.options("menu_selection") diff --git a/docs/japanese/concepts/actions.md b/docs/japanese/concepts/actions.md index 6eb32a861..d282270dc 100644 --- a/docs/japanese/concepts/actions.md +++ b/docs/japanese/concepts/actions.md @@ -12,7 +12,7 @@ Bolt アプリは `action` メソッドを用いて、ボタンのクリック `action()` を使ったすべての例で `ack()` が使用されていることに注目してください。アクションのリスナー内では、Slack からのリクエストを受信したことを確認するために、`ack()` 関数を呼び出す必要があります。これについては、[リクエストの確認](/bolt-python/concepts/acknowledge)セクションで説明しています。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 'approve_button' という action_id のブロックエレメントがトリガーされるたびに、このリスナーが呼び出させれる @app.action("approve_button") @@ -49,7 +49,7 @@ def update_message(ack, body, client): 2 つ目は、`respond()` を使用する方法です。これは、アクションに関連づけられた `response_url` を使ったメッセージ送信を行うためのユーティリティです。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 'approve_button' という action_id のインタラクティブコンポーネントがトリガーされると、このリスナーが呼ばれる @app.action("approve_button") diff --git a/docs/japanese/concepts/app-home.md b/docs/japanese/concepts/app-home.md index f7539f377..1d9fd2a06 100644 --- a/docs/japanese/concepts/app-home.md +++ b/docs/japanese/concepts/app-home.md @@ -8,7 +8,7 @@ slug: /bolt-python/concepts/app-home [`app_home_opened`](/reference/events/app_home_opened) イベントをサブスクライブすると、ユーザーが App Home を開く操作をリッスンできます。 -指定可能な引数の一覧は [モジュールドキュメント](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html)を参考にしてください。 +指定可能な引数の一覧は [モジュールドキュメント](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html)を参考にしてください。 ```python @app.event("app_home_opened") diff --git a/docs/japanese/concepts/assistant.md b/docs/japanese/concepts/assistant.md index 018ca4ef5..c10aab297 100644 --- a/docs/japanese/concepts/assistant.md +++ b/docs/japanese/concepts/assistant.md @@ -72,7 +72,7 @@ def respond_in_assistant_thread( app.use(assistant) ``` -リスナーに指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +リスナーに指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ユーザーがチャンネルの横でアシスタントスレッドを開いた場合、そのチャンネルの情報は、そのスレッドの `AssistantThreadContext` データとして保持され、 `get_thread_context` ユーティリティを使ってアクセスすることができます。Bolt がこのユーティリティを提供している理由は、後続のユーザーメッセージ投稿のイベントペイロードに最新のスレッドのコンテキスト情報は含まれないためです。そのため、アプリはコンテキスト情報が変更されたタイミングでそれを何らかの方法で保存し、後続のメッセージイベントのリスナーコードから参照できるようにする必要があります。 @@ -107,7 +107,7 @@ app = App( assistant = Assistant() -# リスナーに指定可能な引数の一覧は https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html を参照してください +# リスナーに指定可能な引数の一覧は https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html を参照してください @assistant.thread_started def start_assistant_thread(say: Say): diff --git a/docs/japanese/concepts/commands.md b/docs/japanese/concepts/commands.md index 0acb858a2..399d5ce5b 100644 --- a/docs/japanese/concepts/commands.md +++ b/docs/japanese/concepts/commands.md @@ -8,11 +8,11 @@ slug: /bolt-python/concepts/commands コマンドリクエストをアプリが受信し確認したことを Slack に通知するため、`ack()` を呼び出す必要があります。 -スラッシュコマンドに応答する方法は 2 つあります。1 つ目は `say()` を使う方法で、文字列または JSON のペイロードを渡すことができます。2 つ目は `respond()` を使う方法です。これは `response_url` がある場合に活躍します。これらの方法は[アクションへの応答](/bolt-python/concepts/action-respond)セクションで詳しく説明しています。 +スラッシュコマンドに応答する方法は 2 つあります。1 つ目は `say()` を使う方法で、文字列または JSON のペイロードを渡すことができます。2 つ目は `respond()` を使う方法です。これは `response_url` がある場合に活躍します。これらの方法は[アクションへの応答](/bolt-python/concepts/actions)セクションで詳しく説明しています。 アプリの設定でコマンドを登録するときは、リクエスト URL の末尾に `/slack/events` をつけます。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # echoコマンドは受け取ったコマンドをそのまま返す @app.command("/echo") diff --git a/docs/japanese/concepts/custom-steps.md b/docs/japanese/concepts/custom-steps.md index afb2504ed..8083da208 100644 --- a/docs/japanese/concepts/custom-steps.md +++ b/docs/japanese/concepts/custom-steps.md @@ -11,7 +11,7 @@ Your app can use the `function()` method to listen to incoming [custom step requ You can reference your custom step's inputs using the `inputs` listener argument of type `dict`. -Refer to [the module document](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html) to learn about the available listener arguments. +Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn about the available listener arguments. ```python # This sample custom step formats an input and outputs it diff --git a/docs/japanese/concepts/event-listening.md b/docs/japanese/concepts/event-listening.md index cd9fd3009..599c837a3 100644 --- a/docs/japanese/concepts/event-listening.md +++ b/docs/japanese/concepts/event-listening.md @@ -8,7 +8,7 @@ slug: /bolt-python/concepts/event-listening `event()` メソッドには `str` 型の `eventType` を指定する必要があります。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # ユーザーがワークスペースに参加した際に、自己紹介を促すメッセージを指定のチャンネルに送信 @app.event("team_join") diff --git a/docs/japanese/concepts/global-middleware.md b/docs/japanese/concepts/global-middleware.md index f78a67f12..56bbaa665 100644 --- a/docs/japanese/concepts/global-middleware.md +++ b/docs/japanese/concepts/global-middleware.md @@ -9,7 +9,7 @@ order: 8 グローバルミドルウェアでもリスナーミドルウェアでも、次のミドルウェアに実行チェーンの制御をリレーするために、`next()` を呼び出す必要があります。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python @app.use diff --git a/docs/japanese/concepts/listener-middleware.md b/docs/japanese/concepts/listener-middleware.md index ad3f43f12..2b50930a1 100644 --- a/docs/japanese/concepts/listener-middleware.md +++ b/docs/japanese/concepts/listener-middleware.md @@ -8,7 +8,7 @@ slug: /bolt-python/concepts/listener-middleware 非常にシンプルなリスナーミドルウェアの場合であれば、`next()` メソッドを呼び出す代わりに `bool` 値(処理を継続したい場合は `True`)を返すだけで済む「リスナーマッチャー」を使うとよいでしょう。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # ボットからのメッセージをフィルタリングするリスナーミドルウェア diff --git a/docs/japanese/concepts/message-listening.md b/docs/japanese/concepts/message-listening.md index 3e89fb753..c6685a74e 100644 --- a/docs/japanese/concepts/message-listening.md +++ b/docs/japanese/concepts/message-listening.md @@ -8,7 +8,7 @@ slug: /bolt-python/concepts/message-listening `message()` の引数には `str` 型または `re.Pattern` オブジェクトを指定できます。この条件のパターンに一致しないメッセージは除外されます。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # '👋' が含まれるすべてのメッセージに一致 @app.message(":wave:") diff --git a/docs/japanese/concepts/message-sending.md b/docs/japanese/concepts/message-sending.md index 1e6cd7d7d..c1ac3a8ca 100644 --- a/docs/japanese/concepts/message-sending.md +++ b/docs/japanese/concepts/message-sending.md @@ -8,7 +8,7 @@ slug: /bolt-python/concepts/message-sending リスナー関数の外でメッセージを送信したい場合や、より高度な処理(特定のエラーの処理など)を実行したい場合は、[Bolt インスタンスにアタッチされたクライアント](/bolt-python/concepts/web-api)の `client.chat_postMessage` を呼び出します。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 'knock knock' が含まれるメッセージをリッスンし、イタリック体で 'Who's there?' と返信 @app.message("knock knock") diff --git a/docs/japanese/concepts/opening-modals.md b/docs/japanese/concepts/opening-modals.md index 0a659be10..72d1d8116 100644 --- a/docs/japanese/concepts/opening-modals.md +++ b/docs/japanese/concepts/opening-modals.md @@ -10,7 +10,7 @@ slug: /bolt-python/concepts/opening-modals モーダルの生成方法についての詳細は、API ドキュメントを参照してください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # ショートカットの呼び出しをリッスン diff --git a/docs/japanese/concepts/select-menu-options.md b/docs/japanese/concepts/select-menu-options.md index c1a5a3b70..2ec7f6f75 100644 --- a/docs/japanese/concepts/select-menu-options.md +++ b/docs/japanese/concepts/select-menu-options.md @@ -12,9 +12,9 @@ slug: /bolt-python/concepts/options オプションのリクエストに応答するときは、有効なオプションを含む `options` または `option_groups` のリストとともに `ack()` を呼び出す必要があります。API サイトにある[外部データを使用する選択メニューに応答するサンプル例](/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select)と、[ダイアログでの応答例](/legacy/legacy-dialogs/#dynamic_select_elements_external)を参考にしてください。 -さらに、ユーザーが入力したキーワードに基づいたオプションを返すようフィルタリングロジックを適用することもできます。 これは `payload` という引数の ` value` の値に基づいて、それぞれのパターンで異なるオプションの一覧を返すように実装することができます。 Bolt for Python のすべてのリスナーやミドルウェアでは、[多くの有用な引数](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html)にアクセスすることができますので、チェックしてみてください。 +さらに、ユーザーが入力したキーワードに基づいたオプションを返すようフィルタリングロジックを適用することもできます。 これは `payload` という引数の ` value` の値に基づいて、それぞれのパターンで異なるオプションの一覧を返すように実装することができます。 Bolt for Python のすべてのリスナーやミドルウェアでは、[多くの有用な引数](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html)にアクセスすることができますので、チェックしてみてください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 外部データを使用する選択メニューオプションに応答するサンプル例 @app.options("external_action") diff --git a/docs/japanese/concepts/shortcuts.md b/docs/japanese/concepts/shortcuts.md index 04008f0b3..a26cb8d8f 100644 --- a/docs/japanese/concepts/shortcuts.md +++ b/docs/japanese/concepts/shortcuts.md @@ -16,7 +16,7 @@ slug: /bolt-python/concepts/shortcuts ⚠️ グローバルショートカットのペイロードにはチャンネル ID が **含まれません**。アプリでチャンネル ID を取得する必要がある場合は、モーダル内に [`conversations_select`](/reference/block-kit/block-elements/multi-select-menu-element#conversation_multi_select) エレメントを配置します。メッセージショートカットにはチャンネル ID が含まれます。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 'open_modal' という callback_id のショートカットをリッスン @app.shortcut("open_modal") diff --git a/docs/japanese/concepts/updating-pushing-views.md b/docs/japanese/concepts/updating-pushing-views.md index 095c12ba4..f089a5b8d 100644 --- a/docs/japanese/concepts/updating-pushing-views.md +++ b/docs/japanese/concepts/updating-pushing-views.md @@ -16,7 +16,7 @@ slug: /bolt-python/concepts/updating-pushing-views モーダルの更新と多重表示に関する詳細は、API ドキュメントを参照してください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # モーダルに含まれる、`button_abc` という action_id のボタンの呼び出しをリッスン diff --git a/docs/japanese/concepts/view-submissions.md b/docs/japanese/concepts/view-submissions.md index b44d24718..e4a9f696e 100644 --- a/docs/japanese/concepts/view-submissions.md +++ b/docs/japanese/concepts/view-submissions.md @@ -60,7 +60,7 @@ def handle_view_closed(ack, body, logger): logger.info(body) ``` -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # view_submission リクエストを処理 diff --git a/docs/japanese/concepts/web-api.md b/docs/japanese/concepts/web-api.md index 336604053..e747afd81 100644 --- a/docs/japanese/concepts/web-api.md +++ b/docs/japanese/concepts/web-api.md @@ -4,11 +4,11 @@ lang: ja-jp slug: /bolt-python/concepts/web-api --- -`app.client`、またはミドルウェア・リスナーの引数 `client` として Bolt アプリに提供されている [`WebClient`](/python-slack-sdk/basic_usage.html) は必要な権限を付与されており、これを利用することで[あらゆる Web API メソッド](/reference/methods)を呼び出すことができます。このクライアントのメソッドを呼び出すと `SlackResponse` という Slack からの応答情報を含むオブジェクトが返されます。 +`app.client`、またはミドルウェア・リスナーの引数 `client` として Bolt アプリに提供されている `WebClient` は必要な権限を付与されており、これを利用することで[あらゆる Web API メソッド](/reference/methods)を呼び出すことができます。このクライアントのメソッドを呼び出すと `SlackResponse` という Slack からの応答情報を含むオブジェクトが返されます。 Bolt の初期化に使用するトークンは `context` オブジェクトに設定されます。このトークンは、多くの Web API メソッドを呼び出す際に必要となります。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python @app.message("wake me up") def say_hello(client, message): diff --git a/docs/japanese/current.json b/docs/japanese/current.json index 9b9787805..5bdc36d33 100644 --- a/docs/japanese/current.json +++ b/docs/japanese/current.json @@ -65,7 +65,7 @@ }, "sidebar.sidebarBoltPy.link.Reference": { "message": "リファレンス", - "description": "The label for link Reference in sidebar sidebarBoltPy, linking to https://docs.slack.dev/bolt-python/api-docs/slack_bolt/" + "description": "The label for link Reference in sidebar sidebarBoltPy, linking to https://docs.slack.dev/bolt-python/reference/" }, "sidebar.sidebarBoltPy.link.Release notes": { "message": "リリースノート", diff --git a/docs/japanese/getting-started.md b/docs/japanese/getting-started.md index 5040691e7..c0102d384 100644 --- a/docs/japanese/getting-started.md +++ b/docs/japanese/getting-started.md @@ -1,6 +1,5 @@ --- title: Bolt 入門ガイド -slug: getting-started lang: ja-jp --- @@ -199,7 +198,7 @@ app = App(token=os.environ.get("SLACK_BOT_TOKEN")) # 'こんにちは' を含むメッセージをリッスンします # 指定可能なリスナーのメソッド引数の一覧は以下のモジュールドキュメントを参考にしてください: -# https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html +# https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html @app.message("こんにちは") def message_hello(message, say): # イベントがトリガーされたチャンネルへ say() でメッセージを送信します @@ -225,7 +224,7 @@ app = App( # 'hello' を含むメッセージをリッスンします # 指定可能なリスナーのメソッド引数の一覧は以下のモジュールドキュメントを参考にしてください: -# https://docs.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html +# https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html @app.message("hello") def message_hello(message, say): # イベントがトリガーされたチャンネルへ say() でメッセージを送信します diff --git a/docs/japanese/legacy/steps-from-apps.md b/docs/japanese/legacy/steps-from-apps.md index 95162d26f..cdbfc2f15 100644 --- a/docs/japanese/legacy/steps-from-apps.md +++ b/docs/japanese/legacy/steps-from-apps.md @@ -26,9 +26,9 @@ slug: /bolt-python/legacy/steps-from-apps `WorkflowStep` のインスタンスを作成したら、それを`app.step()` メソッドに渡します。これによって、アプリがワークフローステップのイベントをリッスンし、設定オブジェクトで指定されたコールバックを使ってそれに応答できるようになります。 -また、デコレーターとして利用できる `WorkflowStepBuilder` クラスを使ってワークフローステップを定義することもできます。 詳細は、[こちらのドキュメント](https://docs.slack.dev/bolt-python/api-docs/slack_bolt/workflows/step/step.html#slack_bolt.workflows.step.step.WorkflowStepBuilder)のコード例などを参考にしてください。 +また、デコレーターとして利用できる `WorkflowStepBuilder` クラスを使ってワークフローステップを定義することもできます。 詳細は、[こちらのドキュメント](https://docs.slack.dev/bolt-python/reference/workflows/step/step.html#slack_bolt.workflows.step.step.WorkflowStepBuilder)のコード例などを参考にしてください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 ```python import os @@ -71,7 +71,7 @@ app.step(ws) 設定モーダルの開き方に関する詳細は、[こちらのドキュメント](/legacy/legacy-steps-from-apps/legacy-steps-from-apps-configuration-view-object)を参照してください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 ```python def edit(ack, step, configure): @@ -123,7 +123,7 @@ app.step(ws) これらのパラメータの構成方法に関する詳細は、[こちらのドキュメント](/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step-object)を参照してください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 ```python def save(ack, view, update): @@ -168,7 +168,7 @@ app.step(ws) `execute` コールバック内では、`complete()` を呼び出してステップの実行が成功したことを示すか、`fail()` を呼び出してステップの実行が失敗したことを示す必要があります。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 ```python def execute(step, complete, fail): inputs = step["inputs"] diff --git a/examples/getting_started/app.py b/examples/getting_started/app.py index 22cdf5f31..4b8b5c3df 100644 --- a/examples/getting_started/app.py +++ b/examples/getting_started/app.py @@ -10,7 +10,7 @@ # Listens to incoming messages that contain "hello" # To learn available listener method arguments, -# visit https://slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html +# visit https://slack.dev/bolt-python/reference/kwargs_injection/args.html @app.message("hello") def message_hello(message, say): # say() sends a message to the channel where the event was triggered diff --git a/scripts/generate_api_docs.sh b/scripts/generate_api_docs.sh index 5362849f9..459476122 100755 --- a/scripts/generate_api_docs.sh +++ b/scripts/generate_api_docs.sh @@ -5,6 +5,6 @@ script_dir=`dirname $0` cd ${script_dir}/.. pip install -U pdoc3 -rm -rf docs/api-docs -pdoc slack_bolt --html -o docs/api-docs -open docs/api-docs/slack_bolt/index.html +rm -rf docs/reference +pdoc reference --html -o docs +open docs/reference/index.html From b812ec73b6a87364f41f52acb05eda662e3cf9e8 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Tue, 5 Aug 2025 12:01:14 -0700 Subject: [PATCH 25/42] japanese sidebar --- docs/japanese/_sidebar.json | 83 +++++++ docs/japanese/concepts/acknowledge.md | 2 +- docs/japanese/concepts/actions.md | 2 +- docs/japanese/concepts/adapters.md | 2 +- docs/japanese/concepts/app-home.md | 2 +- docs/japanese/concepts/assistant.md | 2 +- docs/japanese/concepts/async.md | 2 +- .../japanese/concepts/authenticating-oauth.md | 2 +- docs/japanese/concepts/authorization.md | 2 +- docs/japanese/concepts/commands.md | 2 +- docs/japanese/concepts/context.md | 2 +- docs/japanese/concepts/custom-adapters.md | 2 +- docs/japanese/concepts/custom-steps.md | 153 ------------- docs/japanese/concepts/errors.md | 2 +- docs/japanese/concepts/event-listening.md | 2 +- docs/japanese/concepts/global-middleware.md | 2 +- docs/japanese/concepts/lazy-listeners.md | 2 +- docs/japanese/concepts/listener-middleware.md | 2 +- docs/japanese/concepts/logging.md | 2 +- docs/japanese/concepts/message-listening.md | 2 +- docs/japanese/concepts/message-sending.md | 2 +- docs/japanese/concepts/opening-modals.md | 2 +- docs/japanese/concepts/select-menu-options.md | 2 +- docs/japanese/concepts/shortcuts.md | 2 +- docs/japanese/concepts/socket-mode.md | 2 +- docs/japanese/concepts/token-rotation.md | 2 +- .../concepts/updating-pushing-views.md | 2 +- docs/japanese/concepts/view-submissions.md | 2 +- docs/japanese/concepts/web-api.md | 2 +- docs/japanese/current.json | 206 +++++++++++------- docs/japanese/legacy/steps-from-apps.md | 1 - 31 files changed, 238 insertions(+), 259 deletions(-) create mode 100644 docs/japanese/_sidebar.json delete mode 100644 docs/japanese/concepts/custom-steps.md diff --git a/docs/japanese/_sidebar.json b/docs/japanese/_sidebar.json new file mode 100644 index 000000000..0149402d8 --- /dev/null +++ b/docs/japanese/_sidebar.json @@ -0,0 +1,83 @@ +[ + { + "type": "doc", + "id": "ja-jp/bolt-python/index", + "label": "Bolt for Python", + "className": "sidebar-title" + }, + "ja-jp/bolt-python/getting-started", + { "type": "html", "value": "
" }, + { + "type": "category", + "label": "Slack API calls", + "items": [ + "ja-jp/bolt-python/concepts/message-sending", + "ja-jp/bolt-python/concepts/web-api" + ] + }, + { + "type": "category", + "label": "Events", + "items": [ + "ja-jp/bolt-python/concepts/message-listening", + "ja-jp/bolt-python/concepts/event-listening" + ] + }, + { + "type": "category", + "label": "App UI & Interactivity", + "items": [ + "ja-jp/bolt-python/concepts/acknowledge", + "ja-jp/bolt-python/concepts/shortcuts", + "ja-jp/bolt-python/concepts/commands", + "ja-jp/bolt-python/concepts/actions", + "ja-jp/bolt-python/concepts/opening-modals", + "ja-jp/bolt-python/concepts/updating-pushing-views", + "ja-jp/bolt-python/concepts/view-submissions", + "ja-jp/bolt-python/concepts/select-menu-options", + "ja-jp/bolt-python/concepts/app-home" + ] + }, + { + "type": "category", + "label": "App Configuration", + "items": [ + "ja-jp/bolt-python/concepts/socket-mode", + "ja-jp/bolt-python/concepts/errors", + "ja-jp/bolt-python/concepts/logging", + "ja-jp/bolt-python/concepts/async" + ] + }, + { + "type": "category", + "label": "Middleware & Context", + "items": [ + "ja-jp/bolt-python/concepts/global-middleware", + "ja-jp/bolt-python/concepts/listener-middleware", + "ja-jp/bolt-python/concepts/context" + ] + }, + "ja-jp/bolt-python/concepts/lazy-listeners", + { + "type": "category", + "label": "Adaptors", + "items": [ + "ja-jp/bolt-python/concepts/adapters", + "ja-jp/bolt-python/concepts/custom-adapters" + ] + }, + { + "type": "category", + "label": "Authorization & Security", + "items": [ + "ja-jp/bolt-python/concepts/authenticating-oauth", + "ja-jp/bolt-python/concepts/authorization", + "ja-jp/bolt-python/concepts/token-rotation" + ] + }, + { + "type": "category", + "label": "Legacy", + "items": ["ja-jp/bolt-python/legacy/steps-from-apps"] + } +] diff --git a/docs/japanese/concepts/acknowledge.md b/docs/japanese/concepts/acknowledge.md index e1c42b0ea..6f7656733 100644 --- a/docs/japanese/concepts/acknowledge.md +++ b/docs/japanese/concepts/acknowledge.md @@ -1,7 +1,7 @@ --- title: リクエストの確認 lang: ja-jp -slug: /bolt-python/concepts/acknowledge +slug: /ja-jp/bolt-python/concepts/acknowledge --- アクション(action)、コマンド(command)、ショートカット(shortcut)、オプション(options)、およびモーダルからのデータ送信(view_submission)の各リクエストは、**必ず** `ack()` 関数を使って確認を行う必要があります。これによってリクエストが受信されたことが Slack に認識され、Slack のユーザーインターフェイスが適切に更新されます。 diff --git a/docs/japanese/concepts/actions.md b/docs/japanese/concepts/actions.md index d282270dc..e6de571f4 100644 --- a/docs/japanese/concepts/actions.md +++ b/docs/japanese/concepts/actions.md @@ -1,7 +1,7 @@ --- title: アクション lang: ja-jp -slug: /bolt-python/concepts/actions +slug: /ja-jp/bolt-python/concepts/actions --- ## アクションのリスニング diff --git a/docs/japanese/concepts/adapters.md b/docs/japanese/concepts/adapters.md index c344ac888..c62996a84 100644 --- a/docs/japanese/concepts/adapters.md +++ b/docs/japanese/concepts/adapters.md @@ -1,7 +1,7 @@ --- title: アダプター lang: ja-jp -slug: /bolt-python/concepts/adapters +slug: /ja-jp/bolt-python/concepts/adapters --- アダプターは Slack から届く受信リクエストの受付とパーズを担当し、それらのリクエストを `BoltRequest` の形式に変換して Bolt アプリに引き渡します。 diff --git a/docs/japanese/concepts/app-home.md b/docs/japanese/concepts/app-home.md index 1d9fd2a06..e7b9ce6d2 100644 --- a/docs/japanese/concepts/app-home.md +++ b/docs/japanese/concepts/app-home.md @@ -1,7 +1,7 @@ --- title: ホームタブの更新 lang: ja-jp -slug: /bolt-python/concepts/app-home +slug: /ja-jp/bolt-python/concepts/app-home --- [ホームタブ](/surfaces/app-home)は、サイドバーや検索画面からアクセス可能なサーフェスエリアです。アプリはこのエリアを使ってユーザーごとのビューを表示することができます。アプリ設定ページで App Home の機能を有効にすると、[`views.publish`](/reference/methods/views.publish) API メソッドの呼び出しで `user_id` と[ビューのペイロード](/reference/interaction-payloads/view-interactions-payload/#view_submission)を指定して、ホームタブを公開・更新することができるようになります。 diff --git a/docs/japanese/concepts/assistant.md b/docs/japanese/concepts/assistant.md index c10aab297..72ac9ae09 100644 --- a/docs/japanese/concepts/assistant.md +++ b/docs/japanese/concepts/assistant.md @@ -1,7 +1,7 @@ --- title: エージェント・アシスタント lang: en -slug: /bolt-python/concepts/assistant +slug: /ja-jp/bolt-python/concepts/assistant --- このページは、Bolt を使ってエージェント・アシスタントを実装するための方法を紹介します。この機能に関する一般的な情報については、[こちらのドキュメントページ(英語)](/ai/)を参照してください。 diff --git a/docs/japanese/concepts/async.md b/docs/japanese/concepts/async.md index b3b4a0f9c..f6cfcbebf 100644 --- a/docs/japanese/concepts/async.md +++ b/docs/japanese/concepts/async.md @@ -1,7 +1,7 @@ --- title: Async(asyncio)の使用 lang: ja-jp -slug: /bolt-python/concepts/async +slug: /ja-jp/bolt-python/concepts/async --- 非同期バージョンの Bolt を使用する場合は、`App` の代わりに `AsyncApp` インスタンスをインポートして初期化します。`AsyncApp` では AIOHTTP を使って API リクエストを行うため、`aiohttp` をインストールする必要があります(`requirements.txt` に追記するか、`pip install aiohttp` を実行します)。 diff --git a/docs/japanese/concepts/authenticating-oauth.md b/docs/japanese/concepts/authenticating-oauth.md index 76f226d2e..2875e3613 100644 --- a/docs/japanese/concepts/authenticating-oauth.md +++ b/docs/japanese/concepts/authenticating-oauth.md @@ -1,7 +1,7 @@ --- title: OAuth を使った認証 lang: ja-jp -slug: /bolt-python/concepts/authenticating-oauth +slug: /ja-jp/bolt-python/concepts/authenticating-oauth --- Slack アプリを複数のワークスペースにインストールできるようにするためには、OAuth フローを実装した上で、アクセストークンなどのインストールに関する情報をセキュアな方法で保存する必要があります。アプリを初期化する際に `client_id`、`client_secret`、`scopes`、`installation_store`、`state_store` を指定することで、OAuth のエンドポイントのルート情報や stateパラメーターの検証をBolt for Python にハンドリングさせることができます。カスタムのアダプターを実装する場合は、SDK が提供する組み込みの[OAuth ライブラリ](/python-slack-sdk/oauth/)を利用するのが便利です。これは Slack が開発したモジュールで、Bolt for Python 内部でも利用しています。 diff --git a/docs/japanese/concepts/authorization.md b/docs/japanese/concepts/authorization.md index 91407f6ef..7c368cf9b 100644 --- a/docs/japanese/concepts/authorization.md +++ b/docs/japanese/concepts/authorization.md @@ -1,7 +1,7 @@ --- title: 認可(Authorization) lang: ja-jp -slug: /bolt-python/concepts/authorization +slug: /ja-jp/bolt-python/concepts/authorization --- 認可(Authorization)は、Slack からの受信リクエストを処理するにあたって、どのようなSlack diff --git a/docs/japanese/concepts/commands.md b/docs/japanese/concepts/commands.md index 399d5ce5b..5f8848037 100644 --- a/docs/japanese/concepts/commands.md +++ b/docs/japanese/concepts/commands.md @@ -1,7 +1,7 @@ --- title: コマンドのリスニングと応答 lang: ja-jp -slug: /bolt-python/concepts/commands +slug: /ja-jp/bolt-python/concepts/commands --- スラッシュコマンドが実行されたリクエストをリッスンするには、`command()` メソッドを使用します。このメソッドでは `str` 型の `command_name` の指定が必要です。 diff --git a/docs/japanese/concepts/context.md b/docs/japanese/concepts/context.md index 66f82a9d2..47d29d2cd 100644 --- a/docs/japanese/concepts/context.md +++ b/docs/japanese/concepts/context.md @@ -1,7 +1,7 @@ --- title: コンテキストの追加 lang: ja-jp -slug: /bolt-python/concepts/context +slug: /ja-jp/bolt-python/concepts/context --- すべてのリスナーは `context` ディクショナリにアクセスできます。リスナーはこれを使ってリクエストの付加情報を得ることができます。受信リクエストに含まれる `user_id`、`team_id`、`channel_id`、`enterprise_id` などの情報は、Bolt によって自動的に設定されます。 diff --git a/docs/japanese/concepts/custom-adapters.md b/docs/japanese/concepts/custom-adapters.md index 3c58c9672..dfdd819b0 100644 --- a/docs/japanese/concepts/custom-adapters.md +++ b/docs/japanese/concepts/custom-adapters.md @@ -1,7 +1,7 @@ --- title: カスタムのアダプター lang: ja-jp -slug: /bolt-python/concepts/custom-adapters +slug: /ja-jp/bolt-python/concepts/custom-adapters --- [アダプター](/bolt-python/concepts/adapters)はフレキシブルで、あなたが使用したいフレームワークに合わせた調整も可能です。アダプターでは、次の 2 つの要素が必須となっています。 diff --git a/docs/japanese/concepts/custom-steps.md b/docs/japanese/concepts/custom-steps.md deleted file mode 100644 index 8083da208..000000000 --- a/docs/japanese/concepts/custom-steps.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: Listening and responding to custom steps -lang: ja-jp -slug: /bolt-python/concepts/custom-steps ---- - -Your app can use the `function()` method to listen to incoming [custom step requests](/workflows/workflow-steps). Custom steps are used in Workflow Builder to build workflows. The method requires a step `callback_id` of type `str`. This `callback_id` must also be defined in your [Function](/reference/app-manifest#functions) definition. Custom steps must be finalized using the `complete()` or `fail()` listener arguments to notify Slack that your app has processed the request. - -* `complete()` requires **one** argument: `outputs` of type `dict`. It ends your custom step **successfully** and provides a dictionary containing the outputs of your custom step as per its definition. -* `fail()` requires **one** argument: `error` of type `str`. It ends your custom step **unsuccessfully** and provides a message containing information regarding why your custom step failed. - -You can reference your custom step's inputs using the `inputs` listener argument of type `dict`. - -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn about the available listener arguments. - -```python -# This sample custom step formats an input and outputs it -@app.function("sample_custom_step") -def sample_step_callback(inputs: dict, fail: Fail, complete: Complete): - try: - message = inputs["message"] - complete( - outputs={ - "message": f":wave: You submitted the following message: \n\n>{message}" - } - ) - except Exception as e: - fail(f"Failed to handle a custom step request (error: {e})") - raise e -``` - -
- -Example app manifest definition - - -```json -... -"functions": { - "sample_custom_step": { - "title": "Sample custom step", - "description": "Run a sample custom step", - "input_parameters": { - "message": { - "type": "string", - "title": "Message", - "description": "A message to be formatted by the custom step", - "is_required": true, - } - }, - "output_parameters": { - "message": { - "type": "string", - "title": "Messge", - "description": "A formatted message", - "is_required": true, - } - } - } -} -``` - -
- ---- - -### Listening to custom step interactivity events - -Your app's custom steps may create interactivity points for users, for example: Post a message with a button. - -If such interaction points originate from a custom step execution, the events sent to your app representing the end-user interaction with these points are considered to be _function-scoped interactivity events_. These interactivity events can be handled by your app using the same concepts we covered earlier, such as [Listening to actions](/bolt-python/concepts/actions). - -_function-scoped interactivity events_ will contain data related to the custom step (`function_executed` event) they were spawned from, such as custom step `inputs` and access to `complete()` and `fail()` listener arguments. - -Your app can skip calling `complete()` or `fail()` in the `function()` handler method if the custom step creates an interaction point that requires user interaction before the step can end. However, in the relevant interactivity handler method, your app must invoke `complete()` or `fail()` to notify Slack that the custom step has been processed. - -You’ll notice in all interactivity handler examples, `ack()` is used. It is required to call the `ack()` function within an interactivity listener to acknowledge that the request was received from Slack. This is discussed in the [acknowledging requests section](/bolt-python/concepts/acknowledge). - -```python -# This sample custom step posts a message with a button -@app.function("custom_step_button") -def sample_step_callback(inputs, say, fail): - try: - say( - channel=inputs["user_id"], # sending a DM to this user - text="Click the button to signal the step completion", - blocks=[ - { - "type": "section", - "text": {"type": "mrkdwn", "text": "Click the button to signal step completion"}, - "accessory": { - "type": "button", - "text": {"type": "plain_text", "text": "Complete step"}, - "action_id": "sample_click", - }, - } - ], - ) - except Exception as e: - fail(f"Failed to handle a function request (error: {e})") - -# Your listener will be called every time a block element with the action_id "sample_click" is triggered -@app.action("sample_click") -def handle_sample_click(ack, body, context, client, complete, fail): - ack() - try: - # Since the button no longer works, we should remove it - client.chat_update( - channel=context.channel_id, - ts=body["message"]["ts"], - text="Congrats! You clicked the button", - ) - - # Signal that the custom step completed successfully - complete({"user_id": context.actor_user_id}) - except Exception as e: - fail(f"Failed to handle a function request (error: {e})") -``` - -
- -Example app manifest definition - - -```json -... -"functions": { - "custom_step_button": { - "title": "Custom step with a button", - "description": "Custom step that waits for a button click", - "input_parameters": { - "user_id": { - "type": "slack#/types/user_id", - "title": "User", - "description": "The recipient of a message with a button", - "is_required": true, - } - }, - "output_parameters": { - "user_id": { - "type": "slack#/types/user_id", - "title": "User", - "description": "The user that completed the function", - "is_required": true - } - } - } -} -``` - -
- -Learn more about responding to interactivity, see the [Slack API documentation](/interactivity/). diff --git a/docs/japanese/concepts/errors.md b/docs/japanese/concepts/errors.md index 6a1daa747..94986864a 100644 --- a/docs/japanese/concepts/errors.md +++ b/docs/japanese/concepts/errors.md @@ -1,7 +1,7 @@ --- title: エラーの処理 lang: ja-jp -slug: /bolt-python/concepts/errors +slug: /ja-jp/bolt-python/concepts/errors --- リスナー内でエラーが発生した場合に try/except ブロックを使用して直接エラーを処理することができます。アプリに関連するエラーは、`BoltError` 型です。Slack API の呼び出しに関連するエラーは、`SlackApiError` 型となります。 diff --git a/docs/japanese/concepts/event-listening.md b/docs/japanese/concepts/event-listening.md index 599c837a3..4b90bfbe8 100644 --- a/docs/japanese/concepts/event-listening.md +++ b/docs/japanese/concepts/event-listening.md @@ -1,7 +1,7 @@ --- title: イベントのリスニング lang: ja-jp -slug: /bolt-python/concepts/event-listening +slug: /ja-jp/bolt-python/concepts/event-listening --- `event()` メソッドを使うと、[Events API](/reference/events) の任意のイベントをリッスンできます。リッスンするイベントは、アプリの設定であらかじめサブスクライブしておく必要があります。これを利用することで、アプリがインストールされたワークスペースで何らかのイベント(例:ユーザーがメッセージにリアクションをつけた、ユーザーがチャンネルに参加した)が発生したときに、アプリに何らかのアクションを実行させることができます。 diff --git a/docs/japanese/concepts/global-middleware.md b/docs/japanese/concepts/global-middleware.md index 56bbaa665..7e6d54bb2 100644 --- a/docs/japanese/concepts/global-middleware.md +++ b/docs/japanese/concepts/global-middleware.md @@ -1,7 +1,7 @@ --- title: グローバルミドルウェア lang: ja-jp -slug: /bolt-python/concepts/global-middleware +slug: /ja-jp/bolt-python/concepts/global-middleware order: 8 --- diff --git a/docs/japanese/concepts/lazy-listeners.md b/docs/japanese/concepts/lazy-listeners.md index bc0bb4127..9c353e62a 100644 --- a/docs/japanese/concepts/lazy-listeners.md +++ b/docs/japanese/concepts/lazy-listeners.md @@ -1,7 +1,7 @@ --- title: Lazy リスナー(FaaS) lang: ja-jp -slug: /bolt-python/concepts/lazy-listeners +slug: /ja-jp/bolt-python/concepts/lazy-listeners --- Lazy リスナー関数は、FaaS 環境への Slack アプリのデプロイを容易にする機能です。この機能は Bolt for Python でのみ利用可能で、他の Bolt フレームワークでこの機能に対応することは予定していません。 diff --git a/docs/japanese/concepts/listener-middleware.md b/docs/japanese/concepts/listener-middleware.md index 2b50930a1..9a2b7d03c 100644 --- a/docs/japanese/concepts/listener-middleware.md +++ b/docs/japanese/concepts/listener-middleware.md @@ -1,7 +1,7 @@ --- title: リスナーミドルウェア lang: ja-jp -slug: /bolt-python/concepts/listener-middleware +slug: /ja-jp/bolt-python/concepts/listener-middleware --- リスナーミドルウェアは、それを渡したリスナーでのみ実行されるミドルウェアです。リスナーには、`middleware` パラメーターを使ってミドルウェア関数をいくつでも渡すことができます。このパラメーターには、1 つまたは複数のミドルウェア関数からなるリストを指定します。 diff --git a/docs/japanese/concepts/logging.md b/docs/japanese/concepts/logging.md index 448b77b0a..84db2cb27 100644 --- a/docs/japanese/concepts/logging.md +++ b/docs/japanese/concepts/logging.md @@ -1,7 +1,7 @@ --- title: ロギング lang: ja-jp -slug: /bolt-python/concepts/logging +slug: /ja-jp/bolt-python/concepts/logging --- デフォルトでは、アプリからのログ情報は、既定の出力先に出力されます。`logging` モジュールをインポートすれば、`basicConfig()` の `level` パラメーターでrootのログレベルを変更することができます。指定できるログレベルは、重要度の低い方から `debug`、`info`、`warning`、`error`、および `critical` です。 diff --git a/docs/japanese/concepts/message-listening.md b/docs/japanese/concepts/message-listening.md index c6685a74e..b91e40758 100644 --- a/docs/japanese/concepts/message-listening.md +++ b/docs/japanese/concepts/message-listening.md @@ -1,7 +1,7 @@ --- title: メッセージのリスニング lang: ja-jp -slug: /bolt-python/concepts/message-listening +slug: /ja-jp/bolt-python/concepts/message-listening --- [あなたのアプリがアクセス権限を持つ](/messaging/retrieving-messages)メッセージの投稿イベントをリッスンするには `message()` メソッドを利用します。このメソッドは `type` が `message` ではないイベントを処理対象から除外します。 diff --git a/docs/japanese/concepts/message-sending.md b/docs/japanese/concepts/message-sending.md index c1ac3a8ca..c1c361255 100644 --- a/docs/japanese/concepts/message-sending.md +++ b/docs/japanese/concepts/message-sending.md @@ -1,7 +1,7 @@ --- title: メッセージの送信 lang: ja-jp -slug: /bolt-python/concepts/message-sending +slug: /ja-jp/bolt-python/concepts/message-sending --- リスナー関数内では、関連づけられた会話(例:リスナー実行のトリガーとなったイベントまたはアクションの発生元の会話)がある場合はいつでも `say()` を使用できます。`say()` には文字列または JSON ペイロードを指定できます。文字列の場合、送信できるのはテキストベースの単純なメッセージです。より複雑なメッセージを送信するには JSON ペイロードを指定します。指定したメッセージのペイロードは、関連づけられた会話内のメッセージとして送信されます。 diff --git a/docs/japanese/concepts/opening-modals.md b/docs/japanese/concepts/opening-modals.md index 72d1d8116..f9dc224db 100644 --- a/docs/japanese/concepts/opening-modals.md +++ b/docs/japanese/concepts/opening-modals.md @@ -1,7 +1,7 @@ --- title: モーダルの開始 lang: ja-jp -slug: /bolt-python/concepts/opening-modals +slug: /ja-jp/bolt-python/concepts/opening-modals --- モーダルは、ユーザーからのデータの入力を受け付けたり、動的な情報を表示したりするためのインターフェイスです。組み込みの APIクライアントの `views.open` メソッドに、有効な `trigger_id` とビューのペイロードを指定してモーダルを開始します。 diff --git a/docs/japanese/concepts/select-menu-options.md b/docs/japanese/concepts/select-menu-options.md index 2ec7f6f75..7316a84a8 100644 --- a/docs/japanese/concepts/select-menu-options.md +++ b/docs/japanese/concepts/select-menu-options.md @@ -1,7 +1,7 @@ --- title: オプションのリスニングと応答 lang: ja-jp -slug: /bolt-python/concepts/options +slug: /ja-jp/bolt-python/concepts/options --- `options()` メソッドは、Slack からのオプション(セレクトメニュー内の動的な選択肢)をリクエストするペイロードをリッスンします。 [`action()` と同様に](/bolt-python/concepts/actions)、文字列型の `action_id` または制約付きオブジェクトが必要です。 diff --git a/docs/japanese/concepts/shortcuts.md b/docs/japanese/concepts/shortcuts.md index a26cb8d8f..e1555a62b 100644 --- a/docs/japanese/concepts/shortcuts.md +++ b/docs/japanese/concepts/shortcuts.md @@ -1,7 +1,7 @@ --- title: ショートカットのリスニングと応答 lang: ja-jp -slug: /bolt-python/concepts/shortcuts +slug: /ja-jp/bolt-python/concepts/shortcuts --- `shortcut()` メソッドは、[グローバルショートカット](/interactivity/implementing-shortcuts#global)と[メッセージショートカット](/interactivity/implementing-shortcuts#messages)の 2 つをサポートしています。 diff --git a/docs/japanese/concepts/socket-mode.md b/docs/japanese/concepts/socket-mode.md index 6f92d195d..c20021890 100644 --- a/docs/japanese/concepts/socket-mode.md +++ b/docs/japanese/concepts/socket-mode.md @@ -1,7 +1,7 @@ --- title: ソケットモードの利用 lang: ja-jp -slug: /bolt-python/concepts/socket-mode +slug: /ja-jp/bolt-python/concepts/socket-mode --- [ソケットモード](/apis/events-api/using-socket-mode)は、アプリに WebSocket での接続と、そのコネクション経由でのデータ受信を可能とします。Bolt for Python は、バージョン 1.2.0 からこれに対応しています。 diff --git a/docs/japanese/concepts/token-rotation.md b/docs/japanese/concepts/token-rotation.md index 2d37239d7..b97e7461a 100644 --- a/docs/japanese/concepts/token-rotation.md +++ b/docs/japanese/concepts/token-rotation.md @@ -1,7 +1,7 @@ --- title: トークンのローテーション lang: ja-jp -slug: /bolt-python/concepts/token-rotation +slug: /ja-jp/bolt-python/concepts/token-rotation --- Bolt for Python [v1.7.0](https://github.com/slackapi/bolt-python/releases/tag/v1.7.0) から、アクセストークンのさらなるセキュリティ強化のレイヤーであるトークンローテーションの機能に対応しています。トークンローテーションは [OAuth V2 の RFC](https://datatracker.ietf.org/doc/html/rfc6749#section-10.4) で規定されているものです。 diff --git a/docs/japanese/concepts/updating-pushing-views.md b/docs/japanese/concepts/updating-pushing-views.md index f089a5b8d..a51cba830 100644 --- a/docs/japanese/concepts/updating-pushing-views.md +++ b/docs/japanese/concepts/updating-pushing-views.md @@ -1,7 +1,7 @@ --- title: モーダルの更新と多重表示 lang: ja-jp -slug: /bolt-python/concepts/updating-pushing-views +slug: /ja-jp/bolt-python/concepts/updating-pushing-views --- モーダル内では、複数のモーダルをスタックのように重ねることができます。`views_open` という APIを呼び出すと、親となるとなるモーダルビューが追加されます。この最初の呼び出しの後、`views_update` を呼び出すことでそのビューを更新することができます。また、`views_push` を呼び出すと、親のモーダルの上にさらに新しいモーダルビューを重ねることもできます。 diff --git a/docs/japanese/concepts/view-submissions.md b/docs/japanese/concepts/view-submissions.md index e4a9f696e..809c772eb 100644 --- a/docs/japanese/concepts/view-submissions.md +++ b/docs/japanese/concepts/view-submissions.md @@ -1,7 +1,7 @@ --- title: モーダルの送信のリスニング lang: ja-jp -slug: /bolt-python/concepts/view_submissions +slug: /ja-jp/bolt-python/concepts/view_submissions --- モーダルのペイロードに `input` ブロックを含める場合、その入力値を受け取るために`view_submission` リクエストをリッスンする必要があります。`view_submission` リクエストのリッスンには、組み込みの`view()` メソッドを利用することができます。`view()` の引数には、`str` 型または `re.Pattern` 型の `callback_id` を指定します。 diff --git a/docs/japanese/concepts/web-api.md b/docs/japanese/concepts/web-api.md index e747afd81..7d46b4b93 100644 --- a/docs/japanese/concepts/web-api.md +++ b/docs/japanese/concepts/web-api.md @@ -1,7 +1,7 @@ --- title: Web API の使い方 lang: ja-jp -slug: /bolt-python/concepts/web-api +slug: /ja-jp/bolt-python/concepts/web-api --- `app.client`、またはミドルウェア・リスナーの引数 `client` として Bolt アプリに提供されている `WebClient` は必要な権限を付与されており、これを利用することで[あらゆる Web API メソッド](/reference/methods)を呼び出すことができます。このクライアントのメソッドを呼び出すと `SlackResponse` という Slack からの応答情報を含むオブジェクトが返されます。 diff --git a/docs/japanese/current.json b/docs/japanese/current.json index 5bdc36d33..d207e77a5 100644 --- a/docs/japanese/current.json +++ b/docs/japanese/current.json @@ -1,78 +1,128 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.sidebarBoltPy.category.Basic concepts": { - "message": "基本的な概念", - "description": "The label for category Basic concepts in sidebar sidebarBoltPy" - }, - "sidebar.sidebarBoltPy.category.Advanced concepts": { - "message": "応用コンセプト", - "description": "The label for category Advanced concepts in sidebar sidebarBoltPy" - }, - "sidebar.sidebarBoltPy.category.steps from apps (Deprecated)": { - "message": "ワークフローステップ 非推奨", - "description": "The label for category steps from apps (Deprecated) in sidebar sidebarBoltPy" - }, - "sidebar.sidebarBoltPy.category.Tutorials": { - "message": "チュートリアル", - "description": "The label for category Tutorials in sidebar sidebarBoltPy" - }, - "sidebar.sidebarBoltPy.link.Code on GitHub": { - "message": "Code on GitHub", - "description": "The label for link Code on GitHub in sidebar sidebarBoltPy, linking to https://github.com/SlackAPI/bolt-python" - }, - "sidebar.sidebarBoltPy.link.Contributors Guide": { - "message": "貢献", - "description": "The label for link Contributors Guide in sidebar sidebarBoltPy, linking to https://github.com/SlackAPI/bolt-python/blob/main/.github/contributing.md" - }, - "sidebar.sidebarBoltPy.category.Guides": { - "message": "ガイド", - "description": "The label for category Guides in sidebar sidebarBoltPy" - }, - "sidebar.sidebarBoltPy.category.Slack API calls": { - "message": "Slack API コール", - "description": "The label for category Slack API calls in sidebar sidebarBoltPy" - }, - "sidebar.sidebarBoltPy.category.Events": { - "message": "イベント API", - "description": "The label for category Events in sidebar sidebarBoltPy" - }, - "sidebar.sidebarBoltPy.category.App UI & Interactivity": { - "message": "インタラクティビティ & ショートカット", - "description": "The label for category App UI & Interactivity in sidebar sidebarBoltPy" - }, - "sidebar.sidebarBoltPy.category.App Configuration": { - "message": "App の設定", - "description": "The label for category App Configuration in sidebar sidebarBoltPy" - }, - "sidebar.sidebarBoltPy.category.Middleware & Context": { - "message": "ミドルウェア & コンテキスト", - "description": "The label for category Middleware & Context in sidebar sidebarBoltPy" - }, - "sidebar.sidebarBoltPy.category.Adaptors": { - "message": "アダプター", - "description": "The label for category Adaptors in sidebar sidebarBoltPy" - }, - "sidebar.sidebarBoltPy.category.Authorization & Security": { - "message": "認可 & セキュリティ", - "description": "The label for category Authorization & Security in sidebar sidebarBoltPy" - }, - "sidebar.sidebarBoltPy.category.Legacy": { - "message": "レガシー(非推奨)", - "description": "The label for category Legacy in sidebar sidebarBoltPy" - }, - "sidebar.sidebarBoltPy.link.Reference": { - "message": "リファレンス", - "description": "The label for link Reference in sidebar sidebarBoltPy, linking to https://docs.slack.dev/bolt-python/reference/" - }, - "sidebar.sidebarBoltPy.link.Release notes": { - "message": "リリースノート", - "description": "The label for link Release notes in sidebar sidebarBoltPy, linking to https://github.com/slackapi/bolt-python/releases" - }, - "sidebar.sidebarBoltPy.doc.Bolt for Python": { - "message": "Bolt for Python", - "description": "The label for the doc item Bolt for Python in sidebar sidebarBoltPy, linking to the doc index" - } -} +[ + { + "type": "doc", + "id": "ja-jp/bolt-python/index", + "label": "Bolt for Python", + "className": "sidebar-title" + }, + "ja-jp/bolt-python/getting-started", + { "type": "html", "value": "
" }, + "ja-jp/bolt-python/building-an-app", + { + "type": "category", + "label": "Slack API コール", + "items": [ + "ja-jp/bolt-python/concepts/message-sending", + "ja-jp/bolt-python/concepts/web-api" + ] + }, + { + "type": "category", + "label": "イベント API", + "items": [ + "ja-jp/bolt-python/concepts/message-listening", + "ja-jp/bolt-python/concepts/event-listening" + ] + }, + { + "type": "category", + "label": "インタラクティビティ & ショートカット", + "items": [ + "ja-jp/bolt-python/concepts/acknowledge", + "ja-jp/bolt-python/concepts/shortcuts", + "ja-jp/bolt-python/concepts/commands", + "ja-jp/bolt-python/concepts/actions", + "ja-jp/bolt-python/concepts/opening-modals", + "ja-jp/bolt-python/concepts/updating-pushing-views", + "ja-jp/bolt-python/concepts/view-submissions", + "ja-jp/bolt-python/concepts/select-menu-options", + "ja-jp/bolt-python/concepts/app-home" + ] + }, + "ja-jp/bolt-python/concepts/ai-apps", + { + "type": "category", + "label": "Custom Steps", + "items": [ + "ja-jp/bolt-python/concepts/custom-steps", + "ja-jp/bolt-python/concepts/custom-steps-dynamic-options" + ] + }, + { + "type": "category", + "label": "App の設定", + "items": [ + "ja-jp/bolt-python/concepts/socket-mode", + "ja-jp/bolt-python/concepts/errors", + "ja-jp/bolt-python/concepts/logging", + "ja-jp/bolt-python/concepts/async" + ] + }, + { + "type": "category", + "label": "ミドルウェア & コンテキスト", + "items": [ + "ja-jp/bolt-python/concepts/global-middleware", + "ja-jp/bolt-python/concepts/listener-middleware", + "ja-jp/bolt-python/concepts/context" + ] + }, + "ja-jp/bolt-python/concepts/lazy-listeners", + { + "type": "category", + "label": "アダプター", + "items": [ + "ja-jp/bolt-python/concepts/adapters", + "ja-jp/bolt-python/concepts/custom-adapters" + ] + }, + { + "type": "category", + "label": "認可 & セキュリティ", + "items": [ + "ja-jp/bolt-python/concepts/authenticating-oauth", + "ja-jp/bolt-python/concepts/authorization", + "ja-jp/bolt-python/concepts/token-rotation" + ] + }, + { + "type": "category", + "label": "レガシー(非推奨)", + "items": ["ja-jp/bolt-python/legacy/steps-from-apps"] + }, + { "type": "html", "value": "
" }, + { + "type": "category", + "label": "チュートリアル", + "items": [ + "ja-jp/bolt-python/tutorial/ai-chatbot/ai-chatbot", + "ja-jp/bolt-python/tutorial/custom-steps", + "ja-jp/bolt-python/tutorial/custom-steps-for-jira/custom-steps-for-jira", + "ja-jp/bolt-python/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new", + "ja-jp/bolt-python/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing", + "ja-jp/bolt-python/tutorial/modals/modals" + ] + }, + { "type": "html", "value": "
" }, + { + "type": "link", + "label": "リファレンス", + "href": "https://docs.slack.dev/ja-jp/bolt-python/reference/index.html" + }, + { "type": "html", "value": "
" }, + { + "type": "link", + "label": "リリースノート", + "href": "https://github.com/slackapi/ja-jp/bolt-python/releases" + }, + { + "type": "link", + "label": "Code on GitHub", + "href": "https://github.com/SlackAPI/bolt-python" + }, + { + "type": "link", + "label": "貢献", + "href": "https://github.com/SlackAPI/ja-jp/bolt-python/blob/main/.github/contributing.md" + } +] \ No newline at end of file diff --git a/docs/japanese/legacy/steps-from-apps.md b/docs/japanese/legacy/steps-from-apps.md index cdbfc2f15..3e8f8d722 100644 --- a/docs/japanese/legacy/steps-from-apps.md +++ b/docs/japanese/legacy/steps-from-apps.md @@ -1,7 +1,6 @@ --- title: ワークフローステップの概要 lang: ja-jp -slug: /bolt-python/legacy/steps-from-apps --- (アプリによる)ワークフローステップでは、処理をアプリ側で行うカスタムのワークフローステップを提供することができます。ユーザーは[ワークフロービルダー](/workflows/workflow-builder)を使ってこれらのステップをワークフローに追加できます。 From 51acc896452369f7dd475d21c3d9a7066d0e08fe Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Tue, 5 Aug 2025 12:10:06 -0700 Subject: [PATCH 26/42] condensed japanese docs --- docs/english/_sidebar.json | 1 + docs/japanese/_sidebar.json | 151 ++++++++++++++++++------------------ docs/japanese/current.json | 1 - 3 files changed, 76 insertions(+), 77 deletions(-) diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json index f6ada5acb..a7760a197 100644 --- a/docs/english/_sidebar.json +++ b/docs/english/_sidebar.json @@ -7,6 +7,7 @@ }, "bolt-python/getting-started", { "type": "html", "value": "
" }, + "bolt-python/building-an-app", { "type": "category", "label": "Slack API calls", diff --git a/docs/japanese/_sidebar.json b/docs/japanese/_sidebar.json index 0149402d8..4ef7a3467 100644 --- a/docs/japanese/_sidebar.json +++ b/docs/japanese/_sidebar.json @@ -1,83 +1,82 @@ [ - { - "type": "doc", - "id": "ja-jp/bolt-python/index", - "label": "Bolt for Python", - "className": "sidebar-title" - }, - "ja-jp/bolt-python/getting-started", - { "type": "html", "value": "
" }, - { - "type": "category", - "label": "Slack API calls", - "items": [ - "ja-jp/bolt-python/concepts/message-sending", - "ja-jp/bolt-python/concepts/web-api" - ] - }, { "type": "category", - "label": "Events", - "items": [ - "ja-jp/bolt-python/concepts/message-listening", - "ja-jp/bolt-python/concepts/event-listening" - ] - }, - { - "type": "category", - "label": "App UI & Interactivity", - "items": [ - "ja-jp/bolt-python/concepts/acknowledge", - "ja-jp/bolt-python/concepts/shortcuts", - "ja-jp/bolt-python/concepts/commands", - "ja-jp/bolt-python/concepts/actions", - "ja-jp/bolt-python/concepts/opening-modals", - "ja-jp/bolt-python/concepts/updating-pushing-views", - "ja-jp/bolt-python/concepts/view-submissions", - "ja-jp/bolt-python/concepts/select-menu-options", - "ja-jp/bolt-python/concepts/app-home" - ] - }, - { - "type": "category", - "label": "App Configuration", - "items": [ - "ja-jp/bolt-python/concepts/socket-mode", - "ja-jp/bolt-python/concepts/errors", - "ja-jp/bolt-python/concepts/logging", - "ja-jp/bolt-python/concepts/async" - ] - }, - { - "type": "category", - "label": "Middleware & Context", - "items": [ - "ja-jp/bolt-python/concepts/global-middleware", - "ja-jp/bolt-python/concepts/listener-middleware", - "ja-jp/bolt-python/concepts/context" - ] - }, - "ja-jp/bolt-python/concepts/lazy-listeners", - { - "type": "category", - "label": "Adaptors", - "items": [ - "ja-jp/bolt-python/concepts/adapters", - "ja-jp/bolt-python/concepts/custom-adapters" - ] - }, - { - "type": "category", - "label": "Authorization & Security", + "label": "Bolt for Python", "items": [ - "ja-jp/bolt-python/concepts/authenticating-oauth", - "ja-jp/bolt-python/concepts/authorization", - "ja-jp/bolt-python/concepts/token-rotation" + "ja-jp/bolt-python/getting-started", + { + "type": "category", + "label": "Slack API calls", + "items": [ + "ja-jp/bolt-python/concepts/message-sending", + "ja-jp/bolt-python/concepts/web-api" + ] + }, + { + "type": "category", + "label": "Events", + "items": [ + "ja-jp/bolt-python/concepts/message-listening", + "ja-jp/bolt-python/concepts/event-listening" + ] + }, + { + "type": "category", + "label": "App UI & Interactivity", + "items": [ + "ja-jp/bolt-python/concepts/acknowledge", + "ja-jp/bolt-python/concepts/shortcuts", + "ja-jp/bolt-python/concepts/commands", + "ja-jp/bolt-python/concepts/actions", + "ja-jp/bolt-python/concepts/opening-modals", + "ja-jp/bolt-python/concepts/updating-pushing-views", + "ja-jp/bolt-python/concepts/view-submissions", + "ja-jp/bolt-python/concepts/select-menu-options", + "ja-jp/bolt-python/concepts/app-home" + ] + }, + { + "type": "category", + "label": "App Configuration", + "items": [ + "ja-jp/bolt-python/concepts/socket-mode", + "ja-jp/bolt-python/concepts/errors", + "ja-jp/bolt-python/concepts/logging", + "ja-jp/bolt-python/concepts/async" + ] + }, + { + "type": "category", + "label": "Middleware & Context", + "items": [ + "ja-jp/bolt-python/concepts/global-middleware", + "ja-jp/bolt-python/concepts/listener-middleware", + "ja-jp/bolt-python/concepts/context" + ] + }, + "ja-jp/bolt-python/concepts/lazy-listeners", + { + "type": "category", + "label": "Adaptors", + "items": [ + "ja-jp/bolt-python/concepts/adapters", + "ja-jp/bolt-python/concepts/custom-adapters" + ] + }, + { + "type": "category", + "label": "Authorization & Security", + "items": [ + "ja-jp/bolt-python/concepts/authenticating-oauth", + "ja-jp/bolt-python/concepts/authorization", + "ja-jp/bolt-python/concepts/token-rotation" + ] + }, + { + "type": "category", + "label": "Legacy", + "items": ["ja-jp/bolt-python/legacy/steps-from-apps"] + } ] - }, - { - "type": "category", - "label": "Legacy", - "items": ["ja-jp/bolt-python/legacy/steps-from-apps"] } ] diff --git a/docs/japanese/current.json b/docs/japanese/current.json index d207e77a5..15b68c536 100644 --- a/docs/japanese/current.json +++ b/docs/japanese/current.json @@ -7,7 +7,6 @@ }, "ja-jp/bolt-python/getting-started", { "type": "html", "value": "
" }, - "ja-jp/bolt-python/building-an-app", { "type": "category", "label": "Slack API コール", From 7eb1654a6c8096e3e0e3f074d2dfc04a188197ba Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Tue, 5 Aug 2025 12:13:31 -0700 Subject: [PATCH 27/42] proper sidebar japanese --- docs/japanese/_sidebar.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/japanese/_sidebar.json b/docs/japanese/_sidebar.json index 4ef7a3467..a6779cc52 100644 --- a/docs/japanese/_sidebar.json +++ b/docs/japanese/_sidebar.json @@ -6,7 +6,7 @@ "ja-jp/bolt-python/getting-started", { "type": "category", - "label": "Slack API calls", + "label": "Slack API コール", "items": [ "ja-jp/bolt-python/concepts/message-sending", "ja-jp/bolt-python/concepts/web-api" @@ -14,7 +14,7 @@ }, { "type": "category", - "label": "Events", + "label": "イベント API", "items": [ "ja-jp/bolt-python/concepts/message-listening", "ja-jp/bolt-python/concepts/event-listening" @@ -22,7 +22,7 @@ }, { "type": "category", - "label": "App UI & Interactivity", + "label": "インタラクティビティ & ショートカット", "items": [ "ja-jp/bolt-python/concepts/acknowledge", "ja-jp/bolt-python/concepts/shortcuts", @@ -37,7 +37,7 @@ }, { "type": "category", - "label": "App Configuration", + "label": "App の設定", "items": [ "ja-jp/bolt-python/concepts/socket-mode", "ja-jp/bolt-python/concepts/errors", @@ -47,7 +47,7 @@ }, { "type": "category", - "label": "Middleware & Context", + "label": "ミドルウェア & コンテキスト", "items": [ "ja-jp/bolt-python/concepts/global-middleware", "ja-jp/bolt-python/concepts/listener-middleware", @@ -57,7 +57,7 @@ "ja-jp/bolt-python/concepts/lazy-listeners", { "type": "category", - "label": "Adaptors", + "label": "アダプター", "items": [ "ja-jp/bolt-python/concepts/adapters", "ja-jp/bolt-python/concepts/custom-adapters" @@ -65,7 +65,7 @@ }, { "type": "category", - "label": "Authorization & Security", + "label": "認可 & セキュリティ", "items": [ "ja-jp/bolt-python/concepts/authenticating-oauth", "ja-jp/bolt-python/concepts/authorization", @@ -74,7 +74,7 @@ }, { "type": "category", - "label": "Legacy", + "label": "レガシー(非推奨)", "items": ["ja-jp/bolt-python/legacy/steps-from-apps"] } ] From a20fa90bd97491cb6b023528996ea5dd50211329 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Tue, 5 Aug 2025 13:07:01 -0700 Subject: [PATCH 28/42] consolidated sidebar --- docs/english/_sidebar.json | 80 +++++++++++++++++++++++ docs/japanese/_sidebar.json | 82 ----------------------- docs/japanese/current.json | 127 ------------------------------------ 3 files changed, 80 insertions(+), 209 deletions(-) delete mode 100644 docs/japanese/_sidebar.json delete mode 100644 docs/japanese/current.json diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json index a7760a197..0201c275e 100644 --- a/docs/english/_sidebar.json +++ b/docs/english/_sidebar.json @@ -109,6 +109,86 @@ "label": "Reference", "href": "https://docs.slack.dev/bolt-python/reference/index.html" }, + { + "type": "category", + "label": "日本語 (日本)", + "items": [ + "ja-jp/bolt-python/getting-started", + { + "type": "category", + "label": "Slack API コール", + "items": [ + "ja-jp/bolt-python/concepts/message-sending", + "ja-jp/bolt-python/concepts/web-api" + ] + }, + { + "type": "category", + "label": "イベント API", + "items": [ + "ja-jp/bolt-python/concepts/message-listening", + "ja-jp/bolt-python/concepts/event-listening" + ] + }, + { + "type": "category", + "label": "インタラクティビティ & ショートカット", + "items": [ + "ja-jp/bolt-python/concepts/acknowledge", + "ja-jp/bolt-python/concepts/shortcuts", + "ja-jp/bolt-python/concepts/commands", + "ja-jp/bolt-python/concepts/actions", + "ja-jp/bolt-python/concepts/opening-modals", + "ja-jp/bolt-python/concepts/updating-pushing-views", + "ja-jp/bolt-python/concepts/view-submissions", + "ja-jp/bolt-python/concepts/select-menu-options", + "ja-jp/bolt-python/concepts/app-home" + ] + }, + { + "type": "category", + "label": "App の設定", + "items": [ + "ja-jp/bolt-python/concepts/socket-mode", + "ja-jp/bolt-python/concepts/errors", + "ja-jp/bolt-python/concepts/logging", + "ja-jp/bolt-python/concepts/async" + ] + }, + { + "type": "category", + "label": "ミドルウェア & コンテキスト", + "items": [ + "ja-jp/bolt-python/concepts/global-middleware", + "ja-jp/bolt-python/concepts/listener-middleware", + "ja-jp/bolt-python/concepts/context" + ] + }, + "ja-jp/bolt-python/concepts/lazy-listeners", + { + "type": "category", + "label": "アダプター", + "items": [ + "ja-jp/bolt-python/concepts/adapters", + "ja-jp/bolt-python/concepts/custom-adapters" + ] + }, + { + "type": "category", + "label": "認可 & セキュリティ", + "items": [ + "ja-jp/bolt-python/concepts/authenticating-oauth", + "ja-jp/bolt-python/concepts/authorization", + "ja-jp/bolt-python/concepts/token-rotation" + ] + }, + { + "type": "category", + "label": "レガシー(非推奨)", + "items": ["ja-jp/bolt-python/legacy/steps-from-apps"] + } + ] + }, { "type": "html", "value": "
" }, { "type": "link", diff --git a/docs/japanese/_sidebar.json b/docs/japanese/_sidebar.json deleted file mode 100644 index a6779cc52..000000000 --- a/docs/japanese/_sidebar.json +++ /dev/null @@ -1,82 +0,0 @@ -[ - { - "type": "category", - "label": "Bolt for Python", - "items": [ - "ja-jp/bolt-python/getting-started", - { - "type": "category", - "label": "Slack API コール", - "items": [ - "ja-jp/bolt-python/concepts/message-sending", - "ja-jp/bolt-python/concepts/web-api" - ] - }, - { - "type": "category", - "label": "イベント API", - "items": [ - "ja-jp/bolt-python/concepts/message-listening", - "ja-jp/bolt-python/concepts/event-listening" - ] - }, - { - "type": "category", - "label": "インタラクティビティ & ショートカット", - "items": [ - "ja-jp/bolt-python/concepts/acknowledge", - "ja-jp/bolt-python/concepts/shortcuts", - "ja-jp/bolt-python/concepts/commands", - "ja-jp/bolt-python/concepts/actions", - "ja-jp/bolt-python/concepts/opening-modals", - "ja-jp/bolt-python/concepts/updating-pushing-views", - "ja-jp/bolt-python/concepts/view-submissions", - "ja-jp/bolt-python/concepts/select-menu-options", - "ja-jp/bolt-python/concepts/app-home" - ] - }, - { - "type": "category", - "label": "App の設定", - "items": [ - "ja-jp/bolt-python/concepts/socket-mode", - "ja-jp/bolt-python/concepts/errors", - "ja-jp/bolt-python/concepts/logging", - "ja-jp/bolt-python/concepts/async" - ] - }, - { - "type": "category", - "label": "ミドルウェア & コンテキスト", - "items": [ - "ja-jp/bolt-python/concepts/global-middleware", - "ja-jp/bolt-python/concepts/listener-middleware", - "ja-jp/bolt-python/concepts/context" - ] - }, - "ja-jp/bolt-python/concepts/lazy-listeners", - { - "type": "category", - "label": "アダプター", - "items": [ - "ja-jp/bolt-python/concepts/adapters", - "ja-jp/bolt-python/concepts/custom-adapters" - ] - }, - { - "type": "category", - "label": "認可 & セキュリティ", - "items": [ - "ja-jp/bolt-python/concepts/authenticating-oauth", - "ja-jp/bolt-python/concepts/authorization", - "ja-jp/bolt-python/concepts/token-rotation" - ] - }, - { - "type": "category", - "label": "レガシー(非推奨)", - "items": ["ja-jp/bolt-python/legacy/steps-from-apps"] - } - ] - } -] diff --git a/docs/japanese/current.json b/docs/japanese/current.json deleted file mode 100644 index 15b68c536..000000000 --- a/docs/japanese/current.json +++ /dev/null @@ -1,127 +0,0 @@ -[ - { - "type": "doc", - "id": "ja-jp/bolt-python/index", - "label": "Bolt for Python", - "className": "sidebar-title" - }, - "ja-jp/bolt-python/getting-started", - { "type": "html", "value": "
" }, - { - "type": "category", - "label": "Slack API コール", - "items": [ - "ja-jp/bolt-python/concepts/message-sending", - "ja-jp/bolt-python/concepts/web-api" - ] - }, - { - "type": "category", - "label": "イベント API", - "items": [ - "ja-jp/bolt-python/concepts/message-listening", - "ja-jp/bolt-python/concepts/event-listening" - ] - }, - { - "type": "category", - "label": "インタラクティビティ & ショートカット", - "items": [ - "ja-jp/bolt-python/concepts/acknowledge", - "ja-jp/bolt-python/concepts/shortcuts", - "ja-jp/bolt-python/concepts/commands", - "ja-jp/bolt-python/concepts/actions", - "ja-jp/bolt-python/concepts/opening-modals", - "ja-jp/bolt-python/concepts/updating-pushing-views", - "ja-jp/bolt-python/concepts/view-submissions", - "ja-jp/bolt-python/concepts/select-menu-options", - "ja-jp/bolt-python/concepts/app-home" - ] - }, - "ja-jp/bolt-python/concepts/ai-apps", - { - "type": "category", - "label": "Custom Steps", - "items": [ - "ja-jp/bolt-python/concepts/custom-steps", - "ja-jp/bolt-python/concepts/custom-steps-dynamic-options" - ] - }, - { - "type": "category", - "label": "App の設定", - "items": [ - "ja-jp/bolt-python/concepts/socket-mode", - "ja-jp/bolt-python/concepts/errors", - "ja-jp/bolt-python/concepts/logging", - "ja-jp/bolt-python/concepts/async" - ] - }, - { - "type": "category", - "label": "ミドルウェア & コンテキスト", - "items": [ - "ja-jp/bolt-python/concepts/global-middleware", - "ja-jp/bolt-python/concepts/listener-middleware", - "ja-jp/bolt-python/concepts/context" - ] - }, - "ja-jp/bolt-python/concepts/lazy-listeners", - { - "type": "category", - "label": "アダプター", - "items": [ - "ja-jp/bolt-python/concepts/adapters", - "ja-jp/bolt-python/concepts/custom-adapters" - ] - }, - { - "type": "category", - "label": "認可 & セキュリティ", - "items": [ - "ja-jp/bolt-python/concepts/authenticating-oauth", - "ja-jp/bolt-python/concepts/authorization", - "ja-jp/bolt-python/concepts/token-rotation" - ] - }, - { - "type": "category", - "label": "レガシー(非推奨)", - "items": ["ja-jp/bolt-python/legacy/steps-from-apps"] - }, - { "type": "html", "value": "
" }, - { - "type": "category", - "label": "チュートリアル", - "items": [ - "ja-jp/bolt-python/tutorial/ai-chatbot/ai-chatbot", - "ja-jp/bolt-python/tutorial/custom-steps", - "ja-jp/bolt-python/tutorial/custom-steps-for-jira/custom-steps-for-jira", - "ja-jp/bolt-python/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new", - "ja-jp/bolt-python/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing", - "ja-jp/bolt-python/tutorial/modals/modals" - ] - }, - { "type": "html", "value": "
" }, - { - "type": "link", - "label": "リファレンス", - "href": "https://docs.slack.dev/ja-jp/bolt-python/reference/index.html" - }, - { "type": "html", "value": "
" }, - { - "type": "link", - "label": "リリースノート", - "href": "https://github.com/slackapi/ja-jp/bolt-python/releases" - }, - { - "type": "link", - "label": "Code on GitHub", - "href": "https://github.com/SlackAPI/bolt-python" - }, - { - "type": "link", - "label": "貢献", - "href": "https://github.com/SlackAPI/ja-jp/bolt-python/blob/main/.github/contributing.md" - } -] \ No newline at end of file From 800ca40652019498373898e6346272bffee96db7 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Tue, 5 Aug 2025 13:13:00 -0700 Subject: [PATCH 29/42] proper paths --- docs/english/_sidebar.json | 56 +++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json index 0201c275e..2aff545f5 100644 --- a/docs/english/_sidebar.json +++ b/docs/english/_sidebar.json @@ -113,79 +113,79 @@ "type": "category", "label": "日本語 (日本)", "items": [ - "ja-jp/bolt-python/getting-started", + "bolt-python/ja-jp/getting-started", { "type": "category", "label": "Slack API コール", "items": [ - "ja-jp/bolt-python/concepts/message-sending", - "ja-jp/bolt-python/concepts/web-api" + "bolt-python/ja-jp/concepts/message-sending", + "bolt-python/ja-jp/concepts/web-api" ] }, { "type": "category", "label": "イベント API", "items": [ - "ja-jp/bolt-python/concepts/message-listening", - "ja-jp/bolt-python/concepts/event-listening" + "bolt-python/ja-jp/concepts/message-listening", + "bolt-python/ja-jp/concepts/event-listening" ] }, { "type": "category", "label": "インタラクティビティ & ショートカット", "items": [ - "ja-jp/bolt-python/concepts/acknowledge", - "ja-jp/bolt-python/concepts/shortcuts", - "ja-jp/bolt-python/concepts/commands", - "ja-jp/bolt-python/concepts/actions", - "ja-jp/bolt-python/concepts/opening-modals", - "ja-jp/bolt-python/concepts/updating-pushing-views", - "ja-jp/bolt-python/concepts/view-submissions", - "ja-jp/bolt-python/concepts/select-menu-options", - "ja-jp/bolt-python/concepts/app-home" + "bolt-python/ja-jp/concepts/acknowledge", + "bolt-python/ja-jp/concepts/shortcuts", + "bolt-python/ja-jp/concepts/commands", + "bolt-python/ja-jp/concepts/actions", + "bolt-python/ja-jp/concepts/opening-modals", + "bolt-python/ja-jp/concepts/updating-pushing-views", + "bolt-python/ja-jp/concepts/view-submissions", + "bolt-python/ja-jp/concepts/select-menu-options", + "bolt-python/ja-jp/concepts/app-home" ] }, { "type": "category", "label": "App の設定", "items": [ - "ja-jp/bolt-python/concepts/socket-mode", - "ja-jp/bolt-python/concepts/errors", - "ja-jp/bolt-python/concepts/logging", - "ja-jp/bolt-python/concepts/async" + "bolt-python/ja-jp/concepts/socket-mode", + "bolt-python/ja-jp/concepts/errors", + "bolt-python/ja-jp/concepts/logging", + "bolt-python/ja-jp/concepts/async" ] }, { "type": "category", "label": "ミドルウェア & コンテキスト", "items": [ - "ja-jp/bolt-python/concepts/global-middleware", - "ja-jp/bolt-python/concepts/listener-middleware", - "ja-jp/bolt-python/concepts/context" + "bolt-python/ja-jp/concepts/global-middleware", + "bolt-python/ja-jp/concepts/listener-middleware", + "bolt-python/ja-jp/concepts/context" ] }, - "ja-jp/bolt-python/concepts/lazy-listeners", + "bolt-python/ja-jp/concepts/lazy-listeners", { "type": "category", "label": "アダプター", "items": [ - "ja-jp/bolt-python/concepts/adapters", - "ja-jp/bolt-python/concepts/custom-adapters" + "bolt-python/ja-jp/concepts/adapters", + "bolt-python/ja-jp/concepts/custom-adapters" ] }, { "type": "category", "label": "認可 & セキュリティ", "items": [ - "ja-jp/bolt-python/concepts/authenticating-oauth", - "ja-jp/bolt-python/concepts/authorization", - "ja-jp/bolt-python/concepts/token-rotation" + "bolt-python/ja-jp/concepts/authenticating-oauth", + "bolt-python/ja-jp/concepts/authorization", + "bolt-python/ja-jp/concepts/token-rotation" ] }, { "type": "category", "label": "レガシー(非推奨)", - "items": ["ja-jp/bolt-python/legacy/steps-from-apps"] + "items": ["bolt-python/ja-jp/legacy/steps-from-apps"] } ] }, From 640850b43de57f30c7f5e1158da42cddbbab0aca Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Tue, 5 Aug 2025 13:45:08 -0700 Subject: [PATCH 30/42] hr in sidebar --- docs/english/_sidebar.json | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json index 2aff545f5..0b0e71c50 100644 --- a/docs/english/_sidebar.json +++ b/docs/english/_sidebar.json @@ -109,6 +109,7 @@ "label": "Reference", "href": "https://docs.slack.dev/bolt-python/reference/index.html" }, + { "type": "html", "value": "
" }, { "type": "category", "label": "日本語 (日本)", From c7e0c8fabc2537f266429a86e6b0ed2867a21ab8 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Tue, 5 Aug 2025 13:53:35 -0700 Subject: [PATCH 31/42] japanese front matter --- docs/japanese/concepts/acknowledge.md | 6 +----- docs/japanese/concepts/actions.md | 6 +----- docs/japanese/concepts/adapters.md | 6 +----- docs/japanese/concepts/app-home.md | 6 +----- docs/japanese/concepts/assistant.md | 6 +----- docs/japanese/concepts/async.md | 6 +----- docs/japanese/concepts/authenticating-oauth.md | 6 +----- docs/japanese/concepts/authorization.md | 6 +----- docs/japanese/concepts/commands.md | 6 +----- docs/japanese/concepts/context.md | 6 +----- docs/japanese/concepts/custom-adapters.md | 6 +----- docs/japanese/concepts/errors.md | 6 +----- docs/japanese/concepts/event-listening.md | 6 +----- docs/japanese/concepts/global-middleware.md | 7 +------ docs/japanese/concepts/lazy-listeners.md | 6 +----- docs/japanese/concepts/listener-middleware.md | 6 +----- docs/japanese/concepts/logging.md | 6 +----- docs/japanese/concepts/message-listening.md | 6 +----- docs/japanese/concepts/message-sending.md | 6 +----- docs/japanese/concepts/opening-modals.md | 6 +----- docs/japanese/concepts/select-menu-options.md | 6 +----- docs/japanese/concepts/shortcuts.md | 6 +----- docs/japanese/concepts/socket-mode.md | 6 +----- docs/japanese/concepts/token-rotation.md | 6 +----- docs/japanese/concepts/updating-pushing-views.md | 6 +----- docs/japanese/concepts/view-submissions.md | 6 +----- docs/japanese/concepts/web-api.md | 6 +----- docs/japanese/getting-started.md | 5 ----- docs/japanese/legacy/steps-from-apps.md | 5 +---- 29 files changed, 28 insertions(+), 145 deletions(-) diff --git a/docs/japanese/concepts/acknowledge.md b/docs/japanese/concepts/acknowledge.md index 6f7656733..f12d3ad4f 100644 --- a/docs/japanese/concepts/acknowledge.md +++ b/docs/japanese/concepts/acknowledge.md @@ -1,8 +1,4 @@ ---- -title: リクエストの確認 -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/acknowledge ---- +# リクエストの確認 アクション(action)、コマンド(command)、ショートカット(shortcut)、オプション(options)、およびモーダルからのデータ送信(view_submission)の各リクエストは、**必ず** `ack()` 関数を使って確認を行う必要があります。これによってリクエストが受信されたことが Slack に認識され、Slack のユーザーインターフェイスが適切に更新されます。 diff --git a/docs/japanese/concepts/actions.md b/docs/japanese/concepts/actions.md index e6de571f4..2272f724d 100644 --- a/docs/japanese/concepts/actions.md +++ b/docs/japanese/concepts/actions.md @@ -1,8 +1,4 @@ ---- -title: アクション -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/actions ---- +# アクション ## アクションのリスニング diff --git a/docs/japanese/concepts/adapters.md b/docs/japanese/concepts/adapters.md index c62996a84..a58ed34a2 100644 --- a/docs/japanese/concepts/adapters.md +++ b/docs/japanese/concepts/adapters.md @@ -1,8 +1,4 @@ ---- -title: アダプター -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/adapters ---- +# アダプター アダプターは Slack から届く受信リクエストの受付とパーズを担当し、それらのリクエストを `BoltRequest` の形式に変換して Bolt アプリに引き渡します。 diff --git a/docs/japanese/concepts/app-home.md b/docs/japanese/concepts/app-home.md index e7b9ce6d2..5f4cd92c5 100644 --- a/docs/japanese/concepts/app-home.md +++ b/docs/japanese/concepts/app-home.md @@ -1,8 +1,4 @@ ---- -title: ホームタブの更新 -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/app-home ---- +# ホームタブの更新 [ホームタブ](/surfaces/app-home)は、サイドバーや検索画面からアクセス可能なサーフェスエリアです。アプリはこのエリアを使ってユーザーごとのビューを表示することができます。アプリ設定ページで App Home の機能を有効にすると、[`views.publish`](/reference/methods/views.publish) API メソッドの呼び出しで `user_id` と[ビューのペイロード](/reference/interaction-payloads/view-interactions-payload/#view_submission)を指定して、ホームタブを公開・更新することができるようになります。 diff --git a/docs/japanese/concepts/assistant.md b/docs/japanese/concepts/assistant.md index 72ac9ae09..3773ac664 100644 --- a/docs/japanese/concepts/assistant.md +++ b/docs/japanese/concepts/assistant.md @@ -1,8 +1,4 @@ ---- -title: エージェント・アシスタント -lang: en -slug: /ja-jp/bolt-python/concepts/assistant ---- +# エージェント・アシスタント このページは、Bolt を使ってエージェント・アシスタントを実装するための方法を紹介します。この機能に関する一般的な情報については、[こちらのドキュメントページ(英語)](/ai/)を参照してください。 diff --git a/docs/japanese/concepts/async.md b/docs/japanese/concepts/async.md index f6cfcbebf..cc38886d4 100644 --- a/docs/japanese/concepts/async.md +++ b/docs/japanese/concepts/async.md @@ -1,8 +1,4 @@ ---- -title: Async(asyncio)の使用 -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/async ---- +# Async(asyncio)の使用 非同期バージョンの Bolt を使用する場合は、`App` の代わりに `AsyncApp` インスタンスをインポートして初期化します。`AsyncApp` では AIOHTTP を使って API リクエストを行うため、`aiohttp` をインストールする必要があります(`requirements.txt` に追記するか、`pip install aiohttp` を実行します)。 diff --git a/docs/japanese/concepts/authenticating-oauth.md b/docs/japanese/concepts/authenticating-oauth.md index 2875e3613..a2a116677 100644 --- a/docs/japanese/concepts/authenticating-oauth.md +++ b/docs/japanese/concepts/authenticating-oauth.md @@ -1,8 +1,4 @@ ---- -title: OAuth を使った認証 -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/authenticating-oauth ---- +# OAuth を使った認証 Slack アプリを複数のワークスペースにインストールできるようにするためには、OAuth フローを実装した上で、アクセストークンなどのインストールに関する情報をセキュアな方法で保存する必要があります。アプリを初期化する際に `client_id`、`client_secret`、`scopes`、`installation_store`、`state_store` を指定することで、OAuth のエンドポイントのルート情報や stateパラメーターの検証をBolt for Python にハンドリングさせることができます。カスタムのアダプターを実装する場合は、SDK が提供する組み込みの[OAuth ライブラリ](/python-slack-sdk/oauth/)を利用するのが便利です。これは Slack が開発したモジュールで、Bolt for Python 内部でも利用しています。 diff --git a/docs/japanese/concepts/authorization.md b/docs/japanese/concepts/authorization.md index 7c368cf9b..83230e1a3 100644 --- a/docs/japanese/concepts/authorization.md +++ b/docs/japanese/concepts/authorization.md @@ -1,8 +1,4 @@ ---- -title: 認可(Authorization) -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/authorization ---- +# 認可(Authorization) 認可(Authorization)は、Slack からの受信リクエストを処理するにあたって、どのようなSlack クレデンシャル (ボットトークンなど) を使用可能にするかを決定するプロセスです。 diff --git a/docs/japanese/concepts/commands.md b/docs/japanese/concepts/commands.md index 5f8848037..7ea66d056 100644 --- a/docs/japanese/concepts/commands.md +++ b/docs/japanese/concepts/commands.md @@ -1,8 +1,4 @@ ---- -title: コマンドのリスニングと応答 -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/commands ---- +# コマンドのリスニングと応答 スラッシュコマンドが実行されたリクエストをリッスンするには、`command()` メソッドを使用します。このメソッドでは `str` 型の `command_name` の指定が必要です。 diff --git a/docs/japanese/concepts/context.md b/docs/japanese/concepts/context.md index 47d29d2cd..13a287728 100644 --- a/docs/japanese/concepts/context.md +++ b/docs/japanese/concepts/context.md @@ -1,8 +1,4 @@ ---- -title: コンテキストの追加 -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/context ---- +# コンテキストの追加 すべてのリスナーは `context` ディクショナリにアクセスできます。リスナーはこれを使ってリクエストの付加情報を得ることができます。受信リクエストに含まれる `user_id`、`team_id`、`channel_id`、`enterprise_id` などの情報は、Bolt によって自動的に設定されます。 diff --git a/docs/japanese/concepts/custom-adapters.md b/docs/japanese/concepts/custom-adapters.md index dfdd819b0..337591c51 100644 --- a/docs/japanese/concepts/custom-adapters.md +++ b/docs/japanese/concepts/custom-adapters.md @@ -1,8 +1,4 @@ ---- -title: カスタムのアダプター -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/custom-adapters ---- +# カスタムのアダプター [アダプター](/bolt-python/concepts/adapters)はフレキシブルで、あなたが使用したいフレームワークに合わせた調整も可能です。アダプターでは、次の 2 つの要素が必須となっています。 diff --git a/docs/japanese/concepts/errors.md b/docs/japanese/concepts/errors.md index 94986864a..2e8e27f90 100644 --- a/docs/japanese/concepts/errors.md +++ b/docs/japanese/concepts/errors.md @@ -1,8 +1,4 @@ ---- -title: エラーの処理 -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/errors ---- +# エラーの処理 リスナー内でエラーが発生した場合に try/except ブロックを使用して直接エラーを処理することができます。アプリに関連するエラーは、`BoltError` 型です。Slack API の呼び出しに関連するエラーは、`SlackApiError` 型となります。 diff --git a/docs/japanese/concepts/event-listening.md b/docs/japanese/concepts/event-listening.md index 4b90bfbe8..61b12951c 100644 --- a/docs/japanese/concepts/event-listening.md +++ b/docs/japanese/concepts/event-listening.md @@ -1,8 +1,4 @@ ---- -title: イベントのリスニング -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/event-listening ---- +# イベントのリスニング `event()` メソッドを使うと、[Events API](/reference/events) の任意のイベントをリッスンできます。リッスンするイベントは、アプリの設定であらかじめサブスクライブしておく必要があります。これを利用することで、アプリがインストールされたワークスペースで何らかのイベント(例:ユーザーがメッセージにリアクションをつけた、ユーザーがチャンネルに参加した)が発生したときに、アプリに何らかのアクションを実行させることができます。 diff --git a/docs/japanese/concepts/global-middleware.md b/docs/japanese/concepts/global-middleware.md index 7e6d54bb2..0b188798d 100644 --- a/docs/japanese/concepts/global-middleware.md +++ b/docs/japanese/concepts/global-middleware.md @@ -1,9 +1,4 @@ ---- -title: グローバルミドルウェア -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/global-middleware -order: 8 ---- +# グローバルミドルウェア グローバルミドルウェアは、すべての受信リクエストに対して、リスナーミドルウェアが呼ばれる前に実行されるものです。ミドルウェア関数を `app.use()` に渡すことで、アプリにはグローバルミドルウェアをいくつでも追加できます。ミドルウェア関数で受け取れる引数はリスナー関数と同じものに加えて`next()` 関数があります。 diff --git a/docs/japanese/concepts/lazy-listeners.md b/docs/japanese/concepts/lazy-listeners.md index 9c353e62a..029f61d99 100644 --- a/docs/japanese/concepts/lazy-listeners.md +++ b/docs/japanese/concepts/lazy-listeners.md @@ -1,8 +1,4 @@ ---- -title: Lazy リスナー(FaaS) -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/lazy-listeners ---- +# Lazy リスナー(FaaS Lazy リスナー関数は、FaaS 環境への Slack アプリのデプロイを容易にする機能です。この機能は Bolt for Python でのみ利用可能で、他の Bolt フレームワークでこの機能に対応することは予定していません。 diff --git a/docs/japanese/concepts/listener-middleware.md b/docs/japanese/concepts/listener-middleware.md index 9a2b7d03c..b8fcae7cf 100644 --- a/docs/japanese/concepts/listener-middleware.md +++ b/docs/japanese/concepts/listener-middleware.md @@ -1,8 +1,4 @@ ---- -title: リスナーミドルウェア -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/listener-middleware ---- +# リスナーミドルウェア リスナーミドルウェアは、それを渡したリスナーでのみ実行されるミドルウェアです。リスナーには、`middleware` パラメーターを使ってミドルウェア関数をいくつでも渡すことができます。このパラメーターには、1 つまたは複数のミドルウェア関数からなるリストを指定します。 diff --git a/docs/japanese/concepts/logging.md b/docs/japanese/concepts/logging.md index 84db2cb27..3afa46539 100644 --- a/docs/japanese/concepts/logging.md +++ b/docs/japanese/concepts/logging.md @@ -1,8 +1,4 @@ ---- -title: ロギング -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/logging ---- +# ロギング デフォルトでは、アプリからのログ情報は、既定の出力先に出力されます。`logging` モジュールをインポートすれば、`basicConfig()` の `level` パラメーターでrootのログレベルを変更することができます。指定できるログレベルは、重要度の低い方から `debug`、`info`、`warning`、`error`、および `critical` です。 diff --git a/docs/japanese/concepts/message-listening.md b/docs/japanese/concepts/message-listening.md index b91e40758..95177d04a 100644 --- a/docs/japanese/concepts/message-listening.md +++ b/docs/japanese/concepts/message-listening.md @@ -1,8 +1,4 @@ ---- -title: メッセージのリスニング -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/message-listening ---- +# メッセージのリスニング [あなたのアプリがアクセス権限を持つ](/messaging/retrieving-messages)メッセージの投稿イベントをリッスンするには `message()` メソッドを利用します。このメソッドは `type` が `message` ではないイベントを処理対象から除外します。 diff --git a/docs/japanese/concepts/message-sending.md b/docs/japanese/concepts/message-sending.md index c1c361255..043037e1b 100644 --- a/docs/japanese/concepts/message-sending.md +++ b/docs/japanese/concepts/message-sending.md @@ -1,8 +1,4 @@ ---- -title: メッセージの送信 -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/message-sending ---- +# メッセージの送信 リスナー関数内では、関連づけられた会話(例:リスナー実行のトリガーとなったイベントまたはアクションの発生元の会話)がある場合はいつでも `say()` を使用できます。`say()` には文字列または JSON ペイロードを指定できます。文字列の場合、送信できるのはテキストベースの単純なメッセージです。より複雑なメッセージを送信するには JSON ペイロードを指定します。指定したメッセージのペイロードは、関連づけられた会話内のメッセージとして送信されます。 diff --git a/docs/japanese/concepts/opening-modals.md b/docs/japanese/concepts/opening-modals.md index f9dc224db..632c3ca83 100644 --- a/docs/japanese/concepts/opening-modals.md +++ b/docs/japanese/concepts/opening-modals.md @@ -1,8 +1,4 @@ ---- -title: モーダルの開始 -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/opening-modals ---- +# モーダルの開始 モーダルは、ユーザーからのデータの入力を受け付けたり、動的な情報を表示したりするためのインターフェイスです。組み込みの APIクライアントの `views.open` メソッドに、有効な `trigger_id` とビューのペイロードを指定してモーダルを開始します。 diff --git a/docs/japanese/concepts/select-menu-options.md b/docs/japanese/concepts/select-menu-options.md index 7316a84a8..feeb416d2 100644 --- a/docs/japanese/concepts/select-menu-options.md +++ b/docs/japanese/concepts/select-menu-options.md @@ -1,8 +1,4 @@ ---- -title: オプションのリスニングと応答 -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/options ---- +# オプションのリスニングと応答 `options()` メソッドは、Slack からのオプション(セレクトメニュー内の動的な選択肢)をリクエストするペイロードをリッスンします。 [`action()` と同様に](/bolt-python/concepts/actions)、文字列型の `action_id` または制約付きオブジェクトが必要です。 diff --git a/docs/japanese/concepts/shortcuts.md b/docs/japanese/concepts/shortcuts.md index e1555a62b..58902af45 100644 --- a/docs/japanese/concepts/shortcuts.md +++ b/docs/japanese/concepts/shortcuts.md @@ -1,8 +1,4 @@ ---- -title: ショートカットのリスニングと応答 -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/shortcuts ---- +# ショートカットのリスニングと応答 `shortcut()` メソッドは、[グローバルショートカット](/interactivity/implementing-shortcuts#global)と[メッセージショートカット](/interactivity/implementing-shortcuts#messages)の 2 つをサポートしています。 diff --git a/docs/japanese/concepts/socket-mode.md b/docs/japanese/concepts/socket-mode.md index c20021890..7aebe9d64 100644 --- a/docs/japanese/concepts/socket-mode.md +++ b/docs/japanese/concepts/socket-mode.md @@ -1,8 +1,4 @@ ---- -title: ソケットモードの利用 -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/socket-mode ---- +# ソケットモードの利用 [ソケットモード](/apis/events-api/using-socket-mode)は、アプリに WebSocket での接続と、そのコネクション経由でのデータ受信を可能とします。Bolt for Python は、バージョン 1.2.0 からこれに対応しています。 diff --git a/docs/japanese/concepts/token-rotation.md b/docs/japanese/concepts/token-rotation.md index b97e7461a..b443099da 100644 --- a/docs/japanese/concepts/token-rotation.md +++ b/docs/japanese/concepts/token-rotation.md @@ -1,8 +1,4 @@ ---- -title: トークンのローテーション -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/token-rotation ---- +# トークンのローテーション Bolt for Python [v1.7.0](https://github.com/slackapi/bolt-python/releases/tag/v1.7.0) から、アクセストークンのさらなるセキュリティ強化のレイヤーであるトークンローテーションの機能に対応しています。トークンローテーションは [OAuth V2 の RFC](https://datatracker.ietf.org/doc/html/rfc6749#section-10.4) で規定されているものです。 diff --git a/docs/japanese/concepts/updating-pushing-views.md b/docs/japanese/concepts/updating-pushing-views.md index a51cba830..9233289d7 100644 --- a/docs/japanese/concepts/updating-pushing-views.md +++ b/docs/japanese/concepts/updating-pushing-views.md @@ -1,8 +1,4 @@ ---- -title: モーダルの更新と多重表示 -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/updating-pushing-views ---- +# モーダルの更新と多重表示 モーダル内では、複数のモーダルをスタックのように重ねることができます。`views_open` という APIを呼び出すと、親となるとなるモーダルビューが追加されます。この最初の呼び出しの後、`views_update` を呼び出すことでそのビューを更新することができます。また、`views_push` を呼び出すと、親のモーダルの上にさらに新しいモーダルビューを重ねることもできます。 diff --git a/docs/japanese/concepts/view-submissions.md b/docs/japanese/concepts/view-submissions.md index 809c772eb..7b1db4136 100644 --- a/docs/japanese/concepts/view-submissions.md +++ b/docs/japanese/concepts/view-submissions.md @@ -1,8 +1,4 @@ ---- -title: モーダルの送信のリスニング -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/view_submissions ---- +# モーダルの送信のリスニング モーダルのペイロードに `input` ブロックを含める場合、その入力値を受け取るために`view_submission` リクエストをリッスンする必要があります。`view_submission` リクエストのリッスンには、組み込みの`view()` メソッドを利用することができます。`view()` の引数には、`str` 型または `re.Pattern` 型の `callback_id` を指定します。 diff --git a/docs/japanese/concepts/web-api.md b/docs/japanese/concepts/web-api.md index 7d46b4b93..91870805e 100644 --- a/docs/japanese/concepts/web-api.md +++ b/docs/japanese/concepts/web-api.md @@ -1,8 +1,4 @@ ---- -title: Web API の使い方 -lang: ja-jp -slug: /ja-jp/bolt-python/concepts/web-api ---- +# Web API の使い方 `app.client`、またはミドルウェア・リスナーの引数 `client` として Bolt アプリに提供されている `WebClient` は必要な権限を付与されており、これを利用することで[あらゆる Web API メソッド](/reference/methods)を呼び出すことができます。このクライアントのメソッドを呼び出すと `SlackResponse` という Slack からの応答情報を含むオブジェクトが返されます。 diff --git a/docs/japanese/getting-started.md b/docs/japanese/getting-started.md index c0102d384..f454d7c4b 100644 --- a/docs/japanese/getting-started.md +++ b/docs/japanese/getting-started.md @@ -1,8 +1,3 @@ ---- -title: Bolt 入門ガイド -lang: ja-jp ---- - # Bolt 入門ガイド このガイドでは、Bolt for Python を使った Slack アプリの設定と起動の方法について説明します。ここで説明する手順では、まず新しい Slack アプリを作成し、ローカルの開発環境をセットアップし、Slack ワークスペースからのメッセージをリッスンして応答するアプリを開発するという流れになります。 diff --git a/docs/japanese/legacy/steps-from-apps.md b/docs/japanese/legacy/steps-from-apps.md index 3e8f8d722..0d69d46aa 100644 --- a/docs/japanese/legacy/steps-from-apps.md +++ b/docs/japanese/legacy/steps-from-apps.md @@ -1,7 +1,4 @@ ---- -title: ワークフローステップの概要 -lang: ja-jp ---- +# ワークフローステップの概要 (アプリによる)ワークフローステップでは、処理をアプリ側で行うカスタムのワークフローステップを提供することができます。ユーザーは[ワークフロービルダー](/workflows/workflow-builder)を使ってこれらのステップをワークフローに追加できます。 From 7fbc1ea3bdc5476488e3cd9bf71b552000c88894 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 6 Aug 2025 09:52:27 -0700 Subject: [PATCH 32/42] tools --- docs/english/_sidebar.json | 142 +++++++++--------- docs/english/building-an-app.md | 4 +- docs/english/concepts/acknowledge.md | 4 +- docs/english/concepts/actions.md | 2 +- docs/english/concepts/ai-apps.md | 2 +- docs/english/concepts/authenticating-oauth.md | 2 +- docs/english/concepts/authorization.md | 2 +- docs/english/concepts/commands.md | 2 +- docs/english/concepts/custom-adapters.md | 2 +- docs/english/concepts/custom-steps.md | 4 +- docs/english/concepts/message-sending.md | 2 +- docs/english/concepts/select-menu-options.md | 2 +- docs/english/concepts/shortcuts.md | 2 +- docs/english/concepts/socket-mode.md | 2 +- docs/english/concepts/token-rotation.md | 2 +- .../concepts/updating-pushing-views.md | 2 +- docs/english/getting-started.md | 12 +- docs/english/index.md | 2 +- .../english/tutorial/ai-chatbot/ai-chatbot.md | 2 +- .../custom-steps-for-jira.md | 2 +- .../custom-steps-workflow-builder-existing.md | 4 +- .../custom-steps-workflow-builder-new.md | 6 +- docs/english/tutorial/custom-steps.md | 4 +- docs/japanese/concepts/acknowledge.md | 4 +- docs/japanese/concepts/actions.md | 2 +- .../japanese/concepts/authenticating-oauth.md | 2 +- docs/japanese/concepts/authorization.md | 2 +- docs/japanese/concepts/commands.md | 2 +- docs/japanese/concepts/custom-adapters.md | 2 +- docs/japanese/concepts/message-sending.md | 2 +- docs/japanese/concepts/select-menu-options.md | 2 +- docs/japanese/concepts/shortcuts.md | 2 +- docs/japanese/concepts/socket-mode.md | 2 +- docs/japanese/concepts/token-rotation.md | 2 +- docs/japanese/getting-started.md | 4 +- 35 files changed, 119 insertions(+), 119 deletions(-) diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json index 0b0e71c50..106ca08a8 100644 --- a/docs/english/_sidebar.json +++ b/docs/english/_sidebar.json @@ -1,192 +1,192 @@ [ { "type": "doc", - "id": "bolt-python/index", + "id": "tools/bolt-python/index", "label": "Bolt for Python", "className": "sidebar-title" }, - "bolt-python/getting-started", + "tools/bolt-python/getting-started", { "type": "html", "value": "
" }, - "bolt-python/building-an-app", + "tools/bolt-python/building-an-app", { "type": "category", "label": "Slack API calls", "items": [ - "bolt-python/concepts/message-sending", - "bolt-python/concepts/web-api" + "tools/bolt-python/concepts/message-sending", + "tools/bolt-python/concepts/web-api" ] }, { "type": "category", "label": "Events", "items": [ - "bolt-python/concepts/message-listening", - "bolt-python/concepts/event-listening" + "tools/bolt-python/concepts/message-listening", + "tools/bolt-python/concepts/event-listening" ] }, { "type": "category", "label": "App UI & Interactivity", "items": [ - "bolt-python/concepts/acknowledge", - "bolt-python/concepts/shortcuts", - "bolt-python/concepts/commands", - "bolt-python/concepts/actions", - "bolt-python/concepts/opening-modals", - "bolt-python/concepts/updating-pushing-views", - "bolt-python/concepts/view-submissions", - "bolt-python/concepts/select-menu-options", - "bolt-python/concepts/app-home" + "tools/bolt-python/concepts/acknowledge", + "tools/bolt-python/concepts/shortcuts", + "tools/bolt-python/concepts/commands", + "tools/bolt-python/concepts/actions", + "tools/bolt-python/concepts/opening-modals", + "tools/bolt-python/concepts/updating-pushing-views", + "tools/bolt-python/concepts/view-submissions", + "tools/bolt-python/concepts/select-menu-options", + "tools/bolt-python/concepts/app-home" ] }, - "bolt-python/concepts/ai-apps", + "tools/bolt-python/concepts/ai-apps", { "type": "category", "label": "Custom Steps", "items": [ - "bolt-python/concepts/custom-steps", - "bolt-python/concepts/custom-steps-dynamic-options" + "tools/bolt-python/concepts/custom-steps", + "tools/bolt-python/concepts/custom-steps-dynamic-options" ] }, { "type": "category", "label": "App Configuration", "items": [ - "bolt-python/concepts/socket-mode", - "bolt-python/concepts/errors", - "bolt-python/concepts/logging", - "bolt-python/concepts/async" + "tools/bolt-python/concepts/socket-mode", + "tools/bolt-python/concepts/errors", + "tools/bolt-python/concepts/logging", + "tools/bolt-python/concepts/async" ] }, { "type": "category", "label": "Middleware & Context", "items": [ - "bolt-python/concepts/global-middleware", - "bolt-python/concepts/listener-middleware", - "bolt-python/concepts/context" + "tools/bolt-python/concepts/global-middleware", + "tools/bolt-python/concepts/listener-middleware", + "tools/bolt-python/concepts/context" ] }, - "bolt-python/concepts/lazy-listeners", + "tools/bolt-python/concepts/lazy-listeners", { "type": "category", "label": "Adaptors", "items": [ - "bolt-python/concepts/adapters", - "bolt-python/concepts/custom-adapters" + "tools/bolt-python/concepts/adapters", + "tools/bolt-python/concepts/custom-adapters" ] }, { "type": "category", "label": "Authorization & Security", "items": [ - "bolt-python/concepts/authenticating-oauth", - "bolt-python/concepts/authorization", - "bolt-python/concepts/token-rotation" + "tools/bolt-python/concepts/authenticating-oauth", + "tools/bolt-python/concepts/authorization", + "tools/bolt-python/concepts/token-rotation" ] }, { "type": "category", "label": "Legacy", - "items": ["bolt-python/legacy/steps-from-apps"] + "items": ["tools/bolt-python/legacy/steps-from-apps"] }, { "type": "html", "value": "
" }, { "type": "category", "label": "Tutorials", "items": [ - "bolt-python/tutorial/ai-chatbot/ai-chatbot", - "bolt-python/tutorial/custom-steps", - "bolt-python/tutorial/custom-steps-for-jira/custom-steps-for-jira", - "bolt-python/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new", - "bolt-python/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing", - "bolt-python/tutorial/modals/modals" + "tools/bolt-python/tutorial/ai-chatbot/ai-chatbot", + "tools/bolt-python/tutorial/custom-steps", + "tools/bolt-python/tutorial/custom-steps-for-jira/custom-steps-for-jira", + "tools/bolt-python/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new", + "tools/bolt-python/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing", + "tools/bolt-python/tutorial/modals/modals" ] }, { "type": "html", "value": "
" }, { "type": "link", "label": "Reference", - "href": "https://docs.slack.dev/bolt-python/reference/index.html" + "href": "https://docs.slack.dev/tools/bolt-python/reference/index.html" }, { "type": "html", "value": "
" }, { "type": "category", "label": "日本語 (日本)", "items": [ - "bolt-python/ja-jp/getting-started", + "tools/bolt-python/ja-jp/getting-started", { "type": "category", "label": "Slack API コール", "items": [ - "bolt-python/ja-jp/concepts/message-sending", - "bolt-python/ja-jp/concepts/web-api" + "tools/bolt-python/ja-jp/concepts/message-sending", + "tools/bolt-python/ja-jp/concepts/web-api" ] }, { "type": "category", "label": "イベント API", "items": [ - "bolt-python/ja-jp/concepts/message-listening", - "bolt-python/ja-jp/concepts/event-listening" + "tools/bolt-python/ja-jp/concepts/message-listening", + "tools/bolt-python/ja-jp/concepts/event-listening" ] }, { "type": "category", "label": "インタラクティビティ & ショートカット", "items": [ - "bolt-python/ja-jp/concepts/acknowledge", - "bolt-python/ja-jp/concepts/shortcuts", - "bolt-python/ja-jp/concepts/commands", - "bolt-python/ja-jp/concepts/actions", - "bolt-python/ja-jp/concepts/opening-modals", - "bolt-python/ja-jp/concepts/updating-pushing-views", - "bolt-python/ja-jp/concepts/view-submissions", - "bolt-python/ja-jp/concepts/select-menu-options", - "bolt-python/ja-jp/concepts/app-home" + "tools/bolt-python/ja-jp/concepts/acknowledge", + "tools/bolt-python/ja-jp/concepts/shortcuts", + "tools/bolt-python/ja-jp/concepts/commands", + "tools/bolt-python/ja-jp/concepts/actions", + "tools/bolt-python/ja-jp/concepts/opening-modals", + "tools/bolt-python/ja-jp/concepts/updating-pushing-views", + "tools/bolt-python/ja-jp/concepts/view-submissions", + "tools/bolt-python/ja-jp/concepts/select-menu-options", + "tools/bolt-python/ja-jp/concepts/app-home" ] }, { "type": "category", "label": "App の設定", "items": [ - "bolt-python/ja-jp/concepts/socket-mode", - "bolt-python/ja-jp/concepts/errors", - "bolt-python/ja-jp/concepts/logging", - "bolt-python/ja-jp/concepts/async" + "tools/bolt-python/ja-jp/concepts/socket-mode", + "tools/bolt-python/ja-jp/concepts/errors", + "tools/bolt-python/ja-jp/concepts/logging", + "tools/bolt-python/ja-jp/concepts/async" ] }, { "type": "category", "label": "ミドルウェア & コンテキスト", "items": [ - "bolt-python/ja-jp/concepts/global-middleware", - "bolt-python/ja-jp/concepts/listener-middleware", - "bolt-python/ja-jp/concepts/context" + "tools/bolt-python/ja-jp/concepts/global-middleware", + "tools/bolt-python/ja-jp/concepts/listener-middleware", + "tools/bolt-python/ja-jp/concepts/context" ] }, - "bolt-python/ja-jp/concepts/lazy-listeners", + "tools/bolt-python/ja-jp/concepts/lazy-listeners", { "type": "category", "label": "アダプター", "items": [ - "bolt-python/ja-jp/concepts/adapters", - "bolt-python/ja-jp/concepts/custom-adapters" + "tools/bolt-python/ja-jp/concepts/adapters", + "tools/bolt-python/ja-jp/concepts/custom-adapters" ] }, { "type": "category", "label": "認可 & セキュリティ", "items": [ - "bolt-python/ja-jp/concepts/authenticating-oauth", - "bolt-python/ja-jp/concepts/authorization", - "bolt-python/ja-jp/concepts/token-rotation" + "tools/bolt-python/ja-jp/concepts/authenticating-oauth", + "tools/bolt-python/ja-jp/concepts/authorization", + "tools/bolt-python/ja-jp/concepts/token-rotation" ] }, { "type": "category", "label": "レガシー(非推奨)", - "items": ["bolt-python/ja-jp/legacy/steps-from-apps"] + "items": ["tools/bolt-python/ja-jp/legacy/steps-from-apps"] } ] }, @@ -194,16 +194,16 @@ { "type": "link", "label": "Release notes", - "href": "https://github.com/slackapi/bolt-python/releases" + "href": "https://github.com/slackapi/tools/bolt-python/releases" }, { "type": "link", "label": "Code on GitHub", - "href": "https://github.com/SlackAPI/bolt-python" + "href": "https://github.com/SlackAPI/tools/bolt-python" }, { "type": "link", "label": "Contributors Guide", - "href": "https://github.com/SlackAPI/bolt-python/blob/main/.github/contributing.md" + "href": "https://github.com/SlackAPI/tools/bolt-python/blob/main/.github/contributing.md" } ] diff --git a/docs/english/building-an-app.md b/docs/english/building-an-app.md index b1b60332d..217db8710 100644 --- a/docs/english/building-an-app.md +++ b/docs/english/building-an-app.md @@ -476,8 +476,8 @@ Now that you have a basic app up and running, you can start exploring how to mak * Read through the concepts pages to learn about the different methods and features your Bolt app has access to. -* Explore the different events your bot can listen to with the [`app.event()`](/bolt-python/concepts/event-listening) method. All of the events are listed [on the API docs site](/reference/events). +* Explore the different events your bot can listen to with the [`app.event()`](/tools/bolt-python/concepts/event-listening) method. All of the events are listed [on the API docs site](/reference/events). -* Bolt allows you to [call Web API methods](/bolt-python/concepts/web-api) with the client attached to your app. There are [over 200 methods](/reference/methods) on our API site. +* Bolt allows you to [call Web API methods](/tools/bolt-python/concepts/web-api) with the client attached to your app. There are [over 200 methods](/reference/methods) on our API site. * Learn more about the different token types [on the API docs site](/authentication/tokens). Your app may need different tokens depending on the actions you want it to perform. diff --git a/docs/english/concepts/acknowledge.md b/docs/english/concepts/acknowledge.md index 19030da55..e79336fa3 100644 --- a/docs/english/concepts/acknowledge.md +++ b/docs/english/concepts/acknowledge.md @@ -6,11 +6,11 @@ slug: /bolt-python/concepts/acknowledge Actions, commands, shortcuts, options requests, and view submissions must **always** be acknowledged using the `ack()` function. This lets Slack know that the request was received so that it may update the Slack user interface accordingly. -Depending on the type of request, your acknowledgement may be different. For example, when acknowledging a menu selection associated with an external data source, you would call `ack()` with a list of relevant [options](/reference/block-kit/composition-objects/option-object/). When acknowledging a view submission, you may supply a `response_action` as part of your acknowledgement to [update the view](/bolt-python/concepts/view_submissions). +Depending on the type of request, your acknowledgement may be different. For example, when acknowledging a menu selection associated with an external data source, you would call `ack()` with a list of relevant [options](/reference/block-kit/composition-objects/option-object/). When acknowledging a view submission, you may supply a `response_action` as part of your acknowledgement to [update the view](/tools/bolt-python/concepts/view_submissions). We recommend calling `ack()` right away before initiating any time-consuming processes such as fetching information from your database or sending a new message, since you only have 3 seconds to respond before Slack registers a timeout error. -:::info[When working in a FaaS / serverless environment, our guidelines for when to `ack()` are different. See the section on [Lazy listeners (FaaS)](/bolt-python/concepts/lazy-listeners) for more detail on this.] +:::info[When working in a FaaS / serverless environment, our guidelines for when to `ack()` are different. See the section on [Lazy listeners (FaaS)](/tools/bolt-python/concepts/lazy-listeners) for more detail on this.] ::: diff --git a/docs/english/concepts/actions.md b/docs/english/concepts/actions.md index df1eab633..4b120789a 100644 --- a/docs/english/concepts/actions.md +++ b/docs/english/concepts/actions.md @@ -10,7 +10,7 @@ Your app can listen and respond to user actions, like button clicks, and menu se Actions can be filtered on an `action_id` parameter of type `str` or `re.Pattern`. The `action_id` parameter acts as a unique identifier for interactive components on the Slack platform. -You'll notice in all `action()` examples, `ack()` is used. It is required to call the `ack()` function within an action listener to acknowledge that the request was received from Slack. This is discussed in the [acknowledging requests guide](/bolt-python/concepts/acknowledge). +You'll notice in all `action()` examples, `ack()` is used. It is required to call the `ack()` function within an action listener to acknowledge that the request was received from Slack. This is discussed in the [acknowledging requests guide](/tools/bolt-python/concepts/acknowledge). Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. diff --git a/docs/english/concepts/ai-apps.md b/docs/english/concepts/ai-apps.md index c6481872d..1e12f0ee8 100644 --- a/docs/english/concepts/ai-apps.md +++ b/docs/english/concepts/ai-apps.md @@ -29,7 +29,7 @@ The Agents & AI Apps feature comprises a unique messaging experience for Slack. That being said, using the `Assistant` class will streamline the process. And we already wrote this nice guide for you! :::info -You _could_ go it alone and [listen](/bolt-python/concepts/event-listening) for the `assistant_thread_started`, `assistant_thread_context_changed`, and `message.im` events (see implementation details below) in order to implement the AI features in your app. That being said, using the `Assistant` class will streamline the process. And we already wrote this nice guide for you! +You _could_ go it alone and [listen](/tools/bolt-python/concepts/event-listening) for the `assistant_thread_started`, `assistant_thread_context_changed`, and `message.im` events (see implementation details below) in order to implement the AI features in your app. That being said, using the `Assistant` class will streamline the process. And we already wrote this nice guide for you! ::: ## The `Assistant` class instance {#assistant-class} diff --git a/docs/english/concepts/authenticating-oauth.md b/docs/english/concepts/authenticating-oauth.md index 3ed395d6b..e7427a051 100644 --- a/docs/english/concepts/authenticating-oauth.md +++ b/docs/english/concepts/authenticating-oauth.md @@ -4,7 +4,7 @@ lang: en slug: /bolt-python/concepts/authenticating-oauth --- -Slack apps installed on multiple workspaces will need to implement OAuth, then store installation information (like access tokens) securely. By providing `client_id`, `client_secret`, `scopes`, `installation_store`, and `state_store` when initializing App, Bolt for Python will handle the work of setting up OAuth routes and verifying state. If you're implementing a custom adapter, you can make use of our [OAuth library](/python-slack-sdk/oauth/), which is what Bolt for Python uses under the hood. +Slack apps installed on multiple workspaces will need to implement OAuth, then store installation information (like access tokens) securely. By providing `client_id`, `client_secret`, `scopes`, `installation_store`, and `state_store` when initializing App, Bolt for Python will handle the work of setting up OAuth routes and verifying state. If you're implementing a custom adapter, you can make use of our [OAuth library](/tools/python-slack-sdk/oauth/), which is what Bolt for Python uses under the hood. Bolt for Python will create a **Redirect URL** `slack/oauth_redirect`, which Slack uses to redirect users after they complete your app's installation flow. You will need to add this **Redirect URL** in your app configuration settings under **OAuth and Permissions**. This path can be configured in the `OAuthSettings` argument described below. diff --git a/docs/english/concepts/authorization.md b/docs/english/concepts/authorization.md index 3fce7c06e..04f86461d 100644 --- a/docs/english/concepts/authorization.md +++ b/docs/english/concepts/authorization.md @@ -6,7 +6,7 @@ slug: /bolt-python/concepts/authorization Authorization is the process of determining which Slack credentials should be available while processing an incoming Slack request. -Apps installed on a single workspace can simply pass their bot token into the `App` constructor using the `token` parameter. However, if your app will be installed on multiple workspaces, you have two options. The easier option is to use the built-in OAuth support. This will handle setting up OAuth routes and verifying state. Read the section on [authenticating with OAuth](/bolt-python/concepts/authenticating-oauth) for details. +Apps installed on a single workspace can simply pass their bot token into the `App` constructor using the `token` parameter. However, if your app will be installed on multiple workspaces, you have two options. The easier option is to use the built-in OAuth support. This will handle setting up OAuth routes and verifying state. Read the section on [authenticating with OAuth](/tools/bolt-python/concepts/authenticating-oauth) for details. For a more custom solution, you can set the `authorize` parameter to a function upon `App` instantiation. The `authorize` function should return [an instance of `AuthorizeResult`](https://github.com/slackapi/bolt-python/blob/main/slack_bolt/authorization/authorize_result.py), which contains information about who and where the request is coming from. diff --git a/docs/english/concepts/commands.md b/docs/english/concepts/commands.md index 211c42916..d356b9f96 100644 --- a/docs/english/concepts/commands.md +++ b/docs/english/concepts/commands.md @@ -8,7 +8,7 @@ Your app can use the `command()` method to listen to incoming slash command requ Commands must be acknowledged with `ack()` to inform Slack your app has received the request. -There are two ways to respond to slash commands. The first way is to use `say()`, which accepts a string or JSON payload. The second is `respond()` which is a utility for the `response_url`. These are explained in more depth in the [responding to actions](/bolt-python/concepts/actions) section. +There are two ways to respond to slash commands. The first way is to use `say()`, which accepts a string or JSON payload. The second is `respond()` which is a utility for the `response_url`. These are explained in more depth in the [responding to actions](/tools/bolt-python/concepts/actions) section. When setting up commands within your app configuration, you'll append `/slack/events` to your request URL. diff --git a/docs/english/concepts/custom-adapters.md b/docs/english/concepts/custom-adapters.md index cd86172b6..716a9ae4c 100644 --- a/docs/english/concepts/custom-adapters.md +++ b/docs/english/concepts/custom-adapters.md @@ -4,7 +4,7 @@ lang: en slug: /bolt-python/concepts/custom-adapters --- -[Adapters](/bolt-python/concepts/adapters) are flexible and can be adjusted based on the framework you prefer. There are two necessary components of adapters: +[Adapters](/tools/bolt-python/concepts/adapters) are flexible and can be adjusted based on the framework you prefer. There are two necessary components of adapters: - `__init__(app: App)`: Constructor that accepts and stores an instance of the Bolt `App`. - `handle(req: Request)`: Function (typically named `handle()`) that receives incoming Slack requests, parses them to conform to an instance of [`BoltRequest`](https://github.com/slackapi/bolt-python/blob/main/slack_bolt/request/request.py), then dispatches them to the stored Bolt app. diff --git a/docs/english/concepts/custom-steps.md b/docs/english/concepts/custom-steps.md index 6de8a7e36..0691c37dc 100644 --- a/docs/english/concepts/custom-steps.md +++ b/docs/english/concepts/custom-steps.md @@ -69,13 +69,13 @@ Example app manifest definition Your app's custom steps may create interactivity points for users, for example: Post a message with a button. -If such interaction points originate from a custom step execution, the events sent to your app representing the end-user interaction with these points are considered to be _function-scoped interactivity events_. These interactivity events can be handled by your app using the same concepts we covered earlier, such as [Listening to actions](/bolt-python/concepts/actions). +If such interaction points originate from a custom step execution, the events sent to your app representing the end-user interaction with these points are considered to be _function-scoped interactivity events_. These interactivity events can be handled by your app using the same concepts we covered earlier, such as [Listening to actions](/tools/bolt-python/concepts/actions). _function-scoped interactivity events_ will contain data related to the custom step (`function_executed` event) they were spawned from, such as custom step `inputs` and access to `complete()` and `fail()` listener arguments. Your app can skip calling `complete()` or `fail()` in the `function()` handler method if the custom step creates an interaction point that requires user interaction before the step can end. However, in the relevant interactivity handler method, your app must invoke `complete()` or `fail()` to notify Slack that the custom step has been processed. -You’ll notice in all interactivity handler examples, `ack()` is used. It is required to call the `ack()` function within an interactivity listener to acknowledge that the request was received from Slack. This is discussed in the [acknowledging requests section](/bolt-python/concepts/acknowledge). +You’ll notice in all interactivity handler examples, `ack()` is used. It is required to call the `ack()` function within an interactivity listener to acknowledge that the request was received from Slack. This is discussed in the [acknowledging requests section](/tools/bolt-python/concepts/acknowledge). ```python # This sample custom step posts a message with a button diff --git a/docs/english/concepts/message-sending.md b/docs/english/concepts/message-sending.md index 6fe46f79f..c70f005c6 100644 --- a/docs/english/concepts/message-sending.md +++ b/docs/english/concepts/message-sending.md @@ -6,7 +6,7 @@ slug: /bolt-python/concepts/message-sending Within your listener function, `say()` is available whenever there is an associated conversation (for example, a conversation where the event or action which triggered the listener occurred). `say()` accepts a string to post simple messages and JSON payloads to send more complex messages. The message payload you pass in will be sent to the associated conversation. -In the case that you'd like to send a message outside of a listener or you want to do something more advanced (like handle specific errors), you can call `client.chat_postMessage` [using the client attached to your Bolt instance](/bolt-python/concepts/web-api). +In the case that you'd like to send a message outside of a listener or you want to do something more advanced (like handle specific errors), you can call `client.chat_postMessage` [using the client attached to your Bolt instance](/tools/bolt-python/concepts/web-api). Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python diff --git a/docs/english/concepts/select-menu-options.md b/docs/english/concepts/select-menu-options.md index 8b4362d5d..b22e2f1c4 100644 --- a/docs/english/concepts/select-menu-options.md +++ b/docs/english/concepts/select-menu-options.md @@ -4,7 +4,7 @@ lang: en slug: /bolt-python/concepts/options --- -The `options()` method listens for incoming option request payloads from Slack. [Similar to `action()`](/bolt-python/concepts/actions), +The `options()` method listens for incoming option request payloads from Slack. [Similar to `action()`](/tools/bolt-python/concepts/actions), an `action_id` or constraints object is required. In order to load external data into your select menus, you must provide an options load URL in your app configuration, appended with `/slack/events`. While it's recommended to use `action_id` for `external_select` menus, dialogs do not support Block Kit so you'll have to use the constraints object to filter on a `callback_id`. diff --git a/docs/english/concepts/shortcuts.md b/docs/english/concepts/shortcuts.md index fb65c9b42..233084afe 100644 --- a/docs/english/concepts/shortcuts.md +++ b/docs/english/concepts/shortcuts.md @@ -10,7 +10,7 @@ Shortcuts are invokable entry points to apps. Global shortcuts are available fro Shortcuts must be acknowledged with `ack()` to inform Slack that your app has received the request. -Shortcuts include a `trigger_id` which an app can use to [open a modal](/bolt-python/concepts/opening-modals) that confirms the action the user is taking. +Shortcuts include a `trigger_id` which an app can use to [open a modal](/tools/bolt-python/concepts/opening-modals) that confirms the action the user is taking. When setting up shortcuts within your app configuration, as with other URLs, you'll append `/slack/events` to your request URL. diff --git a/docs/english/concepts/socket-mode.md b/docs/english/concepts/socket-mode.md index e84598e3a..b07d84dd0 100644 --- a/docs/english/concepts/socket-mode.md +++ b/docs/english/concepts/socket-mode.md @@ -38,7 +38,7 @@ if __name__ == "__main__": To use the asyncio-based adapters such as aiohttp, your whole app needs to be compatible with asyncio's async/await programming model. `AsyncSocketModeHandler` is available for running `AsyncApp` and its async middleware and listeners. -To learn how to use `AsyncApp`, checkout the [using Async](/bolt-python/concepts/async) document and relevant [examples](https://github.com/slackapi/bolt-python/tree/main/examples). +To learn how to use `AsyncApp`, checkout the [using Async](/tools/bolt-python/concepts/async) document and relevant [examples](https://github.com/slackapi/bolt-python/tree/main/examples). ```python from slack_bolt.app.async_app import AsyncApp diff --git a/docs/english/concepts/token-rotation.md b/docs/english/concepts/token-rotation.md index f3e14c6b4..146c86180 100644 --- a/docs/english/concepts/token-rotation.md +++ b/docs/english/concepts/token-rotation.md @@ -8,6 +8,6 @@ Supported in Bolt for Python as of [v1.7.0](https://github.com/slackapi/bolt-pyt Instead of an access token representing an existing installation of your Slack app indefinitely, with token rotation enabled, access tokens expire. A refresh token acts as a long-lived way to refresh your access tokens. -Bolt for Python supports and will handle token rotation automatically so long as the [built-in OAuth](/bolt-python/concepts/authenticating-oauth) functionality is used. +Bolt for Python supports and will handle token rotation automatically so long as the [built-in OAuth](/tools/bolt-python/concepts/authenticating-oauth) functionality is used. For more information about token rotation, please see the [documentation](/authentication/using-token-rotation). \ No newline at end of file diff --git a/docs/english/concepts/updating-pushing-views.md b/docs/english/concepts/updating-pushing-views.md index 1a0f0cf78..276b6b71e 100644 --- a/docs/english/concepts/updating-pushing-views.md +++ b/docs/english/concepts/updating-pushing-views.md @@ -12,7 +12,7 @@ To update a view, you can use the built-in client to call `views_update` with th ## The `views_push` method -To push a new view onto the view stack, you can use the built-in client to call `views_push` with a valid `trigger_id` a new [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission). The arguments for `views_push` is the same as [opening modals](/bolt-python/concepts/opening-models). After you open a modal, you may only push two additional views onto the view stack. +To push a new view onto the view stack, you can use the built-in client to call `views_push` with a valid `trigger_id` a new [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission). The arguments for `views_push` is the same as [opening modals](/tools/bolt-python/concepts/opening-models). After you open a modal, you may only push two additional views onto the view stack. Learn more about updating and pushing views in our [API documentation](/surfaces/modals) diff --git a/docs/english/getting-started.md b/docs/english/getting-started.md index 0d6fe8ec5..b7e1d8f17 100644 --- a/docs/english/getting-started.md +++ b/docs/english/getting-started.md @@ -14,7 +14,7 @@ When complete, you'll have a local environment configured with a customized [app :::tip[Reference for readers] -In search of the complete guide to building an app from scratch? Check out the [building an app](/bolt-python/building-an-app) guide. +In search of the complete guide to building an app from scratch? Check out the [building an app](/tools/bolt-python/building-an-app) guide. ::: @@ -135,7 +135,7 @@ You'll then land on your app's **Basic Information** page, which is an overview ![Basic Information page](/img/bolt-python/basic-information-page.png "Basic Information page") -To listen for events happening in Slack (such as a new posted message) without opening a port or exposing an endpoint, we will use [Socket Mode](/bolt-python/concepts/socket-mode). This connection requires a specific app token: +To listen for events happening in Slack (such as a new posted message) without opening a port or exposing an endpoint, we will use [Socket Mode](/tools/bolt-python/concepts/socket-mode). This connection requires a specific app token: 1. On the **Basic Information** page, scroll to the **App-Level Tokens** section and click **Generate Token and Scopes**. 2. Name the token "Development" or something similar and add the `connections:write` scope, then click **Generate**. @@ -287,14 +287,14 @@ Congrats once more on getting up and running with this quick start. :::info[Dive deeper] -Follow along with the steps that went into making this app on the [building an app](/bolt-python/building-an-app) guide for an educational overview. +Follow along with the steps that went into making this app on the [building an app](/tools/bolt-python/building-an-app) guide for an educational overview. ::: You can now continue customizing your app with various features to make it right for whatever job's at hand. Here are some ideas about what to explore next: -- Explore the different events your bot can listen to with the [`app.event()`](/bolt-python/concepts/event-listening) method. All of the [events](/reference/events) are listed on the API docs site. -- Bolt allows you to call [Web API](/bolt-python/concepts/web-api) methods with the client attached to your app. There are [over 200 methods](/reference/methods) on the API docs site. -- Learn more about the different [token types](/authentication/tokens) and [authentication setups](/bolt-python/concepts/authenticating-oauth). Your app might need different tokens depending on the actions you want to perform or for installations to multiple workspaces. +- Explore the different events your bot can listen to with the [`app.event()`](/tools/bolt-python/concepts/event-listening) method. All of the [events](/reference/events) are listed on the API docs site. +- Bolt allows you to call [Web API](/tools/bolt-python/concepts/web-api) methods with the client attached to your app. There are [over 200 methods](/reference/methods) on the API docs site. +- Learn more about the different [token types](/authentication/tokens) and [authentication setups](/tools/bolt-python/concepts/authenticating-oauth). Your app might need different tokens depending on the actions you want to perform or for installations to multiple workspaces. - Receive events using HTTP for various deployment methods, such as deploying to Heroku or AWS Lambda. - Read on [app design](/surfaces/app-design) and compose fancy messages with blocks using [Block Kit Builder](https://app.slack.com/block-kit-builder) to prototype messages. diff --git a/docs/english/index.md b/docs/english/index.md index e6f767e5f..212bd9690 100644 --- a/docs/english/index.md +++ b/docs/english/index.md @@ -1,6 +1,6 @@ # Bolt for Python -Bolt for Python is a Python framework to build Slack apps with the latest Slack platform features. Read the [Getting Started Guide](/bolt-python/getting-started) to set up and run your first Bolt app. +Bolt for Python is a Python framework to build Slack apps with the latest Slack platform features. Read the [Getting Started Guide](/tools/bolt-python/getting-started) to set up and run your first Bolt app. Then, explore the rest of the pages within the Guides section. The documentation there will help you build a Bolt app for whatever use case you may have. diff --git a/docs/english/tutorial/ai-chatbot/ai-chatbot.md b/docs/english/tutorial/ai-chatbot/ai-chatbot.md index e609d8e05..f9d53eaf4 100644 --- a/docs/english/tutorial/ai-chatbot/ai-chatbot.md +++ b/docs/english/tutorial/ai-chatbot/ai-chatbot.md @@ -199,4 +199,4 @@ Congratulations! You've successfully integrated the power of AI into your worksp * To learn more about Bolt for Python, refer to the [Getting started](/getting-started) documentation. * For more details about creating workflow steps using the Bolt SDK, refer to the [workflow steps for Bolt](/workflows/workflow-steps) guide. -* To use the Bolt for Python SDK to develop on the automations platform, refer to the [Create a workflow step for Workflow Builder: Bolt for Python](/bolt-python/tutorial/custom-steps-workflow-builder-new) tutorial. +* To use the Bolt for Python SDK to develop on the automations platform, refer to the [Create a workflow step for Workflow Builder: Bolt for Python](/tools/bolt-python/tutorial/custom-steps-workflow-builder-new) tutorial. diff --git a/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md b/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md index db88d1f2e..58287c099 100644 --- a/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md +++ b/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md @@ -167,6 +167,6 @@ When finished, you can click the **Disconnect Account** button in the home tab t Congratulations! You've successfully customized your workspace with custom steps in Workflow Builder. Check out these links to take the next steps in your journey. -* To learn more about Bolt for Python, refer to the [getting started](/bolt-python/getting-started) documentation. +* To learn more about Bolt for Python, refer to the [getting started](/tools/bolt-python/getting-started) documentation. * For more details about creating workflow steps using the Bolt SDK, refer to the [workflow steps for Bolt](/workflows/workflow-steps) guide. * For information about custom steps dynamic options, refer to [custom steps dynamic options in Workflow Builder](/custom-steps-dynamic-options). diff --git a/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md b/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md index 2832b3e3f..ba8df40cc 100644 --- a/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md +++ b/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md @@ -6,7 +6,7 @@ title: Custom Steps for Workflow Builder (existing app) If you don't have a paid workspace for development, you can join the [Developer Program](https://api.slack.com/developer-program) and provision a sandbox with access to all Slack features for free. ::: -If you followed along with our [create a custom step for Workflow Builder: new app](/bolt-python/tutorial/custom-steps-workflow-builder-new) tutorial, you have seen how to add custom steps to a brand new app. But what if you have an app up and running currently to which you'd like to add custom steps? You've come to the right place! +If you followed along with our [create a custom step for Workflow Builder: new app](/tools/bolt-python/tutorial/custom-steps-workflow-builder-new) tutorial, you have seen how to add custom steps to a brand new app. But what if you have an app up and running currently to which you'd like to add custom steps? You've come to the right place! In this tutorial we will: - Start with an existing Bolt app @@ -278,6 +278,6 @@ In any channel where your app is installed, paste the link you copied and send i Nice work! Now that you've added a workflow step to your Bolt app, a world of possibilities is open to you! Create and share workflow steps across your organization to optimize Slack users' time and make their working lives more productive. -If you're looking to create a brand new Bolt app with custom workflow steps, check out [the tutorial here](/bolt-python/tutorial/custom-steps-workflow-builder-new). +If you're looking to create a brand new Bolt app with custom workflow steps, check out [the tutorial here](/tools/bolt-python/tutorial/custom-steps-workflow-builder-new). If you're interested in exploring how to create custom steps to use in Workflow Builder as steps with our Deno Slack SDK, too, that tutorial can be found [here](/deno-slack-sdk/tutorials/workflow-builder-custom-step/). diff --git a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md index cae7dfc96..b114fa918 100644 --- a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md +++ b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md @@ -6,7 +6,7 @@ title: Custom Steps for Workflow Builder (new app) If you don't have a paid workspace for development, you can join the [Developer Program](https://api.slack.com/developer-program) and provision a sandbox with access to all Slack features for free. ::: -Adding a workflow step to your app and implementing a corresponding function listener is how you define a custom Workflow Builder step. In this tutorial, you'll use [Bolt for Python](/bolt-python/) to add your workflow step, then wire it up in [Workflow Builder](https://slack.com/help/articles/360035692513-Guide-to-Workflow-Builder). +Adding a workflow step to your app and implementing a corresponding function listener is how you define a custom Workflow Builder step. In this tutorial, you'll use [Bolt for Python](/tools/bolt-python/) to add your workflow step, then wire it up in [Workflow Builder](https://slack.com/help/articles/360035692513-Guide-to-Workflow-Builder). When finished, you'll be ready to build scalable and innovative workflow steps for anyone using Workflow Builder in your workspace. @@ -70,7 +70,7 @@ All of your app's settings can be configured within these screens. By creating a Navigate to **Event Subscriptions** and expand **Subscribe to bot events** to see that we have subscribed to the `function_executed` event. This is also a requirement for adding workflow steps to our app, as it lets our app know when a step has been triggered, allowing our app to respond to it. -Another configuration setting to note is **Socket Mode**. We have turned this on for our local development, but socket mode is not intended for use in a production environment. When you are satisfied with your app and ready to deploy it to a production environment, you should switch to using public HTTP request URLs. Read more about getting started with HTTP in [Bolt for Python here](/bolt-python/getting-started). +Another configuration setting to note is **Socket Mode**. We have turned this on for our local development, but socket mode is not intended for use in a production environment. When you are satisfied with your app and ready to deploy it to a production environment, you should switch to using public HTTP request URLs. Read more about getting started with HTTP in [Bolt for Python here](/tools/bolt-python/getting-started). Clicking on **Workflow Steps** in the left nav will show you that one workflow step has been added! This reflects the `function` defined in our manifest: functions are workflow steps. We will get to this step's implementation later. @@ -353,6 +353,6 @@ Slack will send an action event payload to your app when the button is clicked o That's it — we hope you learned a lot! -In this tutorial, we added custom steps via the manifest, but if you'd like to see how to add custom steps in the [app settings](https://api.slack.com/apps) to an existing app, follow along with the [Create a custom step for Workflow Builder: existing Bolt app](/bolt-python/tutorial/custom-steps-workflow-builder-existing) tutorial. +In this tutorial, we added custom steps via the manifest, but if you'd like to see how to add custom steps in the [app settings](https://api.slack.com/apps) to an existing app, follow along with the [Create a custom step for Workflow Builder: existing Bolt app](/tools/bolt-python/tutorial/custom-steps-workflow-builder-existing) tutorial. If you're interested in exploring how to create custom steps to use in Workflow Builder as steps with our Deno Slack SDK, too, that tutorial can be found [here](/deno-slack-sdk/tutorials/workflow-builder-custom-step/). diff --git a/docs/english/tutorial/custom-steps.md b/docs/english/tutorial/custom-steps.md index 8fa6a354b..69db9fbe7 100644 --- a/docs/english/tutorial/custom-steps.md +++ b/docs/english/tutorial/custom-steps.md @@ -268,5 +268,5 @@ Apps containing custom steps cannot be distributed publicly or submitted to the ## Related tutorials {#tutorials} -* [Custom steps for Workflow Builder (new app)](/bolt-python/tutorial/custom-steps-workflow-builder-new) -* [Custom steps for Workflow Builder (existing app)](/bolt-python/tutorial/custom-steps-workflow-builder-existing/) \ No newline at end of file +* [Custom steps for Workflow Builder (new app)](/tools/bolt-python/tutorial/custom-steps-workflow-builder-new) +* [Custom steps for Workflow Builder (existing app)](/tools/bolt-python/tutorial/custom-steps-workflow-builder-existing/) \ No newline at end of file diff --git a/docs/japanese/concepts/acknowledge.md b/docs/japanese/concepts/acknowledge.md index f12d3ad4f..dc4dc1e10 100644 --- a/docs/japanese/concepts/acknowledge.md +++ b/docs/japanese/concepts/acknowledge.md @@ -2,11 +2,11 @@ アクション(action)、コマンド(command)、ショートカット(shortcut)、オプション(options)、およびモーダルからのデータ送信(view_submission)の各リクエストは、**必ず** `ack()` 関数を使って確認を行う必要があります。これによってリクエストが受信されたことが Slack に認識され、Slack のユーザーインターフェイスが適切に更新されます。 -リクエストの種類によっては、確認で通知方法が異なる場合があります。例えば、外部データソースを使用する選択メニューのオプションのリクエストに対する確認では、適切な[オプション](/reference/block-kit/composition-objects/option-object)のリストとともに `ack()` を呼び出します。モーダルからのデータ送信に対する確認では、 `response_action` を渡すことで[モーダルの更新](/bolt-python/concepts/view_submissions)などを行えます。 +リクエストの種類によっては、確認で通知方法が異なる場合があります。例えば、外部データソースを使用する選択メニューのオプションのリクエストに対する確認では、適切な[オプション](/reference/block-kit/composition-objects/option-object)のリストとともに `ack()` を呼び出します。モーダルからのデータ送信に対する確認では、 `response_action` を渡すことで[モーダルの更新](/tools/bolt-python/concepts/view_submissions)などを行えます。 確認までの猶予は 3 秒しかないため、新しいメッセージの送信やデータベースからの情報の取得といった時間のかかる処理は、`ack()` を呼び出した後で行うことをおすすめします。 - FaaS / serverless 環境を使う場合、 `ack()` するタイミングが異なります。 これに関する詳細は [Lazy listeners (FaaS)](/bolt-python/concepts/lazy-listeners) を参照してください。 + FaaS / serverless 環境を使う場合、 `ack()` するタイミングが異なります。 これに関する詳細は [Lazy listeners (FaaS)](/tools/bolt-python/concepts/lazy-listeners) を参照してください。 指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python diff --git a/docs/japanese/concepts/actions.md b/docs/japanese/concepts/actions.md index 2272f724d..40c002006 100644 --- a/docs/japanese/concepts/actions.md +++ b/docs/japanese/concepts/actions.md @@ -6,7 +6,7 @@ Bolt アプリは `action` メソッドを用いて、ボタンのクリック アクションは `str` 型または `re.Pattern` 型の `action_id` でフィルタリングできます。`action_id` は、Slack プラットフォーム上のインタラクティブコンポーネントを区別する一意の識別子として機能します。 -`action()` を使ったすべての例で `ack()` が使用されていることに注目してください。アクションのリスナー内では、Slack からのリクエストを受信したことを確認するために、`ack()` 関数を呼び出す必要があります。これについては、[リクエストの確認](/bolt-python/concepts/acknowledge)セクションで説明しています。 +`action()` を使ったすべての例で `ack()` が使用されていることに注目してください。アクションのリスナー内では、Slack からのリクエストを受信したことを確認するために、`ack()` 関数を呼び出す必要があります。これについては、[リクエストの確認](/tools/bolt-python/concepts/acknowledge)セクションで説明しています。 指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python diff --git a/docs/japanese/concepts/authenticating-oauth.md b/docs/japanese/concepts/authenticating-oauth.md index a2a116677..e58743f69 100644 --- a/docs/japanese/concepts/authenticating-oauth.md +++ b/docs/japanese/concepts/authenticating-oauth.md @@ -1,6 +1,6 @@ # OAuth を使った認証 -Slack アプリを複数のワークスペースにインストールできるようにするためには、OAuth フローを実装した上で、アクセストークンなどのインストールに関する情報をセキュアな方法で保存する必要があります。アプリを初期化する際に `client_id`、`client_secret`、`scopes`、`installation_store`、`state_store` を指定することで、OAuth のエンドポイントのルート情報や stateパラメーターの検証をBolt for Python にハンドリングさせることができます。カスタムのアダプターを実装する場合は、SDK が提供する組み込みの[OAuth ライブラリ](/python-slack-sdk/oauth/)を利用するのが便利です。これは Slack が開発したモジュールで、Bolt for Python 内部でも利用しています。 +Slack アプリを複数のワークスペースにインストールできるようにするためには、OAuth フローを実装した上で、アクセストークンなどのインストールに関する情報をセキュアな方法で保存する必要があります。アプリを初期化する際に `client_id`、`client_secret`、`scopes`、`installation_store`、`state_store` を指定することで、OAuth のエンドポイントのルート情報や stateパラメーターの検証をBolt for Python にハンドリングさせることができます。カスタムのアダプターを実装する場合は、SDK が提供する組み込みの[OAuth ライブラリ](/tools/python-slack-sdk/oauth/)を利用するのが便利です。これは Slack が開発したモジュールで、Bolt for Python 内部でも利用しています。 Bolt for Python によって `slack/oauth_redirect` という**リダイレクト URL** が生成されます。Slack はアプリのインストールフローを完了させたユーザーをこの URL にリダイレクトします。この**リダイレクト URL** は、アプリの設定の「**OAuth and Permissions**」であらかじめ追加しておく必要があります。この URL は、後ほど説明するように `OAuthSettings` というコンストラクタの引数で指定することもできます。 diff --git a/docs/japanese/concepts/authorization.md b/docs/japanese/concepts/authorization.md index 83230e1a3..b6a14b30a 100644 --- a/docs/japanese/concepts/authorization.md +++ b/docs/japanese/concepts/authorization.md @@ -3,7 +3,7 @@ 認可(Authorization)は、Slack からの受信リクエストを処理するにあたって、どのようなSlack クレデンシャル (ボットトークンなど) を使用可能にするかを決定するプロセスです。 -単一のワークスペースにインストールされるアプリでは、`token` パラメーターを使って `App` のコンストラクターにボットトークンを渡すという、シンプルな方法が使えます。それに対して、複数のワークスペースにインストールされるアプリでは、次の 2 つの方法のいずれかを使用する必要があります。簡単なのは、組み込みの OAuth サポートを使用する方法です。OAuth サポートは、OAuth フロー用のURLのセットアップとstateの検証を行います。詳細は「[OAuth を使った認証](/bolt-python/concepts/authenticating-oauth)」セクションを参照してください。 +単一のワークスペースにインストールされるアプリでは、`token` パラメーターを使って `App` のコンストラクターにボットトークンを渡すという、シンプルな方法が使えます。それに対して、複数のワークスペースにインストールされるアプリでは、次の 2 つの方法のいずれかを使用する必要があります。簡単なのは、組み込みの OAuth サポートを使用する方法です。OAuth サポートは、OAuth フロー用のURLのセットアップとstateの検証を行います。詳細は「[OAuth を使った認証](/tools/bolt-python/concepts/authenticating-oauth)」セクションを参照してください。 よりカスタマイズできる方法として、`App` をインスタンス化する関数に`authorize` パラメーターを指定する方法があります。`authorize` 関数から返される [`AuthorizeResult` のインスタンス](https://github.com/slackapi/bolt-python/blob/main/slack_bolt/authorization/authorize_result.py)には、どのユーザーがどこで発生させたリクエストかを示す情報が含まれます。 diff --git a/docs/japanese/concepts/commands.md b/docs/japanese/concepts/commands.md index 7ea66d056..10676129d 100644 --- a/docs/japanese/concepts/commands.md +++ b/docs/japanese/concepts/commands.md @@ -4,7 +4,7 @@ コマンドリクエストをアプリが受信し確認したことを Slack に通知するため、`ack()` を呼び出す必要があります。 -スラッシュコマンドに応答する方法は 2 つあります。1 つ目は `say()` を使う方法で、文字列または JSON のペイロードを渡すことができます。2 つ目は `respond()` を使う方法です。これは `response_url` がある場合に活躍します。これらの方法は[アクションへの応答](/bolt-python/concepts/actions)セクションで詳しく説明しています。 +スラッシュコマンドに応答する方法は 2 つあります。1 つ目は `say()` を使う方法で、文字列または JSON のペイロードを渡すことができます。2 つ目は `respond()` を使う方法です。これは `response_url` がある場合に活躍します。これらの方法は[アクションへの応答](/tools/bolt-python/concepts/actions)セクションで詳しく説明しています。 アプリの設定でコマンドを登録するときは、リクエスト URL の末尾に `/slack/events` をつけます。 diff --git a/docs/japanese/concepts/custom-adapters.md b/docs/japanese/concepts/custom-adapters.md index 337591c51..584893511 100644 --- a/docs/japanese/concepts/custom-adapters.md +++ b/docs/japanese/concepts/custom-adapters.md @@ -1,6 +1,6 @@ # カスタムのアダプター -[アダプター](/bolt-python/concepts/adapters)はフレキシブルで、あなたが使用したいフレームワークに合わせた調整も可能です。アダプターでは、次の 2 つの要素が必須となっています。 +[アダプター](/tools/bolt-python/concepts/adapters)はフレキシブルで、あなたが使用したいフレームワークに合わせた調整も可能です。アダプターでは、次の 2 つの要素が必須となっています。 - `__init__(app:App)` : コンストラクター。Bolt の `App` のインスタンスを受け取り、保持します。 - `handle(req:Request)` : Slack からの受信リクエストを受け取り、解析を行う関数。通常は `handle()` という名前です。リクエストを [`BoltRequest`](https://github.com/slackapi/bolt-python/blob/main/slack_bolt/request/request.py) のインスタンスに合った形にして、保持している Bolt アプリに引き渡します。 diff --git a/docs/japanese/concepts/message-sending.md b/docs/japanese/concepts/message-sending.md index 043037e1b..52e1de4b8 100644 --- a/docs/japanese/concepts/message-sending.md +++ b/docs/japanese/concepts/message-sending.md @@ -2,7 +2,7 @@ リスナー関数内では、関連づけられた会話(例:リスナー実行のトリガーとなったイベントまたはアクションの発生元の会話)がある場合はいつでも `say()` を使用できます。`say()` には文字列または JSON ペイロードを指定できます。文字列の場合、送信できるのはテキストベースの単純なメッセージです。より複雑なメッセージを送信するには JSON ペイロードを指定します。指定したメッセージのペイロードは、関連づけられた会話内のメッセージとして送信されます。 -リスナー関数の外でメッセージを送信したい場合や、より高度な処理(特定のエラーの処理など)を実行したい場合は、[Bolt インスタンスにアタッチされたクライアント](/bolt-python/concepts/web-api)の `client.chat_postMessage` を呼び出します。 +リスナー関数の外でメッセージを送信したい場合や、より高度な処理(特定のエラーの処理など)を実行したい場合は、[Bolt インスタンスにアタッチされたクライアント](/tools/bolt-python/concepts/web-api)の `client.chat_postMessage` を呼び出します。 指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python diff --git a/docs/japanese/concepts/select-menu-options.md b/docs/japanese/concepts/select-menu-options.md index feeb416d2..790a3c160 100644 --- a/docs/japanese/concepts/select-menu-options.md +++ b/docs/japanese/concepts/select-menu-options.md @@ -1,6 +1,6 @@ # オプションのリスニングと応答 -`options()` メソッドは、Slack からのオプション(セレクトメニュー内の動的な選択肢)をリクエストするペイロードをリッスンします。 [`action()` と同様に](/bolt-python/concepts/actions)、文字列型の `action_id` または制約付きオブジェクトが必要です。 +`options()` メソッドは、Slack からのオプション(セレクトメニュー内の動的な選択肢)をリクエストするペイロードをリッスンします。 [`action()` と同様に](/tools/bolt-python/concepts/actions)、文字列型の `action_id` または制約付きオブジェクトが必要です。 外部データソースを使って選択メニューをロードするためには、末部に `/slack/events` が付加された URL を Options Load URL として予め設定しておく必要があります。 diff --git a/docs/japanese/concepts/shortcuts.md b/docs/japanese/concepts/shortcuts.md index 58902af45..4fe74fce0 100644 --- a/docs/japanese/concepts/shortcuts.md +++ b/docs/japanese/concepts/shortcuts.md @@ -6,7 +6,7 @@ ショートカットリクエストがアプリによって確認されたことを Slack に伝えるため、`ack()` を呼び出す必要があります。 -ショートカットのペイロードには `trigger_id` が含まれます。アプリはこれを使って、ユーザーにやろうとしていることを確認するための[モーダルを開く](/bolt-python/concepts/opening-modals)ことができます。 +ショートカットのペイロードには `trigger_id` が含まれます。アプリはこれを使って、ユーザーにやろうとしていることを確認するための[モーダルを開く](/tools/bolt-python/concepts/opening-modals)ことができます。 アプリの設定でショートカットを登録する際は、他の URL と同じように、リクエスト URL の末尾に `/slack/events` をつけます。 diff --git a/docs/japanese/concepts/socket-mode.md b/docs/japanese/concepts/socket-mode.md index 7aebe9d64..92922d2de 100644 --- a/docs/japanese/concepts/socket-mode.md +++ b/docs/japanese/concepts/socket-mode.md @@ -36,7 +36,7 @@ if __name__ == "__main__": aiohttp のような asyncio をベースとしたアダプターを使う場合、アプリケーション全体が asyncio の async/await プログラミングモデルで実装されている必要があります。`AsyncApp` を動作させるためには `AsyncSocketModeHandler` とその async なミドルウェアやリスナーを利用します。 -`AsyncApp` の使い方についての詳細は、[Async (asyncio) の利用](/bolt-python/concepts/async)や、関連する[サンプルコード例](https://github.com/slackapi/bolt-python/tree/main/examples)を参考にしてください。 +`AsyncApp` の使い方についての詳細は、[Async (asyncio) の利用](/tools/bolt-python/concepts/async)や、関連する[サンプルコード例](https://github.com/slackapi/bolt-python/tree/main/examples)を参考にしてください。 ```python from slack_bolt.app.async_app import AsyncApp diff --git a/docs/japanese/concepts/token-rotation.md b/docs/japanese/concepts/token-rotation.md index b443099da..25a0c735b 100644 --- a/docs/japanese/concepts/token-rotation.md +++ b/docs/japanese/concepts/token-rotation.md @@ -4,6 +4,6 @@ Bolt for Python [v1.7.0](https://github.com/slackapi/bolt-python/releases/tag/v1 既存の Slack アプリではアクセストークンが無期限に存在し続けるのに対して、トークンローテーションを有効にしたアプリではアクセストークンが失効するようになります。リフレッシュトークンを利用して、アクセストークンを長期間にわたって更新し続けることができます。 -[Bolt for Python の組み込みの OAuth 機能](/bolt-python/concepts/authenticating-oauth) を使用していれば、Bolt for Python が自動的にトークンローテーションの処理をハンドリングします。 +[Bolt for Python の組み込みの OAuth 機能](/tools/bolt-python/concepts/authenticating-oauth) を使用していれば、Bolt for Python が自動的にトークンローテーションの処理をハンドリングします。 トークンローテーションに関する詳細は [API ドキュメント](/authentication/using-token-rotation)を参照してください。 \ No newline at end of file diff --git a/docs/japanese/getting-started.md b/docs/japanese/getting-started.md index f454d7c4b..0a2b85d3a 100644 --- a/docs/japanese/getting-started.md +++ b/docs/japanese/getting-started.md @@ -458,6 +458,6 @@ if __name__ == "__main__": ここまでで基本的なアプリをセットアップして実行することはできたので、次は自分だけの Bolt アプリを作る方法について調べてみてください。参考になりそうなリソースをいくつかご紹介します。 * 基本的な概念について読んでみてください。Bolt アプリがアクセスできるさまざまメソッドや機能について知ることができます。 -* [`app.event()` メソッド](/bolt-python/concepts/event-listening)でボットがリッスンできるイベントをほかにも試してみましょう。すべてのイベントの一覧は [API サイト](/reference/events)で確認できます。 -* Bolt では、アプリにアタッチされたクライアントから [Web API メソッドを呼び出す](/bolt-python/concepts/web-api)ことができます。API サイトに [220 以上のメソッド](/reference/methods)を一覧しています。 +* [`app.event()` メソッド](/tools/bolt-python/concepts/event-listening)でボットがリッスンできるイベントをほかにも試してみましょう。すべてのイベントの一覧は [API サイト](/reference/events)で確認できます。 +* Bolt では、アプリにアタッチされたクライアントから [Web API メソッドを呼び出す](/tools/bolt-python/concepts/web-api)ことができます。API サイトに [220 以上のメソッド](/reference/methods)を一覧しています。 * [API サイト](/authentication/tokens)でほかのタイプのトークンを確認してみてください。アプリで実行したいアクションによって、異なるトークンが必要になる場合があります。 From 7b1503ff39080061e93cde723cee4e743168eaa4 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 6 Aug 2025 10:26:07 -0700 Subject: [PATCH 33/42] remove manual slugs --- docs/english/building-an-app.md | 1 - docs/english/concepts/acknowledge.md | 6 +----- docs/english/concepts/actions.md | 6 +----- docs/english/concepts/adapters.md | 6 +----- docs/english/concepts/ai-apps.md | 6 +----- docs/english/concepts/app-home.md | 6 +----- docs/english/concepts/async.md | 6 +----- docs/english/concepts/authenticating-oauth.md | 6 +----- docs/english/concepts/authorization.md | 6 +----- docs/english/concepts/commands.md | 6 +----- docs/english/concepts/context.md | 6 +----- docs/english/concepts/custom-adapters.md | 6 +----- docs/english/concepts/custom-steps.md | 7 +++---- docs/english/concepts/errors.md | 6 +----- docs/english/concepts/event-listening.md | 6 +----- docs/english/concepts/global-middleware.md | 6 +----- docs/english/concepts/lazy-listeners.md | 6 +----- docs/english/concepts/listener-middleware.md | 6 +----- docs/english/concepts/logging.md | 6 +----- docs/english/concepts/message-listening.md | 7 +------ docs/english/concepts/message-sending.md | 6 +----- docs/english/concepts/opening-modals.md | 6 +----- docs/english/concepts/select-menu-options.md | 6 +----- docs/english/concepts/shortcuts.md | 6 +----- docs/english/concepts/socket-mode.md | 6 +----- docs/english/concepts/token-rotation.md | 6 +----- docs/english/concepts/updating-pushing-views.md | 6 +----- docs/english/concepts/view-submissions.md | 6 +----- docs/english/concepts/web-api.md | 6 +----- docs/english/getting-started.md | 3 +-- docs/english/legacy/steps-from-apps.md | 6 +----- .../custom-steps-workflow-builder-existing.md | 4 +--- .../custom-steps-workflow-builder-new.md | 4 +--- docs/english/tutorial/modals/modals.md | 1 - 34 files changed, 34 insertions(+), 155 deletions(-) diff --git a/docs/english/building-an-app.md b/docs/english/building-an-app.md index 217db8710..17f51bac3 100644 --- a/docs/english/building-an-app.md +++ b/docs/english/building-an-app.md @@ -1,5 +1,4 @@ --- -title: Building an App with Bolt for Python sidebar_label: Building an App --- diff --git a/docs/english/concepts/acknowledge.md b/docs/english/concepts/acknowledge.md index e79336fa3..72a74ded3 100644 --- a/docs/english/concepts/acknowledge.md +++ b/docs/english/concepts/acknowledge.md @@ -1,8 +1,4 @@ ---- -title: Acknowledging requests -lang: en -slug: /bolt-python/concepts/acknowledge ---- +# Acknowledging requests Actions, commands, shortcuts, options requests, and view submissions must **always** be acknowledged using the `ack()` function. This lets Slack know that the request was received so that it may update the Slack user interface accordingly. diff --git a/docs/english/concepts/actions.md b/docs/english/concepts/actions.md index 4b120789a..51ce46046 100644 --- a/docs/english/concepts/actions.md +++ b/docs/english/concepts/actions.md @@ -1,8 +1,4 @@ ---- -title: Listening & responding to actions -lang: en -slug: /bolt-python/concepts/actions ---- +# Listening & responding to actions Your app can listen and respond to user actions, like button clicks, and menu selects, using the `action` method. diff --git a/docs/english/concepts/adapters.md b/docs/english/concepts/adapters.md index 6c73cc1e5..321dae0ab 100644 --- a/docs/english/concepts/adapters.md +++ b/docs/english/concepts/adapters.md @@ -1,8 +1,4 @@ ---- -title: Adapters -lang: en -slug: /bolt-python/concepts/adapters ---- +# Adapters Adapters are responsible for handling and parsing incoming requests from Slack to conform to [`BoltRequest`](https://github.com/slackapi/bolt-python/blob/main/slack_bolt/request/request.py), then dispatching those requests to your Bolt app. diff --git a/docs/english/concepts/ai-apps.md b/docs/english/concepts/ai-apps.md index 1e12f0ee8..064eba67d 100644 --- a/docs/english/concepts/ai-apps.md +++ b/docs/english/concepts/ai-apps.md @@ -1,8 +1,4 @@ ---- -title: Using AI in Apps -lang: en -slug: /bolt-python/concepts/ai-apps ---- +#: Using AI in Apps :::info This feature requires a paid plan If you don't have a paid workspace for development, you can join the [Developer Program](https://api.slack.com/developer-program) and provision a sandbox with access to all Slack features for free. diff --git a/docs/english/concepts/app-home.md b/docs/english/concepts/app-home.md index cdec93a67..a14f0e461 100644 --- a/docs/english/concepts/app-home.md +++ b/docs/english/concepts/app-home.md @@ -1,8 +1,4 @@ ---- -title: Publishing views to App Home -lang: en -slug: /bolt-python/concepts/app-home ---- +# Publishing views to App Home [Home tabs](/surfaces/app-home) are customizable surfaces accessible via the sidebar and search that allow apps to display views on a per-user basis. After enabling App Home within your app configuration, home tabs can be published and updated by passing a `user_id` and [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission) to the [`views.publish`](/reference/methods/views.publis) method. diff --git a/docs/english/concepts/async.md b/docs/english/concepts/async.md index f96be5fc2..e6ae28fc6 100644 --- a/docs/english/concepts/async.md +++ b/docs/english/concepts/async.md @@ -1,8 +1,4 @@ ---- -title: Using async (asyncio) -lang: en -slug: /bolt-python/concepts/async ---- +# Using async (asyncio) To use the async version of Bolt, you can import and initialize an `AsyncApp` instance (rather than `App`). `AsyncApp` relies on [AIOHTTP](https://docs.aiohttp.org) to make API requests, which means you'll need to install `aiohttp` (by adding to `requirements.txt` or running `pip install aiohttp`). diff --git a/docs/english/concepts/authenticating-oauth.md b/docs/english/concepts/authenticating-oauth.md index e7427a051..88b422949 100644 --- a/docs/english/concepts/authenticating-oauth.md +++ b/docs/english/concepts/authenticating-oauth.md @@ -1,8 +1,4 @@ ---- -title: Authenticating with OAuth -lang: en -slug: /bolt-python/concepts/authenticating-oauth ---- +# Authenticating with OAuth Slack apps installed on multiple workspaces will need to implement OAuth, then store installation information (like access tokens) securely. By providing `client_id`, `client_secret`, `scopes`, `installation_store`, and `state_store` when initializing App, Bolt for Python will handle the work of setting up OAuth routes and verifying state. If you're implementing a custom adapter, you can make use of our [OAuth library](/tools/python-slack-sdk/oauth/), which is what Bolt for Python uses under the hood. diff --git a/docs/english/concepts/authorization.md b/docs/english/concepts/authorization.md index 04f86461d..242a86b39 100644 --- a/docs/english/concepts/authorization.md +++ b/docs/english/concepts/authorization.md @@ -1,8 +1,4 @@ ---- -title: Authorization -lang: en -slug: /bolt-python/concepts/authorization ---- +# Authorization Authorization is the process of determining which Slack credentials should be available while processing an incoming Slack request. diff --git a/docs/english/concepts/commands.md b/docs/english/concepts/commands.md index d356b9f96..8435f1b45 100644 --- a/docs/english/concepts/commands.md +++ b/docs/english/concepts/commands.md @@ -1,8 +1,4 @@ ---- -title: Listening & responding to commands -lang: en -slug: /bolt-python/concepts/commands ---- +# Listening & responding to commands Your app can use the `command()` method to listen to incoming slash command requests. The method requires a `command_name` of type `str`. diff --git a/docs/english/concepts/context.md b/docs/english/concepts/context.md index d019dae85..fb134c896 100644 --- a/docs/english/concepts/context.md +++ b/docs/english/concepts/context.md @@ -1,8 +1,4 @@ ---- -title: Adding context -lang: en -slug: /bolt-python/concepts/context ---- +# Adding context All listeners have access to a `context` dictionary, which can be used to enrich requests with additional information. Bolt automatically attaches information that is included in the incoming request, like `user_id`, `team_id`, `channel_id`, and `enterprise_id`. diff --git a/docs/english/concepts/custom-adapters.md b/docs/english/concepts/custom-adapters.md index 716a9ae4c..62532e7cd 100644 --- a/docs/english/concepts/custom-adapters.md +++ b/docs/english/concepts/custom-adapters.md @@ -1,8 +1,4 @@ ---- -title: Custom adapters -lang: en -slug: /bolt-python/concepts/custom-adapters ---- +# Custom adapters [Adapters](/tools/bolt-python/concepts/adapters) are flexible and can be adjusted based on the framework you prefer. There are two necessary components of adapters: diff --git a/docs/english/concepts/custom-steps.md b/docs/english/concepts/custom-steps.md index 0691c37dc..a21104254 100644 --- a/docs/english/concepts/custom-steps.md +++ b/docs/english/concepts/custom-steps.md @@ -1,10 +1,9 @@ --- -title: Listening and responding to custom steps -sidebar_label: Custom Steps -lang: en -slug: /bolt-python/concepts/custom-steps +sidebar_label: Custom steps --- +# Listening and responding to custom steps + Your app can use the `function()` method to listen to incoming [custom step requests](/workflows/workflow-steps). Custom steps are used in Workflow Builder to build workflows. The method requires a step `callback_id` of type `str`. This `callback_id` must also be defined in your [Function](/reference/app-manifest#functions) definition. Custom steps must be finalized using the `complete()` or `fail()` listener arguments to notify Slack that your app has processed the request. * `complete()` requires **one** argument: `outputs` of type `dict`. It ends your custom step **successfully** and provides a dictionary containing the outputs of your custom step as per its definition. diff --git a/docs/english/concepts/errors.md b/docs/english/concepts/errors.md index ed48ff4ee..ed41c5816 100644 --- a/docs/english/concepts/errors.md +++ b/docs/english/concepts/errors.md @@ -1,8 +1,4 @@ ---- -title: Handling errors -lang: en -slug: /bolt-python/concepts/errors ---- +# Handling errors If an error occurs in a listener, you can handle it directly using a try/except block. Errors associated with your app will be of type `BoltError`. Errors associated with calling Slack APIs will be of type `SlackApiError`. diff --git a/docs/english/concepts/event-listening.md b/docs/english/concepts/event-listening.md index fd32fd8b8..4950f3428 100644 --- a/docs/english/concepts/event-listening.md +++ b/docs/english/concepts/event-listening.md @@ -1,8 +1,4 @@ ---- -title: Listening to events -lang: en -slug: /bolt-python/concepts/event-listening ---- +# Listening to events You can listen to [any Events API event](/reference/events) using the `event()` method after subscribing to it in your app configuration. This allows your app to take action when something happens in a workspace where it's installed, like a user reacting to a message or joining a channel. diff --git a/docs/english/concepts/global-middleware.md b/docs/english/concepts/global-middleware.md index e6fda335f..7b8674dc2 100644 --- a/docs/english/concepts/global-middleware.md +++ b/docs/english/concepts/global-middleware.md @@ -1,8 +1,4 @@ ---- -title: Global middleware -lang: en -slug: /bolt-python/concepts/global-middleware ---- +# Global middleware Global middleware is run for all incoming requests, before any listener middleware. You can add any number of global middleware to your app by passing middleware functions to `app.use()`. Middleware functions are called with the same arguments as listeners, with an additional `next()` function. diff --git a/docs/english/concepts/lazy-listeners.md b/docs/english/concepts/lazy-listeners.md index c0b1c1878..d775106b9 100644 --- a/docs/english/concepts/lazy-listeners.md +++ b/docs/english/concepts/lazy-listeners.md @@ -1,8 +1,4 @@ ---- -title: Lazy listeners (FaaS) -lang: en -slug: /bolt-python/concepts/lazy-listeners ---- +# Lazy listeners (FaaS) Lazy Listeners are a feature which make it easier to deploy Slack apps to FaaS (Function-as-a-Service) environments. Please note that this feature is only available in Bolt for Python, and we are not planning to add the same to other Bolt frameworks. diff --git a/docs/english/concepts/listener-middleware.md b/docs/english/concepts/listener-middleware.md index 0b934a088..779c77299 100644 --- a/docs/english/concepts/listener-middleware.md +++ b/docs/english/concepts/listener-middleware.md @@ -1,8 +1,4 @@ ---- -title: Listener middleware -lang: en -slug: /bolt-python/concepts/listener-middleware ---- +# Listener middleware Listener middleware is only run for the listener in which it's passed. You can pass any number of middleware functions to the listener using the `middleware` parameter, which must be a list that contains one to many middleware functions. diff --git a/docs/english/concepts/logging.md b/docs/english/concepts/logging.md index 7dc29554a..49e275d2d 100644 --- a/docs/english/concepts/logging.md +++ b/docs/english/concepts/logging.md @@ -1,8 +1,4 @@ ---- -title: Logging -lang: en -slug: /bolt-python/concepts/logging ---- +# Logging By default, Bolt will log information from your app to the output destination. After you've imported the `logging` module, you can customize the root log level by passing the `level` parameter to `basicConfig()`. The available log levels in order of least to most severe are `debug`, `info`, `warning`, `error`, and `critical`. diff --git a/docs/english/concepts/message-listening.md b/docs/english/concepts/message-listening.md index 5c671644d..46fb5c8ad 100644 --- a/docs/english/concepts/message-listening.md +++ b/docs/english/concepts/message-listening.md @@ -1,9 +1,4 @@ ---- -title: Listening to messages -lang: en -slug: /bolt-python/concepts/message-listening ---- - +# Listening to messages To listen to messages that [your app has access to receive](/messaging/retrieving-messages), you can use the `message()` method which filters out events that aren't of type `message`. `message()` accepts an argument of type `str` or `re.Pattern` object that filters out any messages that don't match the pattern. diff --git a/docs/english/concepts/message-sending.md b/docs/english/concepts/message-sending.md index c70f005c6..083605485 100644 --- a/docs/english/concepts/message-sending.md +++ b/docs/english/concepts/message-sending.md @@ -1,8 +1,4 @@ ---- -title: Sending messages -lang: en -slug: /bolt-python/concepts/message-sending ---- +# Sending messages Within your listener function, `say()` is available whenever there is an associated conversation (for example, a conversation where the event or action which triggered the listener occurred). `say()` accepts a string to post simple messages and JSON payloads to send more complex messages. The message payload you pass in will be sent to the associated conversation. diff --git a/docs/english/concepts/opening-modals.md b/docs/english/concepts/opening-modals.md index 4acad497e..0818b4c70 100644 --- a/docs/english/concepts/opening-modals.md +++ b/docs/english/concepts/opening-modals.md @@ -1,8 +1,4 @@ ---- -title: Opening modals -lang: en -slug: /bolt-python/concepts/opening-modals ---- +# Opening modals [Modals](/surfaces/modals) are focused surfaces that allow you to collect user data and display dynamic information. You can open a modal by passing a valid `trigger_id` and a [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission) to the built-in client's [`views.open`](/reference/methods/views.open/) method. diff --git a/docs/english/concepts/select-menu-options.md b/docs/english/concepts/select-menu-options.md index b22e2f1c4..acfcbe5ec 100644 --- a/docs/english/concepts/select-menu-options.md +++ b/docs/english/concepts/select-menu-options.md @@ -1,8 +1,4 @@ ---- -title: Listening & responding to select menu options -lang: en -slug: /bolt-python/concepts/options ---- +# Listening & responding to select menu options The `options()` method listens for incoming option request payloads from Slack. [Similar to `action()`](/tools/bolt-python/concepts/actions), an `action_id` or constraints object is required. In order to load external data into your select menus, you must provide an options load URL in your app configuration, appended with `/slack/events`. diff --git a/docs/english/concepts/shortcuts.md b/docs/english/concepts/shortcuts.md index 233084afe..0276069e9 100644 --- a/docs/english/concepts/shortcuts.md +++ b/docs/english/concepts/shortcuts.md @@ -1,8 +1,4 @@ ---- -title: Listening & responding to shortcuts -lang: en -slug: /bolt-python/concepts/shortcuts ---- +# Listening & responding to shortcuts The `shortcut()` method supports both [global shortcuts](/interactivity/implementing-shortcuts#global) and [message shortcuts](/interactivity/implementing-shortcuts#messages). diff --git a/docs/english/concepts/socket-mode.md b/docs/english/concepts/socket-mode.md index b07d84dd0..5156f6e13 100644 --- a/docs/english/concepts/socket-mode.md +++ b/docs/english/concepts/socket-mode.md @@ -1,8 +1,4 @@ ---- -title: Using Socket Mode -lang: en -slug: /bolt-python/concepts/socket-mode ---- +# Using Socket Mode With the introduction of [Socket Mode](/apis/events-api/using-socket-mode), Bolt for Python introduced support in version `1.2.0`. With Socket Mode, instead of creating a server with endpoints that Slack sends payloads too, the app will instead connect to Slack via a WebSocket connection and receive data from Slack over the socket connection. Make sure to enable Socket Mode in your app configuration settings. diff --git a/docs/english/concepts/token-rotation.md b/docs/english/concepts/token-rotation.md index 146c86180..96a41bb3c 100644 --- a/docs/english/concepts/token-rotation.md +++ b/docs/english/concepts/token-rotation.md @@ -1,8 +1,4 @@ ---- -title: Token rotation -lang: en -slug: /bolt-python/concepts/token-rotation ---- +# Token rotation Supported in Bolt for Python as of [v1.7.0](https://github.com/slackapi/bolt-python/releases/tag/v1.7.0), token rotation provides an extra layer of security for your access tokens and is defined by the [OAuth V2 RFC](https://datatracker.ietf.org/doc/html/rfc6749#section-10.4). diff --git a/docs/english/concepts/updating-pushing-views.md b/docs/english/concepts/updating-pushing-views.md index 276b6b71e..d7e559933 100644 --- a/docs/english/concepts/updating-pushing-views.md +++ b/docs/english/concepts/updating-pushing-views.md @@ -1,8 +1,4 @@ ---- -title: Updating & pushing views -lang: en -slug: /bolt-python/concepts/updating-pushing-views ---- +# Updating & pushing views Modals contain a stack of views. When you call [`views_open`](https://api./reference/methods/views.open/slack.com/methods/views.open), you add the root view to the modal. After the initial call, you can dynamically update a view by calling [`views_update`](/reference/methods/views.update/), or stack a new view on top of the root view by calling [`views_push`](/reference/methods/views.push/) diff --git a/docs/english/concepts/view-submissions.md b/docs/english/concepts/view-submissions.md index b8903c870..ee8ed4ca4 100644 --- a/docs/english/concepts/view-submissions.md +++ b/docs/english/concepts/view-submissions.md @@ -1,8 +1,4 @@ ---- -title: Listening to views -lang: en -slug: /bolt-python/concepts/view_submissions ---- +# Listening to views If a [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission) contains any input blocks, you must listen to `view_submission` requests to receive their values. To listen to `view_submission` requests, you can use the built-in `view()` method. `view()` requires a `callback_id` of type `str` or `re.Pattern`. diff --git a/docs/english/concepts/web-api.md b/docs/english/concepts/web-api.md index e43e5b08a..01595776e 100644 --- a/docs/english/concepts/web-api.md +++ b/docs/english/concepts/web-api.md @@ -1,8 +1,4 @@ ---- -title: Using the Web API -lang: en -slug: /bolt-python/concepts/web-api ---- +# Using the Web API You can call [any Web API method](/reference/methods) using the `WebClient` provided to your Bolt app as either `app.client` or `client` in middleware/listener arguments (given that your app has the appropriate scopes). When you call one the client's methods, it returns a `SlackResponse` which contains the response from Slack. diff --git a/docs/english/getting-started.md b/docs/english/getting-started.md index b7e1d8f17..bb67bf622 100644 --- a/docs/english/getting-started.md +++ b/docs/english/getting-started.md @@ -1,9 +1,8 @@ --- -title: Quickstart guide with Bolt for Python sidebar_label: Quickstart --- -# Getting started with Bolt for Python +# Quickstart guide with Bolt for Python This quickstart guide aims to help you get a Slack app using Bolt for Python up and running as soon as possible! diff --git a/docs/english/legacy/steps-from-apps.md b/docs/english/legacy/steps-from-apps.md index 88d15178e..05a593cdc 100644 --- a/docs/english/legacy/steps-from-apps.md +++ b/docs/english/legacy/steps-from-apps.md @@ -1,8 +1,4 @@ ---- -title: Steps from apps -lang: en -slug: /bolt-python/legacy/steps-from-apps ---- +# Steps from apps :::danger[Steps from Apps is a deprecated feature.] diff --git a/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md b/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md index ba8df40cc..b93037167 100644 --- a/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md +++ b/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md @@ -1,6 +1,4 @@ ---- -title: Custom Steps for Workflow Builder (existing app) ---- +# Custom Steps for Workflow Builder (existing app) :::info[This feature requires a paid plan] If you don't have a paid workspace for development, you can join the [Developer Program](https://api.slack.com/developer-program) and provision a sandbox with access to all Slack features for free. diff --git a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md index b114fa918..c1f987711 100644 --- a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md +++ b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md @@ -1,6 +1,4 @@ ---- -title: Custom Steps for Workflow Builder (new app) ---- +# Custom Steps for Workflow Builder (new app) :::info[This feature requires a paid plan] If you don't have a paid workspace for development, you can join the [Developer Program](https://api.slack.com/developer-program) and provision a sandbox with access to all Slack features for free. diff --git a/docs/english/tutorial/modals/modals.md b/docs/english/tutorial/modals/modals.md index c9f7b4fbe..288dbfa14 100644 --- a/docs/english/tutorial/modals/modals.md +++ b/docs/english/tutorial/modals/modals.md @@ -1,4 +1,3 @@ - # Modals If you're learning about Slack apps, modals, or slash commands for the first time, you've come to the right place! In this tutorial, we'll take a look at setting up your very own server using GitHub Codespaces, then using that server to run your Slack app built with the [**Bolt for Python framework**](https://github.com/SlackAPI/bolt-python). From 51a0991eca5cd2f3eafb6aba474572e7ea2ced64 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 6 Aug 2025 10:46:00 -0700 Subject: [PATCH 34/42] links --- .../concepts/custom-steps-dynamic-options.md | 20 +++++++++---------- .../english/tutorial/ai-chatbot/ai-chatbot.md | 2 +- .../custom-steps-workflow-builder-existing.md | 2 +- .../custom-steps-workflow-builder-new.md | 2 +- docs/english/tutorial/custom-steps.md | 4 ++-- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/english/concepts/custom-steps-dynamic-options.md b/docs/english/concepts/custom-steps-dynamic-options.md index 47ed6c7f4..1733c2dad 100644 --- a/docs/english/concepts/custom-steps-dynamic-options.md +++ b/docs/english/concepts/custom-steps-dynamic-options.md @@ -88,13 +88,13 @@ The `inputs` attribute defines the parameters to be passed as inputs to the step The following format can be used to reference any input parameter defined by the step: `{{input_parameters.}}`. -In addition, the `{{client.query}}` parameter can be used as a placeholder for an input value. The `{{client.builder_context}}` parameter will inject the [`slack#/types/user_context`](/deno-slack-sdk/reference/slack-types/#usercontext) of the user building the workflow as the value to the input parameter. +In addition, the `{{client.query}}` parameter can be used as a placeholder for an input value. The `{{client.builder_context}}` parameter will inject the [`slack#/types/user_context`](/tools/deno-slack-sdk/reference/slack-types/#usercontext) of the user building the workflow as the value to the input parameter. ### Types of dynamic options UIs {#dynamic-option-UIs} The above example demonstrates one possible UI to be rendered for builders: a single-select drop-down menu of dynamic options. However, dynamic options in Workflow Builder can be rendered in one of two ways: as a drop-down menu (single-select or multi-select), or as a set of fields. -The type is dictated by the output parameter of the custom step used as a dynamic option. In order to use a custom step in a dynamic option context, its output must adhere to a defined interface, that is, it must have an `options` parameter of type [`options_select`](/deno-slack-sdk/reference/slack-types#options_select) or [`options_field`](/deno-slack-sdk/reference/slack-types#options_field), as shown in the following code snippet. +The type is dictated by the output parameter of the custom step used as a dynamic option. In order to use a custom step in a dynamic option context, its output must adhere to a defined interface, that is, it must have an `options` parameter of type [`options_select`](/tools/deno-slack-sdk/reference/slack-types#options_select) or [`options_field`](/tools/deno-slack-sdk/reference/slack-types#options_field), as shown in the following code snippet. ```js "output_parameters": { @@ -109,9 +109,9 @@ The type is dictated by the output parameter of the custom step used as a dynami #### Drop-down menus {#drop-down} -Your dynamic input parameter can be rendered as a drop-down menu, which will use the options obtained from a custom step with an `options` output parameter of the type [`options_select`](/deno-slack-sdk/reference/slack-types#options_select). +Your dynamic input parameter can be rendered as a drop-down menu, which will use the options obtained from a custom step with an `options` output parameter of the type [`options_select`](/tools/deno-slack-sdk/reference/slack-types#options_select). -The drop-down menu UI component can be rendered in two ways: single-select, or multi-select. To render the dynamic input as a single-select menu, the input parameter defining the dynamic option must be of the type [`string`](/deno-slack-sdk/reference/slack-types#string). +The drop-down menu UI component can be rendered in two ways: single-select, or multi-select. To render the dynamic input as a single-select menu, the input parameter defining the dynamic option must be of the type [`string`](/tools/deno-slack-sdk/reference/slack-types#string). ```js "step-with-dynamic-input": { @@ -133,7 +133,7 @@ The drop-down menu UI component can be rendered in two ways: single-select, or m } ``` -To render the dynamic input as a multi-select menu, the input parameter defining the dynamic option must be of the type [`array`](/deno-slack-sdk/reference/slack-types#array), and its `items` must be of type [`string`](/deno-slack-sdk/reference/slack-types#string). +To render the dynamic input as a multi-select menu, the input parameter defining the dynamic option must be of the type [`array`](/tools/deno-slack-sdk/reference/slack-types#array), and its `items` must be of type [`string`](/tools/deno-slack-sdk/reference/slack-types#string). ```js "step-with-dynamic-input": { @@ -159,9 +159,9 @@ To render the dynamic input as a multi-select menu, the input parameter defining #### Fields {#fields} -In the code snippet below, the input parameter is rendered as a set of fields with keys and values. The option fields are obtained from a custom step with an `options` output parameter of type [`options_field`](/deno-slack-sdk/reference/slack-types#options_field). +In the code snippet below, the input parameter is rendered as a set of fields with keys and values. The option fields are obtained from a custom step with an `options` output parameter of type [`options_field`](/tools/deno-slack-sdk/reference/slack-types#options_field). -The input parameter that defines the dynamic option must be of type [`object`](/deno-slack-sdk/reference/slack-types#object), as the completed set of fields in Workflow Builder will be passed to the custom step as an [untyped object](/deno-slack-sdk/reference/slack-types#untyped-object) during workflow execution. +The input parameter that defines the dynamic option must be of type [`object`](/tools/deno-slack-sdk/reference/slack-types#object), as the completed set of fields in Workflow Builder will be passed to the custom step as an [untyped object](/tools/deno-slack-sdk/reference/slack-types#untyped-object) during workflow execution. ```js "test-field-dynamic-options": { @@ -185,15 +185,15 @@ The input parameter that defines the dynamic option must be of type [`object`](/ ### Dynamic option types {#dynamic-option-types} -As mentioned earlier, in order to use a custom step as a dynamic option, its output must adhere to a defined interface: it must have an `options` output parameter of the type either [`options_select`](/deno-slack-sdk/reference/slack-types#options_select) or [`options_field`](/deno-slack-sdk/reference/slack-types#options_field). +As mentioned earlier, in order to use a custom step as a dynamic option, its output must adhere to a defined interface: it must have an `options` output parameter of the type either [`options_select`](/tools/deno-slack-sdk/reference/slack-types#options_select) or [`options_field`](/tools/deno-slack-sdk/reference/slack-types#options_field). -To take a look at these in more detail, refer to our [Options Slack type](/deno-slack-sdk/reference/slack-types#options) documentation. +To take a look at these in more detail, refer to our [Options Slack type](/tools/deno-slack-sdk/reference/slack-types#options) documentation. ## Dynamic options handler {#dynamic-option-handler} Each custom step defined in the manifest needs a corresponding handler in your Slack app. Although implemented similarly to existing function execution event handlers, there are two key differences between regular custom step invocations and those used for dynamic options: -* The custom step must have an `options` output parameter that is of type [`options_select`](/deno-slack-sdk/reference/slack-types#options_select) or [`options_field`](/deno-slack-sdk/reference/slack-types#options_field). +* The custom step must have an `options` output parameter that is of type [`options_select`](/tools/deno-slack-sdk/reference/slack-types#options_select) or [`options_field`](/tools/deno-slack-sdk/reference/slack-types#options_field). * The [`function_executed`](/reference/events/function_executed) event must be handled synchronously. This optimizes the response time of returned dynamic options and provides a crisp builder experience. ### Asynchronous event handling {#async} diff --git a/docs/english/tutorial/ai-chatbot/ai-chatbot.md b/docs/english/tutorial/ai-chatbot/ai-chatbot.md index f9d53eaf4..64402b3be 100644 --- a/docs/english/tutorial/ai-chatbot/ai-chatbot.md +++ b/docs/english/tutorial/ai-chatbot/ai-chatbot.md @@ -151,7 +151,7 @@ To test this, leave the channel you just invited Bolty to and rejoin it. This wi ![Channel summary](7.png) -The central part of this functionality is shown in the following code snippet. Note the use of the [`user_context`](/deno-slack-sdk/reference/slack-types#usercontext) object, a Slack type that represents the user who is interacting with our workflow, as well as the `history` of the channel that will be summarized, which includes the ten most recent messages. +The central part of this functionality is shown in the following code snippet. Note the use of the [`user_context`](/tools/deno-slack-sdk/reference/slack-types#usercontext) object, a Slack type that represents the user who is interacting with our workflow, as well as the `history` of the channel that will be summarized, which includes the ten most recent messages. ```python from ai.providers import get_provider_response diff --git a/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md b/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md index b93037167..0441b033c 100644 --- a/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md +++ b/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md @@ -278,4 +278,4 @@ Nice work! Now that you've added a workflow step to your Bolt app, a world of po If you're looking to create a brand new Bolt app with custom workflow steps, check out [the tutorial here](/tools/bolt-python/tutorial/custom-steps-workflow-builder-new). -If you're interested in exploring how to create custom steps to use in Workflow Builder as steps with our Deno Slack SDK, too, that tutorial can be found [here](/deno-slack-sdk/tutorials/workflow-builder-custom-step/). +If you're interested in exploring how to create custom steps to use in Workflow Builder as steps with our Deno Slack SDK, too, that tutorial can be found [here](/tools/deno-slack-sdk/tutorials/workflow-builder-custom-step/). diff --git a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md index c1f987711..1dceed45a 100644 --- a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md +++ b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md @@ -353,4 +353,4 @@ That's it — we hope you learned a lot! In this tutorial, we added custom steps via the manifest, but if you'd like to see how to add custom steps in the [app settings](https://api.slack.com/apps) to an existing app, follow along with the [Create a custom step for Workflow Builder: existing Bolt app](/tools/bolt-python/tutorial/custom-steps-workflow-builder-existing) tutorial. -If you're interested in exploring how to create custom steps to use in Workflow Builder as steps with our Deno Slack SDK, too, that tutorial can be found [here](/deno-slack-sdk/tutorials/workflow-builder-custom-step/). +If you're interested in exploring how to create custom steps to use in Workflow Builder as steps with our Deno Slack SDK, too, that tutorial can be found [here](/tools/deno-slack-sdk/tutorials/workflow-builder-custom-step/). diff --git a/docs/english/tutorial/custom-steps.md b/docs/english/tutorial/custom-steps.md index 69db9fbe7..1c8ff49b2 100644 --- a/docs/english/tutorial/custom-steps.md +++ b/docs/english/tutorial/custom-steps.md @@ -9,7 +9,7 @@ If you don't have a paid workspace for development, you can join the [Developer With custom steps for Bolt apps, your app can create and process workflow steps that users later add in Workflow Builder. This guide goes through how to build a custom step for your app using the [app settings](https://api.slack.com/apps). -If you're looking to build a custom step using the Deno Slack SDK, check out our guide on [creating a custom step for Workflow Builder with the Deno Slack SDK](/deno-slack-sdk/tutorials/workflow-builder-custom-step/). +If you're looking to build a custom step using the Deno Slack SDK, check out our guide on [creating a custom step for Workflow Builder with the Deno Slack SDK](/tools/deno-slack-sdk/tutorials/workflow-builder-custom-step/). You can also take a look at the template for the [Bolt for Python custom workflow step](https://github.com/slack-samples/bolt-python-custom-step-template) on GitHub. @@ -255,7 +255,7 @@ When you're ready to deploy your steps for wider use, you'll need to decide *whe ### Control step access {#access} -You can choose who has access to your custom steps. To define this, refer to the [custom function access](/deno-slack-sdk/guides/controlling-access-to-custom-functions) page. +You can choose who has access to your custom steps. To define this, refer to the [custom function access](/tools/deno-slack-sdk/guides/controlling-access-to-custom-functions) page. ### Distribution {#distribution} From 10224ad28a4e164eb403714880b7a5cc94fd5914 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 6 Aug 2025 11:16:31 -0700 Subject: [PATCH 35/42] links --- docs/english/concepts/acknowledge.md | 2 +- docs/english/concepts/app-home.md | 2 +- docs/english/concepts/updating-pushing-views.md | 2 +- docs/english/getting-started.md | 6 +++--- docs/english/tutorial/ai-chatbot/ai-chatbot.md | 2 +- .../tutorial/custom-steps-for-jira/custom-steps-for-jira.md | 2 +- docs/english/tutorial/custom-steps.md | 2 +- docs/japanese/concepts/acknowledge.md | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/english/concepts/acknowledge.md b/docs/english/concepts/acknowledge.md index 72a74ded3..382f3199f 100644 --- a/docs/english/concepts/acknowledge.md +++ b/docs/english/concepts/acknowledge.md @@ -2,7 +2,7 @@ Actions, commands, shortcuts, options requests, and view submissions must **always** be acknowledged using the `ack()` function. This lets Slack know that the request was received so that it may update the Slack user interface accordingly. -Depending on the type of request, your acknowledgement may be different. For example, when acknowledging a menu selection associated with an external data source, you would call `ack()` with a list of relevant [options](/reference/block-kit/composition-objects/option-object/). When acknowledging a view submission, you may supply a `response_action` as part of your acknowledgement to [update the view](/tools/bolt-python/concepts/view_submissions). +Depending on the type of request, your acknowledgement may be different. For example, when acknowledging a menu selection associated with an external data source, you would call `ack()` with a list of relevant [options](/reference/block-kit/composition-objects/option-object/). When acknowledging a view submission, you may supply a `response_action` as part of your acknowledgement to [update the view](/tools/bolt-python/concepts/view-submissions). We recommend calling `ack()` right away before initiating any time-consuming processes such as fetching information from your database or sending a new message, since you only have 3 seconds to respond before Slack registers a timeout error. diff --git a/docs/english/concepts/app-home.md b/docs/english/concepts/app-home.md index a14f0e461..8df8f875a 100644 --- a/docs/english/concepts/app-home.md +++ b/docs/english/concepts/app-home.md @@ -1,6 +1,6 @@ # Publishing views to App Home -[Home tabs](/surfaces/app-home) are customizable surfaces accessible via the sidebar and search that allow apps to display views on a per-user basis. After enabling App Home within your app configuration, home tabs can be published and updated by passing a `user_id` and [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission) to the [`views.publish`](/reference/methods/views.publis) method. +[Home tabs](/surfaces/app-home) are customizable surfaces accessible via the sidebar and search that allow apps to display views on a per-user basis. After enabling App Home within your app configuration, home tabs can be published and updated by passing a `user_id` and [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission) to the [`views.publish`](/reference/methods/views.publish) method. You can subscribe to the [`app_home_opened`](/reference/events/app_home_opened) event to listen for when users open your App Home. diff --git a/docs/english/concepts/updating-pushing-views.md b/docs/english/concepts/updating-pushing-views.md index d7e559933..e8405aa6b 100644 --- a/docs/english/concepts/updating-pushing-views.md +++ b/docs/english/concepts/updating-pushing-views.md @@ -8,7 +8,7 @@ To update a view, you can use the built-in client to call `views_update` with th ## The `views_push` method -To push a new view onto the view stack, you can use the built-in client to call `views_push` with a valid `trigger_id` a new [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission). The arguments for `views_push` is the same as [opening modals](/tools/bolt-python/concepts/opening-models). After you open a modal, you may only push two additional views onto the view stack. +To push a new view onto the view stack, you can use the built-in client to call `views_push` with a valid `trigger_id` a new [view payload](/reference/interaction-payloads/view-interactions-payload/#view_submission). The arguments for `views_push` is the same as [opening modals](/tools/bolt-python/concepts/opening-modals). After you open a modal, you may only push two additional views onto the view stack. Learn more about updating and pushing views in our [API documentation](/surfaces/modals) diff --git a/docs/english/getting-started.md b/docs/english/getting-started.md index bb67bf622..ebdf47189 100644 --- a/docs/english/getting-started.md +++ b/docs/english/getting-started.md @@ -19,14 +19,14 @@ In search of the complete guide to building an app from scratch? Check out the [ #### Prerequisites -A few tools are needed for the following steps. We recommend using the [**Slack CLI**](/slack-cli/) for the smoothest experience, but other options remain available. +A few tools are needed for the following steps. We recommend using the [**Slack CLI**](/tools/slack-cli/) for the smoothest experience, but other options remain available. You can also begin by installing git and downloading [Python 3.6 or later](https://www.python.org/downloads/), or the latest stable version of Python. Refer to [Python's setup and building guide](https://devguide.python.org/getting-started/setup-building/) for more details. Install the latest version of the Slack CLI to get started: -- [Slack CLI for macOS & Linux](/slack-cli/guides/installing-the-slack-cli-for-mac-and-linux) -- [Slack CLI for Windows](/slack-cli/guides/installing-the-slack-cli-for-windows) +- [Slack CLI for macOS & Linux](/tools/slack-cli/guides/installing-the-slack-cli-for-mac-and-linux) +- [Slack CLI for Windows](/tools/slack-cli/guides/installing-the-slack-cli-for-windows) Then confirm a successful installation with the following command: diff --git a/docs/english/tutorial/ai-chatbot/ai-chatbot.md b/docs/english/tutorial/ai-chatbot/ai-chatbot.md index 64402b3be..fa4da90a7 100644 --- a/docs/english/tutorial/ai-chatbot/ai-chatbot.md +++ b/docs/english/tutorial/ai-chatbot/ai-chatbot.md @@ -197,6 +197,6 @@ You can also navigate to **Bolty** in your **Apps** list and select the **Messag Congratulations! You've successfully integrated the power of AI into your workspace. Check out these links to take the next steps in your Bolt for Python journey. -* To learn more about Bolt for Python, refer to the [Getting started](/getting-started) documentation. +* To learn more about Bolt for Python, refer to the [Getting started](/tools/bolt-python/getting-started) documentation. * For more details about creating workflow steps using the Bolt SDK, refer to the [workflow steps for Bolt](/workflows/workflow-steps) guide. * To use the Bolt for Python SDK to develop on the automations platform, refer to the [Create a workflow step for Workflow Builder: Bolt for Python](/tools/bolt-python/tutorial/custom-steps-workflow-builder-new) tutorial. diff --git a/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md b/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md index 58287c099..f310e75cc 100644 --- a/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md +++ b/docs/english/tutorial/custom-steps-for-jira/custom-steps-for-jira.md @@ -169,4 +169,4 @@ Congratulations! You've successfully customized your workspace with custom steps * To learn more about Bolt for Python, refer to the [getting started](/tools/bolt-python/getting-started) documentation. * For more details about creating workflow steps using the Bolt SDK, refer to the [workflow steps for Bolt](/workflows/workflow-steps) guide. -* For information about custom steps dynamic options, refer to [custom steps dynamic options in Workflow Builder](/custom-steps-dynamic-options). +* For information about custom steps dynamic options, refer to [custom steps dynamic options in Workflow Builder](/tools/bolt-python/concepts/custom-steps-dynamic-options). diff --git a/docs/english/tutorial/custom-steps.md b/docs/english/tutorial/custom-steps.md index 1c8ff49b2..591ab1292 100644 --- a/docs/english/tutorial/custom-steps.md +++ b/docs/english/tutorial/custom-steps.md @@ -69,7 +69,7 @@ Field | Type | Description `type` | String | Defines the data type and can fall into one of two categories: primitives or Slack-specific. `title` | String | The label that appears in Workflow Builder when a user sets up this step in their workflow. `description` | String | The description that accompanies the input when a user sets up this step in their workflow. -`dynamic_options` | Object | For custom steps dynamic options in Workflow Builder, define this property and point to a custom step designed to return the set of dynamic elements once the step is added to a workflow within Workflow Builder. Dynamic options in Workflow Builder can be rendered in one of two ways: as a drop-down menu (single-select or multi-select), or as a set of fields. Refer to custom steps dynamic options for Workflow Builder using [Bolt for JavaScript](/bolt-js/concepts/custom-steps-dynamic-options/) or [Bolt for Python](https://docs.slack.dev/bolt-python/concepts/custom-steps-dynamic-options/) for more details. +`dynamic_options` | Object | For custom steps dynamic options in Workflow Builder, define this property and point to a custom step designed to return the set of dynamic elements once the step is added to a workflow within Workflow Builder. Dynamic options in Workflow Builder can be rendered in one of two ways: as a drop-down menu (single-select or multi-select), or as a set of fields. Refer to custom steps dynamic options for Workflow Builder using [Bolt for JavaScript](/tools/bolt-js/concepts/custom-steps-dynamic-options/) or [Bolt for Python](https://docs.slack.dev/bolt-python/concepts/custom-steps-dynamic-options/) for more details. `is_required` | Boolean | Indicates whether or not the input is required by the step in order to run. If it’s required and not provided, the user will not be able to save the configuration nor use the step in their workflow. This property is available only in v1 of the manifest. We recommend v2, using the `required` array as noted in the example above. `hint` | String | Helper text that appears below the input when a user sets up this step in their workflow. diff --git a/docs/japanese/concepts/acknowledge.md b/docs/japanese/concepts/acknowledge.md index dc4dc1e10..52610d655 100644 --- a/docs/japanese/concepts/acknowledge.md +++ b/docs/japanese/concepts/acknowledge.md @@ -2,7 +2,7 @@ アクション(action)、コマンド(command)、ショートカット(shortcut)、オプション(options)、およびモーダルからのデータ送信(view_submission)の各リクエストは、**必ず** `ack()` 関数を使って確認を行う必要があります。これによってリクエストが受信されたことが Slack に認識され、Slack のユーザーインターフェイスが適切に更新されます。 -リクエストの種類によっては、確認で通知方法が異なる場合があります。例えば、外部データソースを使用する選択メニューのオプションのリクエストに対する確認では、適切な[オプション](/reference/block-kit/composition-objects/option-object)のリストとともに `ack()` を呼び出します。モーダルからのデータ送信に対する確認では、 `response_action` を渡すことで[モーダルの更新](/tools/bolt-python/concepts/view_submissions)などを行えます。 +リクエストの種類によっては、確認で通知方法が異なる場合があります。例えば、外部データソースを使用する選択メニューのオプションのリクエストに対する確認では、適切な[オプション](/reference/block-kit/composition-objects/option-object)のリストとともに `ack()` を呼び出します。モーダルからのデータ送信に対する確認では、 `response_action` を渡すことで[モーダルの更新](/tools/bolt-python/concepts/view-submissions)などを行えます。 確認までの猶予は 3 秒しかないため、新しいメッセージの送信やデータベースからの情報の取得といった時間のかかる処理は、`ack()` を呼び出した後で行うことをおすすめします。 From b4460f2adb429787ca04d1e94f2bc79772b5f19d Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 6 Aug 2025 12:09:24 -0700 Subject: [PATCH 36/42] github links --- docs/english/_sidebar.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json index 106ca08a8..d42868543 100644 --- a/docs/english/_sidebar.json +++ b/docs/english/_sidebar.json @@ -194,16 +194,16 @@ { "type": "link", "label": "Release notes", - "href": "https://github.com/slackapi/tools/bolt-python/releases" + "href": "https://github.com/slackapi/bolt-python/releases" }, { "type": "link", "label": "Code on GitHub", - "href": "https://github.com/SlackAPI/tools/bolt-python" + "href": "https://github.com/SlackAPI/bolt-python" }, { "type": "link", "label": "Contributors Guide", - "href": "https://github.com/SlackAPI/tools/bolt-python/blob/main/.github/contributing.md" + "href": "https://github.com/SlackAPI/bolt-python/blob/main/.github/contributing.md" } ] From 37aa624bd8fe9ce1326c1397a9a957cfb582ade8 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 6 Aug 2025 12:51:42 -0700 Subject: [PATCH 37/42] incorrect link --- examples/getting_started/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/getting_started/app.py b/examples/getting_started/app.py index 4b8b5c3df..3fc045209 100644 --- a/examples/getting_started/app.py +++ b/examples/getting_started/app.py @@ -10,7 +10,7 @@ # Listens to incoming messages that contain "hello" # To learn available listener method arguments, -# visit https://slack.dev/bolt-python/reference/kwargs_injection/args.html +# visit https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html @app.message("hello") def message_hello(message, say): # say() sends a message to the channel where the event was triggered From 1075bb055721e5fc6e8e187655236362f578a54e Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 6 Aug 2025 14:28:12 -0700 Subject: [PATCH 38/42] fixing title --- docs/english/concepts/ai-apps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/english/concepts/ai-apps.md b/docs/english/concepts/ai-apps.md index 064eba67d..fcb8f3294 100644 --- a/docs/english/concepts/ai-apps.md +++ b/docs/english/concepts/ai-apps.md @@ -1,4 +1,4 @@ -#: Using AI in Apps +# Using AI in Apps :::info This feature requires a paid plan If you don't have a paid workspace for development, you can join the [Developer Program](https://api.slack.com/developer-program) and provision a sandbox with access to all Slack features for free. From 74ffa14c73ca2e65792b4a0a03803adc30c2aae7 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 6 Aug 2025 14:28:29 -0700 Subject: [PATCH 39/42] banner --- docs/english/concepts/ai-apps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/english/concepts/ai-apps.md b/docs/english/concepts/ai-apps.md index fcb8f3294..72289b7b1 100644 --- a/docs/english/concepts/ai-apps.md +++ b/docs/english/concepts/ai-apps.md @@ -1,6 +1,6 @@ # Using AI in Apps -:::info This feature requires a paid plan +:::info[This feature requires a paid plan] If you don't have a paid workspace for development, you can join the [Developer Program](https://api.slack.com/developer-program) and provision a sandbox with access to all Slack features for free. ::: From cc19cd26db3b686ca587410ddc5ec6e3628ff7e3 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 6 Aug 2025 14:30:57 -0700 Subject: [PATCH 40/42] reference full links --- docs/english/building-an-app.md | 4 ++-- docs/english/concepts/acknowledge.md | 2 +- docs/english/concepts/actions.md | 4 ++-- docs/english/concepts/ai-apps.md | 17 +++++++---------- docs/english/concepts/app-home.md | 2 +- docs/english/concepts/commands.md | 2 +- .../concepts/custom-steps-dynamic-options.md | 2 +- docs/english/concepts/custom-steps.md | 2 +- docs/english/concepts/event-listening.md | 2 +- docs/english/concepts/global-middleware.md | 2 +- docs/english/concepts/listener-middleware.md | 2 +- docs/english/concepts/message-listening.md | 2 +- docs/english/concepts/message-sending.md | 2 +- docs/english/concepts/opening-modals.md | 2 +- docs/english/concepts/select-menu-options.md | 4 ++-- docs/english/concepts/shortcuts.md | 2 +- docs/english/concepts/updating-pushing-views.md | 2 +- docs/english/concepts/view-submissions.md | 2 +- docs/english/concepts/web-api.md | 2 +- docs/english/legacy/steps-from-apps.md | 10 +++++----- docs/english/tutorial/custom-steps.md | 4 ++-- docs/english/tutorial/modals/modals.md | 2 +- docs/japanese/concepts/acknowledge.md | 2 +- docs/japanese/concepts/actions.md | 4 ++-- docs/japanese/concepts/app-home.md | 2 +- docs/japanese/concepts/assistant.md | 4 ++-- docs/japanese/concepts/commands.md | 2 +- docs/japanese/concepts/event-listening.md | 2 +- docs/japanese/concepts/global-middleware.md | 2 +- docs/japanese/concepts/listener-middleware.md | 2 +- docs/japanese/concepts/message-listening.md | 2 +- docs/japanese/concepts/message-sending.md | 2 +- docs/japanese/concepts/opening-modals.md | 2 +- docs/japanese/concepts/select-menu-options.md | 4 ++-- docs/japanese/concepts/shortcuts.md | 2 +- .../japanese/concepts/updating-pushing-views.md | 2 +- docs/japanese/concepts/view-submissions.md | 2 +- docs/japanese/concepts/web-api.md | 2 +- docs/japanese/getting-started.md | 4 ++-- docs/japanese/legacy/steps-from-apps.md | 10 +++++----- examples/getting_started/app.py | 2 +- 41 files changed, 63 insertions(+), 66 deletions(-) diff --git a/docs/english/building-an-app.md b/docs/english/building-an-app.md index 17f51bac3..128ef42c5 100644 --- a/docs/english/building-an-app.md +++ b/docs/english/building-an-app.md @@ -207,7 +207,7 @@ app = App(token=os.environ.get("SLACK_BOT_TOKEN")) # Listens to incoming messages that contain "hello" # To learn available listener arguments, -# visit https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html +# visit https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html @app.message("hello") def message_hello(message, say): # say() sends a message to the channel where the event was triggered @@ -233,7 +233,7 @@ app = App( # Listens to incoming messages that contain "hello" # To learn available listener arguments, -# visit https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html +# visit https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html @app.message("hello") def message_hello(message, say): # say() sends a message to the channel where the event was triggered diff --git a/docs/english/concepts/acknowledge.md b/docs/english/concepts/acknowledge.md index 382f3199f..7d91e0851 100644 --- a/docs/english/concepts/acknowledge.md +++ b/docs/english/concepts/acknowledge.md @@ -10,7 +10,7 @@ We recommend calling `ack()` right away before initiating any time-consuming pro ::: -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Example of responding to an external_select options request @app.options("menu_selection") diff --git a/docs/english/concepts/actions.md b/docs/english/concepts/actions.md index 51ce46046..d7dfa6ba1 100644 --- a/docs/english/concepts/actions.md +++ b/docs/english/concepts/actions.md @@ -8,7 +8,7 @@ Actions can be filtered on an `action_id` parameter of type `str` or `re.Pattern You'll notice in all `action()` examples, `ack()` is used. It is required to call the `ack()` function within an action listener to acknowledge that the request was received from Slack. This is discussed in the [acknowledging requests guide](/tools/bolt-python/concepts/acknowledge). -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Your listener will be called every time a block element with the action_id "approve_button" is triggered @@ -45,7 +45,7 @@ There are two main ways to respond to actions. The first (and most common) way i The second way to respond to actions is using `respond()`, which is a utility to use the `response_url` associated with the action. -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Your listener will be called every time an interactive component with the action_id “approve_button” is triggered diff --git a/docs/english/concepts/ai-apps.md b/docs/english/concepts/ai-apps.md index 72289b7b1..b294c6688 100644 --- a/docs/english/concepts/ai-apps.md +++ b/docs/english/concepts/ai-apps.md @@ -24,10 +24,6 @@ The Agents & AI Apps feature comprises a unique messaging experience for Slack. That being said, using the `Assistant` class will streamline the process. And we already wrote this nice guide for you! -:::info -You _could_ go it alone and [listen](/tools/bolt-python/concepts/event-listening) for the `assistant_thread_started`, `assistant_thread_context_changed`, and `message.im` events (see implementation details below) in order to implement the AI features in your app. That being said, using the `Assistant` class will streamline the process. And we already wrote this nice guide for you! -::: - ## The `Assistant` class instance {#assistant-class} The `Assistant` class can be used to handle the incoming events expected from a user interacting with an app in Slack that has the Agents & AI Apps feature enabled. A typical flow would look like: @@ -101,15 +97,16 @@ While the `assistant_thread_started` and `assistant_thread_context_changed` even If you do provide your own `threadContextStore` property, it must feature `get` and `save` methods. -:::tip[Refer to the [module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments.] +:::tip[Refer to the [module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments.] ::: ## Handling a new thread {#handling-a-new-thread} When the user opens a new thread with your AI-enabled app, the [`assistant_thread_started`](/reference/events/assistant_thread_started) event will be sent to your app. -:::tip -When a user opens an app thread while in a channel, the channel info is stored as the thread's `AssistantThreadContext` data. You can grab that info by using the `get_thread_context` utility, as subsequent user message event payloads won't include the channel info. +:::tip[When a user opens an app thread while in a channel, the channel info is stored as the thread's `AssistantThreadContext` data.] + +You can grab that info by using the `get_thread_context` utility, as subsequent user message event payloads won't include the channel info. ::: ### Block Kit interactions in the app thread {#block-kit-interactions} @@ -260,9 +257,9 @@ When the user messages your app, the [`message.im`](/reference/events/message.im Messages sent to the app do not contain a [subtype](/reference/events/message#subtypes) and must be deduced based on their shape and any provided [message metadata](/messaging/message-metadata/). There are three utilities that are particularly useful in curating the user experience: -* [`say`](https://docs.slack.dev/bolt-python/reference/#slack_bolt.Say) -* [`setTitle`](https://docs.slack.dev/bolt-python/reference/#slack_bolt.SetTitle) -* [`setStatus`](https://docs.slack.dev/bolt-python/reference/#slack_bolt.SetStatus) +* [`say`](https://docs.slack.dev/tools/bolt-python/reference/#slack_bolt.Say) +* [`setTitle`](https://docs.slack.dev/tools/bolt-python/reference/#slack_bolt.SetTitle) +* [`setStatus`](https://docs.slack.dev/tools/bolt-python/reference/#slack_bolt.SetStatus) ```python ... diff --git a/docs/english/concepts/app-home.md b/docs/english/concepts/app-home.md index 8df8f875a..8b0e2cf11 100644 --- a/docs/english/concepts/app-home.md +++ b/docs/english/concepts/app-home.md @@ -4,7 +4,7 @@ You can subscribe to the [`app_home_opened`](/reference/events/app_home_opened) event to listen for when users open your App Home. -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python @app.event("app_home_opened") def update_home_tab(client, event, logger): diff --git a/docs/english/concepts/commands.md b/docs/english/concepts/commands.md index 8435f1b45..81167fb83 100644 --- a/docs/english/concepts/commands.md +++ b/docs/english/concepts/commands.md @@ -8,7 +8,7 @@ There are two ways to respond to slash commands. The first way is to use `say()` When setting up commands within your app configuration, you'll append `/slack/events` to your request URL. -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # The echo command simply echoes on command @app.command("/echo") diff --git a/docs/english/concepts/custom-steps-dynamic-options.md b/docs/english/concepts/custom-steps-dynamic-options.md index 1733c2dad..9a152daa0 100644 --- a/docs/english/concepts/custom-steps-dynamic-options.md +++ b/docs/english/concepts/custom-steps-dynamic-options.md @@ -214,7 +214,7 @@ A new `auto_acknowledge` flag allows you more granular control over whether spec #### Example {#bolt-py} -In [Bolt for Python](https://docs.slack.dev/bolt-python/), you can set `auto_acknowledge=False` on a specific function decorator. This allows you to manually control when the `ack()` event acknowledgement helper function is executed. It flips Bolt to synchronous `function_executed` event handling mode for the specific handler. +In [Bolt for Python](https://docs.slack.dev/tools/bolt-python/), you can set `auto_acknowledge=False` on a specific function decorator. This allows you to manually control when the `ack()` event acknowledgement helper function is executed. It flips Bolt to synchronous `function_executed` event handling mode for the specific handler. ```py @app.function("get-projects", auto_acknowledge=False) diff --git a/docs/english/concepts/custom-steps.md b/docs/english/concepts/custom-steps.md index a21104254..720c53421 100644 --- a/docs/english/concepts/custom-steps.md +++ b/docs/english/concepts/custom-steps.md @@ -11,7 +11,7 @@ Your app can use the `function()` method to listen to incoming [custom step requ You can reference your custom step's inputs using the `inputs` listener argument of type `dict`. -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn about the available listener arguments. +Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn about the available listener arguments. ```python # This sample custom step formats an input and outputs it diff --git a/docs/english/concepts/event-listening.md b/docs/english/concepts/event-listening.md index 4950f3428..d7b8e5930 100644 --- a/docs/english/concepts/event-listening.md +++ b/docs/english/concepts/event-listening.md @@ -4,7 +4,7 @@ You can listen to [any Events API event](/reference/events) using the `event()` The `event()` method requires an `eventType` of type `str`. -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # When a user joins the workspace, send a message in a predefined channel asking them to introduce themselves @app.event("team_join") diff --git a/docs/english/concepts/global-middleware.md b/docs/english/concepts/global-middleware.md index 7b8674dc2..dbcdeae99 100644 --- a/docs/english/concepts/global-middleware.md +++ b/docs/english/concepts/global-middleware.md @@ -4,7 +4,7 @@ Global middleware is run for all incoming requests, before any listener middlewa Both global and listener middleware must call `next()` to pass control of the execution chain to the next middleware. -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python @app.use def auth_acme(client, context, logger, payload, next): diff --git a/docs/english/concepts/listener-middleware.md b/docs/english/concepts/listener-middleware.md index 779c77299..c8bfc964e 100644 --- a/docs/english/concepts/listener-middleware.md +++ b/docs/english/concepts/listener-middleware.md @@ -4,7 +4,7 @@ Listener middleware is only run for the listener in which it's passed. You can p If your listener middleware is a quite simple one, you can use a listener matcher, which returns `bool` value (`True` for proceeding) instead of requiring `next()` method call. -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Listener middleware which filters out messages from a bot diff --git a/docs/english/concepts/message-listening.md b/docs/english/concepts/message-listening.md index 46fb5c8ad..be6e74678 100644 --- a/docs/english/concepts/message-listening.md +++ b/docs/english/concepts/message-listening.md @@ -3,7 +3,7 @@ To listen to messages that [your app has access to receive](/messaging/retrievin `message()` accepts an argument of type `str` or `re.Pattern` object that filters out any messages that don't match the pattern. -:::info[Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments.] +:::info[Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments.] ::: diff --git a/docs/english/concepts/message-sending.md b/docs/english/concepts/message-sending.md index 083605485..228a7b6b8 100644 --- a/docs/english/concepts/message-sending.md +++ b/docs/english/concepts/message-sending.md @@ -4,7 +4,7 @@ Within your listener function, `say()` is available whenever there is an associa In the case that you'd like to send a message outside of a listener or you want to do something more advanced (like handle specific errors), you can call `client.chat_postMessage` [using the client attached to your Bolt instance](/tools/bolt-python/concepts/web-api). -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Listens for messages containing "knock knock" and responds with an italicized "who's there?" @app.message("knock knock") diff --git a/docs/english/concepts/opening-modals.md b/docs/english/concepts/opening-modals.md index 0818b4c70..1f053539f 100644 --- a/docs/english/concepts/opening-modals.md +++ b/docs/english/concepts/opening-modals.md @@ -6,7 +6,7 @@ Your app receives `trigger_id` parameters in payloads sent to your Request URL t Read more about modal composition in the [API documentation](/surfaces/modals#composing_views). -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Listen for a shortcut invocation diff --git a/docs/english/concepts/select-menu-options.md b/docs/english/concepts/select-menu-options.md index acfcbe5ec..40d29472c 100644 --- a/docs/english/concepts/select-menu-options.md +++ b/docs/english/concepts/select-menu-options.md @@ -7,9 +7,9 @@ While it's recommended to use `action_id` for `external_select` menus, dialogs d To respond to options requests, you'll need to call `ack()` with a valid `options` or `option_groups` list. Both [external select response examples](/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select) and [dialog response examples](/reference/block-kit/block-elements/multi-select-menu-element#conversation_multi_select) can be found on our API site. -Additionally, you may want to apply filtering logic to the returned options based on user input. This can be accomplished by using the `payload` argument to your options listener and checking for the contents of the `value` property within it. Based on the `value` you can return different options. All listeners and middleware handlers in Bolt for Python have access to [many useful arguments](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) - be sure to check them out! +Additionally, you may want to apply filtering logic to the returned options based on user input. This can be accomplished by using the `payload` argument to your options listener and checking for the contents of the `value` property within it. Based on the `value` you can return different options. All listeners and middleware handlers in Bolt for Python have access to [many useful arguments](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) - be sure to check them out! -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Example of responding to an external_select options request @app.options("external_action") diff --git a/docs/english/concepts/shortcuts.md b/docs/english/concepts/shortcuts.md index 0276069e9..b28f0b352 100644 --- a/docs/english/concepts/shortcuts.md +++ b/docs/english/concepts/shortcuts.md @@ -12,7 +12,7 @@ When setting up shortcuts within your app configuration, as with other URLs, you ⚠️ Note that global shortcuts do **not** include a channel ID. If your app needs access to a channel ID, you may use a [`conversations_select`](/reference/block-kit/block-elements/multi-select-menu-element#conversation_multi_select) element within a modal. Message shortcuts do include a channel ID. -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # The open_modal shortcut listens to a shortcut with the callback_id "open_modal" @app.shortcut("open_modal") diff --git a/docs/english/concepts/updating-pushing-views.md b/docs/english/concepts/updating-pushing-views.md index e8405aa6b..8c05e79c8 100644 --- a/docs/english/concepts/updating-pushing-views.md +++ b/docs/english/concepts/updating-pushing-views.md @@ -12,7 +12,7 @@ To push a new view onto the view stack, you can use the built-in client to call Learn more about updating and pushing views in our [API documentation](/surfaces/modals) -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Listen for a button invocation with action_id `button_abc` (assume it's inside of a modal) @app.action("button_abc") diff --git a/docs/english/concepts/view-submissions.md b/docs/english/concepts/view-submissions.md index ee8ed4ca4..4ff4c2da7 100644 --- a/docs/english/concepts/view-submissions.md +++ b/docs/english/concepts/view-submissions.md @@ -58,7 +58,7 @@ def handle_view_closed(ack, body, logger): logger.info(body) ``` -Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. +Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments. ```python # Handle a view_submission request @app.view("view_1") diff --git a/docs/english/concepts/web-api.md b/docs/english/concepts/web-api.md index 01595776e..9cf436851 100644 --- a/docs/english/concepts/web-api.md +++ b/docs/english/concepts/web-api.md @@ -4,7 +4,7 @@ You can call [any Web API method](/reference/methods) using the `WebClient` prov The token used to initialize Bolt can be found in the `context` object, which is required to call most Web API methods. -:::info[Refer to [the module document](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments.] +:::info[Refer to [the module document](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments.] ::: diff --git a/docs/english/legacy/steps-from-apps.md b/docs/english/legacy/steps-from-apps.md index 05a593cdc..03b9fa8ff 100644 --- a/docs/english/legacy/steps-from-apps.md +++ b/docs/english/legacy/steps-from-apps.md @@ -30,9 +30,9 @@ The configuration object contains three keys: `edit`, `save`, and `execute`. Eac After instantiating a `WorkflowStep`, you can pass it into `app.step()`. Behind the scenes, your app will listen and respond to the step’s events using the callbacks provided in the configuration object. -Alternatively, steps from apps can also be created using the `WorkflowStepBuilder` class alongside a decorator pattern. For more information, including an example of this approach, [refer to the documentation](https://docs.slack.dev/bolt-python/reference/workflows/step/step.html#slack_bolt.workflows.step.step.WorkflowStepBuilder). +Alternatively, steps from apps can also be created using the `WorkflowStepBuilder` class alongside a decorator pattern. For more information, including an example of this approach, [refer to the documentation](https://docs.slack.dev/tools/bolt-python/reference/workflows/step/step.html#slack_bolt.workflows.step.step.WorkflowStepBuilder). -Refer to the module documents ([common](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/reference/workflows/step/utilities/index.html)) to learn the available arguments. +Refer to the module documents ([common](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/tools/bolt-python/reference/workflows/step/utilities/index.html)) to learn the available arguments. ```python import os @@ -76,7 +76,7 @@ Within the `edit` callback, the `configure()` utility can be used to easily open To learn more about opening configuration modals, [read the documentation](/legacy/legacy-steps-from-apps/). -Refer to the module documents ([common](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/reference/workflows/step/utilities/index.html)) to learn the available arguments. +Refer to the module documents ([common](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/tools/bolt-python/reference/workflows/step/utilities/index.html)) to learn the available arguments. ```python def edit(ack, step, configure): @@ -128,7 +128,7 @@ Within the `save` callback, the `update()` method can be used to save the builde To learn more about how to structure these parameters, [read the documentation](/legacy/legacy-steps-from-apps/). -Refer to the module documents ([common](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/reference/workflows/step/utilities/index.html)) to learn the available arguments. +Refer to the module documents ([common](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/tools/bolt-python/reference/workflows/step/utilities/index.html)) to learn the available arguments. ```python def save(ack, view, update): @@ -173,7 +173,7 @@ Using the `inputs` from the `save` callback, this is where you can make third-pa Within the `execute` callback, your app must either call `complete()` to indicate that the step's execution was successful, or `fail()` to indicate that the step's execution failed. -Refer to the module documents ([common](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/bolt-python/reference/workflows/step/utilities/index.html)) to learn the available arguments. +Refer to the module documents ([common](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html) / [step-specific](https://docs.slack.dev/tools/bolt-python/reference/workflows/step/utilities/index.html)) to learn the available arguments. ```python def execute(step, complete, fail): diff --git a/docs/english/tutorial/custom-steps.md b/docs/english/tutorial/custom-steps.md index 591ab1292..66dc16198 100644 --- a/docs/english/tutorial/custom-steps.md +++ b/docs/english/tutorial/custom-steps.md @@ -69,7 +69,7 @@ Field | Type | Description `type` | String | Defines the data type and can fall into one of two categories: primitives or Slack-specific. `title` | String | The label that appears in Workflow Builder when a user sets up this step in their workflow. `description` | String | The description that accompanies the input when a user sets up this step in their workflow. -`dynamic_options` | Object | For custom steps dynamic options in Workflow Builder, define this property and point to a custom step designed to return the set of dynamic elements once the step is added to a workflow within Workflow Builder. Dynamic options in Workflow Builder can be rendered in one of two ways: as a drop-down menu (single-select or multi-select), or as a set of fields. Refer to custom steps dynamic options for Workflow Builder using [Bolt for JavaScript](/tools/bolt-js/concepts/custom-steps-dynamic-options/) or [Bolt for Python](https://docs.slack.dev/bolt-python/concepts/custom-steps-dynamic-options/) for more details. +`dynamic_options` | Object | For custom steps dynamic options in Workflow Builder, define this property and point to a custom step designed to return the set of dynamic elements once the step is added to a workflow within Workflow Builder. Dynamic options in Workflow Builder can be rendered in one of two ways: as a drop-down menu (single-select or multi-select), or as a set of fields. Refer to custom steps dynamic options for Workflow Builder using [Bolt for JavaScript](/tools/bolt-js/concepts/custom-steps-dynamic-options/) or [Bolt for Python](https://docs.slack.dev/tools/bolt-python/concepts/custom-steps-dynamic-options/) for more details. `is_required` | Boolean | Indicates whether or not the input is required by the step in order to run. If it’s required and not provided, the user will not be able to save the configuration nor use the step in their workflow. This property is available only in v1 of the manifest. We recommend v2, using the `required` array as noted in the example above. `hint` | String | Helper text that appears below the input when a user sets up this step in their workflow. @@ -225,7 +225,7 @@ The second argument is the callback function, or the logic that will run when yo Field | Description ------|------------ -`client` | A `WebClient` instance used to make things happen in Slack. From sending messages to opening modals, `client` makes it all happen. For a full list of available methods, refer to the [Web API methods](/reference/methods). Read more about the `WebClient` for Bolt Python [here](https://docs.slack.dev/bolt-python/concepts/web-api/). +`client` | A `WebClient` instance used to make things happen in Slack. From sending messages to opening modals, `client` makes it all happen. For a full list of available methods, refer to the [Web API methods](/reference/methods). Read more about the `WebClient` for Bolt Python [here](https://docs.slack.dev/tools/bolt-python/concepts/web-api/). `complete` | A utility method that invokes `functions.completeSuccess`. This method indicates to Slack that a step has completed successfully without issue. When called, `complete` requires you include an `outputs` object that matches your step definition in [`output_parameters`](#inputs-outputs). `fail` | A utility method that invokes `functions.completeError`. True to its name, this method signals to Slack that a step has failed to complete. The `fail` method requires an argument of `error` to be sent along with it, which is used to help users understand what went wrong. `inputs` | An alias for the `input_parameters` that were provided to the step upon execution. diff --git a/docs/english/tutorial/modals/modals.md b/docs/english/tutorial/modals/modals.md index 288dbfa14..ee6d1e0d8 100644 --- a/docs/english/tutorial/modals/modals.md +++ b/docs/english/tutorial/modals/modals.md @@ -131,4 +131,4 @@ All done! 🎉 You've created your first slash command using Block Kit and modal ## Next steps {#next-steps} -If you want to learn more about Bolt for Python, refer to the [Getting Started guide](https://docs.slack.dev/bolt-python/getting-started). \ No newline at end of file +If you want to learn more about Bolt for Python, refer to the [Getting Started guide](https://docs.slack.dev/tools/bolt-python/getting-started). \ No newline at end of file diff --git a/docs/japanese/concepts/acknowledge.md b/docs/japanese/concepts/acknowledge.md index 52610d655..2b3756009 100644 --- a/docs/japanese/concepts/acknowledge.md +++ b/docs/japanese/concepts/acknowledge.md @@ -8,7 +8,7 @@ FaaS / serverless 環境を使う場合、 `ack()` するタイミングが異なります。 これに関する詳細は [Lazy listeners (FaaS)](/tools/bolt-python/concepts/lazy-listeners) を参照してください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 外部データを使用する選択メニューオプションに応答するサンプル @app.options("menu_selection") diff --git a/docs/japanese/concepts/actions.md b/docs/japanese/concepts/actions.md index 40c002006..60019ebb7 100644 --- a/docs/japanese/concepts/actions.md +++ b/docs/japanese/concepts/actions.md @@ -8,7 +8,7 @@ Bolt アプリは `action` メソッドを用いて、ボタンのクリック `action()` を使ったすべての例で `ack()` が使用されていることに注目してください。アクションのリスナー内では、Slack からのリクエストを受信したことを確認するために、`ack()` 関数を呼び出す必要があります。これについては、[リクエストの確認](/tools/bolt-python/concepts/acknowledge)セクションで説明しています。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 'approve_button' という action_id のブロックエレメントがトリガーされるたびに、このリスナーが呼び出させれる @app.action("approve_button") @@ -45,7 +45,7 @@ def update_message(ack, body, client): 2 つ目は、`respond()` を使用する方法です。これは、アクションに関連づけられた `response_url` を使ったメッセージ送信を行うためのユーティリティです。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 'approve_button' という action_id のインタラクティブコンポーネントがトリガーされると、このリスナーが呼ばれる @app.action("approve_button") diff --git a/docs/japanese/concepts/app-home.md b/docs/japanese/concepts/app-home.md index 5f4cd92c5..d950221ad 100644 --- a/docs/japanese/concepts/app-home.md +++ b/docs/japanese/concepts/app-home.md @@ -4,7 +4,7 @@ [`app_home_opened`](/reference/events/app_home_opened) イベントをサブスクライブすると、ユーザーが App Home を開く操作をリッスンできます。 -指定可能な引数の一覧は [モジュールドキュメント](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html)を参考にしてください。 +指定可能な引数の一覧は [モジュールドキュメント](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html)を参考にしてください。 ```python @app.event("app_home_opened") diff --git a/docs/japanese/concepts/assistant.md b/docs/japanese/concepts/assistant.md index 3773ac664..e819f5361 100644 --- a/docs/japanese/concepts/assistant.md +++ b/docs/japanese/concepts/assistant.md @@ -68,7 +68,7 @@ def respond_in_assistant_thread( app.use(assistant) ``` -リスナーに指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +リスナーに指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ユーザーがチャンネルの横でアシスタントスレッドを開いた場合、そのチャンネルの情報は、そのスレッドの `AssistantThreadContext` データとして保持され、 `get_thread_context` ユーティリティを使ってアクセスすることができます。Bolt がこのユーティリティを提供している理由は、後続のユーザーメッセージ投稿のイベントペイロードに最新のスレッドのコンテキスト情報は含まれないためです。そのため、アプリはコンテキスト情報が変更されたタイミングでそれを何らかの方法で保存し、後続のメッセージイベントのリスナーコードから参照できるようにする必要があります。 @@ -103,7 +103,7 @@ app = App( assistant = Assistant() -# リスナーに指定可能な引数の一覧は https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html を参照してください +# リスナーに指定可能な引数の一覧は https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html を参照してください @assistant.thread_started def start_assistant_thread(say: Say): diff --git a/docs/japanese/concepts/commands.md b/docs/japanese/concepts/commands.md index 10676129d..c89568dbe 100644 --- a/docs/japanese/concepts/commands.md +++ b/docs/japanese/concepts/commands.md @@ -8,7 +8,7 @@ アプリの設定でコマンドを登録するときは、リクエスト URL の末尾に `/slack/events` をつけます。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # echoコマンドは受け取ったコマンドをそのまま返す @app.command("/echo") diff --git a/docs/japanese/concepts/event-listening.md b/docs/japanese/concepts/event-listening.md index 61b12951c..c13638226 100644 --- a/docs/japanese/concepts/event-listening.md +++ b/docs/japanese/concepts/event-listening.md @@ -4,7 +4,7 @@ `event()` メソッドには `str` 型の `eventType` を指定する必要があります。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # ユーザーがワークスペースに参加した際に、自己紹介を促すメッセージを指定のチャンネルに送信 @app.event("team_join") diff --git a/docs/japanese/concepts/global-middleware.md b/docs/japanese/concepts/global-middleware.md index 0b188798d..884008090 100644 --- a/docs/japanese/concepts/global-middleware.md +++ b/docs/japanese/concepts/global-middleware.md @@ -4,7 +4,7 @@ グローバルミドルウェアでもリスナーミドルウェアでも、次のミドルウェアに実行チェーンの制御をリレーするために、`next()` を呼び出す必要があります。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python @app.use diff --git a/docs/japanese/concepts/listener-middleware.md b/docs/japanese/concepts/listener-middleware.md index b8fcae7cf..2b3ea9323 100644 --- a/docs/japanese/concepts/listener-middleware.md +++ b/docs/japanese/concepts/listener-middleware.md @@ -4,7 +4,7 @@ 非常にシンプルなリスナーミドルウェアの場合であれば、`next()` メソッドを呼び出す代わりに `bool` 値(処理を継続したい場合は `True`)を返すだけで済む「リスナーマッチャー」を使うとよいでしょう。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # ボットからのメッセージをフィルタリングするリスナーミドルウェア diff --git a/docs/japanese/concepts/message-listening.md b/docs/japanese/concepts/message-listening.md index 95177d04a..824ac67c8 100644 --- a/docs/japanese/concepts/message-listening.md +++ b/docs/japanese/concepts/message-listening.md @@ -4,7 +4,7 @@ `message()` の引数には `str` 型または `re.Pattern` オブジェクトを指定できます。この条件のパターンに一致しないメッセージは除外されます。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # '👋' が含まれるすべてのメッセージに一致 @app.message(":wave:") diff --git a/docs/japanese/concepts/message-sending.md b/docs/japanese/concepts/message-sending.md index 52e1de4b8..a299144b6 100644 --- a/docs/japanese/concepts/message-sending.md +++ b/docs/japanese/concepts/message-sending.md @@ -4,7 +4,7 @@ リスナー関数の外でメッセージを送信したい場合や、より高度な処理(特定のエラーの処理など)を実行したい場合は、[Bolt インスタンスにアタッチされたクライアント](/tools/bolt-python/concepts/web-api)の `client.chat_postMessage` を呼び出します。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 'knock knock' が含まれるメッセージをリッスンし、イタリック体で 'Who's there?' と返信 @app.message("knock knock") diff --git a/docs/japanese/concepts/opening-modals.md b/docs/japanese/concepts/opening-modals.md index 632c3ca83..68e3b947c 100644 --- a/docs/japanese/concepts/opening-modals.md +++ b/docs/japanese/concepts/opening-modals.md @@ -6,7 +6,7 @@ モーダルの生成方法についての詳細は、API ドキュメントを参照してください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # ショートカットの呼び出しをリッスン diff --git a/docs/japanese/concepts/select-menu-options.md b/docs/japanese/concepts/select-menu-options.md index 790a3c160..1c2d41c58 100644 --- a/docs/japanese/concepts/select-menu-options.md +++ b/docs/japanese/concepts/select-menu-options.md @@ -8,9 +8,9 @@ オプションのリクエストに応答するときは、有効なオプションを含む `options` または `option_groups` のリストとともに `ack()` を呼び出す必要があります。API サイトにある[外部データを使用する選択メニューに応答するサンプル例](/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select)と、[ダイアログでの応答例](/legacy/legacy-dialogs/#dynamic_select_elements_external)を参考にしてください。 -さらに、ユーザーが入力したキーワードに基づいたオプションを返すようフィルタリングロジックを適用することもできます。 これは `payload` という引数の ` value` の値に基づいて、それぞれのパターンで異なるオプションの一覧を返すように実装することができます。 Bolt for Python のすべてのリスナーやミドルウェアでは、[多くの有用な引数](https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html)にアクセスすることができますので、チェックしてみてください。 +さらに、ユーザーが入力したキーワードに基づいたオプションを返すようフィルタリングロジックを適用することもできます。 これは `payload` という引数の ` value` の値に基づいて、それぞれのパターンで異なるオプションの一覧を返すように実装することができます。 Bolt for Python のすべてのリスナーやミドルウェアでは、[多くの有用な引数](https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html)にアクセスすることができますので、チェックしてみてください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 外部データを使用する選択メニューオプションに応答するサンプル例 @app.options("external_action") diff --git a/docs/japanese/concepts/shortcuts.md b/docs/japanese/concepts/shortcuts.md index 4fe74fce0..d9a8ba050 100644 --- a/docs/japanese/concepts/shortcuts.md +++ b/docs/japanese/concepts/shortcuts.md @@ -12,7 +12,7 @@ ⚠️ グローバルショートカットのペイロードにはチャンネル ID が **含まれません**。アプリでチャンネル ID を取得する必要がある場合は、モーダル内に [`conversations_select`](/reference/block-kit/block-elements/multi-select-menu-element#conversation_multi_select) エレメントを配置します。メッセージショートカットにはチャンネル ID が含まれます。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # 'open_modal' という callback_id のショートカットをリッスン @app.shortcut("open_modal") diff --git a/docs/japanese/concepts/updating-pushing-views.md b/docs/japanese/concepts/updating-pushing-views.md index 9233289d7..cc32f5b69 100644 --- a/docs/japanese/concepts/updating-pushing-views.md +++ b/docs/japanese/concepts/updating-pushing-views.md @@ -12,7 +12,7 @@ モーダルの更新と多重表示に関する詳細は、API ドキュメントを参照してください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # モーダルに含まれる、`button_abc` という action_id のボタンの呼び出しをリッスン diff --git a/docs/japanese/concepts/view-submissions.md b/docs/japanese/concepts/view-submissions.md index 7b1db4136..5ae78f173 100644 --- a/docs/japanese/concepts/view-submissions.md +++ b/docs/japanese/concepts/view-submissions.md @@ -56,7 +56,7 @@ def handle_view_closed(ack, body, logger): logger.info(body) ``` -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python # view_submission リクエストを処理 diff --git a/docs/japanese/concepts/web-api.md b/docs/japanese/concepts/web-api.md index 91870805e..7a674b9b2 100644 --- a/docs/japanese/concepts/web-api.md +++ b/docs/japanese/concepts/web-api.md @@ -4,7 +4,7 @@ Bolt の初期化に使用するトークンは `context` オブジェクトに設定されます。このトークンは、多くの Web API メソッドを呼び出す際に必要となります。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください。 ```python @app.message("wake me up") def say_hello(client, message): diff --git a/docs/japanese/getting-started.md b/docs/japanese/getting-started.md index 0a2b85d3a..6ba01c143 100644 --- a/docs/japanese/getting-started.md +++ b/docs/japanese/getting-started.md @@ -193,7 +193,7 @@ app = App(token=os.environ.get("SLACK_BOT_TOKEN")) # 'こんにちは' を含むメッセージをリッスンします # 指定可能なリスナーのメソッド引数の一覧は以下のモジュールドキュメントを参考にしてください: -# https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html +# https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html @app.message("こんにちは") def message_hello(message, say): # イベントがトリガーされたチャンネルへ say() でメッセージを送信します @@ -219,7 +219,7 @@ app = App( # 'hello' を含むメッセージをリッスンします # 指定可能なリスナーのメソッド引数の一覧は以下のモジュールドキュメントを参考にしてください: -# https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html +# https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html @app.message("hello") def message_hello(message, say): # イベントがトリガーされたチャンネルへ say() でメッセージを送信します diff --git a/docs/japanese/legacy/steps-from-apps.md b/docs/japanese/legacy/steps-from-apps.md index 0d69d46aa..a7ef2e04a 100644 --- a/docs/japanese/legacy/steps-from-apps.md +++ b/docs/japanese/legacy/steps-from-apps.md @@ -22,9 +22,9 @@ `WorkflowStep` のインスタンスを作成したら、それを`app.step()` メソッドに渡します。これによって、アプリがワークフローステップのイベントをリッスンし、設定オブジェクトで指定されたコールバックを使ってそれに応答できるようになります。 -また、デコレーターとして利用できる `WorkflowStepBuilder` クラスを使ってワークフローステップを定義することもできます。 詳細は、[こちらのドキュメント](https://docs.slack.dev/bolt-python/reference/workflows/step/step.html#slack_bolt.workflows.step.step.WorkflowStepBuilder)のコード例などを参考にしてください。 +また、デコレーターとして利用できる `WorkflowStepBuilder` クラスを使ってワークフローステップを定義することもできます。 詳細は、[こちらのドキュメント](https://docs.slack.dev/tools/bolt-python/reference/workflows/step/step.html#slack_bolt.workflows.step.step.WorkflowStepBuilder)のコード例などを参考にしてください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 ```python import os @@ -67,7 +67,7 @@ app.step(ws) 設定モーダルの開き方に関する詳細は、[こちらのドキュメント](/legacy/legacy-steps-from-apps/legacy-steps-from-apps-configuration-view-object)を参照してください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 ```python def edit(ack, step, configure): @@ -119,7 +119,7 @@ app.step(ws) これらのパラメータの構成方法に関する詳細は、[こちらのドキュメント](/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step-object)を参照してください。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 ```python def save(ack, view, update): @@ -164,7 +164,7 @@ app.step(ws) `execute` コールバック内では、`complete()` を呼び出してステップの実行が成功したことを示すか、`fail()` を呼び出してステップの実行が失敗したことを示す必要があります。 -指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 +指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用 ```python def execute(step, complete, fail): inputs = step["inputs"] diff --git a/examples/getting_started/app.py b/examples/getting_started/app.py index 3fc045209..aa5223d51 100644 --- a/examples/getting_started/app.py +++ b/examples/getting_started/app.py @@ -10,7 +10,7 @@ # Listens to incoming messages that contain "hello" # To learn available listener method arguments, -# visit https://docs.slack.dev/bolt-python/reference/kwargs_injection/args.html +# visit https://docs.slack.dev/tools/bolt-python/reference/kwargs_injection/args.html @app.message("hello") def message_hello(message, say): # say() sends a message to the channel where the event was triggered From bec2b6c46edb9a0e529b273c04626f5e7b843d08 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 6 Aug 2025 14:35:10 -0700 Subject: [PATCH 41/42] smaller links --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 55dc0ef2f..c6b6a536c 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,11 @@
Python Versions - + Documentation

-A Python framework to build Slack apps in a flash with the latest platform features. Read the [getting started guide](https://tools.slack.dev/bolt-python/getting-started) and look at our [code examples](https://github.com/slackapi/bolt-python/tree/main/examples) to learn how to build apps using Bolt. The Python module documents are available [here](https://tools.slack.dev/bolt-python/reference/). +A Python framework to build Slack apps in a flash with the latest platform features. Read the [getting started guide](https://docs.slack.dev/tools/bolt-python/getting-started) and look at our [code examples](https://github.com/slackapi/bolt-python/tree/main/examples) to learn how to build apps using Bolt. The Python module documents are available [here](https://docs.slack.dev/tools/bolt-python/reference/). ## Setup From e14612739025648287a2315c8c902e7447785845 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Wed, 6 Aug 2025 15:13:25 -0700 Subject: [PATCH 42/42] tips --- docs/english/building-an-app.md | 4 ++-- docs/japanese/getting-started.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/english/building-an-app.md b/docs/english/building-an-app.md index 128ef42c5..87b26163b 100644 --- a/docs/english/building-an-app.md +++ b/docs/english/building-an-app.md @@ -267,9 +267,9 @@ With Socket Mode on, basic interactivity is enabled by default, so no further ac Similar to events, you'll need to specify a URL for Slack to send the action (such as _user clicked a button_). Back on your app configuration page, click on **Interactivity & Shortcuts** on the left side. You'll see that there's another **Request URL** box. -:::tip +:::tip[By default, Bolt is configured to use the same endpoint for interactive components that it uses for events, so use the same request URL as above (for example, `https://8e8ec2d7.ngrok.io/slack/events`).] -By default, Bolt is configured to use the same endpoint for interactive components that it uses for events, so use the same request URL as above (for example, `https://8e8ec2d7.ngrok.io/slack/events`). Press the **Save Changes** button in the lower right hand corner, and that's it. Your app is set up to handle interactivity! +Press the **Save Changes** button in the lower right hand corner, and that's it. Your app is set up to handle interactivity! ::: diff --git a/docs/japanese/getting-started.md b/docs/japanese/getting-started.md index 6ba01c143..2ec34d193 100644 --- a/docs/japanese/getting-started.md +++ b/docs/japanese/getting-started.md @@ -156,7 +156,7 @@ import TabItem from '@theme/TabItem'; 2. リクエスト URL を追加します。 Slack は、イベントに対応する HTTP POST リクエストをこの [リクエスト URL](/apis/events-api/#subscribing) に送信します。 Bolt は、`/slack/events` パスを使用して、すべての受信リクエスト (ショートカット、イベント、対話性ペイロードなど) をリッスンします。アプリ構成内でリクエスト URL を構成する場合は、`/slack/events` を追加します。 「https://あなたのドメイン/slack/events」。 💡 Bolt アプリが実行されている限り、URL は検証されるはずです。 -:::tip +:::tip ローカル開発の場合、ngrok などのプロキシ サービスを使用してパブリック URL を作成し、リクエストを開発環境にトンネリングできます。このトンネルの作成方法については、[ngrok のスタート ガイド](https://ngrok.com/docs#getting-started-expose) を参照してください。アプリをホスティングする際には、Slack 開発者がアプリをホストするために使用する最も一般的なホスティング プロバイダーを [API サイト](/app-management/hosting-slack-apps) に集めました。

kuHci1T>%df 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ÁL-1d-(Q|-QVD5f?wX!S;g7ykz;DfF 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�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 diff --git a/docs/static/img/favicon.ico b/docs/static/img/favicon.ico deleted file mode 100644 index e6e9a4aa71ffae29bbfaeacc2bb431272df45cc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24499 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 diff --git a/docs/static/img/slack-logo-on-white.png b/docs/static/img/slack-logo-on-white.png deleted file mode 100644 index 2a73996c6c402db042920a47e65a82be85e25e1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25811 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 Q{izOvV`#l%UB?^$2eLeXjsO4v diff --git a/docs/static/img/slack-logo.svg b/docs/static/img/slack-logo.svg deleted file mode 100644 index fb55f7245..000000000 --- a/docs/static/img/slack-logo.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/scripts/generate_api_docs.sh b/scripts/generate_api_docs.sh index 68988f428..5362849f9 100755 --- a/scripts/generate_api_docs.sh +++ b/scripts/generate_api_docs.sh @@ -5,6 +5,6 @@ script_dir=`dirname $0` cd ${script_dir}/.. pip install -U pdoc3 -rm -rf docs/static/api-docs -pdoc slack_bolt --html -o docs/static/api-docs -open docs/static/api-docs/slack_bolt/index.html +rm -rf docs/api-docs +pdoc slack_bolt --html -o docs/api-docs +open docs/api-docs/slack_bolt/index.html From 8e26628b648a3e45f3edc370cd665401834aba38 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Fri, 27 Jun 2025 15:57:55 -0700 Subject: [PATCH 02/42] new image links --- docs/english/getting-started.md | 4 +-- .../english/tutorial/ai-chatbot/ai-chatbot.md | 16 ++++----- .../custom-steps-workflow-builder-existing.md | 16 ++++----- .../custom-steps-workflow-builder-new.md | 34 +++++++++---------- docs/english/tutorial/modals/modals.md | 10 +++--- docs/japanese/getting-started.md | 4 +-- 6 files changed, 42 insertions(+), 42 deletions(-) diff --git a/docs/english/getting-started.md b/docs/english/getting-started.md index 509a4cd16..840a17d09 100644 --- a/docs/english/getting-started.md +++ b/docs/english/getting-started.md @@ -25,7 +25,7 @@ After you fill out an app name (_you can change it later_) and pick a workspace This page contains an overview of your app in addition to important credentials you'll need later. -![Basic Information page](/img/basic-information-page.png "Basic Information page") +![Basic Information page](/img/bolt-python/basic-information-page.png "Basic Information page") Look around, add an app icon and description, and then let's start configuring your app 🔩 @@ -49,7 +49,7 @@ We're going to use bot and app-level tokens for this guide. 4. Once you authorize the installation, you'll land on the **OAuth & Permissions** page and see a **Bot User OAuth Access Token**. -![OAuth Tokens](/img/bot-token.png "Bot OAuth Token") +![OAuth Tokens](/img/bolt-python/bot-token.png "Bot OAuth Token") 5. Then head over to **Basic Information** and scroll down under the App Token section and click **Generate Token and Scopes** to generate an app-level token. Add the `connections:write` scope to this token and save the generated `xapp` token, we'll use both these tokens in just a moment. diff --git a/docs/english/tutorial/ai-chatbot/ai-chatbot.md b/docs/english/tutorial/ai-chatbot/ai-chatbot.md index 7db10b722..f6906c478 100644 --- a/docs/english/tutorial/ai-chatbot/ai-chatbot.md +++ b/docs/english/tutorial/ai-chatbot/ai-chatbot.md @@ -100,7 +100,7 @@ Navigate to the Bolty **App Home** and select a provider from the drop-down menu If you don't see Bolty listed under **Apps** in your workspace right away, never fear! You can mention **@Bolty** in a public channel to add the app, then navigate to your **App Home**. -![Choose your AI provider](/img/tutorials/ai-chatbot/6.png) +![Choose your AI provider](6.png) ## Setting up your workflow {#workflow} @@ -108,11 +108,11 @@ Within your development workspace, open Workflow Builder by clicking on your wor Click **Untitled Workflow** at the top to rename your workflow. For this tutorial, we'll call the workflow **Welcome to the channel**. Enter a description, such as _Summarizes channels for new members_, and click **Save**. -![Setting up a new workflow](/img/tutorials/ai-chatbot/1.png) +![Setting up a new workflow](1.png) Select **Choose an event** under **Start the workflow...**, and then choose **When a person joins a channel**. Select the channel name from the drop-down menu and click **Save**. -![Start the workflow](/img/tutorials/ai-chatbot/2.png) +![Start the workflow](2.png) Under **Then, do these things**, click **Add steps** and complete the following: @@ -121,20 +121,20 @@ Under **Then, do these things**, click **Add steps** and complete the following: 3. Under **Add a message**, enter a short message, such as _Hi! Welcome to `{}The channel that the user joined`. Would you like a summary of the recent conversation?_ Note that the _`{}The channel that the user joined`_ is a variable; you can insert it by selecting **{}Insert a variable** at the bottom of the message text box. 4. Select the **Add Button** button, and name the button _Yes, give me a summary_. Click **Done**. -![Send a message](/img/tutorials/ai-chatbot/3.png) +![Send a message](3.png) We'll add two more steps under the **Then, do these things** section. First, scroll to the bottom of the list of steps and choose **Custom**, then choose **Bolty** and **Bolty Custom Function**. In the **Channel** drop-down menu, select **Channel that the user joined**. Click **Save**. -![Bolty custom function](/img/tutorials/ai-chatbot/4.png) +![Bolty custom function](4.png) For the final step, complete the following: 1. Choose **Messages** and then **Send a message to a person**. Under **Select a member**, choose **Person who clicked the button** from the drop-down menu. 2. Under **Add a message**, click **Insert a variable** and choose **`{}Summary`** under the **Bolty Custom Function** section in the list that appears. Click **Save**. -![Summary](/img/tutorials/ai-chatbot/5.png) +![Summary](5.png) When finished, click **Finish Up**, then click **Publish** to make the workflow available in your workspace. @@ -149,7 +149,7 @@ In order for Bolty to provide summaries of recent conversation in a channel, Bol To test this, leave the channel you just invited Bolty to and rejoin it. This will kick off your workflow and you'll receive a direct message from **Welcome to the channel**. Click the **Yes, give me a summary** button, and Bolty will summarize the recent conversations in the channel you joined. -![Channel summary](/img/tutorials/ai-chatbot/7.png) +![Channel summary](7.png) The central part of this functionality is shown in the following code snippet. Note the use of the [`user_context`](https://tools.slack.dev/deno-slack-sdk/reference/slack-types#usercontext) object, a Slack type that represents the user who is interacting with our workflow, as well as the `history` of the channel that will be summarized, which includes the ten most recent messages. @@ -191,7 +191,7 @@ To ask Bolty a question, you can chat with Bolty in any channel the app is in. U You can also navigate to **Bolty** in your **Apps** list and select the **Messages** tab to chat with Bolty directly. -![Ask Bolty](/img/tutorials/ai-chatbot/8.png) +![Ask Bolty](8.png) ## Next steps {#next-steps} diff --git a/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md b/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md index e5c584a4c..e30e59ffe 100644 --- a/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md +++ b/docs/english/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing.md @@ -28,7 +28,7 @@ In order to add custom workflow steps to an app, the app also needs to be org-re Navigate to **Org Level Apps** in the left nav and click **Opt-In**, then confirm **Yes, Opt-In**. -![Make your app org-ready](/img/tutorials/custom-steps-wfb-existing/org-ready.png) +![Make your app org-ready](org-ready.png) ## Adding a new workflow step {#add-step} @@ -54,19 +54,19 @@ Navigate to **App Manifest** in the left nav and add the `function_executed` eve Navigate to **Workflow Steps** in the left nav and click **Add Step**. This is where we'll configure our step's inputs, outputs, name, and description. -![Add step](/img/tutorials/custom-steps-wfb-existing/add-step.png) +![Add step](add-step.png) For illustration purposes in this tutorial, we're going to write a custom step called Request Time Off. When the step is invoked, a message will be sent to the provided manager with an option to approve or deny the time-off request. When the manager takes an action (approves or denies the request), a message is posted with the decision and the manager who made the decision. The step will take two user IDs as inputs, representing the requesting user and their manager, and it will output both of those user IDs as well as the decision made. Add the pertinent details to the step: -![Define step](/img/tutorials/custom-steps-wfb-existing/define-step.png) +![Define step](define-step.png) Remember this `callback_id`. We will use this later when implementing a function listener. Then add the input and output parameters: -![Add inputs](/img/tutorials/custom-steps-wfb-existing/inputs.png) +![Add inputs](inputs.png) -![Add outputs](/img/tutorials/custom-steps-wfb-existing/outputs.png) +![Add outputs](outputs.png) Save your changes. @@ -260,11 +260,11 @@ Click the button to create a **New Workflow**, then **Build Workflow**. Choose t In the **Steps** pane to the right, search for your app name and locate the **Request time off** step we created. -![Find step](/img/tutorials/custom-steps-wfb-existing/find-step.png) +![Find step](find-step.png) Select the step and choose the desired inputs and click **Save**. -![Step inputs](/img/tutorials/custom-steps-wfb-existing/step-inputs.png) +![Step inputs](step-inputs.png) Next, click **Finish Up**, give your workflow a name and description, then click **Publish**. Copy the link for your workflow on the next screen, then click **Done**. @@ -272,7 +272,7 @@ Next, click **Finish Up**, give your workflow a name and description, then click In any channel where your app is installed, paste the link you copied and send it as a message. The link will unfurl into a button to start the workflow. Click the button to start the workflow. If you set yourself up as the manager, you will then see a message from your app. Pressing either button will return a confirmation or denial of your time off request. -![Message](/img/tutorials/custom-steps-wfb-existing/app-message.png) +![Message](app-message.png) ## Next steps {#next-steps} diff --git a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md index 9d01b8676..6af5b2958 100644 --- a/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md +++ b/docs/english/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new.md @@ -58,7 +58,7 @@ We now have a Bolt app ready for development! Open the `manifest.json` file and Open a browser and navigate to [your apps page](https://api.slack.com/apps). This is where we will create a new app with our previously copied manifest details. Click the **Create New App** button, then select **From an app manifest** when prompted to choose how you'd like to configure your app's settings. -![Create app from manifest](/img/tutorials/custom-steps-wfb-new/manifest.png) +![Create app from manifest](manifest.png) Next, select a workspace where you have permissions to install apps, and click **Next**. Select the **JSON** tab and clear the existing contents. Paste the contents of the `manifest.json` file you previously copied. @@ -74,7 +74,7 @@ Another configuration setting to note is **Socket Mode**. We have turned this on Clicking on **Workflow Steps** in the left nav will show you that one workflow step has been added! This reflects the `function` defined in our manifest: functions are workflow steps. We will get to this step's implementation later. -![Workflow step](/img/tutorials/custom-steps-wfb-new/workflow-step.png) +![Workflow step](workflow-step.png) ### Tokens {#tokens} @@ -85,17 +85,17 @@ In order to connect our app here with the logic of our sample code set up locall To generate an app token, navigate to **Basic Information** and scroll down to **App-Level Token**. -![App token](/img/tutorials/custom-steps-wfb-new/app-token.png) +![App token](app-token.png) Click **Generate Token and Scopes**, then **Add Scope** and choose `connections:write`. Choose a name for your token and click **Generate**. Copy that value, save it somewhere accessible, and click **Done** to close out of the modal. Next up is the bot token. We can only get this token by installing the app into the workspace. Navigate to **Install App** and click the button to install, choosing **Allow** at the next screen. -![Install app](/img/tutorials/custom-steps-wfb-new/install.png) +![Install app](install.png) You will then have a bot token. Again, copy that value and save it somewhere accessible. -![Bot token](/img/tutorials/custom-steps-wfb-new/bot-token.png) +![Bot token](bot-token.png) 💡 Treat your tokens like passwords and keep them safe. Your app uses them to post and retrieve information from Slack workspaces. Minimally, do NOT commit them to version control. @@ -130,15 +130,15 @@ The starter project you cloned contains a sample custom step lovingly titled “ In the Slack Client of your development workspace, open Workflow Builder by clicking on the workspace name, **Tools**, then **Workflow Builder**. Create a new workflow, then select **Build Workflow**: -![Creating a new workflow](/img/tutorials/custom-steps-wfb-new/wfb-1.png) +![Creating a new workflow](wfb-1.png) Select **Choose an event** under **Start the workflow...**, then **From a link in Slack** to configure this workflow to start when someone clicks its shortcut link: -![Starting a new workflow from a shortcut link](/img/tutorials/custom-steps-wfb-new/wfb-2.png) +![Starting a new workflow from a shortcut link](wfb-2.png) Click the **Continue** button to confirm that this is workflow should start with a shortcut link: -![Confirming a new shortcut workflow setup](/img/tutorials/custom-steps-wfb-new/wfb-3.png) +![Confirming a new shortcut workflow setup](wfb-3.png) Find the sample step provided in the template by either searching for the name of your app (e.g., `Bolt Custom Step`) or the name of your step (e.g. `Sample step`) in the Steps search bar. @@ -146,43 +146,43 @@ If you search by app name, any custom step that your app has defined will be lis Add the “Sample step" in the search results to the workflow: -![Adding the sample step to the workflow](/img/tutorials/custom-steps-wfb-new/wfb-4.png) +![Adding the sample step to the workflow](wfb-4.png) As soon as you add the “Sample step" to the workflow, a modal will appear to configure the step's input—in this case, a user variable: -![Configuring the sample step's inputs](/img/tutorials/custom-steps-wfb-new/wfb-5.png) +![Configuring the sample step's inputs](wfb-5.png) Configure the user input to be “Person who used this workflow”, then click the **Save** button: -![Saving the sample step after configuring the user input](/img/tutorials/custom-steps-wfb-new/wfb-6.png) +![Saving the sample step after configuring the user input](wfb-6.png) Click the **Finish Up** button, then provide a name and description for your workflow. Finally, click the **Publish** button: -![Publishing a workflow](/img/tutorials/custom-steps-wfb-new/wfb-7.png) +![Publishing a workflow](wfb-7.png) Copy the shortcut link, then exit Workflow Builder and paste the link to a message in any channel you’re in: -![Copying a workflow link](/img/tutorials/custom-steps-wfb-new/wfb-8.png) +![Copying a workflow link](wfb-8.png) After you send a message containing the shortcut link, the link will unfurl and you’ll see a **Start Workflow** button. Click the **Start Workflow** button: -![Starting your new workflow](/img/tutorials/custom-steps-wfb-new/wfb-9.png) +![Starting your new workflow](wfb-9.png) You should see a new direct message from your app: -![A new direct message from your app](/img/tutorials/custom-steps-wfb-new/wfb-10.png) +![A new direct message from your app](wfb-10.png) The message from your app asks you to click the **Complete step** button: -![A new direct message from your app](/img/tutorials/custom-steps-wfb-new/wfb-11.png) +![A new direct message from your app](wfb-11.png) Once you click the button, the direct message to you will be updated to let you know that the step interaction was successfully completed: -![Sample step finished successfully](/img/tutorials/custom-steps-wfb-new/wfb-12.png) +![Sample step finished successfully](wfb-12.png) Now that we’ve gotten a feel for how we will use the custom step, let’s learn more about how function listeners work. diff --git a/docs/english/tutorial/modals/modals.md b/docs/english/tutorial/modals/modals.md index 678d3783b..6230e1eac 100644 --- a/docs/english/tutorial/modals/modals.md +++ b/docs/english/tutorial/modals/modals.md @@ -14,7 +14,7 @@ Let's take a look at the technologies we'll use in this tutorial: ## Final product overview {#final_product} If you follow through with the extra credit tasks, your final app will look like this: -![Final product](/img/tutorials/modals/final_product.gif) +![Final product](final_product.gif) --- @@ -65,21 +65,21 @@ Here's a copy of what the modal payload looks like — this is what powers t 3. Find the base path to your server by clicking **Share**, then copy the Live site link. - ![Get the base link](/img/tutorials/modals/base_link.gif) + ![Get the base link](base_link.gif) 4. On your app page, navigate to **Interactivity & Shortcuts**. Append "/slack/events" to your base path URL and enter it into the **Request URL** e.g., `https://festive-harmonious-march.glitch.me/slack/events`. This allows your server to retrieve information from the modal. You can see the code for this within the Glitch project. - ![Interactivity URL](/img/tutorials/modals/interactivity_url.png) + ![Interactivity URL](interactivity_url.png) 5. Create the slash command so you can access it within Slack. Navigate to the **Slash Commands** section and create a new command. Note the **Request URL** is the same link as above, e.g. `https://festive-harmonious-march.glitch.me/slack/events` . The code that powers the slash command and opens a modal can be found within the Glitch project. - ![Slash command details](/img/tutorials/modals/slash_command.png) + ![Slash command details](slash_command.png) 6. Select **Install App**. After you've done this, you'll see a **Bot User OAuth Access Token**, copy this. 7. Navigate to your Glitch project and click the `.env` file where the credentials are stored, and paste your bot token where the `SLACK_BOT_TOKEN` variable is shown. This allows your server to send authenticated requests to the Slack API. You'll also need to head to your app's settings page under **Basic Information** and copy the _Signing secret_ to place into the `SLACK_SIGNING_SECRET` variable. - ![Environment variables](/img/tutorials/modals/heart_icon.gif) + ![Environment variables](heart_icon.gif) 8. Test by heading to Slack and typing `/thankyou`. diff --git a/docs/japanese/getting-started.md b/docs/japanese/getting-started.md index 08e6593d7..10aa3c58d 100644 --- a/docs/japanese/getting-started.md +++ b/docs/japanese/getting-started.md @@ -26,7 +26,7 @@ lang: ja-jp このページでは、アプリの概要や重要な認証情報を確認できます。これらの情報は後ほど参照します。 -![Basic Information ページ](/img/basic-information-page.png "Basic Information ページ") +![Basic Information ページ](/img/bolt-python/basic-information-page.png "Basic Information ページ") ひと通り確認して、アプリのアイコンと説明を追加したら、アプリのプロジェクトの構成 🔩 を始めましょう。 @@ -50,7 +50,7 @@ Slack アプリで使用できるトークンには、ユーザートークン 4. インストールを承認すると **OAuth & Permissions** ページが表示され、**Bot User OAuth Access Token** を確認できるでしょう。 -![OAuth トークン](/img/bot-token.png "ボット用 OAuth トークン") +![OAuth トークン](/img/bolt-python/bot-token.png "ボット用 OAuth トークン") 5. 次に「**Basic Informationのページ**」まで戻り、アプリレベルトークンのセクションまで下にスクロールし「**Generate Token and Scopes**」をクリックしてアプリレベルトークンを作成します。このトークンに `connections:write` のスコープを付与し、作成された `xapp` トークンを保存します。これらのトークンは後ほど利用します。 From 2193624bedf0f38a84ccc9d93b6a0226ddf41b13 Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Fri, 27 Jun 2025 16:00:02 -0700 Subject: [PATCH 03/42] moving sidebar into english --- docs/{ => english}/_sidebar.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/{ => english}/_sidebar.json (100%) diff --git a/docs/_sidebar.json b/docs/english/_sidebar.json similarity index 100% rename from docs/_sidebar.json rename to docs/english/_sidebar.json From 1ef1f9e531449c5daddf83ba61eae3eb8ee6844a Mon Sep 17 00:00:00 2001 From: Luke Russell Date: Fri, 27 Jun 2025 16:03:06 -0700 Subject: [PATCH 04/42] sidebar links --- docs/english/_sidebar.json | 70 +++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json index ca53a4158..b0868e51b 100644 --- a/docs/english/_sidebar.json +++ b/docs/english/_sidebar.json @@ -1,7 +1,7 @@ [ { "type": "doc", - "id": "index", + "id": "bolt-python/index", "label": "Bolt for Python", "className": "sidebar-title" }, @@ -11,79 +11,79 @@ "label": "Guides", "collapsed": false, "items": [ - "getting-started", + "bolt-python/getting-started", { "type": "category", "label": "Slack API calls", - "items": ["concepts/message-sending", "concepts/web-api"] + "items": ["bolt-python/concepts/message-sending", "bolt-python/concepts/web-api"] }, { "type": "category", "label": "Events", - "items": ["concepts/message-listening", "concepts/event-listening"] + "items": ["bolt-python/concepts/message-listening", "bolt-python/concepts/event-listening"] }, { "type": "category", "label": "App UI & Interactivity", "items": [ - "concepts/acknowledge", - "concepts/shortcuts", - "concepts/commands", - "concepts/actions", - "concepts/opening-modals", - "concepts/updating-pushing-views", - "concepts/view-submissions", - "concepts/select-menu-options", - "concepts/app-home" + "bolt-python/concepts/acknowledge", + "bolt-python/concepts/shortcuts", + "bolt-python/concepts/commands", + "bolt-python/concepts/actions", + "bolt-python/concepts/opening-modals", + "bolt-python/concepts/updating-pushing-views", + "bolt-python/concepts/view-submissions", + "bolt-python/concepts/select-menu-options", + "bolt-python/concepts/app-home" ] }, - "concepts/ai-apps", + "bolt-python/concepts/ai-apps", { "type": "category", "label": "Custom Steps", "items": [ - "concepts/custom-steps", - "concepts/custom-steps-dynamic-options" + "bolt-python/concepts/custom-steps", + "bolt-python/concepts/custom-steps-dynamic-options" ] }, { "type": "category", "label": "App Configuration", "items": [ - "concepts/socket-mode", - "concepts/errors", - "concepts/logging", - "concepts/async" + "bolt-python/concepts/socket-mode", + "bolt-python/concepts/errors", + "bolt-python/concepts/logging", + "bolt-python/concepts/async" ] }, { "type": "category", "label": "Middleware & Context", "items": [ - "concepts/global-middleware", - "concepts/listener-middleware", - "concepts/context" + "bolt-python/concepts/global-middleware", + "bolt-python/concepts/listener-middleware", + "bolt-python/concepts/context" ] }, - "concepts/lazy-listeners", + "bolt-python/concepts/lazy-listeners", { "type": "category", "label": "Adaptors", - "items": ["concepts/adapters", "concepts/custom-adapters"] + "items": ["bolt-python/concepts/adapters", "bolt-python/concepts/custom-adapters"] }, { "type": "category", "label": "Authorization & Security", "items": [ - "concepts/authenticating-oauth", - "concepts/authorization", - "concepts/token-rotation" + "bolt-python/concepts/authenticating-oauth", + "bolt-python/concepts/authorization", + "bolt-python/concepts/token-rotation" ] }, { "type": "category", "label": "Legacy", - "items": ["legacy/steps-from-apps"] + "items": ["bolt-python/legacy/steps-from-apps"] } ] }, @@ -92,12 +92,12 @@ "type": "category", "label": "Tutorials", "items": [ - "tutorial/ai-chatbot/ai-chatbot", - "tutorial/custom-steps/custom-steps", - "tutorial/custom-steps-for-jira/custom-steps-for-jira", - "tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new", - "tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing", - "tutorial/modals/modals" + "bolt-python/tutorial/ai-chatbot/ai-chatbot", + "bolt-python/tutorial/custom-steps/custom-steps", + "bolt-python/tutorial/custom-steps-for-jira/custom-steps-for-jira", + "bolt-python/tutorial/custom-steps-workflow-builder-new/custom-steps-workflow-builder-new", + "bolt-python/tutorial/custom-steps-workflow-builder-existing/custom-steps-workflow-builder-existing", + "bolt-python/tutorial/modals/modals" ] }, { "type": "html", "value": "