From c0ea53143ab295c10766901772acdb45ce30fd3d Mon Sep 17 00:00:00 2001
From: William Bergamin
Date: Thu, 20 Mar 2025 17:18:55 +0000
Subject: [PATCH 01/85] health: increase CI coverage (#1276)
---
.github/workflows/tests.yml | 10 ++++++++++
pyproject.toml | 1 +
2 files changed, 11 insertions(+)
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index d8fe75de9..0d60e9b6c 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -68,6 +68,9 @@ jobs:
- name: Run tests for HTTP Mode adapters (Tornado)
run: |
pytest tests/adapter_tests/tornado/
+ - name: Run tests for HTTP Mode adapters (WSGI)
+ run: |
+ pytest tests/adapter_tests/wsgi/
- name: Install async dependencies
run: |
pip install -r requirements/async.txt
@@ -82,3 +85,10 @@ jobs:
run: |
# Requires async test dependencies
pytest tests/adapter_tests/asgi/
+ - name: Install all dependencies
+ run: |
+ pip install -r requirements/testing.txt
+ - name: Run asynchronous tests
+ run: |
+ pytest tests/slack_bolt_async/
+ pytest tests/scenario_tests_async/
diff --git a/pyproject.toml b/pyproject.toml
index ef5440fed..5ce2c62bc 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -49,6 +49,7 @@ log_date_format = "%Y-%m-%d %H:%M:%S"
filterwarnings = [
"ignore:\"@coroutine\" decorator is deprecated since Python 3.8, use \"async def\" instead:DeprecationWarning",
"ignore:The loop argument is deprecated since Python 3.8, and scheduled for removal in Python 3.10.:DeprecationWarning",
+ "ignore:Unknown config option. asyncio_mode:pytest.PytestConfigWarning", # ignore warning when asyncio_mode is set but pytest-asyncio is not installed
]
asyncio_mode = "auto"
From e1ac14fc3524e4a55ecd9d3122ebf5cdc795f6b4 Mon Sep 17 00:00:00 2001
From: William Bergamin
Date: Fri, 28 Mar 2025 19:57:37 +0000
Subject: [PATCH 02/85] health: publish test results to code cov (#1282)
---
.github/workflows/tests.yml | 62 ++++++++++++++-----------------------
.gitignore | 1 +
2 files changed, 24 insertions(+), 39 deletions(-)
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 0d60e9b6c..b4f1743da 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -35,60 +35,44 @@ jobs:
pip install -r requirements/testing_without_asyncio.txt
- name: Run tests without aiohttp
run: |
- pytest tests/slack_bolt/
- pytest tests/scenario_tests/
+ pytest tests/slack_bolt/ --junitxml=reports/test_slack_bolt.xml
+ pytest tests/scenario_tests/ --junitxml=reports/test_scenario.xml
- name: Install adapter dependencies
run: |
pip install -r requirements/adapter.txt
pip install -r requirements/adapter_testing.txt
- - name: Run tests for HTTP Mode adapters (AWS)
+ - name: Run tests for HTTP Mode adapters
run: |
- pytest tests/adapter_tests/aws/
- - name: Run tests for HTTP Mode adapters (Bottle)
- run: |
- pytest tests/adapter_tests/bottle/
- - name: Run tests for HTTP Mode adapters (CherryPy)
- run: |
- pytest tests/adapter_tests/cherrypy/
- - name: Run tests for HTTP Mode adapters (Django)
- run: |
- pytest tests/adapter_tests/django/
- - name: Run tests for HTTP Mode adapters (Falcon)
- run: |
- pytest tests/adapter_tests/falcon/
- - name: Run tests for HTTP Mode adapters (Flask)
- run: |
- pytest tests/adapter_tests/flask/
- - name: Run tests for HTTP Mode adapters (Pyramid)
- run: |
- pytest tests/adapter_tests/pyramid/
- - name: Run tests for HTTP Mode adapters (Starlette)
- run: |
- pytest tests/adapter_tests/starlette/
- - name: Run tests for HTTP Mode adapters (Tornado)
- run: |
- pytest tests/adapter_tests/tornado/
- - name: Run tests for HTTP Mode adapters (WSGI)
- run: |
- pytest tests/adapter_tests/wsgi/
+ pytest tests/adapter_tests/ \
+ --ignore=tests/adapter_tests/socket_mode/ \
+ --ignore=tests/adapter_tests/asgi/ \
+ --junitxml=reports/test_adapter.xml
- name: Install async dependencies
run: |
pip install -r requirements/async.txt
+ - name: Run tests for HTTP Mode adapters (ASGI)
+ run: |
+ # Requires async test dependencies
+ pytest tests/adapter_tests/asgi/ --junitxml=reports/test_adapter_asgi.xml
- name: Run tests for Socket Mode adapters
run: |
# Requires async test dependencies
- pytest tests/adapter_tests/socket_mode/
+ pytest tests/adapter_tests/socket_mode/ --junitxml=reports/test_adapter_socket_mode.xml
- name: Run tests for HTTP Mode adapters (asyncio-based libraries)
run: |
- pytest tests/adapter_tests_async/
- - name: Run tests for HTTP Mode adapters (ASGI)
- run: |
- # Requires async test dependencies
- pytest tests/adapter_tests/asgi/
+ pytest tests/adapter_tests_async/ --junitxml=reports/test_adapter_async.xml
- name: Install all dependencies
run: |
pip install -r requirements/testing.txt
- name: Run asynchronous tests
run: |
- pytest tests/slack_bolt_async/
- pytest tests/scenario_tests_async/
+ pytest tests/slack_bolt_async/ --junitxml=reports/test_slack_bolt_async.xml
+ pytest tests/scenario_tests_async/ --junitxml=reports/test_scenario_async.xml
+ - name: Upload test results to Codecov
+ if: ${{ !cancelled() }}
+ uses: codecov/test-results-action@v1
+ with:
+ directory: ./reports/
+ flags: ${{ matrix.python-version }}
+ token: ${{ secrets.CODECOV_TOKEN }}
+ verbose: true
diff --git a/.gitignore b/.gitignore
index f36c24c5a..2549060e7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,6 +21,7 @@ venv/
.coverage
cov_*
coverage.xml
+reports/
# due to using tox and pytest
.tox
From 08fd8643d38d0f9366b3b8656edbdb966d138a7a Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 2 Apr 2025 08:48:47 -0400
Subject: [PATCH 03/85] chore(deps): update sanic requirement from <25,>=21 to
>=21,<26 (#1285)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
requirements/adapter.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/requirements/adapter.txt b/requirements/adapter.txt
index ee8bb5389..f731a12af 100644
--- a/requirements/adapter.txt
+++ b/requirements/adapter.txt
@@ -15,7 +15,7 @@ Werkzeug>=2,<4
pyramid>=1,<3
sanic>=20,<21; python_version=="3.6"
sanic>=21,<24; python_version>"3.6" and python_version<="3.8"
-sanic>=21,<25; python_version>"3.8"
+sanic>=21,<26; python_version>"3.8"
starlette>=0.19.1,<1
tornado>=6,<7
uvicorn<1 # The oldest version can vary among Python runtime versions
From 1cc1ab0b2a785358781692969b8de5e8438e0e60 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 2 Apr 2025 08:55:17 -0400
Subject: [PATCH 04/85] chore(deps): update falcon requirement from <4,>=2 to
>=2,<5 (#1286)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
requirements/adapter.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/requirements/adapter.txt b/requirements/adapter.txt
index f731a12af..6618f2b6f 100644
--- a/requirements/adapter.txt
+++ b/requirements/adapter.txt
@@ -7,7 +7,7 @@ chalice<=1.27.3; python_version=="3.6"
chalice>=1.28,<2; python_version>"3.6"
CherryPy>=18,<19
Django>=3,<6
-falcon>=2,<4; python_version<"3.11"
+falcon>=2,<5; python_version<"3.11"
falcon>=3.1.1,<5; python_version>="3.11"
fastapi>=0.70.0,<1
Flask>=1,<4
From 5f32fac75092a8e772996a21445fe6bbbf2cf32a Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 2 Apr 2025 09:17:11 -0400
Subject: [PATCH 05/85] chore(deps): bump the react group in /docs with 2
updates (#1288)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
docs/package-lock.json | 26 +++++++++++++-------------
docs/package.json | 4 ++--
2 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/docs/package-lock.json b/docs/package-lock.json
index f78ea4c3c..eae6d3257 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -15,8 +15,8 @@
"clsx": "^2.0.0",
"docusaurus-theme-github-codeblock": "^2.0.2",
"prism-react-renderer": "^2.4.1",
- "react": "^19.0.0",
- "react-dom": "^19.0.0"
+ "react": "^19.1.0",
+ "react-dom": "^19.1.0"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.7.0",
@@ -14413,9 +14413,9 @@
}
},
"node_modules/react": {
- "version": "19.0.0",
- "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz",
- "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==",
+ "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"
@@ -14548,15 +14548,15 @@
}
},
"node_modules/react-dom": {
- "version": "19.0.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz",
- "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==",
+ "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.25.0"
+ "scheduler": "^0.26.0"
},
"peerDependencies": {
- "react": "^19.0.0"
+ "react": "^19.1.0"
}
},
"node_modules/react-error-overlay": {
@@ -15251,9 +15251,9 @@
"license": "ISC"
},
"node_modules/scheduler": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz",
- "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==",
+ "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-utils": {
diff --git a/docs/package.json b/docs/package.json
index 9c9bd3327..7c155bd9e 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -21,8 +21,8 @@
"clsx": "^2.0.0",
"docusaurus-theme-github-codeblock": "^2.0.2",
"prism-react-renderer": "^2.4.1",
- "react": "^19.0.0",
- "react-dom": "^19.0.0"
+ "react": "^19.1.0",
+ "react-dom": "^19.1.0"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.7.0",
From 26d3b0313efc2967e2ff0d27fff1055a4bfc9654 Mon Sep 17 00:00:00 2001
From: William Bergamin
Date: Wed, 2 Apr 2025 14:39:01 +0000
Subject: [PATCH 06/85] chore: remove 3.6 CI support (#1290)
---
.github/workflows/tests.yml | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index b4f1743da..bb35112c3 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -7,14 +7,12 @@ on:
jobs:
build:
- # Avoiding -latest due to https://github.com/actions/setup-python/issues/162
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-22.04
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
python-version:
- - "3.6"
- "3.7"
- "3.8"
- "3.9"
From 96c7389b3c9db3f66b7277bc93761aa690120941 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 2 Apr 2025 14:42:59 +0000
Subject: [PATCH 07/85] chore(deps): bump flake8 from 7.1.2 to 7.2.0 (#1287)
---
requirements/tools.txt | 2 +-
slack_bolt/listener/thread_runner.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/requirements/tools.txt b/requirements/tools.txt
index cbdebf8b5..0fd423ad2 100644
--- a/requirements/tools.txt
+++ b/requirements/tools.txt
@@ -1,3 +1,3 @@
mypy==1.15.0
-flake8==7.1.2
+flake8==7.2.0
black==24.8.0 # Until we drop Python 3.6 support, we have to stay with this version
diff --git a/slack_bolt/listener/thread_runner.py b/slack_bolt/listener/thread_runner.py
index 0b79c6ffd..c144daf1d 100644
--- a/slack_bolt/listener/thread_runner.py
+++ b/slack_bolt/listener/thread_runner.py
@@ -111,7 +111,7 @@ def run(
if not request.lazy_only:
# start the listener function asynchronously
def run_ack_function_asynchronously():
- nonlocal ack, request, response
+ nonlocal response
try:
self.listener_start_handler.handle(
request=request,
From 1780159d52cdd2cd88e658d77fce61de47de34b5 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 2 Apr 2025 12:04:26 -0400
Subject: [PATCH 08/85] chore(deps): bump image-size from 1.2.0 to 1.2.1 in
/docs (#1291)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
docs/package-lock.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/docs/package-lock.json b/docs/package-lock.json
index eae6d3257..0ac49c35e 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -8958,9 +8958,9 @@
}
},
"node_modules/image-size": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.0.tgz",
- "integrity": "sha512-4S8fwbO6w3GeCVN6OPtA9I5IGKkcDMPcKndtUlpJuCwu7JLjtj7JZpwqLuyY2nrmQT3AWsCJLSKPsc2mPBSl3w==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz",
+ "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==",
"license": "MIT",
"dependencies": {
"queue": "6.0.2"
From 25bfeb97aad983f5811ea1576d8202891fbd0593 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 8 Apr 2025 13:58:44 +0000
Subject: [PATCH 09/85] chore(deps): bump estree-util-value-to-estree from
3.3.2 to 3.3.3 in /docs (#1294)
---
docs/package-lock.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/docs/package-lock.json b/docs/package-lock.json
index 0ac49c35e..e65be5252 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -7315,9 +7315,9 @@
}
},
"node_modules/estree-util-value-to-estree": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.3.2.tgz",
- "integrity": "sha512-hYH1aSvQI63Cvq3T3loaem6LW4u72F187zW4FHpTrReJSm6W66vYTFNO1vH/chmcOulp1HlAj1pxn8Ag0oXI5Q==",
+ "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"
From 1bb9689272cf70e1b6c0bb24a42c3588b985dafb Mon Sep 17 00:00:00 2001
From: Haley Elmendorf <31392893+haleychaas@users.noreply.github.com>
Date: Thu, 10 Apr 2025 14:07:50 -0500
Subject: [PATCH 10/85] API Docs: Update links to go to new docs site (#1293)
---
docs/content/concepts/acknowledge.md | 2 +-
docs/content/concepts/actions.md | 2 +-
docs/content/concepts/ai-apps.md | 34 +++---
docs/content/concepts/app-home.md | 6 +-
docs/content/concepts/authenticating-oauth.md | 4 +-
docs/content/concepts/custom-steps.md | 4 +-
docs/content/concepts/event-listening.md | 4 +-
docs/content/concepts/message-listening.md | 2 +-
docs/content/concepts/message-sending.md | 2 +-
docs/content/concepts/opening-modals.md | 4 +-
docs/content/concepts/select-menu-options.md | 2 +-
docs/content/concepts/shortcuts.md | 8 +-
docs/content/concepts/socket-mode.md | 2 +-
docs/content/concepts/steps-from-apps.md | 18 +--
docs/content/concepts/token-rotation.md | 2 +-
.../concepts/updating-pushing-views.md | 6 +-
docs/content/concepts/view-submissions.md | 8 +-
docs/content/concepts/web-api.md | 2 +-
docs/content/getting-started.md | 36 +++---
docs/content/tutorial/ai-chatbot.md | 8 +-
.../content/tutorial/custom-steps-for-jira.md | 6 +-
docs/content/tutorial/modals.md | 2 +-
.../current/concepts/acknowledge.md | 2 +-
.../current/concepts/actions.md | 2 +-
.../current/concepts/app-home.md | 6 +-
.../current/concepts/assistant.md | 6 +-
.../current/concepts/authenticating-oauth.md | 4 +-
.../current/concepts/custom-steps.md | 4 +-
.../current/concepts/event-listening.md | 4 +-
.../current/concepts/message-listening.md | 2 +-
.../current/concepts/message-sending.md | 2 +-
.../current/concepts/opening-modals.md | 4 +-
.../current/concepts/select-menu-options.md | 2 +-
.../current/concepts/shortcuts.md | 8 +-
.../current/concepts/socket-mode.md | 2 +-
.../current/concepts/token-rotation.md | 2 +-
.../concepts/updating-pushing-views.md | 6 +-
.../current/concepts/view-submissions.md | 8 +-
.../current/concepts/web-api.md | 2 +-
.../current/getting-started.md | 34 +++---
.../current/legacy/steps-from-apps.md | 14 +--
docs/navbarConfig.js | 2 +-
docs/src/css/custom.css | 6 +-
docs/static/api-docs/slack_bolt/app/app.html | 115 +++++++++---------
.../api-docs/slack_bolt/app/async_app.html | 115 +++++++++---------
.../static/api-docs/slack_bolt/app/index.html | 115 +++++++++---------
.../static/api-docs/slack_bolt/async_app.html | 115 +++++++++---------
docs/static/api-docs/slack_bolt/index.html | 115 +++++++++---------
.../slack_bolt/listener_matcher/builtins.html | 2 +-
.../slack_bolt/middleware/async_builtins.html | 12 +-
.../api-docs/slack_bolt/middleware/index.html | 16 +--
.../async_request_verification.html | 6 +-
.../request_verification/index.html | 4 +-
.../request_verification.html | 4 +-
.../middleware/ssl_check/async_ssl_check.html | 4 +-
.../middleware/ssl_check/index.html | 8 +-
.../middleware/ssl_check/ssl_check.html | 8 +-
.../async_url_verification.html | 2 +-
.../middleware/url_verification/index.html | 4 +-
.../url_verification/url_verification.html | 4 +-
.../api-docs/slack_bolt/request/index.html | 2 +-
.../api-docs/slack_bolt/response/index.html | 2 +-
.../api-docs/slack_bolt/workflows/index.html | 2 +-
.../slack_bolt/workflows/step/async_step.html | 40 +++---
.../slack_bolt/workflows/step/index.html | 24 ++--
.../slack_bolt/workflows/step/step.html | 40 +++---
.../step/utilities/async_complete.html | 4 +-
.../step/utilities/async_configure.html | 4 +-
.../workflows/step/utilities/async_fail.html | 4 +-
.../step/utilities/async_update.html | 4 +-
.../workflows/step/utilities/complete.html | 4 +-
.../workflows/step/utilities/configure.html | 4 +-
.../workflows/step/utilities/fail.html | 4 +-
.../workflows/step/utilities/update.html | 4 +-
74 files changed, 531 insertions(+), 546 deletions(-)
diff --git a/docs/content/concepts/acknowledge.md b/docs/content/concepts/acknowledge.md
index b1d2000ef..5e5c0ed25 100644
--- a/docs/content/concepts/acknowledge.md
+++ b/docs/content/concepts/acknowledge.md
@@ -6,7 +6,7 @@ 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://api.slack.com/reference/block-kit/composition-objects#option). 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](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).
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/content/concepts/actions.md b/docs/content/concepts/actions.md
index b2ab27920..018642b4a 100644
--- a/docs/content/concepts/actions.md
+++ b/docs/content/concepts/actions.md
@@ -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://api.slack.com/reference/messaging/payload) 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](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.
```python
# Listens to actions triggered with action_id of “user_select”
diff --git a/docs/content/concepts/ai-apps.md b/docs/content/concepts/ai-apps.md
index eb5f64fff..d30513bdd 100644
--- a/docs/content/concepts/ai-apps.md
+++ b/docs/content/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://api.slack.com/docs/apps/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](https://docs.slack.dev/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://api.slack.com/scopes/assistant:write)
-* [`chat:write`](https://api.slack.com/scopes/chat:write)
-* [`im:history`](https://api.slack.com/scopes/im:history)
+* [`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)
3. Within the App Settings **Event Subscriptions** page, subscribe to the following events:
-* [`assistant_thread_started`](https://api.slack.com/events/assistant_thread_started)
-* [`assistant_thread_context_changed`](https://api.slack.com/events/assistant_thread_context_changed)
-* [`message.im`](https://api.slack.com/events/message.im)
+* [`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)
:::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!
@@ -32,9 +32,9 @@ You _could_ implement your own AI app by [listening](event-listening) for the `a
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://api.slack.com/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://api.slack.com/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://api.slack.com/events/message.im) event.
+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.
```python
@@ -97,7 +97,7 @@ 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://api.slack.com/metadata/using) 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](https://docs.slack.dev/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.
@@ -107,7 +107,7 @@ Refer to the [module document](https://tools.slack.dev/bolt-python/api-docs/slac
## Handling a new thread {#handling-a-new-thread}
-When the user opens a new thread with your AI app, the [`assistant_thread_started`](https://api.slack.com/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`](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.
@@ -115,7 +115,7 @@ When a user opens an AI app thread while in a channel, the channel info is store
### 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://api.slack.com/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](https://docs.slack.dev/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://api.slack.com/events/assistant_thread_context_changed) event will be sent to your app.
+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.
-If you use the built-in `Assistant` middleware without any custom configuration, the updated context data is automatically saved as [message metadata](https://api.slack.com/metadata/using) 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](https://docs.slack.dev/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,9 +256,9 @@ assistant = Assistant(thread_context_store=FileAssistantThreadContextStore())
## Handling the user response {#handling-the-user-response}
-When the user messages your app, the [`message.im`](https://api.slack.com/events/message.im) event will be sent to your app.
+When the user messages your app, the [`message.im`](https://docs.slack.dev/reference/events/message.im) event will be sent to your app.
-Messages sent to the app do not contain a [subtype](https://api.slack.com/events/message#subtypes) and must be deduced based on their shape and any provided [message metadata](https://api.slack.com/metadata/using).
+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/).
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)
diff --git a/docs/content/concepts/app-home.md b/docs/content/concepts/app-home.md
index 887279a5d..d29bfc4d6 100644
--- a/docs/content/concepts/app-home.md
+++ b/docs/content/concepts/app-home.md
@@ -4,9 +4,9 @@ lang: en
slug: /concepts/app-home
---
-[Home tabs](https://api.slack.com/surfaces/tabs/using) 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://api.slack.com/reference/block-kit/views) to the [`views.publish`](https://api.slack.com/methods/views.publish) method.
+[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.
-You can subscribe to the [`app_home_opened`](https://api.slack.com/events/app_home_opened) event to listen for when users open your App Home.
+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.
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.
```python
@@ -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/content/concepts/authenticating-oauth.md b/docs/content/concepts/authenticating-oauth.md
index 734a727b2..1fabe3522 100644
--- a/docs/content/concepts/authenticating-oauth.md
+++ b/docs/content/concepts/authenticating-oauth.md
@@ -10,9 +10,9 @@ Bolt for Python will create a **Redirect URL** `slack/oauth_redirect`, which Sla
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://api.slack.com/enterprise/apps) 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](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**.
-To learn more about the OAuth installation flow with Slack, [read the API documentation](https://api.slack.com/authentication/oauth-v2).
+To learn more about the OAuth installation flow with Slack, [read the API documentation](https://docs.slack.dev/authentication/installing-with-oauth).
```python
import os
diff --git a/docs/content/concepts/custom-steps.md b/docs/content/concepts/custom-steps.md
index 10d03e4c4..52e3d76e2 100644
--- a/docs/content/concepts/custom-steps.md
+++ b/docs/content/concepts/custom-steps.md
@@ -5,7 +5,7 @@ lang: en
slug: /concepts/custom-steps
---
-Your app can use the `function()` method to listen to incoming [custom step requests](https://api.slack.com/automation/functions/custom-bolt). 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://api.slack.com/concepts/manifests#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](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.
* `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.
@@ -151,4 +151,4 @@ Example app manifest definition
-Learn more about responding to interactivity, see the [Slack API documentation](https://api.slack.com/automation/functions/custom-bolt#interactivity).
+Learn more about responding to interactivity, see the [Slack API documentation](https://docs.slack.dev/interactivity/handling-user-interaction).
diff --git a/docs/content/concepts/event-listening.md b/docs/content/concepts/event-listening.md
index 79317b07a..7ffa9e3a2 100644
--- a/docs/content/concepts/event-listening.md
+++ b/docs/content/concepts/event-listening.md
@@ -4,7 +4,7 @@ lang: en
slug: /concepts/event-listening
---
-You can listen to [any Events API event](https://api.slack.com/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](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.
The `event()` method requires an `eventType` of type `str`.
@@ -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://api.slack.com/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](https://docs.slack.dev/reference/events/message#subtypes).
You can explicitly filter for events without a subtype by explicitly setting `None`.
```python
diff --git a/docs/content/concepts/message-listening.md b/docs/content/concepts/message-listening.md
index 3527dc226..b2f8bc05c 100644
--- a/docs/content/concepts/message-listening.md
+++ b/docs/content/concepts/message-listening.md
@@ -4,7 +4,7 @@ lang: en
slug: /concepts/message-listening
---
-To listen to messages that [your app has access to receive](https://api.slack.com/messaging/retrieving#permissions), 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](https://docs.slack.dev/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/content/concepts/message-sending.md b/docs/content/concepts/message-sending.md
index b44f8848f..b4a2f309e 100644
--- a/docs/content/concepts/message-sending.md
+++ b/docs/content/concepts/message-sending.md
@@ -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://api.slack.com/messaging/composing/layouts) 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](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).
```python
# Sends a section block with datepicker when someone reacts with a 📅 emoji
diff --git a/docs/content/concepts/opening-modals.md b/docs/content/concepts/opening-modals.md
index a686eec63..e7daceafc 100644
--- a/docs/content/concepts/opening-modals.md
+++ b/docs/content/concepts/opening-modals.md
@@ -4,11 +4,11 @@ lang: en
slug: /concepts/opening-modals
---
-[Modals](https://api.slack.com/block-kit/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://api.slack.com/reference/block-kit/views) to the built-in client's [`views.open`](https://api.slack.com/methods/views.open) method.
+[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.
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://api.slack.com/surfaces/modals/using#composing_views).
+Read more about modal composition in the [API documentation](https://docs.slack.dev/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.
diff --git a/docs/content/concepts/select-menu-options.md b/docs/content/concepts/select-menu-options.md
index 835ae15c7..d699e6370 100644
--- a/docs/content/concepts/select-menu-options.md
+++ b/docs/content/concepts/select-menu-options.md
@@ -9,7 +9,7 @@ an `action_id` or constraints object is required. In order to load external data
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://api.slack.com/reference/messaging/block-elements#external-select) and [dialog response examples](https://api.slack.com/dialogs#dynamic_select_elements_external) 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](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.
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!
diff --git a/docs/content/concepts/shortcuts.md b/docs/content/concepts/shortcuts.md
index 58889b1f8..6833d468d 100644
--- a/docs/content/concepts/shortcuts.md
+++ b/docs/content/concepts/shortcuts.md
@@ -4,7 +4,7 @@ lang: en
slug: /concepts/shortcuts
---
-The `shortcut()` method supports both [global shortcuts](https://api.slack.com/interactivity/shortcuts/using#global_shortcuts) and [message shortcuts](https://api.slack.com/interactivity/shortcuts/using#message_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).
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`.
@@ -14,7 +14,7 @@ Shortcuts include a `trigger_id` which an app can use to [open a modal](/concept
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://api.slack.com/reference/block-kit/block-elements#conversation_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`](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.
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.
```python
@@ -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/content/concepts/socket-mode.md b/docs/content/concepts/socket-mode.md
index 72a2b7982..301fbf94e 100644
--- a/docs/content/concepts/socket-mode.md
+++ b/docs/content/concepts/socket-mode.md
@@ -4,7 +4,7 @@ lang: en
slug: /concepts/socket-mode
---
-With the introduction of [Socket Mode](https://api.slack.com/apis/connections/socket), 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](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.
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.
diff --git a/docs/content/concepts/steps-from-apps.md b/docs/content/concepts/steps-from-apps.md
index f1e1e7c70..09becda0c 100644
--- a/docs/content/concepts/steps-from-apps.md
+++ b/docs/content/concepts/steps-from-apps.md
@@ -8,13 +8,13 @@ slug: /legacy/steps-from-apps
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://api.slack.com/automation), such as [custom steps for Bolt](https://api.slack.com/automation/functions/custom-bolt).
+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).
-Please [read the Slack API changelog entry](https://api.slack.com/changelog/2023-08-workflow-steps-from-apps-step-back) for more information.
+Please [read the Slack API changelog entry](https://docs.slack.dev/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://api.slack.com/workflows).
+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 are made up of three distinct user events:
@@ -24,7 +24,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://api.slack.com/workflows/steps).
+Read more about steps from apps in the [API documentation](https://docs.slack.dev/workflows/workflow-steps).
## Creating steps from apps
@@ -74,13 +74,13 @@ 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://api.slack.com/reference/workflows/workflow_step_edit). 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](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.
-Whether a builder is adding or editing a step, you need to send them a [step from app configuration modal](https://api.slack.com/reference/workflows/configuration-view). 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](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.
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://api.slack.com/workflows/steps#handle_config_view).
+To learn more about opening configuration modals, [read the documentation](https://docs.slack.dev/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.
@@ -132,7 +132,7 @@ 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://api.slack.com/reference/workflows/workflow_step).
+To learn more about how to structure these parameters, [read the documentation](https://docs.slack.dev/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.
@@ -173,7 +173,7 @@ 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://api.slack.com/events/workflow_step_execute). 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](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.
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.
diff --git a/docs/content/concepts/token-rotation.md b/docs/content/concepts/token-rotation.md
index ca690dd28..88af29ffa 100644
--- a/docs/content/concepts/token-rotation.md
+++ b/docs/content/concepts/token-rotation.md
@@ -10,4 +10,4 @@ Instead of an access token representing an existing installation of your Slack a
Bolt for Python supports and will handle token rotation automatically so long as the [built-in OAuth](/concepts/authenticating-oauth) functionality is used.
-For more information about token rotation, please see the [documentation](https://api.slack.com/authentication/rotation).
\ No newline at end of file
+For more information about token rotation, please see the [documentation](https://docs.slack.dev/authentication/using-token-rotation).
\ No newline at end of file
diff --git a/docs/content/concepts/updating-pushing-views.md b/docs/content/concepts/updating-pushing-views.md
index 051c0c6ae..aa1efa3fa 100644
--- a/docs/content/concepts/updating-pushing-views.md
+++ b/docs/content/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.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://api.slack.com/methods/views.update), or stack a new view on top of the root view by calling [`views_push`](https://api.slack.com/methods/views.push)
+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/)
## The `views_update` method
@@ -12,9 +12,9 @@ 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://api.slack.com/reference/block-kit/views). 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](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.
-Learn more about updating and pushing views in our [API documentation](https://api.slack.com/surfaces/modals/using#modifying)
+Learn more about updating and pushing views in our [API documentation](https://docs.slack.dev/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.
```python
diff --git a/docs/content/concepts/view-submissions.md b/docs/content/concepts/view-submissions.md
index 729f9d87b..60b78cd54 100644
--- a/docs/content/concepts/view-submissions.md
+++ b/docs/content/concepts/view-submissions.md
@@ -4,7 +4,7 @@ lang: en
slug: /concepts/view_submissions
---
-If a [view payload](https://api.slack.com/reference/block-kit/views) 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](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`.
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://api.slack.com/surfaces/modals/using#displaying_errors) in response to view submissions.
+Similarly, there are options for [displaying errors](https://docs.slack.dev/surfaces/modals#displaying_errors) in response to view submissions.
-Read more about view submissions in our [API documentation](https://api.slack.com/surfaces/modals/using#handling_submissions)
+Read more about view submissions in our [API documentation](https://docs.slack.dev/surfaces/modals#interactions)
---
@@ -33,7 +33,7 @@ Read more about view submissions in our [API documentation](https://api.slack.co
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://api.slack.com/surfaces/modals/using#modal_cancellations) for more information about `view_closed`.
+See the [API documentation](https://docs.slack.dev/surfaces/modals#interactions) for more information about `view_closed`.
```python
diff --git a/docs/content/concepts/web-api.md b/docs/content/concepts/web-api.md
index c4f9a526b..18b41a029 100644
--- a/docs/content/concepts/web-api.md
+++ b/docs/content/concepts/web-api.md
@@ -4,7 +4,7 @@ lang: en
slug: /concepts/web-api
---
-You can call [any Web API method](https://api.slack.com/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](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.
The token used to initialize Bolt can be found in the `context` object, which is required to call most Web API methods.
diff --git a/docs/content/getting-started.md b/docs/content/getting-started.md
index 5449a4ac2..d1b7d5e2c 100644
--- a/docs/content/getting-started.md
+++ b/docs/content/getting-started.md
@@ -32,18 +32,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://api.slack.com/docs/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](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.
There are three main token types available to a Slack app: user (`xoxp`), bot (`xoxb`), and app-level (`xapp`) tokens.
-- [User tokens](https://api.slack.com/authentication/token-types#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://api.slack.com/authentication/token-types#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://api.slack.com/authentication/token-types#app) 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](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.
We're going to use bot and app-level tokens for this guide.
1. Navigate to the **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://api.slack.com/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`](https://docs.slack.dev/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.
@@ -57,7 +57,7 @@ We're going to use bot and app-level tokens for this guide.
:::tip
-Treat your tokens like passwords and [keep them safe](https://api.slack.com/docs/oauth-safety). Your app uses tokens to post and retrieve information from Slack workspaces.
+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.
:::
@@ -102,7 +102,7 @@ export SLACK_APP_TOKEN=
:::warning
-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://api.slack.com/authentication/best-practices).
+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).
:::
@@ -140,9 +140,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://api.slack.com/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](https://docs.slack.dev/apis/events-api/).
-For those just starting, we recommend using [Socket Mode](https://api.slack.com/apis/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](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.
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.
@@ -167,11 +167,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://api.slack.com/apis/connections/events-api#the-events-api__subscribing-to-event-types__events-api-request-urls) 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](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
-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://api.slack.com/docs/hosting).
+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/).
:::
@@ -179,10 +179,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://api.slack.com/events/message.channels) listens for messages in public channels that your app is added to
-- [`message.groups`](https://api.slack.com/events/message.groups) listens for messages in 🔒 private channels that your app is added to
-- [`message.im`](https://api.slack.com/events/message.im) listens for messages in your app's DMs with users
-- [`message.mpim`](https://api.slack.com/events/message.mpim) listens for messages in multi-person DMs that your app is added to
+- [`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
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.
@@ -474,8 +474,8 @@ Now that you have a basic app up and running, you can start exploring how to mak
* Read through the _Basic concepts_ 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 site](https://api.slack.com/events).
+* 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 site](https://docs.slack.dev/reference/events).
-* Bolt allows you to [call Web API methods](/concepts/web-api) with the client attached to your app. There are [over 220 methods](https://api.slack.com/methods) on our API site.
+* Bolt allows you to [call Web API methods](/concepts/web-api) with the client attached to your app. There are [over 220 methods](https://docs.slack.dev/reference/methods) on our API site.
-* Learn more about the different token types [on our API site](https://api.slack.com/docs/token-types). Your app may need different tokens depending on the actions you want it to perform.
+* Learn more about the different token types [on our API site](https://docs.slack.dev/authentication/tokens). Your app may need different tokens depending on the actions you want it to perform.
diff --git a/docs/content/tutorial/ai-chatbot.md b/docs/content/tutorial/ai-chatbot.md
index fb0498752..7db10b722 100644
--- a/docs/content/tutorial/ai-chatbot.md
+++ b/docs/content/tutorial/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://api.slack.com/scopes/connections:write) scope, name the token, and click **Generate**. (For more details, refer to [understanding OAuth scopes for bots](https://api.slack.com/tutorials/tracks/understanding-oauth-scopes-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`](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`.
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

-The central part of this functionality is shown in the following code snippet. Note the use of the [`user_context`](https://api.slack.com/automation/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`](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.
```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://api.slack.com/automation/functions/custom-bolt) 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](https://api.slack.com/tutorials/tracks/bolt-custom-function) tutorial.
+* 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.
diff --git a/docs/content/tutorial/custom-steps-for-jira.md b/docs/content/tutorial/custom-steps-for-jira.md
index c87328208..d0fbe0979 100644
--- a/docs/content/tutorial/custom-steps-for-jira.md
+++ b/docs/content/tutorial/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://api.slack.com/scopes/connections:write) scope, name the token, and click **Generate**. (For more details, refer to [understanding OAuth scopes for bots](https://api.slack.com/tutorials/tracks/understanding-oauth-scopes-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`](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`.
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**).
@@ -168,5 +168,5 @@ 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://api.slack.com/automation/functions/custom-bolt) guide.
-* For information about custom steps dynamic options, refer to [custom steps dynamic options in Workflow Builder](https://api.slack.com/automation/runonslack/custom-steps-dynamic-options).
+* 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).
diff --git a/docs/content/tutorial/modals.md b/docs/content/tutorial/modals.md
index 07a9d394b..678d3783b 100644
--- a/docs/content/tutorial/modals.md
+++ b/docs/content/tutorial/modals.md
@@ -6,7 +6,7 @@ Let's take a look at the technologies we'll use in this tutorial:
* Glitch is a online IDE that allows you to collaboratively work on code and host your own server. Glitch should only be used for development purposes and should not be used in production.
* We'll use Python in conjunction with our [Bolt for Python](https://github.com/SlackAPI/bolt-python) SDK.
-* [Block Kit](https://api.slack.com/block-kit/building) 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.
+* [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 are similar to 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.
---
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/acknowledge.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/acknowledge.md
index 3e3523417..72cc39257 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/acknowledge.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/acknowledge.md
@@ -6,7 +6,7 @@ slug: /concepts/acknowledge
アクション(action)、コマンド(command)、ショートカット(shortcut)、オプション(options)、およびモーダルからのデータ送信(view_submission)の各リクエストは、**必ず** `ack()` 関数を使って確認を行う必要があります。これによってリクエストが受信されたことが Slack に認識され、Slack のユーザーインターフェイスが適切に更新されます。
-リクエストの種類によっては、確認で通知方法が異なる場合があります。例えば、外部データソースを使用する選択メニューのオプションのリクエストに対する確認では、適切な[オプション](https://api.slack.com/reference/block-kit/composition-objects#option)のリストとともに `ack()` を呼び出します。モーダルからのデータ送信に対する確認では、 `response_action` を渡すことで[モーダルの更新](/concepts/view_submissions)などを行えます。
+リクエストの種類によっては、確認で通知方法が異なる場合があります。例えば、外部データソースを使用する選択メニューのオプションのリクエストに対する確認では、適切な[オプション](https://docs.slack.dev/reference/block-kit/composition-objects/option-object)のリストとともに `ack()` を呼び出します。モーダルからのデータ送信に対する確認では、 `response_action` を渡すことで[モーダルの更新](/concepts/view_submissions)などを行えます。
確認までの猶予は 3 秒しかないため、新しいメッセージの送信やデータベースからの情報の取得といった時間のかかる処理は、`ack()` を呼び出した後で行うことをおすすめします。
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/actions.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/actions.md
index 799436854..82d243e99 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/actions.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/actions.md
@@ -61,7 +61,7 @@ def approve_request(ack, say):
### respond() の利用
-`respond()` は `response_url` を使って送信するときに便利なメソッドで、これらと同じような動作をします。投稿するメッセージのペイロードには、全ての[メッセージペイロードのプロパティ](https://api.slack.com/reference/messaging/payload)とオプションのプロパティとして `response_type`(値は `"in_channel"` または `"ephemeral"`)、`replace_original`、`delete_original`、`unfurl_links`、`unfurl_media` などを指定できます。こうすることによってアプリから送信されるメッセージは、やり取りの発生元に反映されます。
+`respond()` は `response_url` を使って送信するときに便利なメソッドで、これらと同じような動作をします。投稿するメッセージのペイロードには、全ての[メッセージペイロードのプロパティ](https://docs.slack.dev/messaging/#payloads)とオプションのプロパティとして `response_type`(値は `"in_channel"` または `"ephemeral"`)、`replace_original`、`delete_original`、`unfurl_links`、`unfurl_media` などを指定できます。こうすることによってアプリから送信されるメッセージは、やり取りの発生元に反映されます。
```python
# 'user_select' という action_id を持つアクションのトリガーをリッスン
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/app-home.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/app-home.md
index 6954bb75e..2dc5fd6c0 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/app-home.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/app-home.md
@@ -4,9 +4,9 @@ lang: ja-jp
slug: /concepts/app-home
---
-ホームタブは、サイドバーや検索画面からアクセス可能なサーフェスエリアです。アプリはこのエリアを使ってユーザーごとのビューを表示することができます。アプリ設定ページで App Home の機能を有効にすると、`views.publish` API メソッドの呼び出しで `user_id` と[ビューのペイロード](https://api.slack.com/reference/block-kit/views)を指定して、ホームタブを公開・更新することができるようになります。
+ホームタブは、サイドバーや検索画面からアクセス可能なサーフェスエリアです。アプリはこのエリアを使ってユーザーごとのビューを表示することができます。アプリ設定ページで App Home の機能を有効にすると、`views.publish` API メソッドの呼び出しで `user_id` と[ビューのペイロード](https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload/#view_submission)を指定して、ホームタブを公開・更新することができるようになります。
-`app_home_opened` イベントをサブスクライブすると、ユーザーが App Home を開く操作をリッスンできます。
+`app_home_opened` イベントをサブスクライブすると、ユーザーが App Home を開く操作をリッスンできます。
指定可能な引数の一覧はモジュールドキュメントを参考にしてください。
```python
@@ -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/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/assistant.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/assistant.md
index d3b54e760..5ffcb6f10 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/assistant.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/assistant.md
@@ -4,9 +4,9 @@ lang: en
slug: /concepts/assistant
---
-このページは、Bolt を使ってエージェント・アシスタントを実装するための方法を紹介します。この機能に関する一般的な情報については、[こちらのドキュメントページ(英語)](https://api.slack.com/docs/apps/ai)を参照してください。
+このページは、Bolt を使ってエージェント・アシスタントを実装するための方法を紹介します。この機能に関する一般的な情報については、[こちらのドキュメントページ(英語)](https://docs.slack.dev/ai/)を参照してください。
-この機能を実装するためには、まず[アプリの設定画面](https://api.slack.com/apps)で **Agents & Assistants** 機能を有効にし、**OAuth & Permissions** のページで [`assistant:write`](https://api.slack.com/scopes/assistant:write)、[chat:write](https://api.slack.com/scopes/chat:write)、[`im:history`](https://api.slack.com/scopes/im:history) を**ボットの**スコープに追加し、**Event Subscriptions** のページで [`assistant_thread_started`](https://api.slack.com/events/assistant_thread_started)、[`assistant_thread_context_changed`](https://api.slack.com/events/assistant_thread_context_changed)、[`message.im`](https://api.slack.com/events/message.im) イベントを有効にしてください。
+この機能を実装するためには、まず[アプリの設定画面](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) イベントを有効にしてください。
また、この機能は Slack の有料プランでのみ利用可能です。もし開発用の有料プランのワークスペースをお持ちでない場合は、[Developer Program](https://api.slack.com/developer-program) に参加し、全ての有料プラン向け機能を利用可能なサンドボックス環境をつくることができます。
@@ -92,7 +92,7 @@ assistant = Assistant(thread_context_store=FileAssistantThreadContextStore())
## アシスタントスレッドでの Block Kit インタラクション
-より高度なユースケースでは、上のようなプロンプト例の提案ではなく Block Kit のボタンなどを使いたいという場合があるかもしれません。そして、後続の処理のために[構造化されたメッセージメタデータ](https://api.slack.com/metadata)を含むメッセージを送信したいという場合もあるでしょう。
+より高度なユースケースでは、上のようなプロンプト例の提案ではなく Block Kit のボタンなどを使いたいという場合があるかもしれません。そして、後続の処理のために[構造化されたメッセージメタデータ](https://docs.slack.dev/messaging/message-metadata/)を含むメッセージを送信したいという場合もあるでしょう。
例えば、アプリが最初の返信で「参照しているチャンネルを要約」のようなボタンを表示し、ユーザーがそれをクリックして、より詳細な情報(例:要約するメッセージ数・日数、要約の目的など)を送信、アプリがそれを構造化されたメータデータに整理した上でリクエスト内容をボットのメッセージとして送信するようなシナリオです。
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/authenticating-oauth.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/authenticating-oauth.md
index e72f27146..82bbaf562 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/authenticating-oauth.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/authenticating-oauth.md
@@ -10,9 +10,9 @@ Bolt for Python によって `slack/oauth_redirect` という**リダイレク
Bolt for Python は `slack/install` というルートも生成します。これはアプリを直接インストールするための「**Add to Slack**」ボタンを表示するために使われます。すでにワークスペースへのアプリのインストールが済んでいる場合に追加で各ユーザーのユーザートークンなどの情報を取得する場合や、カスタムのインストール用の URL を動的に生成したい場合などは、`oauth_settings` の `authorize_url_generator` でカスタムの URL ジェネレーターを指定することができます。
-バージョン 1.1.0 以降の Bolt for Python では、[OrG 全体へのインストール](https://api.slack.com/enterprise/apps)がデフォルトでサポートされています。OrG 全体へのインストールは、アプリの設定の「**Org Level Apps**」で有効化できます。
+バージョン 1.1.0 以降の Bolt for Python では、[OrG 全体へのインストール](https://docs.slack.dev/enterprise-grid/)がデフォルトでサポートされています。OrG 全体へのインストールは、アプリの設定の「**Org Level Apps**」で有効化できます。
-Slack での OAuth を使ったインストールフローについて詳しくは、[API ドキュメントを参照してください](https://api.slack.com/authentication/oauth-v2)。
+Slack での OAuth を使ったインストールフローについて詳しくは、[API ドキュメントを参照してください](https://docs.slack.dev/authentication/installing-with-oauth)。
```python
import os
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/custom-steps.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/custom-steps.md
index bc1089d21..e022c3e38 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/custom-steps.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/custom-steps.md
@@ -4,7 +4,7 @@ lang: ja-jp
slug: /concepts/custom-steps
---
-Your app can use the `function()` method to listen to incoming [custom step requests](https://api.slack.com/automation/functions/custom-bolt). 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://api.slack.com/concepts/manifests#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](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.
* `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.
@@ -150,4 +150,4 @@ Example app manifest definition
-Learn more about responding to interactivity, see the [Slack API documentation](https://api.slack.com/automation/functions/custom-bolt#interactivity).
+Learn more about responding to interactivity, see the [Slack API documentation](https://docs.slack.dev/interactivity/).
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/event-listening.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/event-listening.md
index e54989255..2790ad5b7 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/event-listening.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/event-listening.md
@@ -4,7 +4,7 @@ lang: ja-jp
slug: /concepts/event-listening
---
-`event()` メソッドを使うと、[Events API](https://api.slack.com/events) の任意のイベントをリッスンできます。リッスンするイベントは、アプリの設定であらかじめサブスクライブしておく必要があります。これを利用することで、アプリがインストールされたワークスペースで何らかのイベント(例:ユーザーがメッセージにリアクションをつけた、ユーザーがチャンネルに参加した)が発生したときに、アプリに何らかのアクションを実行させることができます。
+`event()` メソッドを使うと、[Events API](https://docs.slack.dev/reference/events) の任意のイベントをリッスンできます。リッスンするイベントは、アプリの設定であらかじめサブスクライブしておく必要があります。これを利用することで、アプリがインストールされたワークスペースで何らかのイベント(例:ユーザーがメッセージにリアクションをつけた、ユーザーがチャンネルに参加した)が発生したときに、アプリに何らかのアクションを実行させることができます。
`event()` メソッドには `str` 型の `eventType` を指定する必要があります。
@@ -23,7 +23,7 @@ def ask_for_introduction(event, say):
`message()` リスナーは `event("message")` と等価の機能を提供します。
-`subtype` という追加のキーを指定して、イベントのサブタイプでフィルタリングすることもできます。よく使われるサブタイプには、`bot_message` や `message_replied` があります。詳しくは[メッセージイベントページ](https://api.slack.com/events/message#message_subtypes)を参照してください。サブタイプなしのイベントだけにフィルターするために明に `None` を指定することもできます。
+`subtype` という追加のキーを指定して、イベントのサブタイプでフィルタリングすることもできます。よく使われるサブタイプには、`bot_message` や `message_replied` があります。詳しくは[メッセージイベントページ](https://docs.slack.dev/reference/events/message#subtypes)を参照してください。サブタイプなしのイベントだけにフィルターするために明に `None` を指定することもできます。
```python
# 変更されたすべてのメッセージに一致
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/message-listening.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/message-listening.md
index f9ccf7d17..e7d538e69 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/message-listening.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/message-listening.md
@@ -4,7 +4,7 @@ lang: ja-jp
slug: /concepts/message-listening
---
-[あなたのアプリがアクセス権限を持つ](https://api.slack.com/messaging/retrieving#permissions)メッセージの投稿イベントをリッスンするには `message()` メソッドを利用します。このメソッドは `type` が `message` ではないイベントを処理対象から除外します。
+[あなたのアプリがアクセス権限を持つ](https://docs.slack.dev/messaging/retrieving-messages)メッセージの投稿イベントをリッスンするには `message()` メソッドを利用します。このメソッドは `type` が `message` ではないイベントを処理対象から除外します。
`message()` の引数には `str` 型または `re.Pattern` オブジェクトを指定できます。この条件のパターンに一致しないメッセージは除外されます。
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/message-sending.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/message-sending.md
index e109a0f4d..fbcf0ac6b 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/message-sending.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/message-sending.md
@@ -20,7 +20,7 @@ def ask_who(message, say):
`say()` は、より複雑なメッセージペイロードを受け付けるので、メッセージに機能やリッチな構造を与えることが容易です。
-リッチなメッセージレイアウトをアプリに追加する方法については、[API サイトのガイド](https://api.slack.com/messaging/composing/layouts)を参照してください。また、[Block Kit ビルダー](https://api.slack.com/tools/block-kit-builder?template=1)の一般的なアプリフローのテンプレートも見てみてください。
+リッチなメッセージレイアウトをアプリに追加する方法については、[API サイトのガイド](https://docs.slack.dev/messaging/#structure)を参照してください。また、[Block Kit ビルダー](https://api.slack.com/tools/block-kit-builder?template=1)の一般的なアプリフローのテンプレートも見てみてください。
```python
# ユーザーが 📅 のリアクションをつけたら、日付ピッカーのついた section ブロックを送信
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/opening-modals.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/opening-modals.md
index f2bc654a7..a954a658b 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/opening-modals.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/opening-modals.md
@@ -4,11 +4,11 @@ lang: ja-jp
slug: /concepts/opening-modals
---
-モーダルは、ユーザーからのデータの入力を受け付けたり、動的な情報を表示したりするためのインターフェイスです。組み込みの APIクライアントの `views.open` メソッドに、有効な `trigger_id` とビューのペイロードを指定してモーダルを開始します。
+モーダルは、ユーザーからのデータの入力を受け付けたり、動的な情報を表示したりするためのインターフェイスです。組み込みの APIクライアントの `views.open` メソッドに、有効な `trigger_id` とビューのペイロードを指定してモーダルを開始します。
ショートカットの実行、ボタンを押下、選択メニューの操作などの操作の場合、Request URL に送信されるペイロードには `trigger_id` が含まれます。
-モーダルの生成方法についての詳細は、API ドキュメントを参照してください。
+モーダルの生成方法についての詳細は、API ドキュメントを参照してください。
指定可能な引数の一覧はモジュールドキュメントを参考にしてください。
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/select-menu-options.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/select-menu-options.md
index 78f7dcdb4..598fb1cc6 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/select-menu-options.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/select-menu-options.md
@@ -10,7 +10,7 @@ slug: /concepts/options
`external_select` メニューでは `action_id` を指定することをおすすめしています。ただし、ダイアログを利用している場合、ダイアログが Block Kit に対応していないため、`callback_id` をフィルタリングするための制約オブジェクトを使用する必要があります。
-オプションのリクエストに応答するときは、有効なオプションを含む `options` または `option_groups` のリストとともに `ack()` を呼び出す必要があります。API サイトにある[外部データを使用する選択メニューに応答するサンプル例](https://api.slack.com/reference/messaging/block-elements#external-select)と、[ダイアログでの応答例](https://api.slack.com/dialogs#dynamic_select_elements_external)を参考にしてください。
+オプションのリクエストに応答するときは、有効なオプションを含む `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)を参考にしてください。
さらに、ユーザーが入力したキーワードに基づいたオプションを返すようフィルタリングロジックを適用することもできます。 これは `payload` という引数の ` value` の値に基づいて、それぞれのパターンで異なるオプションの一覧を返すように実装することができます。 Bolt for Python のすべてのリスナーやミドルウェアでは、[多くの有用な引数](https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html)にアクセスすることができますので、チェックしてみてください。
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/shortcuts.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/shortcuts.md
index e12b576ca..995b6e0d7 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/shortcuts.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/shortcuts.md
@@ -4,7 +4,7 @@ lang: ja-jp
slug: /concepts/shortcuts
---
-`shortcut()` メソッドは、[グローバルショートカット](https://api.slack.com/interactivity/shortcuts/using#global_shortcuts)と[メッセージショートカット](https://api.slack.com/interactivity/shortcuts/using#message_shortcuts)の 2 つをサポートしています。
+`shortcut()` メソッドは、[グローバルショートカット](https://docs.slack.dev/interactivity/implementing-shortcuts#global)と[メッセージショートカット](https://docs.slack.dev/interactivity/implementing-shortcuts#messages)の 2 つをサポートしています。
ショートカットは、いつでも呼び出せるアプリのエントリーポイントを提供するものです。グローバルショートカットは Slack のテキスト入力エリアや検索ウィンドウからアクセスできます。メッセージショートカットはメッセージのコンテキストメニューからアクセスできます。アプリは、ショートカットリクエストをリッスンするために `shortcut()` メソッドを使用します。このメソッドには `str` 型または `re.Pattern` 型の `callback_id` パラメーターを指定します。
@@ -14,7 +14,7 @@ slug: /concepts/shortcuts
アプリの設定でショートカットを登録する際は、他の URL と同じように、リクエスト URL の末尾に `/slack/events` をつけます。
-⚠️ グローバルショートカットのペイロードにはチャンネル ID が **含まれません**。アプリでチャンネル ID を取得する必要がある場合は、モーダル内に [`conversations_select`](https://api.slack.com/reference/block-kit/block-elements#conversation_select) エレメントを配置します。メッセージショートカットにはチャンネル ID が含まれます。
+⚠️ グローバルショートカットのペイロードにはチャンネル ID が **含まれません**。アプリでチャンネル ID を取得する必要がある場合は、モーダル内に [`conversations_select`](https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#conversation_multi_select) エレメントを配置します。メッセージショートカットにはチャンネル ID が含まれます。
指定可能な引数の一覧はモジュールドキュメントを参考にしてください。
```python
@@ -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/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/socket-mode.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/socket-mode.md
index ad4f6c8f0..061daf853 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/socket-mode.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/socket-mode.md
@@ -4,7 +4,7 @@ lang: ja-jp
slug: /concepts/socket-mode
---
-[ソケットモード](https://api.slack.com/apis/connections/socket)は、アプリに WebSocket での接続と、そのコネクション経由でのデータ受信を可能とします。Bolt for Python は、バージョン 1.2.0 からこれに対応しています。
+[ソケットモード](https://docs.slack.dev/apis/events-api/using-socket-mode)は、アプリに WebSocket での接続と、そのコネクション経由でのデータ受信を可能とします。Bolt for Python は、バージョン 1.2.0 からこれに対応しています。
ソケットモードでは、Slack からのペイロード送信を受け付けるエンドポイントをホストする HTTP サーバーを起動する代わりに WebSocket で Slack に接続し、そのコネクション経由でデータを受信します。ソケットモードを使う前に、アプリの管理画面でソケットモードの機能が有効になっていることを確認しておいてください。
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/token-rotation.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/token-rotation.md
index 456083832..bc622fe98 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/token-rotation.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/token-rotation.md
@@ -10,4 +10,4 @@ Bolt for Python [v1.7.0](https://github.com/slackapi/bolt-python/releases/tag/v1
[Bolt for Python の組み込みの OAuth 機能](/concepts/authenticating-oauth) を使用していれば、Bolt for Python が自動的にトークンローテーションの処理をハンドリングします。
-トークンローテーションに関する詳細は [API ドキュメント](https://api.slack.com/authentication/rotation)を参照してください。
\ No newline at end of file
+トークンローテーションに関する詳細は [API ドキュメント](https://docs.slack.dev/authentication/using-token-rotation)を参照してください。
\ No newline at end of file
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/updating-pushing-views.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/updating-pushing-views.md
index 2948f978f..42c89157e 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/updating-pushing-views.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/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,9 +12,9 @@ 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 ドキュメントを参照してください。
指定可能な引数の一覧はモジュールドキュメントを参考にしてください。
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/view-submissions.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/view-submissions.md
index 9e6d74058..7ad6637bb 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/view-submissions.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/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(
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/web-api.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/web-api.md
index 0070ed0fb..75953b5bd 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/web-api.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/web-api.md
@@ -4,7 +4,7 @@ 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://api.slack.com/methods)を呼び出すことができます。このクライアントのメソッドを呼び出すと `SlackResponse` という Slack からの応答情報を含むオブジェクトが返されます。
+`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 からの応答情報を含むオブジェクトが返されます。
Bolt の初期化に使用するトークンは `context` オブジェクトに設定されます。このトークンは、多くの Web API メソッドを呼び出す際に必要となります。
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/getting-started.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/getting-started.md
index 7e50fbcf2..b29deaef8 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/getting-started.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/getting-started.md
@@ -33,18 +33,18 @@ lang: ja-jp
---
### トークンとアプリのインストール {#tokens-and-installing-apps}
-Slack アプリでは、[Slack API へのアクセスの管理に OAuth を使用します](https://api.slack.com/docs/oauth)。アプリがインストールされると、トークンが発行されます。アプリはそのトークンを使って API メソッドを呼び出すことができます。
+Slack アプリでは、[Slack API へのアクセスの管理に OAuth を使用します](https://docs.slack.dev/authentication/installing-with-oauth)。アプリがインストールされると、トークンが発行されます。アプリはそのトークンを使って API メソッドを呼び出すことができます。
Slack アプリで使用できるトークンには、ユーザートークン(`xoxp`)とボットトークン(`xoxb`)、アプリレベルトークン(`xapp`)の 3 種類があります。
-- [ユーザートークン](https://api.slack.com/authentication/token-types#user) を使用すると、アプリをインストールまたは認証したユーザーに成り代わって API メソッドを呼び出すことができます。1 つのワークスペースに複数のユーザートークンが存在する可能性があります。
-- [ボットトークン](https://api.slack.com/authentication/token-types#bot) はボットユーザーに関連づけられ、1 つのワークスペースでは最初に誰かがそのアプリをインストールした際に一度だけ発行されます。どのユーザーがインストールを実行しても、アプリが使用するボットトークンは同じになります。_ほとんど_のアプリで使用されるのは、ボットトークンです。
-- [アプリレベルトークン](https://api.slack.com/authentication/token-types#app) は、全ての組織(とその配下のワークスペースでの個々のユーザーによるインストール)を横断して、あなたのアプリを代理するものです。アプリレベルトークンは、アプリの WebSocket コネクションを確立するためによく使われます。
+- [ユーザートークン](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 コネクションを確立するためによく使われます。
このガイドではボットトークンとアプリレベルトークンを使用します。
1. 左サイドバーの「**OAuth & Permissions**」をクリックし、「**Bot Token Scopes**」セクションまで下にスクロールします。「**Add an OAuth Scope**」をクリックします。
-2. ここでは [`chat:write`](https://api.slack.com/scopes/chat:write) というスコープのみを追加します。このスコープはアプリが参加しているチャンネルにメッセージを投稿することを許可します。
+2. ここでは [`chat:write`](https://docs.slack.dev/reference/scopes/chat.write) というスコープのみを追加します。このスコープはアプリが参加しているチャンネルにメッセージを投稿することを許可します。
3. OAuth & Permissions ページの一番上までスクロールし、「**Install App to Workspace**」をクリックします。Slack の OAuth 確認画面 が表示されます。この画面で開発用ワークスペースへのアプリのインストールを承認します。
@@ -58,7 +58,7 @@ Slack アプリで使用できるトークンには、ユーザートークン
:::tip
-トークンはパスワードと同様に取り扱い、[安全な方法で保管してください](https://api.slack.com/docs/oauth-safety)。アプリはこのトークンを使って Slack ワークスペースで投稿をしたり、情報の取得をしたりします。
+トークンはパスワードと同様に取り扱い、[安全な方法で保管してください](https://docs.slack.dev/authentication/best-practices-for-security)。アプリはこのトークンを使って Slack ワークスペースで投稿をしたり、情報の取得をしたりします。
:::
@@ -101,7 +101,7 @@ export SLACK_APP_TOKEN=<アプリレベルトークン>
```
:::warning
-🔒 全てのトークンは安全に保管してください。少なくともパブリックなバージョン管理にチェックインするようなことは避けるべきでしょう。また、上にあった例のように環境変数を介してアクセスするようにしてください。詳細な情報は [アプリのセキュリティのベストプラクティス](https://api.slack.com/authentication/best-practices)のドキュメントを参照してください。
+🔒 全てのトークンは安全に保管してください。少なくともパブリックなバージョン管理にチェックインするようなことは避けるべきでしょう。また、上にあった例のように環境変数を介してアクセスするようにしてください。詳細な情報は [アプリのセキュリティのベストプラクティス](https://docs.slack.dev/authentication/best-practices-for-security)のドキュメントを参照してください。
:::
@@ -139,7 +139,7 @@ python3 app.py
### イベントを設定する {#setting-up-events}
アプリはワークスペース内の他のメンバーと同じように振る舞い、メッセージを投稿したり、絵文字リアクションを追加したり、イベントをリッスンして返答したりできます。
-Slack ワークスペースで発生するイベント(メッセージが投稿されたときや、メッセージに対するリアクションがつけられたときなど)をリッスンするには、[Events API を使って特定の種類のイベントをサブスクライブします](https://api.slack.com/events-api)。
+Slack ワークスペースで発生するイベント(メッセージが投稿されたときや、メッセージに対するリアクションがつけられたときなど)をリッスンするには、[Events API を使って特定の種類のイベントをサブスクライブします](https://docs.slack.dev/apis/events-api/)。
このチュートリアルの序盤でソケットモードを有効にしました。ソケットモードを使うことで、アプリが公開された HTTP エンドポイントを公開せずに Events API やインタラクティブコンポーネントを利用できるようになります。このことは、開発時やファイヤーウォールの裏からのリクエストを受ける際に便利です。HTTP での方式は、ホスティング環境にデプロイするアプリや Slack App Directory で配布されるアプリの開発・運用に適しています。
@@ -164,11 +164,11 @@ import TabItem from '@theme/TabItem';
1. アプリ構成ページに戻ります ([アプリ管理ページから](https://api.slack.com/apps) アプリをクリックします)。左側のサイドバーで [**イベント サブスクリプション**] をクリックします。 **イベントを有効にする**というラベルの付いたスイッチを切り替えます。
-2. リクエスト URL を追加します。 Slack は、イベントに対応する HTTP POST リクエストをこの [リクエスト URL](https://api.slack.com/apis/connections/events-api#the-events-api__subscribing-to-event-types__events-api-request-) に送信します。 Bolt は、`/slack/events` パスを使用して、すべての受信リクエスト (ショートカット、イベント、対話性ペイロードなど) をリッスンします。アプリ構成内でリクエスト URL を構成する場合は、`/slack/events` を追加します。 「https://あなたのドメイン/slack/events」。 💡 Bolt アプリが実行されている限り、URL は検証されるはずです。
+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 は検証されるはずです。
:::tip
-ローカル開発の場合、ngrok などのプロキシ サービスを使用してパブリック URL を作成し、リクエストを開発環境にトンネリングできます。このトンネルの作成方法については、[ngrok のスタート ガイド](https://ngrok.com/docs#getting-started-expose) を参照してください。アプリをホスティングする際には、Slack 開発者がアプリをホストするために使用する最も一般的なホスティング プロバイダーを [API サイト](https://api.slack.com/docs/hosting) に集めました。
+ローカル開発の場合、ngrok などのプロキシ サービスを使用してパブリック URL を作成し、リクエストを開発環境にトンネリングできます。このトンネルの作成方法については、[ngrok のスタート ガイド](https://ngrok.com/docs#getting-started-expose) を参照してください。アプリをホスティングする際には、Slack 開発者がアプリをホストするために使用する最も一般的なホスティング プロバイダーを [API サイト](https://docs.slack.dev/distribution/hosting-slack-apps/) に集めました。
:::
@@ -176,10 +176,10 @@ import TabItem from '@theme/TabItem';
左側のサイドバーから **Event Subscriptions** にアクセスして、機能を有効にしてください。 **Subscribe to Bot Events** 配下で、ボットが受け取れるイベントを追加することができます。4つのメッセージに関するイベントがあります。
-- [`message.channels`](https://api.slack.com/events/message.channels) アプリが参加しているパブリックチャンネルのメッセージをリッスン
-- [`message.groups`](https://api.slack.com/events/message.groups) アプリが参加しているプライベートチャンネルのメッセージをリッスン
-- [`message.im`](https://api.slack.com/events/message.im) あなたのアプリとユーザーのダイレクトメッセージをリッスン
-- [`message.mpim`](https://api.slack.com/events/message.mpim) あなたのアプリが追加されているグループ DM をリッスン
+- [`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 をリッスン
ボットが参加するすべての場所のメッセージをリッスンさせるには、これら 4 つのメッセージイベントをすべて選択します。ボットにリッスンさせるメッセージイベントの種類を選択したら、「**Save Changes**」ボタンをクリックします。
@@ -468,6 +468,6 @@ if __name__ == "__main__":
ここまでで基本的なアプリをセットアップして実行することはできたので、次は自分だけの Bolt アプリを作る方法について調べてみてください。参考になりそうなリソースをいくつかご紹介します。
* 基本的な概念について読んでみてください。Bolt アプリがアクセスできるさまざまメソッドや機能について知ることができます。
-* [`app.event()` メソッド](/concepts/event-listening)でボットがリッスンできるイベントをほかにも試してみましょう。すべてのイベントの一覧は [API サイト](https://api.slack.com/events)で確認できます。
-* Bolt では、アプリにアタッチされたクライアントから [Web API メソッドを呼び出す](/concepts/web-api)ことができます。API サイトに [220 以上のメソッド](https://api.slack.com/methods)を一覧しています。
-* [API サイト](https://api.slack.com/docs/token-types)でほかのタイプのトークンを確認してみてください。アプリで実行したいアクションによって、異なるトークンが必要になる場合があります。
+* [`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)でほかのタイプのトークンを確認してみてください。アプリで実行したいアクションによって、異なるトークンが必要になる場合があります。
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/legacy/steps-from-apps.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/legacy/steps-from-apps.md
index 4717de480..554b2a1f4 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/legacy/steps-from-apps.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/legacy/steps-from-apps.md
@@ -4,7 +4,7 @@ lang: ja-jp
slug: /concepts/steps-from-apps
---
-(アプリによる)ワークフローステップでは、処理をアプリ側で行うカスタムのワークフローステップを提供することができます。ユーザーは[ワークフロービルダー](https://api.slack.com/workflows)を使ってこれらのステップをワークフローに追加できます。
+(アプリによる)ワークフローステップでは、処理をアプリ側で行うカスタムのワークフローステップを提供することができます。ユーザーは[ワークフロービルダー](https://docs.slack.dev/workflows/workflow-builder)を使ってこれらのステップをワークフローに追加できます。
ワークフローステップは、次の 3 つのユーザーイベントで構成されます。
@@ -14,7 +14,7 @@ slug: /concepts/steps-from-apps
ワークフローステップを機能させるためには、これら 3 つのイベントすべてに対応する必要があります。
-アプリを使ったワークフローステップに関する詳細は、[API ドキュメント](https://api.slack.com/workflows/steps)を参照してください。
+アプリを使ったワークフローステップに関する詳細は、[API ドキュメント](https://docs.slack.dev/legacy/legacy-steps-from-apps/)を参照してください。
## ステップの定義
@@ -63,13 +63,13 @@ app.step(ws)
## ステップの追加・編集
-作成したワークフローステップがワークフローに追加またはその設定を変更されるタイミングで、[`workflow_step_edit` イベントがアプリに送信されます](https://api.slack.com/reference/workflows/workflow_step_edit)。このイベントがアプリに届くと、`WorkflowStep` で設定した `edit` コールバックが実行されます。
+作成したワークフローステップがワークフローに追加またはその設定を変更されるタイミングで、[`workflow_step_edit` イベントがアプリに送信されます](https://docs.slack.dev/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step_edit-payload)。このイベントがアプリに届くと、`WorkflowStep` で設定した `edit` コールバックが実行されます。
-ステップの追加と編集のどちらが行われるときも、[ワークフローステップの設定モーダル](https://api.slack.com/reference/workflows/configuration-view)をビルダーに送信する必要があります。このモーダルは、そのステップ独自の設定を選択するための場所です。通常のモーダルより制限が強く、例えば `title`、`submit`、`close` のプロパティを含めることができません。設定モーダルの `callback_id` は、デフォルトではワークフローステップと同じものになります。
+ステップの追加と編集のどちらが行われるときも、[ワークフローステップの設定モーダル](https://docs.slack.dev/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://api.slack.com/workflows/steps#handle_config_view)を参照してください。
+設定モーダルの開き方に関する詳細は、[こちらのドキュメント](https://docs.slack.dev/legacy/legacy-steps-from-apps/legacy-steps-from-apps-configuration-view-object)を参照してください。
指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用
@@ -121,7 +121,7 @@ app.step(ws)
- `step_name` : ステップのデフォルトの名前をオーバーライドします。
- `step_image_url` : ステップのデフォルトの画像をオーバーライドします。
-これらのパラメータの構成方法に関する詳細は、[こちらのドキュメント](https://api.slack.com/reference/workflows/workflow_step)を参照してください。
+これらのパラメータの構成方法に関する詳細は、[こちらのドキュメント](https://docs.slack.dev/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step-object)を参照してください。
指定可能な引数の一覧はモジュールドキュメントを参考にしてください(共通 / ステップ用
@@ -162,7 +162,7 @@ app.step(ws)
## ステップの実行
-エンドユーザーがワークフローステップを実行すると、アプリに [`workflow_step_execute` イベントが送信されます](https://api.slack.com/events/workflow_step_execute)。このイベントがアプリに届くと、`WorkflowStep` で設定した `execute` コールバックが実行されます。
+エンドユーザーがワークフローステップを実行すると、アプリに [`workflow_step_execute` イベントが送信されます](https://docs.slack.dev/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step-object)。このイベントがアプリに届くと、`WorkflowStep` で設定した `execute` コールバックが実行されます。
`save` コールバックで取り出した `inputs` を使って、サードパーティの API を呼び出す、情報をデータベースに保存する、ユーザーのホームタブを更新するといった処理を実行することができます。また、ワークフローの後続のステップで利用する出力値を `outputs` オブジェクトに設定します。
diff --git a/docs/navbarConfig.js b/docs/navbarConfig.js
index 122867f08..b243299f1 100644
--- a/docs/navbarConfig.js
+++ b/docs/navbarConfig.js
@@ -61,7 +61,7 @@ const navbar = {
target: '_self',
},
{
- to: 'https://api.slack.com',
+ to: 'https://docs.slack.dev/',
label: 'API Docs',
position: 'right',
target: '_self',
diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css
index 65b7c372b..8a0fa6ca2 100644
--- a/docs/src/css/custom.css
+++ b/docs/src/css/custom.css
@@ -338,7 +338,7 @@ a code {
color: var(--code-link-text);
}
-a[href^="https://api.slack.com/methods"] > code
+a[href^="https://docs.slack.dev/reference/methods"] > code
{
background-color: var(--method-link-background);
color: var(--method-link-text);
@@ -350,7 +350,7 @@ a[href^="/reference/methods"] > code
color: var(--method-link-text);
}
-a[href^="https://api.slack.com/scopes"] > code
+a[href^="https://docs.slack.dev/reference/scopes"] > code
{
background-color: var(--scope-link-background);
color: var(--scope-link-text);
@@ -362,7 +362,7 @@ a[href^="/reference/scopes"] > code
color: var(--scope-link-text);
}
-a[href^="https://api.slack.com/events"] > code
+a[href^="https://docs.slack.dev/reference/events"] > code
{
background-color: var(--event-link-background);
color: var(--event-link-text);
diff --git a/docs/static/api-docs/slack_bolt/app/app.html b/docs/static/api-docs/slack_bolt/app/app.html
index 5b1544bf7..02fc5b036 100644
--- a/docs/static/api-docs/slack_bolt/app/app.html
+++ b/docs/static/api-docs/slack_bolt/app/app.html
@@ -675,7 +675,7 @@
Classes
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new step from app listener.
@@ -693,7 +693,7 @@
Classes
# Pass Step to set up listeners
app.step(ws)
- Refer to https://api.slack.com/workflows/steps for details of steps from apps.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details of steps from apps.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -710,7 +710,7 @@
Classes
warnings.warn(
(
"Steps from apps for legacy workflows are now deprecated. "
- "Use new custom steps: https://api.slack.com/automation/functions/custom-bolt"
+ "Use new custom steps: https://docs.slack.dev/workflows/workflow-steps"
),
category=DeprecationWarning,
)
@@ -787,7 +787,7 @@
Classes
# Pass a function to this method
app.event("team_join")(ask_for_introduction)
- Refer to https://api.slack.com/apis/connections/events-api for details of Events API.
+ Refer to https://docs.slack.dev/apis/events-api/ for details of Events API.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -825,7 +825,7 @@
Classes
# Pass a function to this method
app.message(":wave:")(say_hello)
- Refer to https://api.slack.com/events/message for details of `message` events.
+ Refer to https://docs.slack.dev/reference/events/message for details of `message` events.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -931,7 +931,7 @@
Classes
# Pass a function to this method
app.command("/echo")(repeat_text)
- Refer to https://api.slack.com/interactivity/slash-commands for details of Slash Commands.
+ Refer to https://docs.slack.dev/interactivity/implementing-slash-commands for details of Slash Commands.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -978,7 +978,7 @@
Classes
# Pass a function to this method
app.shortcut("open_modal")(open_modal)
- Refer to https://api.slack.com/interactivity/shortcuts for details about Shortcuts.
+ Refer to https://docs.slack.dev/interactivity/implementing-shortcuts for details about Shortcuts.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1046,9 +1046,9 @@
Classes
# Pass a function to this method
app.action("approve_button")(update_message)
- * Refer to https://api.slack.com/reference/interaction-payloads/block-actions for actions in `blocks`.
- * Refer to https://api.slack.com/legacy/message-buttons for actions in `attachments`.
- * Refer to https://api.slack.com/dialogs for actions in dialogs.
+ * Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload for actions in `blocks`.
+ * Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons for actions in `attachments`.
+ * Refer to https://docs.slack.dev/legacy/legacy-dialogs for actions in dialogs.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1074,7 +1074,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `block_actions` action listener.
- Refer to https://api.slack.com/reference/interaction-payloads/block-actions for details.
+ Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload for details.
"""
def __call__(*args, **kwargs):
@@ -1091,7 +1091,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `interactive_message` action listener.
- Refer to https://api.slack.com/legacy/message-buttons for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1107,7 +1107,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `dialog_submission` listener.
- Refer to https://api.slack.com/dialogs for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-dialogs for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1123,7 +1123,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `dialog_cancellation` listener.
- Refer to https://api.slack.com/dialogs for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-dialogs for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1164,7 +1164,7 @@
Classes
# Pass a function to this method
app.view("view_1")(handle_submission)
- Refer to https://api.slack.com/reference/interaction-payloads/views for details of payloads.
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload for details of payloads.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1190,7 +1190,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `view_submission` listener.
- Refer to https://api.slack.com/reference/interaction-payloads/views#view_submission for details."""
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload#view_submission for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1206,7 +1206,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `view_closed` listener.
- Refer to https://api.slack.com/reference/interaction-payloads/views#view_closed for details."""
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload#view_closed for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1247,8 +1247,7 @@
Classes
Refer to the following documents for details:
- * https://api.slack.com/reference/block-kit/block-elements#external_select
- * https://api.slack.com/reference/block-kit/block-elements#external_multi_select
+ * https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1288,7 +1287,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `dialog_suggestion` listener.
- Refer to https://api.slack.com/dialogs for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-dialogs for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1630,9 +1629,9 @@
Methods
# Pass a function to this method
app.action("approve_button")(update_message)
- * Refer to https://api.slack.com/reference/interaction-payloads/block-actions for actions in `blocks`.
- * Refer to https://api.slack.com/legacy/message-buttons for actions in `attachments`.
- * Refer to https://api.slack.com/dialogs for actions in dialogs.
+ * Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload for actions in `blocks`.
+ * Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons for actions in `attachments`.
+ * Refer to https://docs.slack.dev/legacy/legacy-dialogs for actions in dialogs.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1661,9 +1660,9 @@
# Pass a function to this method
app.command("/echo")(repeat_text)
- Refer to https://api.slack.com/interactivity/slash-commands for details of Slash Commands.
+ Refer to https://docs.slack.dev/interactivity/implementing-slash-commands for details of Slash Commands.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1829,7 +1828,7 @@
Args
# Pass a function to this method
app.command("/echo")(repeat_text)
-
# Pass a function to this method
app.event("team_join")(ask_for_introduction)
- Refer to https://api.slack.com/apis/connections/events-api for details of Events API.
+ Refer to https://docs.slack.dev/apis/events-api/ for details of Events API.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2214,7 +2213,7 @@
Args
# Pass a function to this method
app.event("team_join")(ask_for_introduction)
-
# Pass a function to this method
app.message(":wave:")(say_hello)
- Refer to https://api.slack.com/events/message for details of `message` events.
+ Refer to https://docs.slack.dev/reference/events/message for details of `message` events.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2412,7 +2411,7 @@
Args
# Pass a function to this method
app.message(":wave:")(say_hello)
-
Refer to the following documents for details:
- * https://api.slack.com/reference/block-kit/block-elements#external_select
- * https://api.slack.com/reference/block-kit/block-elements#external_multi_select
+ * https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2596,8 +2594,7 @@
# Pass a function to this method
app.shortcut("open_modal")(open_modal)
- Refer to https://api.slack.com/interactivity/shortcuts for details about Shortcuts.
+ Refer to https://docs.slack.dev/interactivity/implementing-shortcuts for details about Shortcuts.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2680,7 +2677,7 @@
Args
# Pass a function to this method
app.shortcut("open_modal")(open_modal)
-
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new step from app listener.
@@ -2784,7 +2781,7 @@
Args
# Pass Step to set up listeners
app.step(ws)
- Refer to https://api.slack.com/workflows/steps for details of steps from apps.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details of steps from apps.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2801,7 +2798,7 @@
Args
warnings.warn(
(
"Steps from apps for legacy workflows are now deprecated. "
- "Use new custom steps: https://api.slack.com/automation/functions/custom-bolt"
+ "Use new custom steps: https://docs.slack.dev/workflows/workflow-steps"
),
category=DeprecationWarning,
)
@@ -2823,7 +2820,7 @@
For further information about WorkflowStep specific function arguments
such as configure, update, complete, and fail,
@@ -2909,7 +2906,7 @@
Args
# Pass a function to this method
app.view("view_1")(handle_submission)
- Refer to https://api.slack.com/reference/interaction-payloads/views for details of payloads.
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload for details of payloads.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2950,7 +2947,7 @@
Args
# Pass a function to this method
app.view("view_1")(handle_submission)
-
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new step from app listener.
@@ -705,7 +705,7 @@
Classes
# Pass Step to set up listeners
app.step(ws)
- Refer to https://api.slack.com/workflows/steps for details of steps from apps.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details of steps from apps.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
For further information about AsyncWorkflowStep specific function arguments
@@ -721,7 +721,7 @@
Classes
warnings.warn(
(
"Steps from apps for legacy workflows are now deprecated. "
- "Use new custom steps: https://api.slack.com/automation/functions/custom-bolt"
+ "Use new custom steps: https://docs.slack.dev/workflows/workflow-steps"
),
category=DeprecationWarning,
)
@@ -803,7 +803,7 @@
Classes
# Pass a function to this method
app.event("team_join")(ask_for_introduction)
- Refer to https://api.slack.com/apis/connections/events-api for details of Events API.
+ Refer to https://docs.slack.dev/apis/events-api/ for details of Events API.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -841,7 +841,7 @@
Classes
# Pass a function to this method
app.message(":wave:")(say_hello)
- Refer to https://api.slack.com/events/message for details of `message` events.
+ Refer to https://docs.slack.dev/reference/events/message for details of `message` events.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -952,7 +952,7 @@
Classes
# Pass a function to this method
app.command("/echo")(repeat_text)
- Refer to https://api.slack.com/interactivity/slash-commands for details of Slash Commands.
+ Refer to https://docs.slack.dev/interactivity/implementing-slash-commands for details of Slash Commands.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -999,7 +999,7 @@
Classes
# Pass a function to this method
app.shortcut("open_modal")(open_modal)
- Refer to https://api.slack.com/interactivity/shortcuts for details about Shortcuts.
+ Refer to https://docs.slack.dev/interactivity/implementing-shortcuts for details about Shortcuts.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -1067,9 +1067,9 @@
Classes
# Pass a function to this method
app.action("approve_button")(update_message)
- * Refer to https://api.slack.com/reference/interaction-payloads/block-actions for actions in `blocks`.
- * Refer to https://api.slack.com/legacy/message-buttons for actions in `attachments`.
- * Refer to https://api.slack.com/dialogs for actions in dialogs.
+ * Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload for actions in `blocks`.
+ * Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons for actions in `attachments`.
+ * Refer to https://docs.slack.dev/legacy/legacy-dialogs for actions in dialogs.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -1095,7 +1095,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None,
) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]:
"""Registers a new `block_actions` action listener.
- Refer to https://api.slack.com/reference/interaction-payloads/block-actions for details.
+ Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload for details.
"""
def __call__(*args, **kwargs):
@@ -1112,7 +1112,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None,
) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]:
"""Registers a new `interactive_message` action listener.
- Refer to https://api.slack.com/legacy/message-buttons for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1128,7 +1128,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None,
) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]:
"""Registers a new `dialog_submission` listener.
- Refer to https://api.slack.com/dialogs for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-dialogs for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1144,7 +1144,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None,
) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]:
"""Registers a new `dialog_submission` listener.
- Refer to https://api.slack.com/dialogs for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-dialogs for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1185,7 +1185,7 @@
Classes
# Pass a function to this method
app.view("view_1")(handle_submission)
- Refer to https://api.slack.com/reference/interaction-payloads/views for details of payloads.
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload for details of payloads.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -1211,7 +1211,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None,
) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]:
"""Registers a new `view_submission` listener.
- Refer to https://api.slack.com/reference/interaction-payloads/views#view_submission for details."""
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload#view_submission for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1227,7 +1227,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None,
) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]:
"""Registers a new `view_closed` listener.
- Refer to https://api.slack.com/reference/interaction-payloads/views#view_closed for details."""
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload#view_closed for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1268,8 +1268,7 @@
Classes
Refer to the following documents for details:
- * https://api.slack.com/reference/block-kit/block-elements#external_select
- * https://api.slack.com/reference/block-kit/block-elements#external_multi_select
+ * https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -1309,7 +1308,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None,
) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]:
"""Registers a new `dialog_suggestion` listener.
- Refer to https://api.slack.com/dialogs for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-dialogs for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1663,9 +1662,9 @@
Methods
# Pass a function to this method
app.action("approve_button")(update_message)
- * Refer to https://api.slack.com/reference/interaction-payloads/block-actions for actions in `blocks`.
- * Refer to https://api.slack.com/legacy/message-buttons for actions in `attachments`.
- * Refer to https://api.slack.com/dialogs for actions in dialogs.
+ * Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload for actions in `blocks`.
+ * Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons for actions in `attachments`.
+ * Refer to https://docs.slack.dev/legacy/legacy-dialogs for actions in dialogs.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -1694,9 +1693,9 @@
# Pass a function to this method
app.command("/echo")(repeat_text)
- Refer to https://api.slack.com/interactivity/slash-commands for details of Slash Commands.
+ Refer to https://docs.slack.dev/interactivity/implementing-slash-commands for details of Slash Commands.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -1990,7 +1989,7 @@
Returns
# Pass a function to this method
app.command("/echo")(repeat_text)
-
# Pass a function to this method
app.event("team_join")(ask_for_introduction)
- Refer to https://api.slack.com/apis/connections/events-api for details of Events API.
+ Refer to https://docs.slack.dev/apis/events-api/ for details of Events API.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -2255,7 +2254,7 @@
Args
# Pass a function to this method
app.event("team_join")(ask_for_introduction)
-
# Pass a function to this method
app.message(":wave:")(say_hello)
- Refer to https://api.slack.com/events/message for details of `message` events.
+ Refer to https://docs.slack.dev/reference/events/message for details of `message` events.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -2458,7 +2457,7 @@
Args
# Pass a function to this method
app.message(":wave:")(say_hello)
-
Refer to the following documents for details:
- * https://api.slack.com/reference/block-kit/block-elements#external_select
- * https://api.slack.com/reference/block-kit/block-elements#external_multi_select
+ * https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -2639,8 +2637,7 @@
# Pass a function to this method
app.shortcut("open_modal")(open_modal)
- Refer to https://api.slack.com/interactivity/shortcuts for details about Shortcuts.
+ Refer to https://docs.slack.dev/interactivity/implementing-shortcuts for details about Shortcuts.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -2766,7 +2763,7 @@
Args
# Pass a function to this method
app.shortcut("open_modal")(open_modal)
-
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new step from app listener.
@@ -2847,7 +2844,7 @@
Args
# Pass Step to set up listeners
app.step(ws)
- Refer to https://api.slack.com/workflows/steps for details of steps from apps.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details of steps from apps.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
For further information about AsyncWorkflowStep specific function arguments
@@ -2863,7 +2860,7 @@
Args
warnings.warn(
(
"Steps from apps for legacy workflows are now deprecated. "
- "Use new custom steps: https://api.slack.com/automation/functions/custom-bolt"
+ "Use new custom steps: https://docs.slack.dev/workflows/workflow-steps"
),
category=DeprecationWarning,
)
@@ -2885,7 +2882,7 @@
Unlike others, this method doesn't behave as a decorator.
If you want to register a step from app by a decorator, use AsyncWorkflowStepBuilder's methods.
To learn available arguments for middleware/listeners, see slack_bolt.kwargs_injection.async_args's API document.
For further information about AsyncWorkflowStep specific function arguments
such as configure, update, complete, and fail,
@@ -2968,7 +2965,7 @@
Args
# Pass a function to this method
app.view("view_1")(handle_submission)
- Refer to https://api.slack.com/reference/interaction-payloads/views for details of payloads.
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload for details of payloads.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -3009,7 +3006,7 @@
Args
# Pass a function to this method
app.view("view_1")(handle_submission)
-
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new step from app listener.
@@ -712,7 +712,7 @@
Classes
# Pass Step to set up listeners
app.step(ws)
- Refer to https://api.slack.com/workflows/steps for details of steps from apps.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details of steps from apps.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -729,7 +729,7 @@
Classes
warnings.warn(
(
"Steps from apps for legacy workflows are now deprecated. "
- "Use new custom steps: https://api.slack.com/automation/functions/custom-bolt"
+ "Use new custom steps: https://docs.slack.dev/workflows/workflow-steps"
),
category=DeprecationWarning,
)
@@ -806,7 +806,7 @@
Classes
# Pass a function to this method
app.event("team_join")(ask_for_introduction)
- Refer to https://api.slack.com/apis/connections/events-api for details of Events API.
+ Refer to https://docs.slack.dev/apis/events-api/ for details of Events API.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -844,7 +844,7 @@
Classes
# Pass a function to this method
app.message(":wave:")(say_hello)
- Refer to https://api.slack.com/events/message for details of `message` events.
+ Refer to https://docs.slack.dev/reference/events/message for details of `message` events.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -950,7 +950,7 @@
Classes
# Pass a function to this method
app.command("/echo")(repeat_text)
- Refer to https://api.slack.com/interactivity/slash-commands for details of Slash Commands.
+ Refer to https://docs.slack.dev/interactivity/implementing-slash-commands for details of Slash Commands.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -997,7 +997,7 @@
Classes
# Pass a function to this method
app.shortcut("open_modal")(open_modal)
- Refer to https://api.slack.com/interactivity/shortcuts for details about Shortcuts.
+ Refer to https://docs.slack.dev/interactivity/implementing-shortcuts for details about Shortcuts.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1065,9 +1065,9 @@
Classes
# Pass a function to this method
app.action("approve_button")(update_message)
- * Refer to https://api.slack.com/reference/interaction-payloads/block-actions for actions in `blocks`.
- * Refer to https://api.slack.com/legacy/message-buttons for actions in `attachments`.
- * Refer to https://api.slack.com/dialogs for actions in dialogs.
+ * Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload for actions in `blocks`.
+ * Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons for actions in `attachments`.
+ * Refer to https://docs.slack.dev/legacy/legacy-dialogs for actions in dialogs.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1093,7 +1093,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `block_actions` action listener.
- Refer to https://api.slack.com/reference/interaction-payloads/block-actions for details.
+ Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload for details.
"""
def __call__(*args, **kwargs):
@@ -1110,7 +1110,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `interactive_message` action listener.
- Refer to https://api.slack.com/legacy/message-buttons for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1126,7 +1126,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `dialog_submission` listener.
- Refer to https://api.slack.com/dialogs for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-dialogs for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1142,7 +1142,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `dialog_cancellation` listener.
- Refer to https://api.slack.com/dialogs for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-dialogs for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1183,7 +1183,7 @@
Classes
# Pass a function to this method
app.view("view_1")(handle_submission)
- Refer to https://api.slack.com/reference/interaction-payloads/views for details of payloads.
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload for details of payloads.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1209,7 +1209,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `view_submission` listener.
- Refer to https://api.slack.com/reference/interaction-payloads/views#view_submission for details."""
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload#view_submission for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1225,7 +1225,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `view_closed` listener.
- Refer to https://api.slack.com/reference/interaction-payloads/views#view_closed for details."""
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload#view_closed for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1266,8 +1266,7 @@
Classes
Refer to the following documents for details:
- * https://api.slack.com/reference/block-kit/block-elements#external_select
- * https://api.slack.com/reference/block-kit/block-elements#external_multi_select
+ * https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1307,7 +1306,7 @@
Classes
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `dialog_suggestion` listener.
- Refer to https://api.slack.com/dialogs for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-dialogs for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1649,9 +1648,9 @@
Methods
# Pass a function to this method
app.action("approve_button")(update_message)
- * Refer to https://api.slack.com/reference/interaction-payloads/block-actions for actions in `blocks`.
- * Refer to https://api.slack.com/legacy/message-buttons for actions in `attachments`.
- * Refer to https://api.slack.com/dialogs for actions in dialogs.
+ * Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload for actions in `blocks`.
+ * Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons for actions in `attachments`.
+ * Refer to https://docs.slack.dev/legacy/legacy-dialogs for actions in dialogs.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1680,9 +1679,9 @@
# Pass a function to this method
app.command("/echo")(repeat_text)
- Refer to https://api.slack.com/interactivity/slash-commands for details of Slash Commands.
+ Refer to https://docs.slack.dev/interactivity/implementing-slash-commands for details of Slash Commands.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1848,7 +1847,7 @@
Args
# Pass a function to this method
app.command("/echo")(repeat_text)
-
# Pass a function to this method
app.event("team_join")(ask_for_introduction)
- Refer to https://api.slack.com/apis/connections/events-api for details of Events API.
+ Refer to https://docs.slack.dev/apis/events-api/ for details of Events API.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2233,7 +2232,7 @@
Args
# Pass a function to this method
app.event("team_join")(ask_for_introduction)
-
# Pass a function to this method
app.message(":wave:")(say_hello)
- Refer to https://api.slack.com/events/message for details of `message` events.
+ Refer to https://docs.slack.dev/reference/events/message for details of `message` events.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2431,7 +2430,7 @@
Args
# Pass a function to this method
app.message(":wave:")(say_hello)
-
Refer to the following documents for details:
- * https://api.slack.com/reference/block-kit/block-elements#external_select
- * https://api.slack.com/reference/block-kit/block-elements#external_multi_select
+ * https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2615,8 +2613,7 @@
# Pass a function to this method
app.shortcut("open_modal")(open_modal)
- Refer to https://api.slack.com/interactivity/shortcuts for details about Shortcuts.
+ Refer to https://docs.slack.dev/interactivity/implementing-shortcuts for details about Shortcuts.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2699,7 +2696,7 @@
Args
# Pass a function to this method
app.shortcut("open_modal")(open_modal)
-
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new step from app listener.
@@ -2803,7 +2800,7 @@
Args
# Pass Step to set up listeners
app.step(ws)
- Refer to https://api.slack.com/workflows/steps for details of steps from apps.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details of steps from apps.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2820,7 +2817,7 @@
Args
warnings.warn(
(
"Steps from apps for legacy workflows are now deprecated. "
- "Use new custom steps: https://api.slack.com/automation/functions/custom-bolt"
+ "Use new custom steps: https://docs.slack.dev/workflows/workflow-steps"
),
category=DeprecationWarning,
)
@@ -2842,7 +2839,7 @@
For further information about WorkflowStep specific function arguments
such as configure, update, complete, and fail,
@@ -2928,7 +2925,7 @@
Args
# Pass a function to this method
app.view("view_1")(handle_submission)
- Refer to https://api.slack.com/reference/interaction-payloads/views for details of payloads.
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload for details of payloads.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2969,7 +2966,7 @@
Args
# Pass a function to this method
app.view("view_1")(handle_submission)
-
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new step from app listener.
@@ -796,7 +796,7 @@
Class variables
# Pass Step to set up listeners
app.step(ws)
- Refer to https://api.slack.com/workflows/steps for details of steps from apps.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details of steps from apps.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
For further information about AsyncWorkflowStep specific function arguments
@@ -812,7 +812,7 @@
Class variables
warnings.warn(
(
"Steps from apps for legacy workflows are now deprecated. "
- "Use new custom steps: https://api.slack.com/automation/functions/custom-bolt"
+ "Use new custom steps: https://docs.slack.dev/workflows/workflow-steps"
),
category=DeprecationWarning,
)
@@ -894,7 +894,7 @@
Class variables
# Pass a function to this method
app.event("team_join")(ask_for_introduction)
- Refer to https://api.slack.com/apis/connections/events-api for details of Events API.
+ Refer to https://docs.slack.dev/apis/events-api/ for details of Events API.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -932,7 +932,7 @@
Class variables
# Pass a function to this method
app.message(":wave:")(say_hello)
- Refer to https://api.slack.com/events/message for details of `message` events.
+ Refer to https://docs.slack.dev/reference/events/message for details of `message` events.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -1043,7 +1043,7 @@
Class variables
# Pass a function to this method
app.command("/echo")(repeat_text)
- Refer to https://api.slack.com/interactivity/slash-commands for details of Slash Commands.
+ Refer to https://docs.slack.dev/interactivity/implementing-slash-commands for details of Slash Commands.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -1090,7 +1090,7 @@
Class variables
# Pass a function to this method
app.shortcut("open_modal")(open_modal)
- Refer to https://api.slack.com/interactivity/shortcuts for details about Shortcuts.
+ Refer to https://docs.slack.dev/interactivity/implementing-shortcuts for details about Shortcuts.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -1158,9 +1158,9 @@
Class variables
# Pass a function to this method
app.action("approve_button")(update_message)
- * Refer to https://api.slack.com/reference/interaction-payloads/block-actions for actions in `blocks`.
- * Refer to https://api.slack.com/legacy/message-buttons for actions in `attachments`.
- * Refer to https://api.slack.com/dialogs for actions in dialogs.
+ * Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload for actions in `blocks`.
+ * Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons for actions in `attachments`.
+ * Refer to https://docs.slack.dev/legacy/legacy-dialogs for actions in dialogs.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -1186,7 +1186,7 @@
Class variables
middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None,
) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]:
"""Registers a new `block_actions` action listener.
- Refer to https://api.slack.com/reference/interaction-payloads/block-actions for details.
+ Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload for details.
"""
def __call__(*args, **kwargs):
@@ -1203,7 +1203,7 @@
Class variables
middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None,
) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]:
"""Registers a new `interactive_message` action listener.
- Refer to https://api.slack.com/legacy/message-buttons for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1219,7 +1219,7 @@
Class variables
middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None,
) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]:
"""Registers a new `dialog_submission` listener.
- Refer to https://api.slack.com/dialogs for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-dialogs for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1235,7 +1235,7 @@
Class variables
middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None,
) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]:
"""Registers a new `dialog_submission` listener.
- Refer to https://api.slack.com/dialogs for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-dialogs for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1276,7 +1276,7 @@
Class variables
# Pass a function to this method
app.view("view_1")(handle_submission)
- Refer to https://api.slack.com/reference/interaction-payloads/views for details of payloads.
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload for details of payloads.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -1302,7 +1302,7 @@
Class variables
middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None,
) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]:
"""Registers a new `view_submission` listener.
- Refer to https://api.slack.com/reference/interaction-payloads/views#view_submission for details."""
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload#view_submission for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1318,7 +1318,7 @@
Class variables
middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None,
) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]:
"""Registers a new `view_closed` listener.
- Refer to https://api.slack.com/reference/interaction-payloads/views#view_closed for details."""
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload#view_closed for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1359,8 +1359,7 @@
Class variables
Refer to the following documents for details:
- * https://api.slack.com/reference/block-kit/block-elements#external_select
- * https://api.slack.com/reference/block-kit/block-elements#external_multi_select
+ * https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -1400,7 +1399,7 @@
Class variables
middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None,
) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]:
"""Registers a new `dialog_suggestion` listener.
- Refer to https://api.slack.com/dialogs for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-dialogs for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1754,9 +1753,9 @@
Methods
# Pass a function to this method
app.action("approve_button")(update_message)
- * Refer to https://api.slack.com/reference/interaction-payloads/block-actions for actions in `blocks`.
- * Refer to https://api.slack.com/legacy/message-buttons for actions in `attachments`.
- * Refer to https://api.slack.com/dialogs for actions in dialogs.
+ * Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload for actions in `blocks`.
+ * Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons for actions in `attachments`.
+ * Refer to https://docs.slack.dev/legacy/legacy-dialogs for actions in dialogs.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -1785,9 +1784,9 @@
# Pass a function to this method
app.command("/echo")(repeat_text)
- Refer to https://api.slack.com/interactivity/slash-commands for details of Slash Commands.
+ Refer to https://docs.slack.dev/interactivity/implementing-slash-commands for details of Slash Commands.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -2081,7 +2080,7 @@
Returns
# Pass a function to this method
app.command("/echo")(repeat_text)
-
# Pass a function to this method
app.event("team_join")(ask_for_introduction)
- Refer to https://api.slack.com/apis/connections/events-api for details of Events API.
+ Refer to https://docs.slack.dev/apis/events-api/ for details of Events API.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -2346,7 +2345,7 @@
Args
# Pass a function to this method
app.event("team_join")(ask_for_introduction)
-
# Pass a function to this method
app.message(":wave:")(say_hello)
- Refer to https://api.slack.com/events/message for details of `message` events.
+ Refer to https://docs.slack.dev/reference/events/message for details of `message` events.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -2549,7 +2548,7 @@
Args
# Pass a function to this method
app.message(":wave:")(say_hello)
-
Refer to the following documents for details:
- * https://api.slack.com/reference/block-kit/block-elements#external_select
- * https://api.slack.com/reference/block-kit/block-elements#external_multi_select
+ * https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -2730,8 +2728,7 @@
# Pass a function to this method
app.shortcut("open_modal")(open_modal)
- Refer to https://api.slack.com/interactivity/shortcuts for details about Shortcuts.
+ Refer to https://docs.slack.dev/interactivity/implementing-shortcuts for details about Shortcuts.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -2857,7 +2854,7 @@
Args
# Pass a function to this method
app.shortcut("open_modal")(open_modal)
-
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new step from app listener.
@@ -2938,7 +2935,7 @@
Args
# Pass Step to set up listeners
app.step(ws)
- Refer to https://api.slack.com/workflows/steps for details of steps from apps.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details of steps from apps.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
For further information about AsyncWorkflowStep specific function arguments
@@ -2954,7 +2951,7 @@
Args
warnings.warn(
(
"Steps from apps for legacy workflows are now deprecated. "
- "Use new custom steps: https://api.slack.com/automation/functions/custom-bolt"
+ "Use new custom steps: https://docs.slack.dev/workflows/workflow-steps"
),
category=DeprecationWarning,
)
@@ -2976,7 +2973,7 @@
Unlike others, this method doesn't behave as a decorator.
If you want to register a step from app by a decorator, use AsyncWorkflowStepBuilder's methods.
To learn available arguments for middleware/listeners, see slack_bolt.kwargs_injection.async_args's API document.
For further information about AsyncWorkflowStep specific function arguments
such as configure, update, complete, and fail,
@@ -3059,7 +3056,7 @@
Args
# Pass a function to this method
app.view("view_1")(handle_submission)
- Refer to https://api.slack.com/reference/interaction-payloads/views for details of payloads.
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload for details of payloads.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.async_args`'s API document.
@@ -3100,7 +3097,7 @@
Args
# Pass a function to this method
app.view("view_1")(handle_submission)
-
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new step from app listener.
@@ -833,7 +833,7 @@
Class variables
# Pass Step to set up listeners
app.step(ws)
- Refer to https://api.slack.com/workflows/steps for details of steps from apps.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details of steps from apps.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -850,7 +850,7 @@
Class variables
warnings.warn(
(
"Steps from apps for legacy workflows are now deprecated. "
- "Use new custom steps: https://api.slack.com/automation/functions/custom-bolt"
+ "Use new custom steps: https://docs.slack.dev/workflows/workflow-steps"
),
category=DeprecationWarning,
)
@@ -927,7 +927,7 @@
Class variables
# Pass a function to this method
app.event("team_join")(ask_for_introduction)
- Refer to https://api.slack.com/apis/connections/events-api for details of Events API.
+ Refer to https://docs.slack.dev/apis/events-api/ for details of Events API.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -965,7 +965,7 @@
Class variables
# Pass a function to this method
app.message(":wave:")(say_hello)
- Refer to https://api.slack.com/events/message for details of `message` events.
+ Refer to https://docs.slack.dev/reference/events/message for details of `message` events.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1071,7 +1071,7 @@
Class variables
# Pass a function to this method
app.command("/echo")(repeat_text)
- Refer to https://api.slack.com/interactivity/slash-commands for details of Slash Commands.
+ Refer to https://docs.slack.dev/interactivity/implementing-slash-commands for details of Slash Commands.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1118,7 +1118,7 @@
Class variables
# Pass a function to this method
app.shortcut("open_modal")(open_modal)
- Refer to https://api.slack.com/interactivity/shortcuts for details about Shortcuts.
+ Refer to https://docs.slack.dev/interactivity/implementing-shortcuts for details about Shortcuts.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1186,9 +1186,9 @@
Class variables
# Pass a function to this method
app.action("approve_button")(update_message)
- * Refer to https://api.slack.com/reference/interaction-payloads/block-actions for actions in `blocks`.
- * Refer to https://api.slack.com/legacy/message-buttons for actions in `attachments`.
- * Refer to https://api.slack.com/dialogs for actions in dialogs.
+ * Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload for actions in `blocks`.
+ * Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons for actions in `attachments`.
+ * Refer to https://docs.slack.dev/legacy/legacy-dialogs for actions in dialogs.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1214,7 +1214,7 @@
Class variables
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `block_actions` action listener.
- Refer to https://api.slack.com/reference/interaction-payloads/block-actions for details.
+ Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload for details.
"""
def __call__(*args, **kwargs):
@@ -1231,7 +1231,7 @@
Class variables
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `interactive_message` action listener.
- Refer to https://api.slack.com/legacy/message-buttons for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1247,7 +1247,7 @@
Class variables
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `dialog_submission` listener.
- Refer to https://api.slack.com/dialogs for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-dialogs for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1263,7 +1263,7 @@
Class variables
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `dialog_cancellation` listener.
- Refer to https://api.slack.com/dialogs for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-dialogs for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1304,7 +1304,7 @@
Class variables
# Pass a function to this method
app.view("view_1")(handle_submission)
- Refer to https://api.slack.com/reference/interaction-payloads/views for details of payloads.
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload for details of payloads.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1330,7 +1330,7 @@
Class variables
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `view_submission` listener.
- Refer to https://api.slack.com/reference/interaction-payloads/views#view_submission for details."""
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload#view_submission for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1346,7 +1346,7 @@
Class variables
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `view_closed` listener.
- Refer to https://api.slack.com/reference/interaction-payloads/views#view_closed for details."""
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload#view_closed for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1387,8 +1387,7 @@
Class variables
Refer to the following documents for details:
- * https://api.slack.com/reference/block-kit/block-elements#external_select
- * https://api.slack.com/reference/block-kit/block-elements#external_multi_select
+ * https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1428,7 +1427,7 @@
Class variables
middleware: Optional[Sequence[Union[Callable, Middleware]]] = None,
) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]:
"""Registers a new `dialog_suggestion` listener.
- Refer to https://api.slack.com/dialogs for details."""
+ Refer to https://docs.slack.dev/legacy/legacy-dialogs for details."""
def __call__(*args, **kwargs):
functions = self._to_listener_functions(kwargs) if kwargs else list(args)
@@ -1770,9 +1769,9 @@
Methods
# Pass a function to this method
app.action("approve_button")(update_message)
- * Refer to https://api.slack.com/reference/interaction-payloads/block-actions for actions in `blocks`.
- * Refer to https://api.slack.com/legacy/message-buttons for actions in `attachments`.
- * Refer to https://api.slack.com/dialogs for actions in dialogs.
+ * Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload for actions in `blocks`.
+ * Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons for actions in `attachments`.
+ * Refer to https://docs.slack.dev/legacy/legacy-dialogs for actions in dialogs.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1801,9 +1800,9 @@
# Pass a function to this method
app.command("/echo")(repeat_text)
- Refer to https://api.slack.com/interactivity/slash-commands for details of Slash Commands.
+ Refer to https://docs.slack.dev/interactivity/implementing-slash-commands for details of Slash Commands.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -1969,7 +1968,7 @@
Args
# Pass a function to this method
app.command("/echo")(repeat_text)
-
# Pass a function to this method
app.event("team_join")(ask_for_introduction)
- Refer to https://api.slack.com/apis/connections/events-api for details of Events API.
+ Refer to https://docs.slack.dev/apis/events-api/ for details of Events API.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2354,7 +2353,7 @@
Args
# Pass a function to this method
app.event("team_join")(ask_for_introduction)
-
# Pass a function to this method
app.message(":wave:")(say_hello)
- Refer to https://api.slack.com/events/message for details of `message` events.
+ Refer to https://docs.slack.dev/reference/events/message for details of `message` events.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2552,7 +2551,7 @@
Args
# Pass a function to this method
app.message(":wave:")(say_hello)
-
Refer to the following documents for details:
- * https://api.slack.com/reference/block-kit/block-elements#external_select
- * https://api.slack.com/reference/block-kit/block-elements#external_multi_select
+ * https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2736,8 +2734,7 @@
# Pass a function to this method
app.shortcut("open_modal")(open_modal)
- Refer to https://api.slack.com/interactivity/shortcuts for details about Shortcuts.
+ Refer to https://docs.slack.dev/interactivity/implementing-shortcuts for details about Shortcuts.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2820,7 +2817,7 @@
Args
# Pass a function to this method
app.shortcut("open_modal")(open_modal)
-
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new step from app listener.
@@ -2924,7 +2921,7 @@
Args
# Pass Step to set up listeners
app.step(ws)
- Refer to https://api.slack.com/workflows/steps for details of steps from apps.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details of steps from apps.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -2941,7 +2938,7 @@
Args
warnings.warn(
(
"Steps from apps for legacy workflows are now deprecated. "
- "Use new custom steps: https://api.slack.com/automation/functions/custom-bolt"
+ "Use new custom steps: https://docs.slack.dev/workflows/workflow-steps"
),
category=DeprecationWarning,
)
@@ -2963,7 +2960,7 @@
For further information about WorkflowStep specific function arguments
such as configure, update, complete, and fail,
@@ -3049,7 +3046,7 @@
Args
# Pass a function to this method
app.view("view_1")(handle_submission)
- Refer to https://api.slack.com/reference/interaction-payloads/views for details of payloads.
+ Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload for details of payloads.
To learn available arguments for middleware/listeners, see `slack_bolt.kwargs_injection.args`'s API document.
@@ -3090,7 +3087,7 @@
Args
# Pass a function to this method
app.view("view_1")(handle_submission)
-
"""Verifies an incoming request by checking the validity of
`x-slack-signature`, `x-slack-request-timestamp`, and its body data.
- Refer to https://api.slack.com/authentication/verifying-requests-from-slack for details.
+ Refer to https://docs.slack.dev/authentication/verifying-requests-from-slack for details.
"""
async def async_process(
@@ -232,10 +232,10 @@
Inherited members
Verifies an incoming request by checking the validity of
x-slack-signature, x-slack-request-timestamp, and its body data.
"""Verifies an incoming request by checking the validity of
`x-slack-signature`, `x-slack-request-timestamp`, and its body data.
- Refer to https://api.slack.com/authentication/verifying-requests-from-slack for details.
+ Refer to https://docs.slack.dev/authentication/verifying-requests-from-slack for details.
Args:
signing_secret: The signing secret
@@ -688,7 +688,7 @@
Inherited members
A middleware can process request data before other middleware and listener functions.
Verifies an incoming request by checking the validity of
x-slack-signature, x-slack-request-timestamp, and its body data.
def __init__(self, base_logger: Optional[Logger] = None):
"""Handles url_verification requests.
- Refer to https://api.slack.com/events/url_verification for details.
+ Refer to https://docs.slack.dev/reference/events/url_verification for details.
Args:
base_logger: The base logger
@@ -965,7 +965,7 @@
Inherited members
A middleware can process request data before other middleware and listener functions.
"""Verifies an incoming request by checking the validity of
`x-slack-signature`, `x-slack-request-timestamp`, and its body data.
- Refer to https://api.slack.com/authentication/verifying-requests-from-slack for details.
+ Refer to https://docs.slack.dev/authentication/verifying-requests-from-slack for details.
"""
async def async_process(
@@ -86,10 +86,10 @@
Classes
Verifies an incoming request by checking the validity of
x-slack-signature, x-slack-request-timestamp, and its body data.
"""Verifies an incoming request by checking the validity of
`x-slack-signature`, `x-slack-request-timestamp`, and its body data.
- Refer to https://api.slack.com/authentication/verifying-requests-from-slack for details.
+ Refer to https://docs.slack.dev/authentication/verifying-requests-from-slack for details.
Args:
signing_secret: The signing secret
@@ -120,7 +120,7 @@
Classes
A middleware can process request data before other middleware and listener functions.
Verifies an incoming request by checking the validity of
x-slack-signature, x-slack-request-timestamp, and its body data.
"""Verifies an incoming request by checking the validity of
`x-slack-signature`, `x-slack-request-timestamp`, and its body data.
- Refer to https://api.slack.com/authentication/verifying-requests-from-slack for details.
+ Refer to https://docs.slack.dev/authentication/verifying-requests-from-slack for details.
Args:
signing_secret: The signing secret
@@ -109,7 +109,7 @@
Classes
A middleware can process request data before other middleware and listener functions.
Verifies an incoming request by checking the validity of
x-slack-signature, x-slack-request-timestamp, and its body data.
def __init__(self, base_logger: Optional[Logger] = None):
"""Handles url_verification requests.
- Refer to https://api.slack.com/events/url_verification for details.
+ Refer to https://docs.slack.dev/reference/events/url_verification for details.
Args:
base_logger: The base logger
@@ -104,7 +104,7 @@
Classes
A middleware can process request data before other middleware and listener functions.
def __init__(self, base_logger: Optional[Logger] = None):
"""Handles url_verification requests.
- Refer to https://api.slack.com/events/url_verification for details.
+ Refer to https://docs.slack.dev/reference/events/url_verification for details.
Args:
base_logger: The base logger
@@ -93,7 +93,7 @@
Classes
A middleware can process request data before other middleware and listener functions.
This interface represents Bolt's synchronous response to Slack.
In Socket Mode, the response data can be transformed to a WebSocket message. In the HTTP endpoint mode,
the response data becomes an HTTP response data.
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Args:
callback_id: The callback_id for this step from app
@@ -124,7 +124,7 @@
Classes
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
"""
return AsyncWorkflowStepBuilder(callback_id, base_logger=base_logger)
@@ -200,7 +200,7 @@
class AsyncWorkflowStepBuilder:
"""Steps from apps
- Refer to https://api.slack.com/workflows/steps for details.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details.
"""
callback_id: Union[str, Pattern]
@@ -285,7 +285,7 @@
Static methods
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
This builder is supposed to be used as decorator.
@@ -327,7 +327,7 @@
Static methods
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new edit listener with details.
@@ -380,7 +380,7 @@
Static methods
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new save listener with details.
@@ -433,7 +433,7 @@
Static methods
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new execute listener with details.
@@ -480,7 +480,7 @@
Static methods
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Constructs a WorkflowStep object. This method may raise an exception
if the builder doesn't have enough configurations to build the object.
@@ -555,10 +555,10 @@
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Constructs a WorkflowStep object. This method may raise an exception
if the builder doesn't have enough configurations to build the object.
@@ -685,7 +685,7 @@
Constructs a WorkflowStep object. This method may raise an exception
if the builder doesn't have enough configurations to build the object.
Returns
@@ -709,7 +709,7 @@
Returns
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new edit listener with details.
@@ -754,7 +754,7 @@
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new execute listener with details.
@@ -844,7 +844,7 @@
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new save listener with details.
@@ -934,7 +934,7 @@
app.step(ws)
This utility is a thin wrapper of workflows.stepCompleted API method.
- Refer to https://api.slack.com/methods/workflows.stepCompleted for details.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details.
"""
def __init__(self, *, client: WebClient, body: dict):
@@ -135,7 +135,7 @@
app.step(ws)
This utility is a thin wrapper of workflows.stepFailed API method.
- Refer to https://api.slack.com/methods/workflows.stepFailed for details.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details.
"""
def __init__(self, *, client: WebClient, body: dict):
@@ -281,7 +281,7 @@
app.step(ws)
This utility is a thin wrapper of workflows.stepFailed API method.
- Refer to https://api.slack.com/methods/workflows.updateStep for details.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details.
"""
def __init__(self, *, client: WebClient, body: dict):
@@ -377,7 +377,7 @@
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Args:
callback_id: The callback_id for this step from app
@@ -453,7 +453,7 @@
Classes
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
"""
return WorkflowStepBuilder(
callback_id,
@@ -546,7 +546,7 @@
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Args:
callback_id: The callback_id for this step from app
@@ -120,7 +120,7 @@
Classes
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
"""
return WorkflowStepBuilder(
callback_id,
@@ -213,7 +213,7 @@
class WorkflowStepBuilder:
"""Steps from apps
- Refer to https://api.slack.com/workflows/steps for details.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details.
"""
callback_id: Union[str, Pattern]
@@ -298,7 +298,7 @@
Static methods
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
This builder is supposed to be used as decorator.
@@ -340,7 +340,7 @@
Static methods
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new edit listener with details.
@@ -394,7 +394,7 @@
Static methods
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new save listener with details.
@@ -447,7 +447,7 @@
Static methods
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new execute listener with details.
@@ -494,7 +494,7 @@
Static methods
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Constructs a WorkflowStep object. This method may raise an exception
if the builder doesn't have enough configurations to build the object.
@@ -584,10 +584,10 @@
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Constructs a WorkflowStep object. This method may raise an exception
if the builder doesn't have enough configurations to build the object.
@@ -729,7 +729,7 @@
Constructs a WorkflowStep object. This method may raise an exception
if the builder doesn't have enough configurations to build the object.
Returns
@@ -753,7 +753,7 @@
Returns
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new edit listener with details.
@@ -799,7 +799,7 @@
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new execute listener with details.
@@ -889,7 +889,7 @@
"""
Deprecated:
Steps from apps for legacy workflows are now deprecated.
- Use new custom steps: https://api.slack.com/automation/functions/custom-bolt
+ Use new custom steps: https://docs.slack.dev/workflows/workflow-steps
Registers a new save listener with details.
@@ -979,7 +979,7 @@
app.step(ws)
This utility is a thin wrapper of workflows.stepCompleted API method.
- Refer to https://api.slack.com/methods/workflows.stepCompleted for details.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details.
"""
def __init__(self, *, client: AsyncWebClient, body: dict):
@@ -108,7 +108,7 @@
app.step(ws)
This utility is a thin wrapper of workflows.stepFailed API method.
- Refer to https://api.slack.com/methods/workflows.stepFailed for details.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details.
"""
def __init__(self, *, client: AsyncWebClient, body: dict):
@@ -106,7 +106,7 @@
app.step(ws)
This utility is a thin wrapper of workflows.stepFailed API method.
- Refer to https://api.slack.com/methods/workflows.updateStep for details.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details.
"""
def __init__(self, *, client: AsyncWebClient, body: dict):
@@ -140,7 +140,7 @@
app.step(ws)
This utility is a thin wrapper of workflows.stepCompleted API method.
- Refer to https://api.slack.com/methods/workflows.stepCompleted for details.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details.
"""
def __init__(self, *, client: WebClient, body: dict):
@@ -108,7 +108,7 @@
app.step(ws)
This utility is a thin wrapper of workflows.stepFailed API method.
- Refer to https://api.slack.com/methods/workflows.stepFailed for details.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details.
"""
def __init__(self, *, client: WebClient, body: dict):
@@ -106,7 +106,7 @@
app.step(ws)
This utility is a thin wrapper of workflows.stepFailed API method.
- Refer to https://api.slack.com/methods/workflows.updateStep for details.
+ Refer to https://docs.slack.dev/legacy/legacy-steps-from-apps/ for details.
"""
def __init__(self, *, client: WebClient, body: dict):
@@ -140,7 +140,7 @@
From 1b3e3beadd9be0b925cf0c44c5746b82bc1713df Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 29 Apr 2025 09:44:28 -0400
Subject: [PATCH 11/85] chore(deps): bump http-proxy-middleware from 2.0.7 to
2.0.9 in /docs (#1299)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
docs/package-lock.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/docs/package-lock.json b/docs/package-lock.json
index e65be5252..ec9caf660 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -8868,9 +8868,9 @@
}
},
"node_modules/http-proxy-middleware": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
- "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
+ "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",
From f1c00487ae70eae7fc8ba21f057d78c56c724406 Mon Sep 17 00:00:00 2001
From: Haley Elmendorf <31392893+haleychaas@users.noreply.github.com>
Date: Wed, 30 Apr 2025 10:25:33 -0500
Subject: [PATCH 12/85] Docs: Fixed incorrect link (#1300)
---
docs/content/tutorial/custom-steps-for-jira.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/content/tutorial/custom-steps-for-jira.md b/docs/content/tutorial/custom-steps-for-jira.md
index d0fbe0979..b38f9337c 100644
--- a/docs/content/tutorial/custom-steps-for-jira.md
+++ b/docs/content/tutorial/custom-steps-for-jira.md
@@ -21,7 +21,7 @@ If you'd rather skip the tutorial and just head straight to the code, you can us
1. Navigate to the [app creation page](https://api.slack.com/apps/new) and select **From a manifest**.
2. Select the workspace you want to install the application in, then click **Next**.
-3. Copy the contents of the [`manifest.json`](https://github.com/slack-samples/bolt-python-ai-chatbot/blob/main/manifest.json) file below into the text box that says **Paste your manifest code here** (within the **JSON** tab), then click **Next**:
+3. Copy the contents of the [`manifest.json`](https://github.com/slack-samples/bolt-python-jira-functions/blob/main/manifest.json) file below into the text box that says **Paste your manifest code here** (within the **JSON** tab), then click **Next**:
```js reference title="manifest.json"
https://github.com/slack-samples/bolt-python-jira-functions/blob/main/manifest.json
From a750470e2f08b85a10f75eeaf277f61d295e6ba0 Mon Sep 17 00:00:00 2001
From: Eden Zimbelman
Date: Tue, 20 May 2025 18:27:31 -0700
Subject: [PATCH 13/85] ci: pin actions workflow step hashes and use minimum
permissions (#1303)
---
.github/workflows/codecov.yml | 13 +++++++++----
.github/workflows/docs-deploy.yml | 15 +++++++++------
.github/workflows/flake8.yml | 11 ++++++++---
.github/workflows/mypy.yml | 11 ++++++++---
.github/workflows/tests.yml | 13 +++++++++----
.github/workflows/triage-issues.yml | 15 +++++++--------
6 files changed, 50 insertions(+), 28 deletions(-)
diff --git a/.github/workflows/codecov.yml b/.github/workflows/codecov.yml
index 79fd440b2..391c135c6 100644
--- a/.github/workflows/codecov.yml
+++ b/.github/workflows/codecov.yml
@@ -2,7 +2,8 @@ name: Run codecov
on:
push:
- branches: [main]
+ branches:
+ - main
pull_request:
jobs:
@@ -12,12 +13,16 @@ jobs:
strategy:
matrix:
python-version: ["3.13"]
+ permissions:
+ contents: read
env:
BOLT_PYTHON_CODECOV_RUNNING: "1"
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+ with:
+ persist-credentials: false
- name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v5
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
@@ -31,7 +36,7 @@ jobs:
run: |
pytest --cov=./slack_bolt/ --cov-report=xml
- name: Upload coverage to Codecov
- uses: codecov/codecov-action@v5
+ uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3
with:
fail_ci_if_error: true
verbose: true
diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml
index 54523819e..ed18c4b1d 100644
--- a/.github/workflows/docs-deploy.yml
+++ b/.github/workflows/docs-deploy.yml
@@ -5,23 +5,26 @@ on:
branches:
- main
paths:
- - 'docs/**'
+ - "docs/**"
push:
branches:
- main
paths:
- - 'docs/**'
+ - "docs/**"
workflow_dispatch:
jobs:
build:
name: Build Docusaurus
runs-on: ubuntu-latest
+ permissions:
+ contents: read
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
- - uses: actions/setup-node@v4
+ persist-credentials: false
+ - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
cache: npm
@@ -36,7 +39,7 @@ jobs:
working-directory: ./docs
- name: Upload Build Artifact
- uses: actions/upload-pages-artifact@v3
+ uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3.0.1
with:
path: ./docs/build
@@ -59,4 +62,4 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
- uses: actions/deploy-pages@v4
\ No newline at end of file
+ uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5
diff --git a/.github/workflows/flake8.yml b/.github/workflows/flake8.yml
index c64484b1b..87f3496e1 100644
--- a/.github/workflows/flake8.yml
+++ b/.github/workflows/flake8.yml
@@ -2,7 +2,8 @@ name: Run flake8 validation
on:
push:
- branches: [main]
+ branches:
+ - main
pull_request:
jobs:
@@ -12,10 +13,14 @@ jobs:
strategy:
matrix:
python-version: ["3.13"]
+ permissions:
+ contents: read
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+ with:
+ persist-credentials: false
- name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v5
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ matrix.python-version }}
- name: Run flake8 verification
diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml
index a592bd8cd..f333756b5 100644
--- a/.github/workflows/mypy.yml
+++ b/.github/workflows/mypy.yml
@@ -2,7 +2,8 @@ name: Run mypy validation
on:
push:
- branches: [main]
+ branches:
+ - main
pull_request:
jobs:
@@ -12,10 +13,14 @@ jobs:
strategy:
matrix:
python-version: ["3.13"]
+ permissions:
+ contents: read
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+ with:
+ persist-credentials: false
- name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v5
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ matrix.python-version }}
- name: Run mypy verification
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index bb35112c3..86fa4621c 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -2,7 +2,8 @@ name: Run all the unit tests
on:
push:
- branches: [main]
+ branches:
+ - main
pull_request:
jobs:
@@ -20,10 +21,14 @@ jobs:
- "3.11"
- "3.12"
- "3.13"
+ permissions:
+ contents: read
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+ with:
+ persist-credentials: false
- name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v5
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ matrix.python-version }}
- name: Install synchronous dependencies
@@ -68,7 +73,7 @@ jobs:
pytest tests/scenario_tests_async/ --junitxml=reports/test_scenario_async.xml
- name: Upload test results to Codecov
if: ${{ !cancelled() }}
- uses: codecov/test-results-action@v1
+ uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
with:
directory: ./reports/
flags: ${{ matrix.python-version }}
diff --git a/.github/workflows/triage-issues.yml b/.github/workflows/triage-issues.yml
index d1275a94d..b37c13422 100644
--- a/.github/workflows/triage-issues.yml
+++ b/.github/workflows/triage-issues.yml
@@ -4,20 +4,19 @@
name: Close stale issues and PRs
-on:
+on:
workflow_dispatch:
schedule:
- - cron: '0 0 * * 1'
-
-permissions:
- issues: write
- pull-requests: write
+ - cron: "0 0 * * 1"
jobs:
stale:
runs-on: ubuntu-latest
+ permissions:
+ issues: write
+ pull-requests: write
steps:
- - uses: actions/stale@v9.1.0
+ - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0
with:
days-before-issue-stale: 30
days-before-issue-close: 10
@@ -30,4 +29,4 @@ jobs:
exempt-all-milestones: true
remove-stale-when-updated: true
enable-statistics: true
- operations-per-run: 60
\ No newline at end of file
+ operations-per-run: 60
From accf85d4a46650b6a51a6ad49538dbf160fc743d Mon Sep 17 00:00:00 2001
From: Tracy Rericha <108959677+technically-tracy@users.noreply.github.com>
Date: Tue, 27 May 2025 12:09:34 -0400
Subject: [PATCH 14/85] Docs: moved over custom steps dynamic options page.
(#1307)
---
.../concepts/custom-steps-dynamic-options.md | 247 ++++++++++++++++++
docs/sidebars.js | 1 +
2 files changed, 248 insertions(+)
create mode 100644 docs/content/concepts/custom-steps-dynamic-options.md
diff --git a/docs/content/concepts/custom-steps-dynamic-options.md b/docs/content/concepts/custom-steps-dynamic-options.md
new file mode 100644
index 000000000..cab3f7a61
--- /dev/null
+++ b/docs/content/concepts/custom-steps-dynamic-options.md
@@ -0,0 +1,247 @@
+# Custom Steps dynamic options for Workflow Builder
+
+## 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.
+
+## Example use case {#use-case}
+
+Let's say a builder wants to add a custom step in Workflow Builder that creates an issue in an external issue-tracking system. First, they'll need to specify a project. Once a project is selected, a project-specific list of fields can be presented to them to choose from when creating the issue.
+
+As a developer, dynamic options allow you to supply data to input parameters of custom steps so that you can provide builders with varying sets of fields based on the builders' selections.
+
+In this example, the primary step would invoke a separate project selection step that retrieves the list of available projects. The builder-selected item from the retrieved list would then be used as the input to the secondary issue creation step.
+
+There are two parts necessary for Slack apps to support dynamic options: custom step definitions, and handling custom step dynamic options. We'll take a look at both in the following sections.
+
+## Custom step definitions {#custom-step-definitions}
+
+When defining an input to a custom step intended to be dynamic (rather than explicitly defining a set of input parameters up front), you'll define a `dynamic_options` property that points to another custom step designed to return the set of dynamic elements once this step is added to a workflow from Workflow Builder.
+
+An input parameter for a custom step can reference a different custom step that defines what data is available for it to return. One Slack app could even use another Slack app’s custom step to define dynamic options for one of its inputs.
+
+The following code snippet from our issue creation example discussed above shows a `create-issue` custom step that will be used as a workflow step. Another custom step, the `get-projects` step, will dynamically populate the project input parameter to be configured by a builder. This `get-projects` step provides an `array` containing projects fetched dynamically from the external issue-tracking system.
+
+```js
+ "functions": {
+ "create-issue": {
+ "title": "Create Issue",
+ "description": "",
+ "input_parameters": {
+ "support_channel": {
+ "type": "slack#/types/channel_id",
+ "title": "Support Channel",
+ "description": "",
+ "name": "support_channel"
+ },
+ "project": {
+ "type": "string",
+ "title": "Project",
+ "description": "A project from the issue tracking system",
+ "is_required": true,
+ "dynamic_options": {
+ "function": "#/functions/get-projects",
+ "inputs": {}
+ }
+ },
+ },
+ "output_parameters": {}
+ },
+ "get-projects": {
+ "title": "Get Projects",
+ "description": "Get the available project from the issue tracking system",
+ "input_parameters": {},
+ "output_parameters": {
+ "options": {
+ "type": "slack#/types/options_select",
+ "title": "Project Options",
+ }
+ }
+ }
+ },
+```
+### Defining the `function` and `inputs` attributes {#define-attributes}
+
+Defining the `function` and `inputs` attributes of the `dynamic_options` property would look as follows:
+
+```
+"dynamic_options": {
+ "function": "#/functions/get-projects",
+ "inputs": {}
+}
+```
+
+The `function` attribute specifies the step reference used to resolve the options of the input parameter. For example: `"#/functions/get-projects"`.
+
+The `inputs` attribute defines the parameters to be passed as inputs to the step referenced by the `function` attribute. For example:
+
+```
+"inputs": {
+ "selected_user_id": {
+ "value": "{{input_parameters.user_id}}"
+ },
+ "query": {
+ "value": "{{client.query}}"
+ }
+}
+```
+
+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.
+
+### 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.
+
+```js
+"output_parameters": {
+ "options": {
+ "type": "slack#/types/options_select" or "slack#/types/options_field",
+ "title": "Custom Options",
+ "description": "Options to be used in a dynamic context",
+ }
+ ...
+}
+```
+
+#### 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).
+
+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).
+
+```js
+"step-with-dynamic-input": {
+ "title": "Step that uses a dynamic input",
+ "description": "This step uses a dynamic input rendered as a single-select menu",
+ "input_parameters": {
+ "dynamic_single_select": {
+ "type": "string", // this must be of type string for single-select
+ "title": "dynamic single select drop-down menu",
+ "description": "A dynamically-populated single-select drop-down menu",
+ "is_required": true,
+ "dynamic_options": {
+ "function": "#/functions/get-options",
+ "inputs": {},
+ },
+ }
+ },
+ "output_parameters": {}
+}
+```
+
+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).
+
+```js
+"step-with-dynamic-input": {
+ "title": "Step that uses a dynamic input",
+ "description": "This step uses a dynamic input rendered as a multi-select menu",
+ "input_parameters": {
+ "dynamic_multi_select": {
+ "type": "array", // this must be of type array for multi-select
+ "items": {
+ "type": "string"
+ },
+ "title": "dynamic single select drop-down menu",
+ "description": "A dynamically-populated multi-select drop-down menu",
+ "dynamic_options": {
+ "function": "#/functions/get-options",
+ "inputs": {},
+ },
+ }
+ },
+ "output_parameters": {}
+}
+```
+
+#### 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).
+
+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.
+
+```js
+"test-field-dynamic-options": {
+ "title": "Test dynamic field options",
+ "description": "",
+ "input_parameters": {
+ "dynamic_fields": {
+ "type": "object",
+ "title": "Dynamic custom field options",
+ "description": "A dynamically-populated section of input fields",
+ "dynamic_options": {
+ "function": "#/functions/get-field-options",
+ "inputs": {}
+ "selection_type": "key-value",
+ }
+ }
+ },
+ "output_parameters": {}
+}
+```
+
+### 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).
+
+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.
+
+## 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.
+
+### Asynchronous event handling {#async}
+
+By default, the [Bolt family of frameworks](https://tools.slack.dev/) 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.
+
+### Synchronous event handling {#sync}
+
+Dynamic options support synchronous handling of `function_executed` events. By ensuring that the function execution’s state is complete with output parameters provided before responding to the `function_executed` event, Slack can quickly provide Workflow Builder with the requisite dynamic options.
+
+### 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)).
+
+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.
+
+```py
+@app.function("get-projects", auto_acknowledge=False)
+def handle_get_projects(ack: Ack, complete: Complete):
+ try:
+ complete(
+ outputs={
+ "options": [
+ {
+ "text": {
+ "type": "plain_text",
+ "text": "Secret Squirrel Project",
+ },
+ "value": "p1",
+ },
+ {
+ "text": {
+ "type": "plain_text",
+ "text": "Public Kangaroo Project",
+ },
+ "value": "p2",
+ },
+ ]
+ }
+ )
+ finally:
+ ack()
+```
+
+✨ **To learn more about the Bolt family of frameworks and tools**, check out our [Slack Developer Tools](https://tools.slack.dev/).
diff --git a/docs/sidebars.js b/docs/sidebars.js
index 752b61787..82209d428 100644
--- a/docs/sidebars.js
+++ b/docs/sidebars.js
@@ -41,6 +41,7 @@ const sidebars = {
},
"concepts/ai-apps",
"concepts/custom-steps",
+ "concepts/custom-steps-dynamic-options",
{
type: "category",
label: "App Configuration",
From dd39ed5350fb4dc3984fb7f8d9e36f321153b8dc Mon Sep 17 00:00:00 2001
From: Tracy Rericha <108959677+technically-tracy@users.noreply.github.com>
Date: Tue, 27 May 2025 12:36:17 -0400
Subject: [PATCH 15/85] Docs: Updated links to match Bolt JS. (#1308)
---
docs/content/tutorial/custom-steps.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/content/tutorial/custom-steps.md b/docs/content/tutorial/custom-steps.md
index 79b02089b..2486a49ef 100644
--- a/docs/content/tutorial/custom-steps.md
+++ b/docs/content/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 in Workflow Builder](/automation/runonslack/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](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.
`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.
From e2896fdff75bf65fd8d729cdfe6180e33ecf092c Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 1 Jun 2025 18:51:59 -0700
Subject: [PATCH 16/85] chore(deps): bump codecov/test-results-action from
1.1.0 to 1.1.1 (#1310)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.github/workflows/tests.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 86fa4621c..a1135f265 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -73,7 +73,7 @@ jobs:
pytest tests/scenario_tests_async/ --junitxml=reports/test_scenario_async.xml
- name: Upload test results to Codecov
if: ${{ !cancelled() }}
- uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
+ uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
with:
directory: ./reports/
flags: ${{ matrix.python-version }}
From 79fb18add72b40599dbb1322c41ddf2812c4b2e5 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 1 Jun 2025 18:55:58 -0700
Subject: [PATCH 17/85] chore(deps): bump the docusaurus group in /docs with 5
updates (#1311)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Michael Brooks
---
docs/package-lock.json | 1990 ++++++++++++++++------------------------
docs/package.json | 10 +-
2 files changed, 778 insertions(+), 1222 deletions(-)
diff --git a/docs/package-lock.json b/docs/package-lock.json
index ec9caf660..303f5487a 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -8,9 +8,9 @@
"name": "website",
"version": "2024.08.01",
"dependencies": {
- "@docusaurus/core": "3.7.0",
- "@docusaurus/plugin-client-redirects": "^3.7.0",
- "@docusaurus/preset-classic": "3.7.0",
+ "@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",
@@ -19,8 +19,8 @@
"react-dom": "^19.1.0"
},
"devDependencies": {
- "@docusaurus/module-type-aliases": "3.7.0",
- "@docusaurus/types": "3.7.0"
+ "@docusaurus/module-type-aliases": "3.8.0",
+ "@docusaurus/types": "3.8.0"
},
"engines": {
"node": ">=20.0"
@@ -72,99 +72,99 @@
}
},
"node_modules/@algolia/client-abtesting": {
- "version": "5.20.4",
- "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.20.4.tgz",
- "integrity": "sha512-OZ3Xvvf+k7NMcwmmioIVX+76E/KKtN607NCMNsBEKe+uHqktZ+I5bmi/EVr2m5VF59Gnh9MTlJCdXtBiGjruxw==",
+ "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.20.4",
- "@algolia/requester-browser-xhr": "5.20.4",
- "@algolia/requester-fetch": "5.20.4",
- "@algolia/requester-node-http": "5.20.4"
+ "@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.20.4",
- "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.20.4.tgz",
- "integrity": "sha512-8pM5zQpHonCIBxKmMyBLgQoaSKUNBE5u741VEIjn2ArujolhoKRXempRAlLwEg5hrORKl9XIlit00ff4g6LWvA==",
+ "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.20.4",
- "@algolia/requester-browser-xhr": "5.20.4",
- "@algolia/requester-fetch": "5.20.4",
- "@algolia/requester-node-http": "5.20.4"
+ "@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.20.4",
- "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.20.4.tgz",
- "integrity": "sha512-OCGa8hKAP6kQKBwi+tu9flTXshz4qeCK5P8J6bI1qq8KYs+/TU1xSotT+E7hO+uyDanGU6dT6soiMSi4A38JgA==",
+ "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.20.4",
- "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.20.4.tgz",
- "integrity": "sha512-MroyJStJFLf/cYeCbguCRdrA2U6miDVqbi3t9ZGovBWWTef7BZwVQG0mLyInzp4MIjBfwqu3xTrhxsiiOavX3A==",
+ "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.20.4",
- "@algolia/requester-browser-xhr": "5.20.4",
- "@algolia/requester-fetch": "5.20.4",
- "@algolia/requester-node-http": "5.20.4"
+ "@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.20.4",
- "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.20.4.tgz",
- "integrity": "sha512-bVR5sxFfgCQ+G0ZegGVhBqtaDd7jCfr33m5mGuT43U+bH//xeqAHQyIS4abcmRulwqeIAHNm5Yl2J7grT3z//A==",
+ "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.20.4",
- "@algolia/requester-browser-xhr": "5.20.4",
- "@algolia/requester-fetch": "5.20.4",
- "@algolia/requester-node-http": "5.20.4"
+ "@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.20.4",
- "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.20.4.tgz",
- "integrity": "sha512-ZHsV0vceNDR87wIVaz7VjxilwCUCkzbuy4QnqIdnQs3NnC43is7KKbEtKueuNw+YGMdx+wmD5kRI2XKip1R93A==",
+ "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.20.4",
- "@algolia/requester-browser-xhr": "5.20.4",
- "@algolia/requester-fetch": "5.20.4",
- "@algolia/requester-node-http": "5.20.4"
+ "@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.20.4",
- "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.20.4.tgz",
- "integrity": "sha512-hXM2LpwTzG5kGQSyq3feIijzzl6vkjYPP+LF3ru1relNUIh7fWJ4uYQay2NMNbWX5LWQzF8Vr9qlIA139doQXg==",
+ "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.20.4",
- "@algolia/requester-browser-xhr": "5.20.4",
- "@algolia/requester-fetch": "5.20.4",
- "@algolia/requester-node-http": "5.20.4"
+ "@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"
@@ -177,81 +177,81 @@
"license": "MIT"
},
"node_modules/@algolia/ingestion": {
- "version": "1.20.4",
- "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.20.4.tgz",
- "integrity": "sha512-idAe53XsTlLSSQ7pJcjscUEmc67vEM+VohYkr78Ebfb43vtfKH0ik8ux9OGQpLRNGntaHqpe/lfU5PDRi5/92w==",
+ "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.20.4",
- "@algolia/requester-browser-xhr": "5.20.4",
- "@algolia/requester-fetch": "5.20.4",
- "@algolia/requester-node-http": "5.20.4"
+ "@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.20.4",
- "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.20.4.tgz",
- "integrity": "sha512-O6HjdSWtyu5LhHR7gdU83oWbl1vVVRwoTxkENHF61Ar7l9C1Ok91VtnK7RtXB9pJL1kpIMDExwZOT5sEN2Ppfw==",
+ "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.20.4",
- "@algolia/requester-browser-xhr": "5.20.4",
- "@algolia/requester-fetch": "5.20.4",
- "@algolia/requester-node-http": "5.20.4"
+ "@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.20.4",
- "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.20.4.tgz",
- "integrity": "sha512-p8M78pQjPrN6PudO2TnkWiOJbyp/IPhgCFBW8aZrLshhZpPkV9N4u0YsU/w6OoeYDKSxmXntWQrKYiU1dVRWfg==",
+ "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.20.4",
- "@algolia/requester-browser-xhr": "5.20.4",
- "@algolia/requester-fetch": "5.20.4",
- "@algolia/requester-node-http": "5.20.4"
+ "@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.20.4",
- "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.20.4.tgz",
- "integrity": "sha512-Y8GThjDVdhFUurZKKDdzAML/LNKOA/BOydEcaFeb/g4Iv4Iq0qQJs6aIbtdsngUU6cu74qH/2P84kr2h16uVvQ==",
+ "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.20.4"
+ "@algolia/client-common": "5.25.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/requester-fetch": {
- "version": "5.20.4",
- "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.20.4.tgz",
- "integrity": "sha512-OrAUSrvbFi46U7AxOXkyl9QQiaW21XWpixWmcx3D2S65P/DCIGOVE6K2741ZE+WiKIqp+RSYkyDFj3BiFHzLTg==",
+ "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.20.4"
+ "@algolia/client-common": "5.25.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/requester-node-http": {
- "version": "5.20.4",
- "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.20.4.tgz",
- "integrity": "sha512-Jc/bofGBw4P9nBii4oCzCqqusv8DAFFORfUD2Ce1cZk3fvUPk+q/Qnu7i9JpTSHjMc0MWzqApLdq7Nwh1gelLg==",
+ "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.20.4"
+ "@algolia/client-common": "5.25.0"
},
"engines": {
"node": ">= 14.0.0"
@@ -270,13 +270,14 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.26.2",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
- "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
+ "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.25.9",
+ "@babel/helper-validator-identifier": "^7.27.1",
"js-tokens": "^4.0.0",
- "picocolors": "^1.0.0"
+ "picocolors": "^1.1.1"
},
"engines": {
"node": ">=6.9.0"
@@ -328,12 +329,13 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.26.2",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz",
- "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==",
+ "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.26.2",
- "@babel/types": "^7.26.0",
+ "@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"
@@ -441,9 +443,10 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
- "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
+ "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",
@@ -468,12 +471,13 @@
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
- "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
+ "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.25.9",
- "@babel/types": "^7.25.9"
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -507,9 +511,9 @@
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
- "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
+ "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"
@@ -572,17 +576,19 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
- "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+ "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.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
- "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "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"
}
@@ -622,12 +628,12 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.26.10",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz",
- "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==",
+ "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.26.10"
+ "@babel/types": "^7.27.3"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -1370,12 +1376,12 @@
}
},
"node_modules/@babel/plugin-transform-react-constant-elements": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz",
- "integrity": "sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==",
+ "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.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1490,15 +1496,15 @@
}
},
"node_modules/@babel/plugin-transform-runtime": {
- "version": "7.26.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.9.tgz",
- "integrity": "sha512-Jf+8y9wXQbbxvVYTM8gO5oEF2POdNji0NMltEkG7FtmzD9PVz7/lxpqSdTvwsjTMU5HIHuDVNf2SOxLkWi+wPQ==",
+ "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.25.9",
- "@babel/helper-plugin-utils": "^7.26.5",
+ "@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.10.6",
+ "babel-plugin-polyfill-corejs3": "^0.11.0",
"babel-plugin-polyfill-regenerator": "^0.6.1",
"semver": "^6.3.1"
},
@@ -1509,6 +1515,19 @@
"@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",
@@ -1819,42 +1838,42 @@
}
},
"node_modules/@babel/runtime-corejs3": {
- "version": "7.26.10",
- "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.10.tgz",
- "integrity": "sha512-uITFQYO68pMEYR46AHgQoyBg7KPPJDAbGn4jUTIRgCFJIp88MIBUianVOplhZDEec07bp9zIyr4Kp0FCyQzmWg==",
+ "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",
- "regenerator-runtime": "^0.14.0"
+ "core-js-pure": "^3.30.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/template": {
- "version": "7.26.9",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz",
- "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==",
+ "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.26.2",
- "@babel/parser": "^7.26.9",
- "@babel/types": "^7.26.9"
+ "@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.25.9",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz",
- "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==",
+ "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.25.9",
- "@babel/generator": "^7.25.9",
- "@babel/parser": "^7.25.9",
- "@babel/template": "^7.25.9",
- "@babel/types": "^7.25.9",
+ "@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"
},
@@ -1863,13 +1882,13 @@
}
},
"node_modules/@babel/types": {
- "version": "7.26.10",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz",
- "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==",
+ "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.25.9",
- "@babel/helper-validator-identifier": "^7.25.9"
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1886,9 +1905,9 @@
}
},
"node_modules/@csstools/cascade-layer-name-parser": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.4.tgz",
- "integrity": "sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==",
+ "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",
@@ -1904,8 +1923,8 @@
"node": ">=18"
},
"peerDependencies": {
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3"
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
}
},
"node_modules/@csstools/color-helpers": {
@@ -1928,9 +1947,9 @@
}
},
"node_modules/@csstools/css-calc": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.2.tgz",
- "integrity": "sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==",
+ "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",
@@ -1946,14 +1965,14 @@
"node": ">=18"
},
"peerDependencies": {
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3"
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
}
},
"node_modules/@csstools/css-color-parser": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.8.tgz",
- "integrity": "sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==",
+ "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",
@@ -1967,20 +1986,20 @@
"license": "MIT",
"dependencies": {
"@csstools/color-helpers": "^5.0.2",
- "@csstools/css-calc": "^2.1.2"
+ "@csstools/css-calc": "^2.1.4"
},
"engines": {
"node": ">=18"
},
"peerDependencies": {
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3"
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
}
},
"node_modules/@csstools/css-parser-algorithms": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
- "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
+ "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",
@@ -1996,13 +2015,13 @@
"node": ">=18"
},
"peerDependencies": {
- "@csstools/css-tokenizer": "^3.0.3"
+ "@csstools/css-tokenizer": "^3.0.4"
}
},
"node_modules/@csstools/css-tokenizer": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
- "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
+ "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",
@@ -2019,9 +2038,9 @@
}
},
"node_modules/@csstools/media-query-list-parser": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz",
- "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==",
+ "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",
@@ -2037,8 +2056,8 @@
"node": ">=18"
},
"peerDependencies": {
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3"
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
}
},
"node_modules/@csstools/postcss-cascade-layers": {
@@ -2103,9 +2122,9 @@
}
},
"node_modules/@csstools/postcss-color-function": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.8.tgz",
- "integrity": "sha512-9dUvP2qpZI6PlGQ/sob+95B3u5u7nkYt9yhZFCC7G9HBRHBxj+QxS/wUlwaMGYW0waf+NIierI8aoDTssEdRYw==",
+ "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",
@@ -2118,10 +2137,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.8",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "@csstools/postcss-progressive-custom-properties": "^4.0.0",
+ "@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": {
@@ -2132,9 +2151,38 @@
}
},
"node_modules/@csstools/postcss-color-mix-function": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.8.tgz",
- "integrity": "sha512-yuZpgWUzqZWQhEqfvtJufhl28DgO9sBwSbXbf/59gejNuvZcoUTRGQZhzhwF4ccqb53YAGB+u92z9+eSKoB4YA==",
+ "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",
@@ -2147,10 +2195,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.8",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "@csstools/postcss-progressive-custom-properties": "^4.0.0",
+ "@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": {
@@ -2161,9 +2209,9 @@
}
},
"node_modules/@csstools/postcss-content-alt-text": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.4.tgz",
- "integrity": "sha512-YItlZUOuZJCBlRaCf8Aucc1lgN41qYGALMly0qQllrxYJhiyzlI6RxOTMUvtWk+KhS8GphMDsDhKQ7KTPfEMSw==",
+ "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",
@@ -2176,9 +2224,9 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "@csstools/postcss-progressive-custom-properties": "^4.0.0",
+ "@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": {
@@ -2189,9 +2237,9 @@
}
},
"node_modules/@csstools/postcss-exponential-functions": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.7.tgz",
- "integrity": "sha512-XTb6Mw0v2qXtQYRW9d9duAjDnoTbBpsngD7sRNLmYDjvwU2ebpIHplyxgOeo6jp/Kr52gkLi5VaK5RDCqzMzZQ==",
+ "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",
@@ -2204,9 +2252,9 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-calc": "^2.1.2",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3"
+ "@csstools/css-calc": "^2.1.4",
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
},
"engines": {
"node": ">=18"
@@ -2242,9 +2290,9 @@
}
},
"node_modules/@csstools/postcss-gamut-mapping": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.8.tgz",
- "integrity": "sha512-/K8u9ZyGMGPjmwCSIjgaOLKfic2RIGdFHHes84XW5LnmrvdhOTVxo255NppHi3ROEvoHPW7MplMJgjZK5Q+TxA==",
+ "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",
@@ -2257,9 +2305,9 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.8",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3"
+ "@csstools/css-color-parser": "^3.0.10",
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
},
"engines": {
"node": ">=18"
@@ -2269,9 +2317,9 @@
}
},
"node_modules/@csstools/postcss-gradients-interpolation-method": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.8.tgz",
- "integrity": "sha512-CoHQ/0UXrvxLovu0ZeW6c3/20hjJ/QRg6lyXm3dZLY/JgvRU6bdbQZF/Du30A4TvowfcgvIHQmP1bNXUxgDrAw==",
+ "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",
@@ -2284,10 +2332,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.8",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "@csstools/postcss-progressive-custom-properties": "^4.0.0",
+ "@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": {
@@ -2298,9 +2346,9 @@
}
},
"node_modules/@csstools/postcss-hwb-function": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.8.tgz",
- "integrity": "sha512-LpFKjX6hblpeqyych1cKmk+3FJZ19QmaJtqincySoMkbkG/w2tfbnO5oE6mlnCTXcGUJ0rCEuRHvTqKK0nHYUQ==",
+ "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",
@@ -2313,10 +2361,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.8",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "@csstools/postcss-progressive-custom-properties": "^4.0.0",
+ "@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": {
@@ -2327,9 +2375,9 @@
}
},
"node_modules/@csstools/postcss-ic-unit": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.0.tgz",
- "integrity": "sha512-9QT5TDGgx7wD3EEMN3BSUG6ckb6Eh5gSPT5kZoVtUuAonfPmLDJyPhqR4ntPpMYhUKAMVKAg3I/AgzqHMSeLhA==",
+ "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",
@@ -2342,7 +2390,7 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/postcss-progressive-custom-properties": "^4.0.0",
+ "@csstools/postcss-progressive-custom-properties": "^4.1.0",
"@csstools/utilities": "^2.0.0",
"postcss-value-parser": "^4.2.0"
},
@@ -2437,9 +2485,9 @@
}
},
"node_modules/@csstools/postcss-light-dark-function": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.7.tgz",
- "integrity": "sha512-ZZ0rwlanYKOHekyIPaU+sVm3BEHCe+Ha0/px+bmHe62n0Uc1lL34vbwrLYn6ote8PHlsqzKeTQdIejQCJ05tfw==",
+ "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",
@@ -2452,9 +2500,9 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "@csstools/postcss-progressive-custom-properties": "^4.0.0",
+ "@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": {
@@ -2556,9 +2604,9 @@
}
},
"node_modules/@csstools/postcss-logical-viewport-units": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.3.tgz",
- "integrity": "sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw==",
+ "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",
@@ -2571,7 +2619,7 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-tokenizer": "^3.0.3",
+ "@csstools/css-tokenizer": "^3.0.4",
"@csstools/utilities": "^2.0.0"
},
"engines": {
@@ -2582,9 +2630,9 @@
}
},
"node_modules/@csstools/postcss-media-minmax": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.7.tgz",
- "integrity": "sha512-LB6tIP7iBZb5CYv8iRenfBZmbaG3DWNEziOnPjGoQX5P94FBPvvTBy68b/d9NnS5PELKwFmmOYsAEIgEhDPCHA==",
+ "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",
@@ -2597,10 +2645,10 @@
],
"license": "MIT",
"dependencies": {
- "@csstools/css-calc": "^2.1.2",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "@csstools/media-query-list-parser": "^4.0.2"
+ "@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"
@@ -2610,9 +2658,9 @@
}
},
"node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.4.tgz",
- "integrity": "sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ==",
+ "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",
@@ -2625,9 +2673,9 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "@csstools/media-query-list-parser": "^4.0.2"
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4",
+ "@csstools/media-query-list-parser": "^4.0.3"
},
"engines": {
"node": ">=18"
@@ -2688,9 +2736,9 @@
}
},
"node_modules/@csstools/postcss-oklab-function": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.8.tgz",
- "integrity": "sha512-+5aPsNWgxohXoYNS1f+Ys0x3Qnfehgygv3qrPyv+Y25G0yX54/WlVB+IXprqBLOXHM1gsVF+QQSjlArhygna0Q==",
+ "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",
@@ -2703,10 +2751,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.8",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "@csstools/postcss-progressive-custom-properties": "^4.0.0",
+ "@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": {
@@ -2717,9 +2765,9 @@
}
},
"node_modules/@csstools/postcss-progressive-custom-properties": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.0.tgz",
- "integrity": "sha512-XQPtROaQjomnvLUSy/bALTR5VCtTVUFwYs1SblvYgLSeTo2a/bMNwUwo2piXw5rTv/FEYiy5yPSXBqg9OKUx7Q==",
+ "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",
@@ -2742,9 +2790,9 @@
}
},
"node_modules/@csstools/postcss-random-function": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-1.0.3.tgz",
- "integrity": "sha512-dbNeEEPHxAwfQJ3duRL5IPpuD77QAHtRl4bAHRs0vOVhVbHrsL7mHnwe0irYjbs9kYwhAHZBQTLBgmvufPuRkA==",
+ "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",
@@ -2757,9 +2805,9 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-calc": "^2.1.2",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3"
+ "@csstools/css-calc": "^2.1.4",
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
},
"engines": {
"node": ">=18"
@@ -2769,9 +2817,9 @@
}
},
"node_modules/@csstools/postcss-relative-color-syntax": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.8.tgz",
- "integrity": "sha512-eGE31oLnJDoUysDdjS9MLxNZdtqqSxjDXMdISpLh80QMaYrKs7VINpid34tWQ+iU23Wg5x76qAzf1Q/SLLbZVg==",
+ "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",
@@ -2784,10 +2832,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.8",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "@csstools/postcss-progressive-custom-properties": "^4.0.0",
+ "@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": {
@@ -2836,9 +2884,9 @@
}
},
"node_modules/@csstools/postcss-sign-functions": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.2.tgz",
- "integrity": "sha512-4EcAvXTUPh7n6UoZZkCzgtCf/wPzMlTNuddcKg7HG8ozfQkUcHsJ2faQKeLmjyKdYPyOUn4YA7yDPf8K/jfIxw==",
+ "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",
@@ -2851,9 +2899,9 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-calc": "^2.1.2",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3"
+ "@csstools/css-calc": "^2.1.4",
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
},
"engines": {
"node": ">=18"
@@ -2863,9 +2911,9 @@
}
},
"node_modules/@csstools/postcss-stepped-value-functions": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.7.tgz",
- "integrity": "sha512-rdrRCKRnWtj5FyRin0u/gLla7CIvZRw/zMGI1fVJP0Sg/m1WGicjPVHRANL++3HQtsiXKAbPrcPr+VkyGck0IA==",
+ "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",
@@ -2878,9 +2926,9 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-calc": "^2.1.2",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3"
+ "@csstools/css-calc": "^2.1.4",
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
},
"engines": {
"node": ">=18"
@@ -2916,9 +2964,9 @@
}
},
"node_modules/@csstools/postcss-trigonometric-functions": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.7.tgz",
- "integrity": "sha512-qTrZgLju3AV7Djhzuh2Bq/wjFqbcypnk0FhHjxW8DWJQcZLS1HecIus4X2/RLch1ukX7b+YYCdqbEnpIQO5ccg==",
+ "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",
@@ -2931,9 +2979,9 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-calc": "^2.1.2",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3"
+ "@csstools/css-calc": "^2.1.4",
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
},
"engines": {
"node": ">=18"
@@ -3034,9 +3082,9 @@
}
},
"node_modules/@docusaurus/babel": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.7.0.tgz",
- "integrity": "sha512-0H5uoJLm14S/oKV3Keihxvh8RV+vrid+6Gv+2qhuzbqHanawga8tYnsdpjEyt36ucJjqlby2/Md2ObWjA02UXQ==",
+ "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",
@@ -3049,8 +3097,8 @@
"@babel/runtime": "^7.25.9",
"@babel/runtime-corejs3": "^7.25.9",
"@babel/traverse": "^7.25.9",
- "@docusaurus/logger": "3.7.0",
- "@docusaurus/utils": "3.7.0",
+ "@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"
@@ -3060,17 +3108,17 @@
}
},
"node_modules/@docusaurus/bundler": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.7.0.tgz",
- "integrity": "sha512-CUUT9VlSGukrCU5ctZucykvgCISivct+cby28wJwCC/fkQFgAHRp/GKv2tx38ZmXb7nacrKzFTcp++f9txUYGg==",
+ "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.7.0",
- "@docusaurus/cssnano-preset": "3.7.0",
- "@docusaurus/logger": "3.7.0",
- "@docusaurus/types": "3.7.0",
- "@docusaurus/utils": "3.7.0",
+ "@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",
@@ -3084,7 +3132,6 @@
"postcss": "^8.4.26",
"postcss-loader": "^7.3.3",
"postcss-preset-env": "^10.1.0",
- "react-dev-utils": "^12.0.1",
"terser-webpack-plugin": "^5.3.9",
"tslib": "^2.6.0",
"url-loader": "^4.1.1",
@@ -3104,18 +3151,18 @@
}
},
"node_modules/@docusaurus/core": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.7.0.tgz",
- "integrity": "sha512-b0fUmaL+JbzDIQaamzpAFpTviiaU4cX3Qz8cuo14+HGBCwa0evEK0UYCBFY3n4cLzL8Op1BueeroUD2LYAIHbQ==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/babel": "3.7.0",
- "@docusaurus/bundler": "3.7.0",
- "@docusaurus/logger": "3.7.0",
- "@docusaurus/mdx-loader": "3.7.0",
- "@docusaurus/utils": "3.7.0",
- "@docusaurus/utils-common": "3.7.0",
- "@docusaurus/utils-validation": "3.7.0",
+ "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",
@@ -3123,19 +3170,19 @@
"combine-promises": "^1.1.0",
"commander": "^5.1.0",
"core-js": "^3.31.1",
- "del": "^6.1.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-dev-utils": "^12.0.1",
"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",
@@ -3144,7 +3191,7 @@
"react-router-dom": "^5.3.4",
"semver": "^7.5.4",
"serve-handler": "^6.1.6",
- "shelljs": "^0.8.5",
+ "tinypool": "^1.0.2",
"tslib": "^2.6.0",
"update-notifier": "^6.0.2",
"webpack": "^5.95.0",
@@ -3165,9 +3212,9 @@
}
},
"node_modules/@docusaurus/cssnano-preset": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.7.0.tgz",
- "integrity": "sha512-X9GYgruZBSOozg4w4dzv9uOz8oK/EpPVQXkp0MM6Tsgp/nRIU9hJzJ0Pxg1aRa3xCeEQTOimZHcocQFlLwYajQ==",
+ "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",
@@ -3180,9 +3227,9 @@
}
},
"node_modules/@docusaurus/logger": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.7.0.tgz",
- "integrity": "sha512-z7g62X7bYxCYmeNNuO9jmzxLQG95q9QxINCwpboVcNff3SJiHJbGrarxxOVMVmAh1MsrSfxWkVGv4P41ktnFsA==",
+ "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",
@@ -3193,21 +3240,21 @@
}
},
"node_modules/@docusaurus/mdx-loader": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.7.0.tgz",
- "integrity": "sha512-OFBG6oMjZzc78/U3WNPSHs2W9ZJ723ewAcvVJaqS0VgyeUfmzUV8f1sv+iUHA0DtwiR5T5FjOxj6nzEE8LY6VA==",
+ "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.7.0",
- "@docusaurus/utils": "3.7.0",
- "@docusaurus/utils-validation": "3.7.0",
+ "@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": "^1.0.2",
+ "image-size": "^2.0.2",
"mdast-util-mdx": "^3.0.0",
"mdast-util-to-string": "^4.0.0",
"rehype-raw": "^7.0.0",
@@ -3232,17 +3279,17 @@
}
},
"node_modules/@docusaurus/module-type-aliases": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.7.0.tgz",
- "integrity": "sha512-g7WdPqDNaqA60CmBrr0cORTrsOit77hbsTj7xE2l71YhBn79sxdm7WMK7wfhcaafkbpIh7jv5ef5TOpf1Xv9Lg==",
+ "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.7.0",
+ "@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@*",
+ "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0",
"react-loadable": "npm:@docusaurus/react-loadable@6.0.0"
},
"peerDependencies": {
@@ -3251,16 +3298,16 @@
}
},
"node_modules/@docusaurus/plugin-client-redirects": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.7.0.tgz",
- "integrity": "sha512-6B4XAtE5ZVKOyhPgpgMkb7LwCkN+Hgd4vOnlbwR8nCdTQhLjz8MHbGlwwvZ/cay2SPNRX5KssqKAlcHVZP2m8g==",
+ "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.7.0",
- "@docusaurus/logger": "3.7.0",
- "@docusaurus/utils": "3.7.0",
- "@docusaurus/utils-common": "3.7.0",
- "@docusaurus/utils-validation": "3.7.0",
+ "@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",
@@ -3275,24 +3322,24 @@
}
},
"node_modules/@docusaurus/plugin-content-blog": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.7.0.tgz",
- "integrity": "sha512-EFLgEz6tGHYWdPU0rK8tSscZwx+AsyuBW/r+tNig2kbccHYGUJmZtYN38GjAa3Fda4NU+6wqUO5kTXQSRBQD3g==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/core": "3.7.0",
- "@docusaurus/logger": "3.7.0",
- "@docusaurus/mdx-loader": "3.7.0",
- "@docusaurus/theme-common": "3.7.0",
- "@docusaurus/types": "3.7.0",
- "@docusaurus/utils": "3.7.0",
- "@docusaurus/utils-common": "3.7.0",
- "@docusaurus/utils-validation": "3.7.0",
+ "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",
- "reading-time": "^1.5.0",
+ "schema-dts": "^1.1.2",
"srcset": "^4.0.0",
"tslib": "^2.6.0",
"unist-util-visit": "^5.0.0",
@@ -3309,25 +3356,26 @@
}
},
"node_modules/@docusaurus/plugin-content-docs": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.7.0.tgz",
- "integrity": "sha512-GXg5V7kC9FZE4FkUZA8oo/NrlRb06UwuICzI6tcbzj0+TVgjq/mpUXXzSgKzMS82YByi4dY2Q808njcBCyy6tQ==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/core": "3.7.0",
- "@docusaurus/logger": "3.7.0",
- "@docusaurus/mdx-loader": "3.7.0",
- "@docusaurus/module-type-aliases": "3.7.0",
- "@docusaurus/theme-common": "3.7.0",
- "@docusaurus/types": "3.7.0",
- "@docusaurus/utils": "3.7.0",
- "@docusaurus/utils-common": "3.7.0",
- "@docusaurus/utils-validation": "3.7.0",
+ "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"
@@ -3341,16 +3389,16 @@
}
},
"node_modules/@docusaurus/plugin-content-pages": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.7.0.tgz",
- "integrity": "sha512-YJSU3tjIJf032/Aeao8SZjFOrXJbz/FACMveSMjLyMH4itQyZ2XgUIzt4y+1ISvvk5zrW4DABVT2awTCqBkx0Q==",
+ "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.7.0",
- "@docusaurus/mdx-loader": "3.7.0",
- "@docusaurus/types": "3.7.0",
- "@docusaurus/utils": "3.7.0",
- "@docusaurus/utils-validation": "3.7.0",
+ "@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"
@@ -3363,48 +3411,51 @@
"react-dom": "^18.0.0 || ^19.0.0"
}
},
- "node_modules/@docusaurus/plugin-debug": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.7.0.tgz",
- "integrity": "sha512-Qgg+IjG/z4svtbCNyTocjIwvNTNEwgRjSXXSJkKVG0oWoH0eX/HAPiu+TS1HBwRPQV+tTYPWLrUypYFepfujZA==",
+ "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.7.0",
- "@docusaurus/types": "3.7.0",
- "@docusaurus/utils": "3.7.0",
- "fs-extra": "^11.1.1",
- "react-json-view-lite": "^1.2.0",
+ "@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-debug/node_modules/react-json-view-lite": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.5.0.tgz",
- "integrity": "sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==",
+ "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": ">=14"
+ "node": ">=18.0"
},
"peerDependencies": {
- "react": "^16.13.1 || ^17.0.0 || ^18.0.0"
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
}
},
"node_modules/@docusaurus/plugin-google-analytics": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.7.0.tgz",
- "integrity": "sha512-otIqiRV/jka6Snjf+AqB360XCeSv7lQC+DKYW+EUZf6XbuE8utz5PeUQ8VuOcD8Bk5zvT1MC4JKcd5zPfDuMWA==",
+ "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.7.0",
- "@docusaurus/types": "3.7.0",
- "@docusaurus/utils-validation": "3.7.0",
+ "@docusaurus/core": "3.8.0",
+ "@docusaurus/types": "3.8.0",
+ "@docusaurus/utils-validation": "3.8.0",
"tslib": "^2.6.0"
},
"engines": {
@@ -3416,14 +3467,14 @@
}
},
"node_modules/@docusaurus/plugin-google-gtag": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.7.0.tgz",
- "integrity": "sha512-M3vrMct1tY65ModbyeDaMoA+fNJTSPe5qmchhAbtqhDD/iALri0g9LrEpIOwNaoLmm6lO88sfBUADQrSRSGSWA==",
+ "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.7.0",
- "@docusaurus/types": "3.7.0",
- "@docusaurus/utils-validation": "3.7.0",
+ "@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"
},
@@ -3436,14 +3487,14 @@
}
},
"node_modules/@docusaurus/plugin-google-tag-manager": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.7.0.tgz",
- "integrity": "sha512-X8U78nb8eiMiPNg3jb9zDIVuuo/rE1LjGDGu+5m5CX4UBZzjMy+klOY2fNya6x8ACyE/L3K2erO1ErheP55W/w==",
+ "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.7.0",
- "@docusaurus/types": "3.7.0",
- "@docusaurus/utils-validation": "3.7.0",
+ "@docusaurus/core": "3.8.0",
+ "@docusaurus/types": "3.8.0",
+ "@docusaurus/utils-validation": "3.8.0",
"tslib": "^2.6.0"
},
"engines": {
@@ -3455,17 +3506,17 @@
}
},
"node_modules/@docusaurus/plugin-sitemap": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.7.0.tgz",
- "integrity": "sha512-bTRT9YLZ/8I/wYWKMQke18+PF9MV8Qub34Sku6aw/vlZ/U+kuEuRpQ8bTcNOjaTSfYsWkK4tTwDMHK2p5S86cA==",
+ "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.7.0",
- "@docusaurus/logger": "3.7.0",
- "@docusaurus/types": "3.7.0",
- "@docusaurus/utils": "3.7.0",
- "@docusaurus/utils-common": "3.7.0",
- "@docusaurus/utils-validation": "3.7.0",
+ "@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"
@@ -3479,15 +3530,15 @@
}
},
"node_modules/@docusaurus/plugin-svgr": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.7.0.tgz",
- "integrity": "sha512-HByXIZTbc4GV5VAUkZ2DXtXv1Qdlnpk3IpuImwSnEzCDBkUMYcec5282hPjn6skZqB25M1TYCmWS91UbhBGxQg==",
+ "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.7.0",
- "@docusaurus/types": "3.7.0",
- "@docusaurus/utils": "3.7.0",
- "@docusaurus/utils-validation": "3.7.0",
+ "@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",
@@ -3502,25 +3553,26 @@
}
},
"node_modules/@docusaurus/preset-classic": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.7.0.tgz",
- "integrity": "sha512-nPHj8AxDLAaQXs+O6+BwILFuhiWbjfQWrdw2tifOClQoNfuXDjfjogee6zfx6NGHWqshR23LrcN115DmkHC91Q==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/core": "3.7.0",
- "@docusaurus/plugin-content-blog": "3.7.0",
- "@docusaurus/plugin-content-docs": "3.7.0",
- "@docusaurus/plugin-content-pages": "3.7.0",
- "@docusaurus/plugin-debug": "3.7.0",
- "@docusaurus/plugin-google-analytics": "3.7.0",
- "@docusaurus/plugin-google-gtag": "3.7.0",
- "@docusaurus/plugin-google-tag-manager": "3.7.0",
- "@docusaurus/plugin-sitemap": "3.7.0",
- "@docusaurus/plugin-svgr": "3.7.0",
- "@docusaurus/theme-classic": "3.7.0",
- "@docusaurus/theme-common": "3.7.0",
- "@docusaurus/theme-search-algolia": "3.7.0",
- "@docusaurus/types": "3.7.0"
+ "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"
@@ -3531,24 +3583,24 @@
}
},
"node_modules/@docusaurus/theme-classic": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.7.0.tgz",
- "integrity": "sha512-MnLxG39WcvLCl4eUzHr0gNcpHQfWoGqzADCly54aqCofQX6UozOS9Th4RK3ARbM9m7zIRv3qbhggI53dQtx/hQ==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/core": "3.7.0",
- "@docusaurus/logger": "3.7.0",
- "@docusaurus/mdx-loader": "3.7.0",
- "@docusaurus/module-type-aliases": "3.7.0",
- "@docusaurus/plugin-content-blog": "3.7.0",
- "@docusaurus/plugin-content-docs": "3.7.0",
- "@docusaurus/plugin-content-pages": "3.7.0",
- "@docusaurus/theme-common": "3.7.0",
- "@docusaurus/theme-translations": "3.7.0",
- "@docusaurus/types": "3.7.0",
- "@docusaurus/utils": "3.7.0",
- "@docusaurus/utils-common": "3.7.0",
- "@docusaurus/utils-validation": "3.7.0",
+ "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",
@@ -3572,15 +3624,15 @@
}
},
"node_modules/@docusaurus/theme-common": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.7.0.tgz",
- "integrity": "sha512-8eJ5X0y+gWDsURZnBfH0WabdNm8XMCXHv8ENy/3Z/oQKwaB/EHt5lP9VsTDTf36lKEp0V6DjzjFyFIB+CetL0A==",
+ "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.7.0",
- "@docusaurus/module-type-aliases": "3.7.0",
- "@docusaurus/utils": "3.7.0",
- "@docusaurus/utils-common": "3.7.0",
+ "@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": "*",
@@ -3600,19 +3652,19 @@
}
},
"node_modules/@docusaurus/theme-search-algolia": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.7.0.tgz",
- "integrity": "sha512-Al/j5OdzwRU1m3falm+sYy9AaB93S1XF1Lgk9Yc6amp80dNxJVplQdQTR4cYdzkGtuQqbzUA8+kaoYYO0RbK6g==",
- "license": "MIT",
- "dependencies": {
- "@docsearch/react": "^3.8.1",
- "@docusaurus/core": "3.7.0",
- "@docusaurus/logger": "3.7.0",
- "@docusaurus/plugin-content-docs": "3.7.0",
- "@docusaurus/theme-common": "3.7.0",
- "@docusaurus/theme-translations": "3.7.0",
- "@docusaurus/utils": "3.7.0",
- "@docusaurus/utils-validation": "3.7.0",
+ "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",
@@ -3631,9 +3683,9 @@
}
},
"node_modules/@docusaurus/theme-translations": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.7.0.tgz",
- "integrity": "sha512-Ewq3bEraWDmienM6eaNK7fx+/lHMtGDHQyd1O+4+3EsDxxUmrzPkV7Ct3nBWTuE0MsoZr3yNwQVKjllzCMuU3g==",
+ "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",
@@ -3644,9 +3696,9 @@
}
},
"node_modules/@docusaurus/types": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz",
- "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==",
+ "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",
@@ -3679,15 +3731,16 @@
}
},
"node_modules/@docusaurus/utils": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.7.0.tgz",
- "integrity": "sha512-e7zcB6TPnVzyUaHMJyLSArKa2AG3h9+4CfvKXKKWNx6hRs+p0a+u7HHTJBgo6KW2m+vqDnuIHK4X+bhmoghAFA==",
+ "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.7.0",
- "@docusaurus/types": "3.7.0",
- "@docusaurus/utils-common": "3.7.0",
+ "@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",
@@ -3697,9 +3750,9 @@
"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",
- "shelljs": "^0.8.5",
"tslib": "^2.6.0",
"url-loader": "^4.1.1",
"utility-types": "^3.10.0",
@@ -3710,12 +3763,12 @@
}
},
"node_modules/@docusaurus/utils-common": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.7.0.tgz",
- "integrity": "sha512-IZeyIfCfXy0Mevj6bWNg7DG7B8G+S6o6JVpddikZtWyxJguiQ7JYr0SIZ0qWd8pGNuMyVwriWmbWqMnK7Y5PwA==",
+ "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.7.0",
+ "@docusaurus/types": "3.8.0",
"tslib": "^2.6.0"
},
"engines": {
@@ -3723,14 +3776,14 @@
}
},
"node_modules/@docusaurus/utils-validation": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.7.0.tgz",
- "integrity": "sha512-w8eiKk8mRdN+bNfeZqC4nyFoxNyI1/VExMKAzD9tqpJfLLbsa46Wfn5wcKH761g9WkKh36RtFV49iL9lh1DYBA==",
+ "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.7.0",
- "@docusaurus/utils": "3.7.0",
- "@docusaurus/utils-common": "3.7.0",
+ "@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",
@@ -4531,12 +4584,6 @@
"@types/node": "*"
}
},
- "node_modules/@types/parse-json": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
- "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
- "license": "MIT"
- },
"node_modules/@types/prismjs": {
"version": "1.26.4",
"resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.4.tgz",
@@ -4969,33 +5016,33 @@
}
},
"node_modules/algoliasearch": {
- "version": "5.20.4",
- "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.20.4.tgz",
- "integrity": "sha512-wjfzqruxovJyDqga8M6Xk5XtfuVg3igrWjhjgkRya87+WwfEa1kg+IluujBLzgAiMSd6rO6jqRb7czjgeeSYgQ==",
- "license": "MIT",
- "dependencies": {
- "@algolia/client-abtesting": "5.20.4",
- "@algolia/client-analytics": "5.20.4",
- "@algolia/client-common": "5.20.4",
- "@algolia/client-insights": "5.20.4",
- "@algolia/client-personalization": "5.20.4",
- "@algolia/client-query-suggestions": "5.20.4",
- "@algolia/client-search": "5.20.4",
- "@algolia/ingestion": "1.20.4",
- "@algolia/monitoring": "1.20.4",
- "@algolia/recommend": "5.20.4",
- "@algolia/requester-browser-xhr": "5.20.4",
- "@algolia/requester-fetch": "5.20.4",
- "@algolia/requester-node-http": "5.20.4"
+ "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.24.2",
- "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.24.2.tgz",
- "integrity": "sha512-vBw/INZDfyh/THbVeDy8On8lZqd2qiUAHde5N4N1ygL4SoeLqLGJ4GHneHrDAYsjikRwTTtodEP0fiXl5MxHFQ==",
+ "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"
@@ -5141,19 +5188,10 @@
"astring": "bin/astring"
}
},
- "node_modules/at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "license": "ISC",
- "engines": {
- "node": ">= 4.0.0"
- }
- },
"node_modules/autoprefixer": {
- "version": "10.4.20",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
- "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
+ "version": "10.4.21",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
+ "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
"funding": [
{
"type": "opencollective",
@@ -5170,11 +5208,11 @@
],
"license": "MIT",
"dependencies": {
- "browserslist": "^4.23.3",
- "caniuse-lite": "^1.0.30001646",
+ "browserslist": "^4.24.4",
+ "caniuse-lite": "^1.0.30001702",
"fraction.js": "^4.3.7",
"normalize-range": "^0.1.2",
- "picocolors": "^1.0.1",
+ "picocolors": "^1.1.1",
"postcss-value-parser": "^4.2.0"
},
"bin": {
@@ -5403,9 +5441,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
- "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
+ "version": "4.25.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz",
+ "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==",
"funding": [
{
"type": "opencollective",
@@ -5422,10 +5460,10 @@
],
"license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001688",
- "electron-to-chromium": "^1.5.73",
+ "caniuse-lite": "^1.0.30001718",
+ "electron-to-chromium": "^1.5.160",
"node-releases": "^2.0.19",
- "update-browserslist-db": "^1.1.1"
+ "update-browserslist-db": "^1.1.3"
},
"bin": {
"browserslist": "cli.js"
@@ -5564,9 +5602,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001702",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz",
- "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==",
+ "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",
@@ -6010,9 +6048,9 @@
}
},
"node_modules/consola": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz",
- "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==",
+ "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"
@@ -6147,11 +6185,12 @@
}
},
"node_modules/core-js-compat": {
- "version": "3.39.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz",
- "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==",
+ "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.2"
+ "browserslist": "^4.24.4"
},
"funding": {
"type": "opencollective",
@@ -6159,9 +6198,9 @@
}
},
"node_modules/core-js-pure": {
- "version": "3.41.0",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.41.0.tgz",
- "integrity": "sha512-71Gzp96T9YPk63aUvE5Q5qP+DryB4ZloUZPSOebGM88VNw8VNfvdA7z6kGA8iGOTEzAomsRidp4jXSmUIJsL+Q==",
+ "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": {
@@ -6493,9 +6532,9 @@
}
},
"node_modules/cssdb": {
- "version": "8.2.3",
- "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.3.tgz",
- "integrity": "sha512-9BDG5XmJrJQQnJ51VFxXCAtpZ5ebDlAREmO8sxMOVU0aSxN/gocbctjIG5LMh3WBUq+xTlb/jw2LoljBEqraTA==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.3.0.tgz",
+ "integrity": "sha512-c7bmItIg38DgGjSwDPZOYF/2o0QU/sSgkWOMyl8votOfgFuyiFKWPesmCGEsrGLxEA9uL540cp8LdaGEjUGsZQ==",
"funding": [
{
"type": "opencollective",
@@ -6726,6 +6765,7 @@
"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"
}
@@ -6794,28 +6834,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/del": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
- "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
- "license": "MIT",
- "dependencies": {
- "globby": "^11.0.1",
- "graceful-fs": "^4.2.4",
- "is-glob": "^4.0.1",
- "is-path-cwd": "^2.2.0",
- "is-path-inside": "^3.0.2",
- "p-map": "^4.0.0",
- "rimraf": "^3.0.2",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -6866,38 +6884,6 @@
"node": ">= 4.0.0"
}
},
- "node_modules/detect-port-alt": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz",
- "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==",
- "license": "MIT",
- "dependencies": {
- "address": "^1.0.1",
- "debug": "^2.6.0"
- },
- "bin": {
- "detect": "bin/detect-port",
- "detect-port": "bin/detect-port"
- },
- "engines": {
- "node": ">= 4.2.1"
- }
- },
- "node_modules/detect-port-alt/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/detect-port-alt/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/devlop": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
@@ -7067,9 +7053,9 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.5.112",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.112.tgz",
- "integrity": "sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==",
+ "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": {
@@ -7702,15 +7688,6 @@
"url": "https://opencollective.com/webpack"
}
},
- "node_modules/filesize": {
- "version": "8.0.7",
- "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz",
- "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -7815,134 +7792,6 @@
}
}
},
- "node_modules/fork-ts-checker-webpack-plugin": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz",
- "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.8.3",
- "@types/json-schema": "^7.0.5",
- "chalk": "^4.1.0",
- "chokidar": "^3.4.2",
- "cosmiconfig": "^6.0.0",
- "deepmerge": "^4.2.2",
- "fs-extra": "^9.0.0",
- "glob": "^7.1.6",
- "memfs": "^3.1.2",
- "minimatch": "^3.0.4",
- "schema-utils": "2.7.0",
- "semver": "^7.3.2",
- "tapable": "^1.0.0"
- },
- "engines": {
- "node": ">=10",
- "yarn": ">=1.0.0"
- },
- "peerDependencies": {
- "eslint": ">= 6",
- "typescript": ">= 2.7",
- "vue-template-compiler": "*",
- "webpack": ">= 4"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- },
- "vue-template-compiler": {
- "optional": true
- }
- }
- },
- "node_modules/fork-ts-checker-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==",
- "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/fork-ts-checker-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==",
- "license": "MIT",
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
- "license": "MIT",
- "dependencies": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.7.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "license": "MIT",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/fork-ts-checker-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==",
- "license": "MIT"
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
- "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
- "license": "MIT",
- "dependencies": {
- "@types/json-schema": "^7.0.4",
- "ajv": "^6.12.2",
- "ajv-keywords": "^3.4.1"
- },
- "engines": {
- "node": ">= 8.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
- "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/form-data-encoder": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz",
@@ -8152,55 +8001,17 @@
"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/global-modules": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
- "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
- "license": "MIT",
- "dependencies": {
- "global-prefix": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/global-prefix": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
- "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
- "license": "MIT",
- "dependencies": {
- "ini": "^1.3.5",
- "kind-of": "^6.0.2",
- "which": "^1.3.1"
- },
- "engines": {
- "node": ">=6"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/global-prefix/node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "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",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/globals": {
@@ -8958,13 +8769,10 @@
}
},
"node_modules/image-size": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz",
- "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz",
+ "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==",
"license": "MIT",
- "dependencies": {
- "queue": "6.0.2"
- },
"bin": {
"image-size": "bin/image-size.js"
},
@@ -8972,16 +8780,6 @@
"node": ">=16.x"
}
},
- "node_modules/immer": {
- "version": "9.0.21",
- "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz",
- "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==",
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/immer"
- }
- },
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -9059,14 +8857,6 @@
"resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
"integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="
},
- "node_modules/interpret": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
- "engines": {
- "node": ">= 0.10"
- }
- },
"node_modules/invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -9264,15 +9054,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-path-cwd": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
- "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/is-path-inside": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
@@ -9321,15 +9102,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-root": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz",
- "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@@ -12355,6 +12127,15 @@
"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",
@@ -12400,6 +12181,22 @@
"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",
@@ -12413,13 +12210,16 @@
"node": ">=8"
}
},
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "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": ">=6"
+ "node": ">=8"
}
},
"node_modules/package-json": {
@@ -12645,79 +12445,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/pkg-up": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
- "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
- "license": "MIT",
- "dependencies": {
- "find-up": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-up/node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "license": "MIT",
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-up/node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "license": "MIT",
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-up/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-up/node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-up/node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/postcss": {
"version": "8.4.39",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz",
@@ -12815,9 +12542,9 @@
}
},
"node_modules/postcss-color-functional-notation": {
- "version": "7.0.8",
- "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.8.tgz",
- "integrity": "sha512-S/TpMKVKofNvsxfau/+bw+IA6cSfB6/kmzFj5szUofHOVnFFMB2WwK+Zu07BeMD8T0n+ZnTO5uXiMvAKe2dPkA==",
+ "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",
@@ -12830,10 +12557,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.8",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "@csstools/postcss-progressive-custom-properties": "^4.0.0",
+ "@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": {
@@ -12930,9 +12657,9 @@
}
},
"node_modules/postcss-custom-media": {
- "version": "11.0.5",
- "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.5.tgz",
- "integrity": "sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ==",
+ "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",
@@ -12945,10 +12672,10 @@
],
"license": "MIT",
"dependencies": {
- "@csstools/cascade-layer-name-parser": "^2.0.4",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "@csstools/media-query-list-parser": "^4.0.2"
+ "@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"
@@ -12958,9 +12685,9 @@
}
},
"node_modules/postcss-custom-properties": {
- "version": "14.0.4",
- "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.4.tgz",
- "integrity": "sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A==",
+ "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",
@@ -12973,9 +12700,9 @@
],
"license": "MIT",
"dependencies": {
- "@csstools/cascade-layer-name-parser": "^2.0.4",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
+ "@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"
},
@@ -12987,9 +12714,9 @@
}
},
"node_modules/postcss-custom-selectors": {
- "version": "8.0.4",
- "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.4.tgz",
- "integrity": "sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg==",
+ "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",
@@ -13002,9 +12729,9 @@
],
"license": "MIT",
"dependencies": {
- "@csstools/cascade-layer-name-parser": "^2.0.4",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
+ "@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": {
@@ -13129,9 +12856,9 @@
}
},
"node_modules/postcss-double-position-gradients": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.0.tgz",
- "integrity": "sha512-JkIGah3RVbdSEIrcobqj4Gzq0h53GG4uqDPsho88SgY84WnpkTpI0k50MFK/sX7XqVisZ6OqUfFnoUO6m1WWdg==",
+ "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",
@@ -13144,7 +12871,7 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/postcss-progressive-custom-properties": "^4.0.0",
+ "@csstools/postcss-progressive-custom-properties": "^4.1.0",
"@csstools/utilities": "^2.0.0",
"postcss-value-parser": "^4.2.0"
},
@@ -13289,9 +13016,9 @@
}
},
"node_modules/postcss-lab-function": {
- "version": "7.0.8",
- "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.8.tgz",
- "integrity": "sha512-plV21I86Hg9q8omNz13G9fhPtLopIWH06bt/Cb5cs1XnaGU2kUtEitvVd4vtQb/VqCdNUHK5swKn3QFmMRbpDg==",
+ "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",
@@ -13304,10 +13031,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.8",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "@csstools/postcss-progressive-custom-properties": "^4.0.0",
+ "@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": {
@@ -13878,9 +13605,9 @@
}
},
"node_modules/postcss-preset-env": {
- "version": "10.1.5",
- "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.5.tgz",
- "integrity": "sha512-LQybafF/K7H+6fAs4SIkgzkSCixJy0/h0gubDIAP3Ihz+IQBRwsjyvBnAZ3JUHD+A/ITaxVRPDxn//a3Qy4pDw==",
+ "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",
@@ -13894,59 +13621,60 @@
"license": "MIT-0",
"dependencies": {
"@csstools/postcss-cascade-layers": "^5.0.1",
- "@csstools/postcss-color-function": "^4.0.8",
- "@csstools/postcss-color-mix-function": "^3.0.8",
- "@csstools/postcss-content-alt-text": "^2.0.4",
- "@csstools/postcss-exponential-functions": "^2.0.7",
+ "@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.8",
- "@csstools/postcss-gradients-interpolation-method": "^5.0.8",
- "@csstools/postcss-hwb-function": "^4.0.8",
- "@csstools/postcss-ic-unit": "^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.7",
+ "@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.3",
- "@csstools/postcss-media-minmax": "^2.0.7",
- "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.4",
+ "@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.8",
- "@csstools/postcss-progressive-custom-properties": "^4.0.0",
- "@csstools/postcss-random-function": "^1.0.3",
- "@csstools/postcss-relative-color-syntax": "^3.0.8",
+ "@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.2",
- "@csstools/postcss-stepped-value-functions": "^4.0.7",
+ "@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.7",
+ "@csstools/postcss-trigonometric-functions": "^4.0.9",
"@csstools/postcss-unset-value": "^4.0.0",
- "autoprefixer": "^10.4.19",
- "browserslist": "^4.24.4",
+ "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.2.3",
+ "cssdb": "^8.3.0",
"postcss-attribute-case-insensitive": "^7.0.1",
"postcss-clamp": "^4.1.0",
- "postcss-color-functional-notation": "^7.0.8",
+ "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.5",
- "postcss-custom-properties": "^14.0.4",
- "postcss-custom-selectors": "^8.0.4",
+ "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.0",
+ "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.8",
+ "postcss-lab-function": "^7.0.10",
"postcss-logical": "^8.1.0",
"postcss-nesting": "^13.0.1",
"postcss-opacity-percentage": "^3.0.0",
@@ -14307,15 +14035,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/queue": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
- "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==",
- "license": "MIT",
- "dependencies": {
- "inherits": "~2.0.3"
- }
- },
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -14421,132 +14140,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/react-dev-utils": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz",
- "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.16.0",
- "address": "^1.1.2",
- "browserslist": "^4.18.1",
- "chalk": "^4.1.2",
- "cross-spawn": "^7.0.3",
- "detect-port-alt": "^1.1.6",
- "escape-string-regexp": "^4.0.0",
- "filesize": "^8.0.6",
- "find-up": "^5.0.0",
- "fork-ts-checker-webpack-plugin": "^6.5.0",
- "global-modules": "^2.0.0",
- "globby": "^11.0.4",
- "gzip-size": "^6.0.0",
- "immer": "^9.0.7",
- "is-root": "^2.1.0",
- "loader-utils": "^3.2.0",
- "open": "^8.4.0",
- "pkg-up": "^3.1.0",
- "prompts": "^2.4.2",
- "react-error-overlay": "^6.0.11",
- "recursive-readdir": "^2.2.2",
- "shell-quote": "^1.7.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/react-dev-utils/node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "license": "MIT",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-dev-utils/node_modules/loader-utils": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz",
- "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==",
- "license": "MIT",
- "engines": {
- "node": ">= 12.13.0"
- }
- },
- "node_modules/react-dev-utils/node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-dev-utils/node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-dev-utils/node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "license": "MIT",
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-dev-utils/node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/react-dev-utils/node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/react-dom": {
"version": "19.1.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
@@ -14559,12 +14152,6 @@
"react": "^19.1.0"
}
},
- "node_modules/react-error-overlay": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.1.0.tgz",
- "integrity": "sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ==",
- "license": "MIT"
- },
"node_modules/react-fast-compare": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
@@ -14594,6 +14181,18 @@
"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",
@@ -14697,35 +14296,6 @@
"node": ">=8.10.0"
}
},
- "node_modules/reading-time": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz",
- "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==",
- "license": "MIT"
- },
- "node_modules/rechoir": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
- "dependencies": {
- "resolve": "^1.1.6"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/recursive-readdir": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz",
- "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==",
- "license": "MIT",
- "dependencies": {
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/regenerate": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
@@ -15256,6 +14826,12 @@
"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",
@@ -15598,22 +15174,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/shelljs": {
- "version": "0.8.5",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
- "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
- "dependencies": {
- "glob": "^7.0.0",
- "interpret": "^1.0.0",
- "rechoir": "^0.6.2"
- },
- "bin": {
- "shjs": "bin/shjs"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/side-channel": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
@@ -15885,9 +15445,9 @@
}
},
"node_modules/std-env": {
- "version": "3.8.1",
- "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.1.tgz",
- "integrity": "sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==",
+ "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": {
@@ -16230,12 +15790,6 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
},
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "license": "MIT"
- },
"node_modules/thunky": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
@@ -16252,6 +15806,15 @@
"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",
@@ -16363,6 +15926,7 @@
"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",
@@ -16561,9 +16125,9 @@
}
},
"node_modules/update-browserslist-db": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
- "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
+ "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",
@@ -16578,9 +16142,10 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
"escalade": "^3.2.0",
- "picocolors": "^1.1.0"
+ "picocolors": "^1.1.1"
},
"bin": {
"update-browserslist-db": "cli.js"
@@ -17445,19 +17010,10 @@
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
},
- "node_modules/yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "license": "ISC",
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/yocto-queue": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
- "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==",
+ "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"
diff --git a/docs/package.json b/docs/package.json
index 7c155bd9e..2bb440711 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -14,9 +14,9 @@
"write-heading-ids": "docusaurus write-heading-ids"
},
"dependencies": {
- "@docusaurus/core": "3.7.0",
- "@docusaurus/plugin-client-redirects": "^3.7.0",
- "@docusaurus/preset-classic": "3.7.0",
+ "@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",
@@ -25,8 +25,8 @@
"react-dom": "^19.1.0"
},
"devDependencies": {
- "@docusaurus/module-type-aliases": "3.7.0",
- "@docusaurus/types": "3.7.0"
+ "@docusaurus/module-type-aliases": "3.8.0",
+ "@docusaurus/types": "3.8.0"
},
"browserslist": {
"production": [
From cbd8f3a870580e55892e2e207da8d45bcc2007ac Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 2 Jun 2025 11:57:19 -0400
Subject: [PATCH 18/85] chore(deps): bump mypy from 1.15.0 to 1.16.0 (#1309)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: William Bergamin
Co-authored-by: William Bergamin
---
requirements/tools.txt | 2 +-
slack_bolt/adapter/falcon/async_resource.py | 2 +-
slack_bolt/adapter/falcon/resource.py | 4 ++--
slack_bolt/app/app.py | 2 +-
slack_bolt/app/async_app.py | 2 +-
5 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/requirements/tools.txt b/requirements/tools.txt
index 0fd423ad2..0e6090497 100644
--- a/requirements/tools.txt
+++ b/requirements/tools.txt
@@ -1,3 +1,3 @@
-mypy==1.15.0
+mypy==1.16.0
flake8==7.2.0
black==24.8.0 # Until we drop Python 3.6 support, we have to stay with this version
diff --git a/slack_bolt/adapter/falcon/async_resource.py b/slack_bolt/adapter/falcon/async_resource.py
index eece0a323..8d03b456c 100644
--- a/slack_bolt/adapter/falcon/async_resource.py
+++ b/slack_bolt/adapter/falcon/async_resource.py
@@ -42,7 +42,7 @@ async def on_get(self, req: Request, resp: Response):
resp.status = "404"
# Falcon 4.x w/ mypy fails to correctly infer the str type here
- resp.body = "The page is not found..." # type: ignore[assignment]
+ resp.body = "The page is not found..."
async def on_post(self, req: Request, resp: Response):
bolt_req = await self._to_bolt_request(req)
diff --git a/slack_bolt/adapter/falcon/resource.py b/slack_bolt/adapter/falcon/resource.py
index baf0f9745..53792775f 100644
--- a/slack_bolt/adapter/falcon/resource.py
+++ b/slack_bolt/adapter/falcon/resource.py
@@ -36,7 +36,7 @@ def on_get(self, req: Request, resp: Response):
resp.status = "404"
# Falcon 4.x w/ mypy fails to correctly infer the str type here
- resp.body = "The page is not found..." # type: ignore[assignment]
+ resp.body = "The page is not found..."
def on_post(self, req: Request, resp: Response):
bolt_req = self._to_bolt_request(req)
@@ -53,7 +53,7 @@ def _to_bolt_request(self, req: Request) -> BoltRequest:
def _write_response(self, bolt_resp: BoltResponse, resp: Response):
if falcon_version.__version__.startswith("2."):
# Falcon 4.x w/ mypy fails to correctly infer the str type here
- resp.body = bolt_resp.body # type: ignore[assignment]
+ resp.body = bolt_resp.body
else:
resp.text = bolt_resp.body
diff --git a/slack_bolt/app/app.py b/slack_bolt/app/app.py
index 69da0a0d8..c117740a1 100644
--- a/slack_bolt/app/app.py
+++ b/slack_bolt/app/app.py
@@ -1448,7 +1448,7 @@ def _register_listener(
CustomListener(
app_name=self.name,
ack_function=functions.pop(0),
- lazy_functions=functions,
+ lazy_functions=functions, # type:ignore[arg-type]
matchers=listener_matchers,
middleware=listener_middleware,
auto_acknowledgement=auto_acknowledgement,
diff --git a/slack_bolt/app/async_app.py b/slack_bolt/app/async_app.py
index 3fcc3d955..c04326291 100644
--- a/slack_bolt/app/async_app.py
+++ b/slack_bolt/app/async_app.py
@@ -1487,7 +1487,7 @@ def _register_listener(
AsyncCustomListener(
app_name=self.name,
ack_function=functions.pop(0),
- lazy_functions=functions,
+ lazy_functions=functions, # type:ignore[arg-type]
matchers=listener_matchers,
middleware=listener_middleware,
auto_acknowledgement=auto_acknowledgement,
From 260e9b9c34ac930c99769077ee682dda9e0f1426 Mon Sep 17 00:00:00 2001
From: Tracy Rericha <108959677+technically-tracy@users.noreply.github.com>
Date: Tue, 3 Jun 2025 12:09:24 -0400
Subject: [PATCH 19/85] docs: updated nav (#1313)
---
docs/sidebars.js | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/docs/sidebars.js b/docs/sidebars.js
index 82209d428..65c5e85f4 100644
--- a/docs/sidebars.js
+++ b/docs/sidebars.js
@@ -40,8 +40,14 @@ const sidebars = {
],
},
"concepts/ai-apps",
- "concepts/custom-steps",
- "concepts/custom-steps-dynamic-options",
+ {
+ type: 'category',
+ label: 'Custom Steps',
+ items: [
+ 'concepts/custom-steps',
+ 'concepts/custom-steps-dynamic-options',
+ ]
+ },
{
type: "category",
label: "App Configuration",
From 5778bf59c6c28379faa2ffee62c0b1e862b2a3f0 Mon Sep 17 00:00:00 2001
From: William Bergamin
Date: Thu, 26 Jun 2025 13:22:57 -0400
Subject: [PATCH 20/85] fix: sanic dependencies for tests (#1320)
---
.github/workflows/tests.yml | 14 +++++++-------
requirements/adapter.txt | 5 +++++
2 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index a1135f265..1d16d1a1b 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -53,20 +53,20 @@ jobs:
- name: Install async dependencies
run: |
pip install -r requirements/async.txt
- - name: Run tests for HTTP Mode adapters (ASGI)
- run: |
- # Requires async test dependencies
- pytest tests/adapter_tests/asgi/ --junitxml=reports/test_adapter_asgi.xml
- name: Run tests for Socket Mode adapters
run: |
# Requires async test dependencies
pytest tests/adapter_tests/socket_mode/ --junitxml=reports/test_adapter_socket_mode.xml
- - name: Run tests for HTTP Mode adapters (asyncio-based libraries)
- run: |
- pytest tests/adapter_tests_async/ --junitxml=reports/test_adapter_async.xml
- name: Install all dependencies
run: |
pip install -r requirements/testing.txt
+ - name: Run tests for HTTP Mode adapters (ASGI)
+ run: |
+ # Requires async test dependencies
+ pytest tests/adapter_tests/asgi/ --junitxml=reports/test_adapter_asgi.xml
+ - name: Run tests for HTTP Mode adapters (asyncio-based libraries)
+ run: |
+ pytest tests/adapter_tests_async/ --junitxml=reports/test_adapter_async.xml
- name: Run asynchronous tests
run: |
pytest tests/slack_bolt_async/ --junitxml=reports/test_slack_bolt_async.xml
diff --git a/requirements/adapter.txt b/requirements/adapter.txt
index 6618f2b6f..b8cadb510 100644
--- a/requirements/adapter.txt
+++ b/requirements/adapter.txt
@@ -13,9 +13,14 @@ fastapi>=0.70.0,<1
Flask>=1,<4
Werkzeug>=2,<4
pyramid>=1,<3
+
+# Sanic and its dependencies
+# Note: Sanic imports tracerite with wild card versions
+tracerite<1.1.2; python_version<="3.8" # older versions of python are not compatible with tracerite>1.1.2
sanic>=20,<21; python_version=="3.6"
sanic>=21,<24; python_version>"3.6" and python_version<="3.8"
sanic>=21,<26; python_version>"3.8"
+
starlette>=0.19.1,<1
tornado>=6,<7
uvicorn<1 # The oldest version can vary among Python runtime versions
From 7f9ae9cdb68c4f98995f557c2fec6bbbfaf62239 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 26 Jun 2025 16:06:07 -0700
Subject: [PATCH 21/85] chore(deps): bump brace-expansion from 1.1.11 to 1.1.12
in /docs (#1321)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
docs/package-lock.json | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/docs/package-lock.json b/docs/package-lock.json
index 303f5487a..4e7d7b445 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -5421,9 +5421,10 @@
}
},
"node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "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"
From 35295329f4118c16d2cc3e4545661a98eac7b192 Mon Sep 17 00:00:00 2001
From: Eden Zimbelman
Date: Fri, 27 Jun 2025 12:59:44 -0700
Subject: [PATCH 22/85] ci: run unit tests on main once a day (#1319)
Co-authored-by: William Bergamin
---
.github/workflows/tests.yml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 1d16d1a1b..748ddcd30 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -5,6 +5,8 @@ on:
branches:
- main
pull_request:
+ schedule:
+ - cron: "0 0 * * *"
jobs:
build:
From 079552dc861d710b846a4bdb4044cb6431a5f304 Mon Sep 17 00:00:00 2001
From: William Bergamin
Date: Fri, 27 Jun 2025 16:29:56 -0400
Subject: [PATCH 23/85] chore: run CI tests from the Github UI (#1322)
---
.github/workflows/tests.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 748ddcd30..3b396b201 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -7,6 +7,7 @@ on:
pull_request:
schedule:
- cron: "0 0 * * *"
+ workflow_dispatch:
jobs:
build:
From d3ca0550196a2211c991f5db34ff40945e980095 Mon Sep 17 00:00:00 2001
From: Eden Zimbelman
Date: Fri, 27 Jun 2025 14:10:07 -0700
Subject: [PATCH 24/85] ci: send a notification of failing tests on the main
branch (#1323)
Co-authored-by: William Bergamin
---
.github/workflows/tests.yml | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 3b396b201..4fe757b1a 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -82,3 +82,18 @@ jobs:
flags: ${{ matrix.python-version }}
token: ${{ secrets.CODECOV_TOKEN }}
verbose: true
+ notifications:
+ name: Regression notifications
+ runs-on: ubuntu-latest
+ needs: build
+ if: failure() && github.ref == 'refs/heads/main' && github.event_name != 'workflow_dispatch'
+ steps:
+ - name: Send notifications of failing tests
+ uses: slackapi/slack-github-action@b0fa283ad8fea605de13dc3f449259339835fc52 # v2.1.0
+ with:
+ errors: true
+ webhook: ${{ secrets.SLACK_REGRESSION_FAILURES_WEBHOOK_URL }}
+ webhook-type: webhook-trigger
+ payload: |
+ action_url: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
+ repository: "${{ github.repository }}"
From b9c9999b1d3777997af1c8f57a4d59aa9e148256 Mon Sep 17 00:00:00 2001
From: Tracy Rericha <108959677+technically-tracy@users.noreply.github.com>
Date: Tue, 1 Jul 2025 06:57:34 -0400
Subject: [PATCH 25/85] docs: add quick start guide using the slack cli and
terminal (#1317)
---
docs/content/building-an-app.md | 483 +++++++++++++++++++++++++++++
docs/content/getting-started.md | 527 +++++++++++---------------------
docs/docusaurus.config.js | 1 +
docs/sidebars.js | 6 +-
4 files changed, 662 insertions(+), 355 deletions(-)
create mode 100644 docs/content/building-an-app.md
diff --git a/docs/content/building-an-app.md b/docs/content/building-an-app.md
new file mode 100644
index 000000000..deb3146b9
--- /dev/null
+++ b/docs/content/building-an-app.md
@@ -0,0 +1,483 @@
+---
+title: Building an App with Bolt for Python
+sidebar_label: Building an App
+---
+
+# Building an App with Bolt for Python
+
+This guide is meant to walk you through getting up and running with a Slack app using Bolt for Python. Along the way, we’ll create a new Slack app, set up your local environment, and develop an app that listens and responds to messages from a Slack workspace.
+
+When you're finished, you'll have created the [Getting Started app](https://github.com/slackapi/bolt-python/tree/main/examples/getting_started) to run, modify, and make your own. ⚡️
+
+---
+
+### 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[A place to test and learn]
+
+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).
+
+:::
+
+After you fill out an app name (_you can change it later_) and pick a workspace to install it to, hit the `Create App` button and you'll land on your app's **Basic Information** page.
+
+This page contains an overview of your app in addition to important credentials you'll need later.
+
+
+
+Look around, add an app icon and description, and then let's start configuring your app 🔩
+
+---
+
+### 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.
+
+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.
+
+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.
+
+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.
+
+4. Once you authorize the installation, you'll land on the **OAuth & Permissions** page and see a **Bot User OAuth Access 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.
+
+6. Navigate to **Socket Mode** on the left side menu and toggle to enable.
+
+:::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.
+
+:::
+
+---
+
+### Setting up your project {#setting-up-your-project}
+
+With the initial configuration handled, it's time to set up a new Bolt project. This is where you'll write the code that handles the logic for your app.
+
+If you don’t already have a project, let’s create a new one. Create an empty directory:
+
+```sh
+$ mkdir first-bolt-app
+$ cd first-bolt-app
+```
+
+Next, we recommend using a [Python virtual environment](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment) to manage your project's dependencies. This is a great way to prevent conflicts with your system's Python packages. Let's create and activate a new virtual environment with [Python 3.6 or later](https://www.python.org/downloads/):
+
+```sh
+$ python3 -m venv .venv
+$ source .venv/bin/activate
+$ pip install -r requirements.txt
+```
+
+We can confirm that the virtual environment is active by checking that the path to `python3` is _inside_ your project ([a similar command is available on Windows](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#activating-a-virtual-environment)):
+
+```sh
+$ which python3
+# Output: /path/to/first-bolt-app/.venv/bin/python3
+```
+
+Before we install the Bolt for Python package to your new project, let's save the **bot token** and **app-level token** that were generated when you configured your app.
+
+1. **Copy your bot (xoxb) token from the OAuth & Permissions page** and store it in a new environment variable. The following example works on Linux and macOS; but [similar commands are available on Windows](https://superuser.com/questions/212150/how-to-set-env-variable-in-windows-cmd-line/212153#212153).
+
+```sh
+$ export SLACK_BOT_TOKEN=xoxb-
+```
+
+2. **Copy your app-level (xapp) token from the Basic Information page** and then store it in a new environment variable.
+
+```sh
+$ 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).
+
+:::
+
+Now, let's create your app. Install the `slack_bolt` Python package to your virtual environment using the following command:
+
+```sh
+$ pip install slack_bolt
+```
+
+Create a new file called `app.py` in this directory and add the following code:
+
+```python
+import os
+from slack_bolt import App
+from slack_bolt.adapter.socket_mode import SocketModeHandler
+
+# Initializes your app with your bot token and socket mode handler
+app = App(token=os.environ.get("SLACK_BOT_TOKEN"))
+
+# Start your app
+if __name__ == "__main__":
+ SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
+```
+
+Your tokens are enough to create your first Bolt app. Save your `app.py` file then on the command line run the following:
+
+```sh
+$ python3 app.py
+```
+
+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/).
+
+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.
+
+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.
+
+We've provided instructions for both ways in this guide.
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+
+
+
+1. Head to your app's configuration page (click on the app [from your app settings page](https://api.slack.com/apps)). Navigate to **Socket Mode** on the left side menu and toggle to enable.
+
+2. Go to **Basic Information** and scroll down under the App-Level Tokens 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 that in just a moment.
+
+3. Finally, it's time to tell Slack what events we'd like to listen for. Under **Event Subscriptions**, toggle the switch labeled **Enable Events**.
+
+When an event occurs, Slack will send your app some information about the event, like the user that triggered it and the channel it occurred in. Your app will process the details and can respond accordingly.
+
+
+
+
+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.
+
+:::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/).
+
+:::
+
+
+
+
+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.
+
+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.
+
+---
+
+### Listening and responding to a message {#listening-and-responding-to-a-message}
+Your app is now ready for some logic. Let's start by using the `message()` method to attach a listener for messages.
+
+The following example listens and responds to all messages in channels/DMs where your app has been added that contain the word "hello":
+
+
+
+
+```python
+import os
+from slack_bolt import App
+from slack_bolt.adapter.socket_mode import SocketModeHandler
+
+# Initializes your app with your bot token and socket mode handler
+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
+@app.message("hello")
+def message_hello(message, say):
+ # say() sends a message to the channel where the event was triggered
+ say(f"Hey there <@{message['user']}>!")
+
+# Start your app
+if __name__ == "__main__":
+ SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
+```
+
+
+
+
+```python
+import os
+from slack_bolt import App
+
+# Initializes your app with your bot token and signing secret
+app = App(
+ token=os.environ.get("SLACK_BOT_TOKEN"),
+ signing_secret=os.environ.get("SLACK_SIGNING_SECRET")
+)
+
+# 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
+@app.message("hello")
+def message_hello(message, say):
+ # say() sends a message to the channel where the event was triggered
+ say(f"Hey there <@{message['user']}>!")
+
+# Start your app
+if __name__ == "__main__":
+ app.start(port=int(os.environ.get("PORT", 3000)))
+```
+
+
+
+
+If you restart your app, so long as your bot user has been added to the channel or DM conversation, when you send any message that contains "hello", it will respond.
+
+This is a basic example, but it gives you a place to start customizing your app based on your own goals. Let's try something a little more interactive by sending a button rather than plain text.
+
+---
+
+### Sending and responding to actions {#sending-and-responding-to-actions}
+
+To use features like buttons, select menus, datepickers, modals, and shortcuts, you’ll need to enable interactivity. Head over to **Interactivity & Shortcuts** in your app configuration.
+
+
+
+
+With Socket Mode on, basic interactivity is enabled by default, so no further action is needed.
+
+
+
+
+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
+
+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!
+
+:::
+
+
+
+
+When interactivity is enabled, interactions with shortcuts, modals, or interactive components (such as buttons, select menus, and datepickers) will be sent to your app as events.
+
+Now, let's go back to your app's code and add logic to handle those events:
+- First, we'll send a message that contains an interactive component (in this case a button).
+- Next, we'll listen for the action of a user clicking the button before responding.
+
+Below, the code from the last section is modified to send a message containing a button rather than just a string:
+
+
+
+
+```python
+import os
+from slack_bolt import App
+from slack_bolt.adapter.socket_mode import SocketModeHandler
+
+# Initializes your app with your bot token and socket mode handler
+app = App(
+ token=os.environ.get("SLACK_BOT_TOKEN"),
+ # signing_secret=os.environ.get("SLACK_SIGNING_SECRET") # not required for socket mode
+)
+
+# Listens to incoming messages that contain "hello"
+@app.message("hello")
+def message_hello(message, say):
+ # say() sends a message to the channel where the event was triggered
+ say(
+ blocks=[
+ {
+ "type": "section",
+ "text": {"type": "mrkdwn", "text": f"Hey there <@{message['user']}>!"},
+ "accessory": {
+ "type": "button",
+ "text": {"type": "plain_text", "text": "Click Me"},
+ "action_id": "button_click"
+ }
+ }
+ ],
+ text=f"Hey there <@{message['user']}>!"
+ )
+
+# Start your app
+if __name__ == "__main__":
+ SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
+
+```
+
+
+
+
+```python
+import os
+from slack_bolt import App
+
+# Initializes your app with your bot token and signing secret
+app = App(
+ token=os.environ.get("SLACK_BOT_TOKEN"),
+ signing_secret=os.environ.get("SLACK_SIGNING_SECRET")
+)
+
+# Listens to incoming messages that contain "hello"
+@app.message("hello")
+def message_hello(message, say):
+ # say() sends a message to the channel where the event was triggered
+ say(
+ blocks=[
+ {
+ "type": "section",
+ "text": {"type": "mrkdwn", "text": f"Hey there <@{message['user']}>!"},
+ "accessory": {
+ "type": "button",
+ "text": {"type": "plain_text", "text": "Click Me"},
+ "action_id": "button_click"
+ }
+ }
+ ],
+ text=f"Hey there <@{message['user']}>!"
+ )
+
+# Start your app
+if __name__ == "__main__":
+ app.start(port=int(os.environ.get("PORT", 3000)))
+```
+
+
+
+
+The value inside of `say()` is now an object that contains an array of `blocks`. Blocks are the building components of a Slack message and can range from text to images to datepickers. In this case, your app will respond with a section block that includes a button as an accessory. Since we're using `blocks`, the `text` is a fallback for notifications and accessibility.
+
+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 which action it wants to respond to.
+
+:::tip[Using Block Kit Builder]
+
+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) mock up messages and generates the corresponding JSON that you can paste directly in your app.
+
+:::
+
+Now, if you restart your app and say "hello" in a channel your app is in, you'll see a message with a button. But if you click the button, nothing happens (_yet!_).
+
+Let's add a handler to send a follow-up message when someone clicks the button:
+
+
+
+
+```python
+import os
+from slack_bolt import App
+from slack_bolt.adapter.socket_mode import SocketModeHandler
+
+# Initializes your app with your bot token and socket mode handler
+app = App(token=os.environ.get("SLACK_BOT_TOKEN"))
+
+# Listens to incoming messages that contain "hello"
+@app.message("hello")
+def message_hello(message, say):
+ # say() sends a message to the channel where the event was triggered
+ say(
+ blocks=[
+ {
+ "type": "section",
+ "text": {"type": "mrkdwn", "text": f"Hey there <@{message['user']}>!"},
+ "accessory": {
+ "type": "button",
+ "text": {"type": "plain_text", "text": "Click Me"},
+ "action_id": "button_click"
+ }
+ }
+ ],
+ text=f"Hey there <@{message['user']}>!"
+ )
+
+@app.action("button_click")
+def action_button_click(body, ack, say):
+ # Acknowledge the action
+ ack()
+ say(f"<@{body['user']['id']}> clicked the button")
+
+# Start your app
+if __name__ == "__main__":
+ SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
+```
+
+
+
+
+```python
+import os
+from slack_bolt import App
+
+# Initializes your app with your bot token and signing secret
+app = App(
+ token=os.environ.get("SLACK_BOT_TOKEN"),
+ signing_secret=os.environ.get("SLACK_SIGNING_SECRET")
+)
+
+# Listens to incoming messages that contain "hello"
+@app.message("hello")
+def message_hello(message, say):
+ # say() sends a message to the channel where the event was triggered
+ say(
+ blocks=[
+ {
+ "type": "section",
+ "text": {"type": "mrkdwn", "text": f"Hey there <@{message['user']}>!"},
+ "accessory": {
+ "type": "button",
+ "text": {"type": "plain_text", "text": "Click Me"},
+ "action_id": "button_click"
+ }
+ }
+ ],
+ text=f"Hey there <@{message['user']}>!"
+ )
+
+@app.action("button_click")
+def action_button_click(body, ack, say):
+ # Acknowledge the action
+ ack()
+ say(f"<@{body['user']['id']}> clicked the button")
+
+# Start your app
+if __name__ == "__main__":
+ app.start(port=int(os.environ.get("PORT", 3000)))
+```
+
+
+
+
+You can see that we used `app.action()` to listen for the `action_id` that we named `button_click`. If you restart your app and click the button, you'll see a new message from your app that says you clicked the button.
+
+---
+
+### Next steps {#next-steps}
+You just built your first [Bolt for Python app](https://github.com/slackapi/bolt-python/tree/main/examples/getting_started)! 🎉
+
+Now that you have a basic app up and running, you can start exploring how to make your Bolt app stand out. Here are some ideas about what to explore next:
+
+* 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).
+
+* 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.
+
+* 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.
diff --git a/docs/content/getting-started.md b/docs/content/getting-started.md
index d1b7d5e2c..a794f3176 100644
--- a/docs/content/getting-started.md
+++ b/docs/content/getting-started.md
@@ -1,481 +1,300 @@
---
-title: Getting Started
-slug: getting-started
-lang: en
+title: Quickstart guide with Bolt for Python
+sidebar_label: Quickstart
---
# Getting started with Bolt for Python
-This guide is meant to walk you through getting up and running with a Slack app using Bolt for Python. Along the way, we’ll create a new Slack app, set up your local environment, and develop an app that listens and responds to messages from a Slack workspace.
+This quickstart guide aims to help you get a Slack app using Bolt for Python up and running as soon as possible!
-When you're finished, you'll have this ⚡️[Getting Started with Slack app](https://github.com/slackapi/bolt-python/tree/main/examples/getting_started) to run, modify, and make your own.
-
----
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
-### 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).
+When complete, you'll have a local environment configured with a customized [app](https://github.com/slack-samples/bolt-python-getting-started-app) running to modify and make your own.
-:::tip
+:::tip[Reference for readers]
-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).
+In search of the complete guide to building an app from scratch? Check out the [building an app](/building-an-app) guide.
:::
-After you fill out an app name (_you can change it later_) and pick a workspace to install it to, hit the `Create App` button and you'll land on your app's **Basic Information** page.
+#### Prerequisites
-This page contains an overview of your app in addition to important credentials you'll need later.
+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.
-
+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.
-Look around, add an app icon and description, and then let's start configuring your app 🔩
+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)
-### 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.
+Then confirm a successful installation with the following command:
-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.
+```sh
+$ slack version
+```
-We're going to use bot and app-level tokens for this guide.
+An authenticated login is also required if this hasn't been done before:
-1. Navigate to the **OAuth & Permissions** on the left sidebar and scroll down to the **Bot Token Scopes** section. Click **Add an OAuth Scope**.
+```sh
+$ slack login
+```
-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.
+:::info[A place to belong]
-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.
+A workspace where development can happen is also needed.
-4. Once you authorize the installation, you'll land on the **OAuth & Permissions** page and see a **Bot User OAuth Access Token**.
+We recommend using [developer sandboxes](https://docs.slack.dev/tools/developer-sandboxes) to avoid disruptions where real work gets done.
-
+:::
-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.
+## Creating a project {#creating-a-project}
-6. Navigate to **Socket Mode** on the left side menu and toggle to enable.
+With the toolchain configured, it's time to set up a new Bolt project. This contains the code that handles logic for your app.
-:::tip
+If you don’t already have a project, let’s create a new one!
-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.
+
+
-:::
+A starter template can be used to start with project scaffolding:
----
-
-### Setting up your project {#setting-up-your-project}
+```sh
+$ slack create first-bolt-app --template slack-samples/bolt-python-getting-started-app
+$ cd first-bolt-app
+```
-With the initial configuration handled, it's time to set up a new Bolt project. This is where you'll write the code that handles the logic for your app.
+After a project is created you'll have a `requirements.txt` file for app dependencies and a `.slack` directory for Slack CLI configuration.
-If you don’t already have a project, let’s create a new one. Create an empty directory:
+A few other files exist too, but we'll visit these later.
-```shell
-mkdir first-bolt-app
-cd first-bolt-app
-```
+
+
-Next, we recommend using a [Python virtual environment](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment) to manage your project's dependencies. This is a great way to prevent conflicts with your system's Python packages. Let's create and activate a new virtual environment with [Python 3.6 or later](https://www.python.org/downloads/):
+A starter template can be cloned to start with project scaffolding:
-```shell
-python3 -m venv .venv
-source .venv/bin/activate
+```sh
+$ git clone https://github.com/slack-samples/bolt-python-getting-started-app first-bolt-app
+$ cd first-bolt-app
```
-We can confirm that the virtual environment is active by checking that the path to `python3` is _inside_ your project ([a similar command is available on Windows](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#activating-a-virtual-environment)):
+Outlines of a project are taking shape, so we can move on to running the app!
-```shell
-which python3
-# Output: /path/to/first-bolt-app/.venv/bin/python3
-```
+
+
-Before we install the Bolt for Python package to your new project, let's save the **bot token** and **app-level token** that were generated when you configured your app.
+We recommend using a [Python virtual environment](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment) to manage your project's dependencies. This is a great way to prevent conflicts with your system's Python packages. Let's create and activate a new virtual environment with [Python 3.6 or later](https://www.python.org/downloads/):
-1. **Copy your bot (xoxb) token from the OAuth & Permissions page** and store it in a new environment variable. The following example works on Linux and macOS; but [similar commands are available on Windows](https://superuser.com/questions/212150/how-to-set-env-variable-in-windows-cmd-line/212153#212153).
-```shell
-export SLACK_BOT_TOKEN=xoxb-
+```sh
+$ python3 -m venv .venv
+$ source .venv/bin/activate
+$ pip install -r requirements.txt
```
-2. **Copy your app-level (xapp) token from the Basic Information page** and then store it in a new environment variable.
-```shell
-export SLACK_APP_TOKEN=
+Confirm the virtual environment is active by checking that the path to `python3` is _inside_ your project ([a similar command is available on Windows](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#activating-a-virtual-environment)):
+
+```sh
+$ which python3
+# Output: /path/to/first-bolt-app/.venv/bin/python3
```
-:::warning
+## Running the app {#running-the-app}
-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).
+Before you can start developing with Bolt, you will want a running Slack app.
-:::
+
+
-Now, let's create your app. Install the `slack_bolt` Python package to your virtual environment using the following command:
+The getting started app template contains a `manifest.json` file with details about an app that we will use to get started. Use the following command and select "Create a new app" to install the app to the team of choice:
-```shell
-pip install slack_bolt
+```sh
+$ slack run
+...
+⚡️ Bolt app is running!
```
-Create a new file called `app.py` in this directory and add the following code:
+With the app running, you can test it out with the following steps in Slack:
-```python
-import os
-from slack_bolt import App
-from slack_bolt.adapter.socket_mode import SocketModeHandler
+1. Open a direct message with your app or invite the bot `@first-bolt-app (local)` to a public channel.
+2. Send "hello" to the current conversation and wait for a response.
+3. Click the attached button labelled "Click Me" to post another reply.
-# Initializes your app with your bot token and socket mode handler
-app = App(token=os.environ.get("SLACK_BOT_TOKEN"))
+After confirming the app responds, celebrate, then interrupt the process by pressing `CTRL+C` in the terminal to stop your app from running.
-# Start your app
-if __name__ == "__main__":
- SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
-```
+
+
-Your tokens are enough to create your first Bolt app. Save your `app.py` file then on the command line run the following:
+Navigate to your list of apps and [create a new Slack app](https://api.slack.com/apps/new) using the "from a manifest" option:
-```script
-python3 app.py
-```
+1. Select the workspace to develop your app in.
+2. Copy and paste the `manifest.json` file contents to create your app.
+3. Confirm the app features and click "Create".
-Your app should let you know that it's up and running. 🎉
+You'll then land on your app's **Basic Information** page, which is an overview of your app and which contains important credentials:
----
+
-### 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 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 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/).
+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**.
+3. Save the generated `xapp` token as an environment variable within your project:
-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.
+```sh
+$ export SLACK_APP_TOKEN=
+```
-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.
+The above command works on Linux and macOS but [similar commands are available on Windows](https://superuser.com/questions/212150/how-to-set-env-variable-in-windows-cmd-line/212153#212153).
-We've provided instructions for both ways in this guide.
+:::warning[Keep it secret. Keep it safe.]
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
+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.
-
-
+:::
-1. Head to your app's configuration page (click on the app [from your app settings page](https://api.slack.com/apps)). Navigate to **Socket Mode** on the left side menu and toggle to enable.
+A bot token is also needed to interact with the Web API methods as your app's bot user. We can gather this as follows:
-2. Go to **Basic Information** and scroll down under the App-Level Tokens section and click **Generate Token and Scopes** to generate an app token. Add the `connections:write` scope to this token and save the generated `xapp` token, we'll use that in just a moment.
+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**:
-3. Finally, it's time to tell Slack what events we'd like to listen for. Under **Event Subscriptions**, toggle the switch labeled **Enable Events**.
+
-When an event occurs, Slack will send your app some information about the event, like the user that triggered it and the channel it occurred in. Your app will process the details and can respond accordingly.
+3. Copy the bot token beginning with `xoxb` from the **OAuth & Permissions page** and then store it in a new environment variable:
-
-
+```sh
+$ export SLACK_BOT_TOKEN=xoxb-
+```
-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**.
+After saving tokens for the app you created, it is time to run it:
-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.
+```sh
+$ python3 app.py
+...
+⚡️ Bolt app is running!
+```
-:::tip
+With the app running, you can test it out with the following steps in Slack:
-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/).
+1. Open a direct message with your app or invite the bot `@BoltApp` to a public channel.
+2. Send "hello" to the current conversation and wait for a response.
+3. Click the attached button labelled "Click Me" to post another reply.
-:::
+After confirming the app responds, celebrate, then interrupt the process by pressing `CTRL+C` in the terminal to stop your app from running.
-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
+## Updating the app
-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.
+At this point, you've successfully run the getting started Bolt for Python [app](https://github.com/slack-samples/bolt-python-getting-started-app)!
----
+The defaults included leave opportunities abound, so to personalize this app let's now edit the code to respond with a kind farewell.
-### Listening and responding to a message {#listening-and-responding-to-a-message}
-Your app is now ready for some logic. Let's start by using the `message()` method to attach a listener for messages.
+#### Responding to a farewell
-The following example listens and responds to all messages in channels/DMs where your app has been added that contain the word "hello":
+Chat is a common thing apps do and responding to various types of messages can make conversations more interesting.
-
-
+Using an editor of choice, open the `app.py` file and add the following import to the top of the file, and message listener after the "hello" handler:
```python
-import os
-from slack_bolt import App
-from slack_bolt.adapter.socket_mode import SocketModeHandler
-
-# Initializes your app with your bot token and socket mode handler
-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
-@app.message("hello")
-def message_hello(message, say):
- # say() sends a message to the channel where the event was triggered
- say(f"Hey there <@{message['user']}>!")
-
-# Start your app
-if __name__ == "__main__":
- SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
-```
-
-
-
+import random
-```python
-import os
-from slack_bolt import App
-
-# Initializes your app with your bot token and signing secret
-app = App(
- token=os.environ.get("SLACK_BOT_TOKEN"),
- signing_secret=os.environ.get("SLACK_SIGNING_SECRET")
-)
-
-# 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
-@app.message("hello")
-def message_hello(message, say):
- # say() sends a message to the channel where the event was triggered
- say(f"Hey there <@{message['user']}>!")
-
-# Start your app
-if __name__ == "__main__":
- app.start(port=int(os.environ.get("PORT", 3000)))
+@app.message("goodbye")
+def message_goodbye(say):
+ responses = ["Adios", "Au revoir", "Farewell"]
+ parting = random.choice(responses)
+ say(f"{parting}!")
```
-
-
-
-If you restart your app, so long as your bot user has been added to the channel/DM, when you send any message that contains "hello", it will respond.
+Once the file is updated, save the changes and then we'll make sure those changes are being used.
-This is a basic example, but it gives you a place to start customizing your app based on your own goals. Let's try something a little more interactive by sending a button rather than plain text.
+
+
----
+Run the following command and select the app created earlier to start, or restart, your app with the latest changes:
-### Sending and responding to actions {#sending-and-responding-to-actions}
+```sh
+$ slack run
+...
+⚡️ Bolt app is running!
+```
-To use features like buttons, select menus, datepickers, modals, and shortcuts, you’ll need to enable interactivity. Head over to **Interactivity & Shortcuts** in your app configuration.
+After finding the above output appears, open Slack to perform these steps:
-
-
+1. Return to the direct message or public channel with your bot.
+2. Send "goodbye" to the conversation.
+3. Receive a parting response from before and repeat "goodbye" to find another one.
-With Socket Mode on, basic interactivity is enabled by default, so no further action is needed.
+Your app can be stopped again by pressing `CTRL+C` in the terminal to end these chats.
-
+
-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.
+Run the following command to start, or restart, your app with the latest changes:
-:::tip
+```sh
+$ python3 app.py
+...
+⚡️ Bolt app is running!
+```
-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!
+After finding the above output appears, open Slack to perform these steps:
-:::
+1. Return to the direct message or public channel with your bot.
+2. Send "goodbye" to the conversation.
+3. Receive a parting response from before and repeat "goodbye" to find another one.
+
+Your app can be stopped again by pressing `CTRL+C` in the terminal to end these chats.
-When interactivity is enabled, interactions with shortcuts, modals, or interactive components (such as buttons, select menus, and datepickers) will be sent to your app as events.
+#### Customizing app settings
-Now, let's go back to your app's code and add logic to handle those events:
-- First, we'll send a message that contains an interactive component (in this case a button)
-- Next, we'll listen for the action of a user clicking the button before responding
+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.
-Below, the code from the last section is modified to send a message containing a button rather than just a string:
+
+
-
-
-
-```python
-import os
-from slack_bolt import App
-from slack_bolt.adapter.socket_mode import SocketModeHandler
-
-# Initializes your app with your bot token and socket mode handler
-app = App(
- token=os.environ.get("SLACK_BOT_TOKEN"),
- # signing_secret=os.environ.get("SLACK_SIGNING_SECRET") # not required for socket mode
-)
-
-# Listens to incoming messages that contain "hello"
-@app.message("hello")
-def message_hello(message, say):
- # say() sends a message to the channel where the event was triggered
- say(
- blocks=[
- {
- "type": "section",
- "text": {"type": "mrkdwn", "text": f"Hey there <@{message['user']}>!"},
- "accessory": {
- "type": "button",
- "text": {"type": "plain_text", "text": "Click Me"},
- "action_id": "button_click"
- }
- }
- ],
- text=f"Hey there <@{message['user']}>!"
- )
-
-# Start your app
-if __name__ == "__main__":
- SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
+Open app settings for your app with the following command:
+```sh
+$ slack app settings
```
-
-
+This will open the following page in a web browser:
-```python
-import os
-from slack_bolt import App
-
-# Initializes your app with your bot token and signing secret
-app = App(
- token=os.environ.get("SLACK_BOT_TOKEN"),
- signing_secret=os.environ.get("SLACK_SIGNING_SECRET")
-)
-
-# Listens to incoming messages that contain "hello"
-@app.message("hello")
-def message_hello(message, say):
- # say() sends a message to the channel where the event was triggered
- say(
- blocks=[
- {
- "type": "section",
- "text": {"type": "mrkdwn", "text": f"Hey there <@{message['user']}>!"},
- "accessory": {
- "type": "button",
- "text": {"type": "plain_text", "text": "Click Me"},
- "action_id": "button_click"
- }
- }
- ],
- text=f"Hey there <@{message['user']}>!"
- )
-
-# Start your app
-if __name__ == "__main__":
- app.start(port=int(os.environ.get("PORT", 3000)))
-```
+
-
-
-The value inside of `say()` is now an object that contains an array of `blocks`. Blocks are the building components of a Slack message and can range from text to images to datepickers. In this case, your app will respond with a section block that includes a button as an accessory. Since we're using `blocks`, the `text` is a fallback for notifications and accessibility.
-
-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
-
-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.
-
-:::
-
-Now, if you restart your app and say "hello" in a channel your app is in, you'll see a message with a button. But if you click the button, nothing happens (*yet!*).
-
-Let's add a handler to send a followup message when someone clicks the button:
+
-
-
+Browse to https://api.slack.com/apps and select your app "Getting Started Bolt App" from the list.
-```python
-import os
-from slack_bolt import App
-from slack_bolt.adapter.socket_mode import SocketModeHandler
-
-# Initializes your app with your bot token and socket mode handler
-app = App(token=os.environ.get("SLACK_BOT_TOKEN"))
-
-# Listens to incoming messages that contain "hello"
-@app.message("hello")
-def message_hello(message, say):
- # say() sends a message to the channel where the event was triggered
- say(
- blocks=[
- {
- "type": "section",
- "text": {"type": "mrkdwn", "text": f"Hey there <@{message['user']}>!"},
- "accessory": {
- "type": "button",
- "text": {"type": "plain_text", "text": "Click Me"},
- "action_id": "button_click"
- }
- }
- ],
- text=f"Hey there <@{message['user']}>!"
- )
-
-@app.action("button_click")
-def action_button_click(body, ack, say):
- # Acknowledge the action
- ack()
- say(f"<@{body['user']['id']}> clicked the button")
-
-# Start your app
-if __name__ == "__main__":
- SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
-```
+This will open the following page:
-
-
-
-```python
-import os
-from slack_bolt import App
-
-# Initializes your app with your bot token and signing secret
-app = App(
- token=os.environ.get("SLACK_BOT_TOKEN"),
- signing_secret=os.environ.get("SLACK_SIGNING_SECRET")
-)
-
-# Listens to incoming messages that contain "hello"
-@app.message("hello")
-def message_hello(message, say):
- # say() sends a message to the channel where the event was triggered
- say(
- blocks=[
- {
- "type": "section",
- "text": {"type": "mrkdwn", "text": f"Hey there <@{message['user']}>!"},
- "accessory": {
- "type": "button",
- "text": {"type": "plain_text", "text": "Click Me"},
- "action_id": "button_click"
- }
- }
- ],
- text=f"Hey there <@{message['user']}>!"
- )
-
-@app.action("button_click")
-def action_button_click(body, ack, say):
- # Acknowledge the action
- ack()
- say(f"<@{body['user']['id']}> clicked the button")
-
-# Start your app
-if __name__ == "__main__":
- app.start(port=int(os.environ.get("PORT", 3000)))
-```
+
-You can see that we used `app.action()` to listen for the `action_id` that we named `button_click`. If you restart your app and click the button, you'll see a new message from your app that says you clicked the button.
+On these pages you're free to make changes such as updating your app icon, configuring app features, and perhaps even distributing your app!
----
+## Next steps {#next-steps}
-### Next steps {#next-steps}
-You just built your first [Bolt for Python app](https://github.com/slackapi/bolt-python/tree/main/examples/getting_started)! 🎉
+Congrats once more on getting up and running with this quick start.
-Now that you have a basic app up and running, you can start exploring how to make your Bolt app stand out. Here are some ideas about what to explore next:
+:::info[Dive deeper]
-* Read through the _Basic concepts_ to learn about the different methods and features your Bolt app has access to.
+Follow along with the steps that went into making this app on the [building an app](/building-an-app) guide for an educational overview.
-* 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 site](https://docs.slack.dev/reference/events).
+:::
-* Bolt allows you to [call Web API methods](/concepts/web-api) with the client attached to your app. There are [over 220 methods](https://docs.slack.dev/reference/methods) on our API site.
+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:
-* Learn more about the different token types [on our API site](https://docs.slack.dev/authentication/tokens). Your app may need different tokens depending on the actions you want it to perform.
+- 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.
diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js
index 60f3eae81..0d80161e6 100644
--- a/docs/docusaurus.config.js
+++ b/docs/docusaurus.config.js
@@ -98,6 +98,7 @@ const config = {
// switch to alucard when available in prism?
theme: prismThemes.github,
darkTheme: prismThemes.dracula,
+ additionalLanguages: ['bash'],
},
codeblock: {
showGithubLink: true,
diff --git a/docs/sidebars.js b/docs/sidebars.js
index 65c5e85f4..decb8cccb 100644
--- a/docs/sidebars.js
+++ b/docs/sidebars.js
@@ -7,13 +7,17 @@ const sidebars = {
label: 'Bolt for Python',
className: 'sidebar-title',
},
+ {
+ type: 'doc',
+ id: 'getting-started',
+ },
{ type: 'html', value: '' },
{
type: 'category',
label: 'Guides',
collapsed: false,
items: [
- "getting-started",
+ "building-an-app",
{
type: "category",
label: "Slack API calls",
From 227ca8e8936dffa93938591dabb14ddc79dc8a18 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 2 Jul 2025 00:21:59 +0000
Subject: [PATCH 26/85] chore(deps): bump the docusaurus group in /docs with 5
updates (#1325)
---
docs/package-lock.json | 1072 +++++++++++++++-------------------------
docs/package.json | 10 +-
2 files changed, 392 insertions(+), 690 deletions(-)
diff --git a/docs/package-lock.json b/docs/package-lock.json
index 4e7d7b445..6790558aa 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -8,9 +8,9 @@
"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",
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/plugin-client-redirects": "^3.8.1",
+ "@docusaurus/preset-classic": "3.8.1",
"@mdx-js/react": "^3.1.0",
"clsx": "^2.0.0",
"docusaurus-theme-github-codeblock": "^2.0.2",
@@ -19,8 +19,8 @@
"react-dom": "^19.1.0"
},
"devDependencies": {
- "@docusaurus/module-type-aliases": "3.8.0",
- "@docusaurus/types": "3.8.0"
+ "@docusaurus/module-type-aliases": "3.8.1",
+ "@docusaurus/types": "3.8.1"
},
"engines": {
"node": ">=20.0"
@@ -30,7 +30,6 @@
"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"
@@ -40,7 +39,6 @@
"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"
},
@@ -52,7 +50,6 @@
"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"
},
@@ -65,106 +62,98 @@
"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",
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.30.0.tgz",
+ "integrity": "sha512-Q3OQXYlTNqVUN/V1qXX8VIzQbLjP3yrRBO9m6NRe1CBALmoGHh9JrYosEGvfior28+DjqqU3Q+nzCSuf/bX0Gw==",
"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"
+ "@algolia/client-common": "5.30.0",
+ "@algolia/requester-browser-xhr": "5.30.0",
+ "@algolia/requester-fetch": "5.30.0",
+ "@algolia/requester-node-http": "5.30.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",
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.30.0.tgz",
+ "integrity": "sha512-/b+SAfHjYjx/ZVeVReCKTTnFAiZWOyvYLrkYpeNMraMT6akYRR8eC1AvFcvR60GLG/jytxcJAp42G8nN5SdcLg==",
"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"
+ "@algolia/client-common": "5.30.0",
+ "@algolia/requester-browser-xhr": "5.30.0",
+ "@algolia/requester-fetch": "5.30.0",
+ "@algolia/requester-node-http": "5.30.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",
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.30.0.tgz",
+ "integrity": "sha512-tbUgvkp2d20mHPbM0+NPbLg6SzkUh0lADUUjzNCF+HiPkjFRaIW3NGMlESKw5ia4Oz6ZvFzyREquUX6rdkdJcQ==",
"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",
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.30.0.tgz",
+ "integrity": "sha512-caXuZqJK761m32KoEAEkjkE2WF/zYg1McuGesWXiLSgfxwZZIAf+DljpiSToBUXhoPesvjcLtINyYUzbkwE0iw==",
"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"
+ "@algolia/client-common": "5.30.0",
+ "@algolia/requester-browser-xhr": "5.30.0",
+ "@algolia/requester-fetch": "5.30.0",
+ "@algolia/requester-node-http": "5.30.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",
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.30.0.tgz",
+ "integrity": "sha512-7K6P7TRBHLX1zTmwKDrIeBSgUidmbj6u3UW/AfroLRDGf9oZFytPKU49wg28lz/yulPuHY0nZqiwbyAxq9V17w==",
"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"
+ "@algolia/client-common": "5.30.0",
+ "@algolia/requester-browser-xhr": "5.30.0",
+ "@algolia/requester-fetch": "5.30.0",
+ "@algolia/requester-node-http": "5.30.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",
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.30.0.tgz",
+ "integrity": "sha512-WMjWuBjYxJheRt7Ec5BFr33k3cV0mq2WzmH9aBf5W4TT8kUp34x91VRsYVaWOBRlxIXI8o/WbhleqSngiuqjLA==",
"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"
+ "@algolia/client-common": "5.30.0",
+ "@algolia/requester-browser-xhr": "5.30.0",
+ "@algolia/requester-fetch": "5.30.0",
+ "@algolia/requester-node-http": "5.30.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",
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.30.0.tgz",
+ "integrity": "sha512-puc1/LREfSqzgmrOFMY5L/aWmhYOlJ0TTpa245C0ZNMKEkdOkcimFbXTXQ8lZhzh+rlyFgR7cQGNtXJ5H0XgZg==",
"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"
+ "@algolia/client-common": "5.30.0",
+ "@algolia/requester-browser-xhr": "5.30.0",
+ "@algolia/requester-fetch": "5.30.0",
+ "@algolia/requester-node-http": "5.30.0"
},
"engines": {
"node": ">= 14.0.0"
@@ -173,85 +162,78 @@
"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"
+ "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ=="
},
"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",
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.30.0.tgz",
+ "integrity": "sha512-NfqiIKVgGKTLr6T9F81oqB39pPiEtILTy0z8ujxPKg2rCvI/qQeDqDWFBmQPElCfUTU6kk67QAgMkQ7T6fE+gg==",
"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"
+ "@algolia/client-common": "5.30.0",
+ "@algolia/requester-browser-xhr": "5.30.0",
+ "@algolia/requester-fetch": "5.30.0",
+ "@algolia/requester-node-http": "5.30.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",
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.30.0.tgz",
+ "integrity": "sha512-/eeM3aqLKro5KBZw0W30iIA6afkGa+bcpvEM0NDa92m5t3vil4LOmJI9FkgzfmSkF4368z/SZMOTPShYcaVXjA==",
"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"
+ "@algolia/client-common": "5.30.0",
+ "@algolia/requester-browser-xhr": "5.30.0",
+ "@algolia/requester-fetch": "5.30.0",
+ "@algolia/requester-node-http": "5.30.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",
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.30.0.tgz",
+ "integrity": "sha512-iWeAUWqw+xT+2IyUyTqnHCK+cyCKYV5+B6PXKdagc9GJJn6IaPs8vovwoC0Za5vKCje/aXQ24a2Z1pKpc/tdHg==",
"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"
+ "@algolia/client-common": "5.30.0",
+ "@algolia/requester-browser-xhr": "5.30.0",
+ "@algolia/requester-fetch": "5.30.0",
+ "@algolia/requester-node-http": "5.30.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",
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.30.0.tgz",
+ "integrity": "sha512-alo3ly0tdNLjfMSPz9dmNwYUFHx7guaz5dTGlIzVGnOiwLgIoM6NgA+MJLMcH6e1S7OpmE2AxOy78svlhst2tQ==",
"dependencies": {
- "@algolia/client-common": "5.25.0"
+ "@algolia/client-common": "5.30.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",
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.30.0.tgz",
+ "integrity": "sha512-WOnTYUIY2InllHBy6HHMpGIOo7Or4xhYUx/jkoSK/kPIa1BRoFEHqa8v4pbKHtoG7oLvM2UAsylSnjVpIhGZXg==",
"dependencies": {
- "@algolia/client-common": "5.25.0"
+ "@algolia/client-common": "5.30.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",
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.30.0.tgz",
+ "integrity": "sha512-uSTUh9fxeHde1c7KhvZKUrivk90sdiDftC+rSKNFKKEU9TiIKAGA7B2oKC+AoMCqMymot1vW9SGbeESQPTZd0w==",
"dependencies": {
- "@algolia/client-common": "5.25.0"
+ "@algolia/client-common": "5.30.0"
},
"engines": {
"node": ">= 14.0.0"
@@ -731,7 +713,6 @@
"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"
},
@@ -1379,7 +1360,6 @@
"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"
},
@@ -1499,7 +1479,6 @@
"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",
@@ -1519,7 +1498,6 @@
"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"
@@ -1532,7 +1510,6 @@
"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"
}
@@ -1838,10 +1815,9 @@
}
},
"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",
+ "version": "7.27.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.6.tgz",
+ "integrity": "sha512-vDVrlmRAY8z9Ul/HxT+8ceAru95LQgkSKiXkSYZvqtbkPSfhZJgpRp45Cldbh1GJ1kxzQkI70AqyrTI58KpaWQ==",
"dependencies": {
"core-js-pure": "^3.30.2"
},
@@ -1918,7 +1894,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -1941,7 +1916,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"engines": {
"node": ">=18"
}
@@ -1960,7 +1934,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -1983,7 +1956,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT",
"dependencies": {
"@csstools/color-helpers": "^5.0.2",
"@csstools/css-calc": "^2.1.4"
@@ -2010,7 +1982,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -2032,7 +2003,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT",
"engines": {
"node": ">=18"
}
@@ -2051,7 +2021,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -2061,9 +2030,9 @@
}
},
"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==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz",
+ "integrity": "sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==",
"funding": [
{
"type": "github",
@@ -2074,7 +2043,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/selector-specificity": "^5.0.0",
"postcss-selector-parser": "^7.0.0"
@@ -2100,7 +2068,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"engines": {
"node": ">=18"
},
@@ -2112,7 +2079,6 @@
"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"
@@ -2135,7 +2101,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-color-parser": "^3.0.10",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -2164,7 +2129,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-color-parser": "^3.0.10",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -2193,7 +2157,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-color-parser": "^3.0.10",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -2222,7 +2185,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-tokenizer": "^3.0.4",
@@ -2250,7 +2212,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-calc": "^2.1.4",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -2277,7 +2238,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/utilities": "^2.0.0",
"postcss-value-parser": "^4.2.0"
@@ -2303,7 +2263,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-color-parser": "^3.0.10",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -2330,7 +2289,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-color-parser": "^3.0.10",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -2359,7 +2317,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-color-parser": "^3.0.10",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -2388,7 +2345,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/postcss-progressive-custom-properties": "^4.1.0",
"@csstools/utilities": "^2.0.0",
@@ -2415,7 +2371,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"engines": {
"node": ">=18"
},
@@ -2424,9 +2379,9 @@
}
},
"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==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz",
+ "integrity": "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==",
"funding": [
{
"type": "github",
@@ -2437,7 +2392,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/selector-specificity": "^5.0.0",
"postcss-selector-parser": "^7.0.0"
@@ -2463,7 +2417,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"engines": {
"node": ">=18"
},
@@ -2475,7 +2428,6 @@
"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"
@@ -2498,7 +2450,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-tokenizer": "^3.0.4",
@@ -2526,7 +2477,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"engines": {
"node": ">=18"
},
@@ -2548,7 +2498,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"engines": {
"node": ">=18"
},
@@ -2570,7 +2519,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"engines": {
"node": ">=18"
},
@@ -2592,7 +2540,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
@@ -2617,7 +2564,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-tokenizer": "^3.0.4",
"@csstools/utilities": "^2.0.0"
@@ -2643,7 +2589,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT",
"dependencies": {
"@csstools/css-calc": "^2.1.4",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -2671,7 +2616,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-tokenizer": "^3.0.4",
@@ -2698,7 +2642,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/utilities": "^2.0.0",
"postcss-value-parser": "^4.2.0"
@@ -2724,7 +2667,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
@@ -2749,7 +2691,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-color-parser": "^3.0.10",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -2778,7 +2719,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
@@ -2803,7 +2743,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-calc": "^2.1.4",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -2830,7 +2769,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-color-parser": "^3.0.10",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -2859,7 +2797,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"postcss-selector-parser": "^7.0.0"
},
@@ -2874,7 +2811,6 @@
"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"
@@ -2897,7 +2833,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-calc": "^2.1.4",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -2924,7 +2859,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-calc": "^2.1.4",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -2951,7 +2885,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/color-helpers": "^5.0.2",
"postcss-value-parser": "^4.2.0"
@@ -2977,7 +2910,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-calc": "^2.1.4",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -3004,7 +2936,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"engines": {
"node": ">=18"
},
@@ -3026,7 +2957,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"engines": {
"node": ">=18"
},
@@ -3046,14 +2976,12 @@
"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"
+ "integrity": "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA=="
},
"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",
@@ -3082,10 +3010,9 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.8.1.tgz",
+ "integrity": "sha512-3brkJrml8vUbn9aeoZUlJfsI/GqyFcDgQJwQkmBtclJgWDEQBKKeagZfOgx0WfUQhagL1sQLNW0iBdxnI863Uw==",
"dependencies": {
"@babel/core": "^7.25.9",
"@babel/generator": "^7.25.9",
@@ -3097,8 +3024,8 @@
"@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",
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
"babel-plugin-dynamic-import-node": "^2.3.3",
"fs-extra": "^11.1.1",
"tslib": "^2.6.0"
@@ -3108,30 +3035,29 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.8.1.tgz",
+ "integrity": "sha512-/z4V0FRoQ0GuSLToNjOSGsk6m2lQUG4FRn8goOVoZSRsTrU8YR2aJacX5K3RG18EaX9b+52pN4m1sL3MQZVsQA==",
"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",
+ "@docusaurus/babel": "3.8.1",
+ "@docusaurus/cssnano-preset": "3.8.1",
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/types": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
"babel-loader": "^9.2.1",
- "clean-css": "^5.3.2",
+ "clean-css": "^5.3.3",
"copy-webpack-plugin": "^11.0.0",
- "css-loader": "^6.8.1",
+ "css-loader": "^6.11.0",
"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",
+ "mini-css-extract-plugin": "^2.9.2",
"null-loader": "^4.0.1",
- "postcss": "^8.4.26",
- "postcss-loader": "^7.3.3",
- "postcss-preset-env": "^10.1.0",
+ "postcss": "^8.5.4",
+ "postcss-loader": "^7.3.4",
+ "postcss-preset-env": "^10.2.1",
"terser-webpack-plugin": "^5.3.9",
"tslib": "^2.6.0",
"url-loader": "^4.1.1",
@@ -3151,18 +3077,17 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.8.1.tgz",
+ "integrity": "sha512-ENB01IyQSqI2FLtOzqSI3qxG2B/jP4gQPahl2C3XReiLebcVh5B5cB9KYFvdoOqOWPyr5gXK4sjgTKv7peXCrA==",
+ "dependencies": {
+ "@docusaurus/babel": "3.8.1",
+ "@docusaurus/bundler": "3.8.1",
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/mdx-loader": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "@docusaurus/utils-validation": "3.8.1",
"boxen": "^6.2.1",
"chalk": "^4.1.2",
"chokidar": "^3.5.3",
@@ -3212,13 +3137,12 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.1.tgz",
+ "integrity": "sha512-G7WyR2N6SpyUotqhGznERBK+x84uyhfMQM2MmDLs88bw4Flom6TY46HzkRkSEzaP9j80MbTN8naiL1fR17WQug==",
"dependencies": {
"cssnano-preset-advanced": "^6.1.2",
- "postcss": "^8.4.38",
+ "postcss": "^8.5.4",
"postcss-sort-media-queries": "^5.2.0",
"tslib": "^2.6.0"
},
@@ -3227,10 +3151,9 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.8.1.tgz",
+ "integrity": "sha512-2wjeGDhKcExEmjX8k1N/MRDiPKXGF2Pg+df/bDDPnnJWHXnVEZxXj80d6jcxp1Gpnksl0hF8t/ZQw9elqj2+ww==",
"dependencies": {
"chalk": "^4.1.2",
"tslib": "^2.6.0"
@@ -3240,14 +3163,13 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.8.1.tgz",
+ "integrity": "sha512-DZRhagSFRcEq1cUtBMo4TKxSNo/W6/s44yhr8X+eoXqCLycFQUylebOMPseHi5tc4fkGJqwqpWJLz6JStU9L4w==",
"dependencies": {
- "@docusaurus/logger": "3.8.0",
- "@docusaurus/utils": "3.8.0",
- "@docusaurus/utils-validation": "3.8.0",
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-validation": "3.8.1",
"@mdx-js/mdx": "^3.0.0",
"@slorber/remark-comment": "^1.0.0",
"escape-html": "^1.0.3",
@@ -3279,12 +3201,11 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.1.tgz",
+ "integrity": "sha512-6xhvAJiXzsaq3JdosS7wbRt/PwEPWHr9eM4YNYqVlbgG1hSK3uQDXTVvQktasp3VO6BmfYWPozueLWuj4gB+vg==",
"dependencies": {
- "@docusaurus/types": "3.8.0",
+ "@docusaurus/types": "3.8.1",
"@types/history": "^4.7.11",
"@types/react": "*",
"@types/react-router-config": "*",
@@ -3298,16 +3219,15 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.8.1.tgz",
+ "integrity": "sha512-F+86R7PBn6VNgy/Ux8w3ZRypJGJEzksbejQKlbTC8u6uhBUhfdXWkDp6qdOisIoW0buY5nLqucvZt1zNJzhJhA==",
+ "dependencies": {
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "@docusaurus/utils-validation": "3.8.1",
"eta": "^2.2.0",
"fs-extra": "^11.1.1",
"lodash": "^4.17.21",
@@ -3322,19 +3242,18 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.1.tgz",
+ "integrity": "sha512-vNTpMmlvNP9n3hGEcgPaXyvTljanAKIUkuG9URQ1DeuDup0OR7Ltvoc8yrmH+iMZJbcQGhUJF+WjHLwuk8HSdw==",
+ "dependencies": {
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/mdx-loader": "3.8.1",
+ "@docusaurus/theme-common": "3.8.1",
+ "@docusaurus/types": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "@docusaurus/utils-validation": "3.8.1",
"cheerio": "1.0.0-rc.12",
"feed": "^4.2.2",
"fs-extra": "^11.1.1",
@@ -3356,20 +3275,19 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.1.tgz",
+ "integrity": "sha512-oByRkSZzeGNQByCMaX+kif5Nl2vmtj2IHQI2fWjCfCootsdKZDPFLonhIp5s3IGJO7PLUfe0POyw0Xh/RrGXJA==",
+ "dependencies": {
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/mdx-loader": "3.8.1",
+ "@docusaurus/module-type-aliases": "3.8.1",
+ "@docusaurus/theme-common": "3.8.1",
+ "@docusaurus/types": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "@docusaurus/utils-validation": "3.8.1",
"@types/react-router-config": "^5.0.7",
"combine-promises": "^1.1.0",
"fs-extra": "^11.1.1",
@@ -3389,16 +3307,15 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.1.tgz",
+ "integrity": "sha512-a+V6MS2cIu37E/m7nDJn3dcxpvXb6TvgdNI22vJX8iUTp8eoMoPa0VArEbWvCxMY/xdC26WzNv4wZ6y0iIni/w==",
+ "dependencies": {
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/mdx-loader": "3.8.1",
+ "@docusaurus/types": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-validation": "3.8.1",
"fs-extra": "^11.1.1",
"tslib": "^2.6.0",
"webpack": "^5.88.1"
@@ -3412,14 +3329,14 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.1.tgz",
+ "integrity": "sha512-VQ47xRxfNKjHS5ItzaVXpxeTm7/wJLFMOPo1BkmoMG4Cuz4nuI+Hs62+RMk1OqVog68Swz66xVPK8g9XTrBKRw==",
+ "dependencies": {
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/types": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-validation": "3.8.1",
"tslib": "^2.6.0"
},
"engines": {
@@ -3427,14 +3344,13 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.8.1.tgz",
+ "integrity": "sha512-nT3lN7TV5bi5hKMB7FK8gCffFTBSsBsAfV84/v293qAmnHOyg1nr9okEw8AiwcO3bl9vije5nsUvP0aRl2lpaw==",
"dependencies": {
- "@docusaurus/core": "3.8.0",
- "@docusaurus/types": "3.8.0",
- "@docusaurus/utils": "3.8.0",
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/types": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
"fs-extra": "^11.1.1",
"react-json-view-lite": "^2.3.0",
"tslib": "^2.6.0"
@@ -3448,14 +3364,13 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.1.tgz",
+ "integrity": "sha512-Hrb/PurOJsmwHAsfMDH6oVpahkEGsx7F8CWMjyP/dw1qjqmdS9rcV1nYCGlM8nOtD3Wk/eaThzUB5TSZsGz+7Q==",
"dependencies": {
- "@docusaurus/core": "3.8.0",
- "@docusaurus/types": "3.8.0",
- "@docusaurus/utils-validation": "3.8.0",
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/types": "3.8.1",
+ "@docusaurus/utils-validation": "3.8.1",
"tslib": "^2.6.0"
},
"engines": {
@@ -3467,14 +3382,13 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.1.tgz",
+ "integrity": "sha512-tKE8j1cEZCh8KZa4aa80zpSTxsC2/ZYqjx6AAfd8uA8VHZVw79+7OTEP2PoWi0uL5/1Is0LF5Vwxd+1fz5HlKg==",
"dependencies": {
- "@docusaurus/core": "3.8.0",
- "@docusaurus/types": "3.8.0",
- "@docusaurus/utils-validation": "3.8.0",
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/types": "3.8.1",
+ "@docusaurus/utils-validation": "3.8.1",
"@types/gtag.js": "^0.0.12",
"tslib": "^2.6.0"
},
@@ -3487,14 +3401,13 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.1.tgz",
+ "integrity": "sha512-iqe3XKITBquZq+6UAXdb1vI0fPY5iIOitVjPQ581R1ZKpHr0qe+V6gVOrrcOHixPDD/BUKdYwkxFjpNiEN+vBw==",
"dependencies": {
- "@docusaurus/core": "3.8.0",
- "@docusaurus/types": "3.8.0",
- "@docusaurus/utils-validation": "3.8.0",
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/types": "3.8.1",
+ "@docusaurus/utils-validation": "3.8.1",
"tslib": "^2.6.0"
},
"engines": {
@@ -3506,17 +3419,16 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.1.tgz",
+ "integrity": "sha512-+9YV/7VLbGTq8qNkjiugIelmfUEVkTyLe6X8bWq7K5qPvGXAjno27QAfFq63mYfFFbJc7z+pudL63acprbqGzw==",
+ "dependencies": {
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/types": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "@docusaurus/utils-validation": "3.8.1",
"fs-extra": "^11.1.1",
"sitemap": "^7.1.1",
"tslib": "^2.6.0"
@@ -3530,15 +3442,14 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.1.tgz",
+ "integrity": "sha512-rW0LWMDsdlsgowVwqiMb/7tANDodpy1wWPwCcamvhY7OECReN3feoFwLjd/U4tKjNY3encj0AJSTxJA+Fpe+Gw==",
+ "dependencies": {
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/types": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-validation": "3.8.1",
"@svgr/core": "8.1.0",
"@svgr/webpack": "^8.1.0",
"tslib": "^2.6.0",
@@ -3553,26 +3464,25 @@
}
},
"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"
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.8.1.tgz",
+ "integrity": "sha512-yJSjYNHXD8POMGc2mKQuj3ApPrN+eG0rO1UPgSx7jySpYU+n4WjBikbrA2ue5ad9A7aouEtMWUoiSRXTH/g7KQ==",
+ "dependencies": {
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/plugin-content-blog": "3.8.1",
+ "@docusaurus/plugin-content-docs": "3.8.1",
+ "@docusaurus/plugin-content-pages": "3.8.1",
+ "@docusaurus/plugin-css-cascade-layers": "3.8.1",
+ "@docusaurus/plugin-debug": "3.8.1",
+ "@docusaurus/plugin-google-analytics": "3.8.1",
+ "@docusaurus/plugin-google-gtag": "3.8.1",
+ "@docusaurus/plugin-google-tag-manager": "3.8.1",
+ "@docusaurus/plugin-sitemap": "3.8.1",
+ "@docusaurus/plugin-svgr": "3.8.1",
+ "@docusaurus/theme-classic": "3.8.1",
+ "@docusaurus/theme-common": "3.8.1",
+ "@docusaurus/theme-search-algolia": "3.8.1",
+ "@docusaurus/types": "3.8.1"
},
"engines": {
"node": ">=18.0"
@@ -3583,31 +3493,30 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.8.1.tgz",
+ "integrity": "sha512-bqDUCNqXeYypMCsE1VcTXSI1QuO4KXfx8Cvl6rYfY0bhhqN6d2WZlRkyLg/p6pm+DzvanqHOyYlqdPyP0iz+iw==",
+ "dependencies": {
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/mdx-loader": "3.8.1",
+ "@docusaurus/module-type-aliases": "3.8.1",
+ "@docusaurus/plugin-content-blog": "3.8.1",
+ "@docusaurus/plugin-content-docs": "3.8.1",
+ "@docusaurus/plugin-content-pages": "3.8.1",
+ "@docusaurus/theme-common": "3.8.1",
+ "@docusaurus/theme-translations": "3.8.1",
+ "@docusaurus/types": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "@docusaurus/utils-validation": "3.8.1",
"@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",
+ "postcss": "^8.5.4",
"prism-react-renderer": "^2.3.0",
"prismjs": "^1.29.0",
"react-router-dom": "^5.3.4",
@@ -3624,15 +3533,14 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.8.1.tgz",
+ "integrity": "sha512-UswMOyTnPEVRvN5Qzbo+l8k4xrd5fTFu2VPPfD6FcW/6qUtVLmJTQCktbAL3KJ0BVXGm5aJXz/ZrzqFuZERGPw==",
+ "dependencies": {
+ "@docusaurus/mdx-loader": "3.8.1",
+ "@docusaurus/module-type-aliases": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
"@types/history": "^4.7.11",
"@types/react": "*",
"@types/react-router-config": "*",
@@ -3652,19 +3560,18 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.1.tgz",
+ "integrity": "sha512-NBFH5rZVQRAQM087aYSRKQ9yGEK9eHd+xOxQjqNpxMiV85OhJDD4ZGz6YJIod26Fbooy54UWVdzNU0TFeUUUzQ==",
"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",
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/plugin-content-docs": "3.8.1",
+ "@docusaurus/theme-common": "3.8.1",
+ "@docusaurus/theme-translations": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-validation": "3.8.1",
"algoliasearch": "^5.17.1",
"algoliasearch-helper": "^3.22.6",
"clsx": "^2.0.0",
@@ -3683,10 +3590,9 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.8.1.tgz",
+ "integrity": "sha512-OTp6eebuMcf2rJt4bqnvuwmm3NVXfzfYejL+u/Y1qwKhZPrjPoKWfk1CbOP5xH5ZOPkiAsx4dHdQBRJszK3z2g==",
"dependencies": {
"fs-extra": "^11.1.1",
"tslib": "^2.6.0"
@@ -3696,10 +3602,9 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz",
+ "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==",
"dependencies": {
"@mdx-js/mdx": "^3.0.0",
"@types/history": "^4.7.11",
@@ -3731,14 +3636,13 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.8.1.tgz",
+ "integrity": "sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ==",
"dependencies": {
- "@docusaurus/logger": "3.8.0",
- "@docusaurus/types": "3.8.0",
- "@docusaurus/utils-common": "3.8.0",
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/types": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
"escape-string-regexp": "^4.0.0",
"execa": "5.1.1",
"file-loader": "^6.2.0",
@@ -3763,12 +3667,11 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.8.1.tgz",
+ "integrity": "sha512-zTZiDlvpvoJIrQEEd71c154DkcriBecm4z94OzEE9kz7ikS3J+iSlABhFXM45mZ0eN5pVqqr7cs60+ZlYLewtg==",
"dependencies": {
- "@docusaurus/types": "3.8.0",
+ "@docusaurus/types": "3.8.1",
"tslib": "^2.6.0"
},
"engines": {
@@ -3776,14 +3679,13 @@
}
},
"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",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz",
+ "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==",
"dependencies": {
- "@docusaurus/logger": "3.8.0",
- "@docusaurus/utils": "3.8.0",
- "@docusaurus/utils-common": "3.8.0",
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
"fs-extra": "^11.2.0",
"joi": "^17.9.2",
"js-yaml": "^4.1.0",
@@ -3811,7 +3713,6 @@
"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"
},
@@ -3823,7 +3724,6 @@
"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",
@@ -4044,8 +3944,7 @@
"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"
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA=="
},
"node_modules/@sindresorhus/is": {
"version": "4.6.0",
@@ -4074,7 +3973,6 @@
"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"
},
@@ -4090,7 +3988,6 @@
"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"
},
@@ -4106,7 +4003,6 @@
"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"
},
@@ -4122,7 +4018,6 @@
"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"
},
@@ -4138,7 +4033,6 @@
"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"
},
@@ -4154,7 +4048,6 @@
"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"
},
@@ -4170,7 +4063,6 @@
"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"
},
@@ -4186,7 +4078,6 @@
"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"
},
@@ -4202,7 +4093,6 @@
"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",
@@ -4228,7 +4118,6 @@
"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",
@@ -4248,7 +4137,6 @@
"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"
@@ -4265,7 +4153,6 @@
"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",
@@ -4287,7 +4174,6 @@
"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",
@@ -4308,7 +4194,6 @@
"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",
@@ -4471,8 +4356,7 @@
"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"
+ "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg=="
},
"node_modules/@types/hast": {
"version": "3.0.4",
@@ -4517,14 +4401,12 @@
"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"
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w=="
},
"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": "*"
}
@@ -4533,7 +4415,6 @@
"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": "*"
}
@@ -4655,7 +4536,6 @@
"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": "*"
}
@@ -4717,7 +4597,6 @@
"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": "*"
}
@@ -4725,8 +4604,7 @@
"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"
+ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ=="
},
"node_modules/@ungap/structured-clone": {
"version": "1.2.0",
@@ -5016,34 +4894,32 @@
}
},
"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"
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.30.0.tgz",
+ "integrity": "sha512-ILSdPX4je0n5WUKD34TMe57/eqiXUzCIjAsdtLQYhomqOjTtFUg1s6dE7kUegc4Mc43Xr7IXYlMutU9HPiYfdw==",
+ "dependencies": {
+ "@algolia/client-abtesting": "5.30.0",
+ "@algolia/client-analytics": "5.30.0",
+ "@algolia/client-common": "5.30.0",
+ "@algolia/client-insights": "5.30.0",
+ "@algolia/client-personalization": "5.30.0",
+ "@algolia/client-query-suggestions": "5.30.0",
+ "@algolia/client-search": "5.30.0",
+ "@algolia/ingestion": "1.30.0",
+ "@algolia/monitoring": "1.30.0",
+ "@algolia/recommend": "5.30.0",
+ "@algolia/requester-browser-xhr": "5.30.0",
+ "@algolia/requester-fetch": "5.30.0",
+ "@algolia/requester-node-http": "5.30.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",
+ "version": "3.26.0",
+ "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.26.0.tgz",
+ "integrity": "sha512-Rv2x3GXleQ3ygwhkhJubhhYGsICmShLAiqtUuJTUkr9uOCOXyF2E71LVT4XDnVffbknv8XgScP4U0Oxtgm+hIw==",
"dependencies": {
"@algolia/events": "^4.0.1"
},
@@ -5084,7 +4960,6 @@
"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"
},
@@ -5099,7 +4974,6 @@
"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"
},
@@ -5158,8 +5032,7 @@
"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"
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
},
"node_modules/argparse": {
"version": "2.0.1",
@@ -5206,7 +5079,6 @@
"url": "https://github.com/sponsors/ai"
}
],
- "license": "MIT",
"dependencies": {
"browserslist": "^4.24.4",
"caniuse-lite": "^1.0.30001702",
@@ -5229,7 +5101,6 @@
"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"
@@ -5246,7 +5117,6 @@
"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"
}
@@ -5518,7 +5388,6 @@
"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",
@@ -5594,7 +5463,6 @@
"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",
@@ -5695,7 +5563,6 @@
"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",
@@ -5716,7 +5583,6 @@
"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",
@@ -5902,8 +5768,7 @@
"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"
+ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="
},
"node_modules/colorette": {
"version": "2.0.20",
@@ -5939,8 +5804,7 @@
"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"
+ "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w=="
},
"node_modules/compressible": {
"version": "2.0.18",
@@ -6052,7 +5916,6 @@
"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"
}
@@ -6099,7 +5962,6 @@
"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"
},
@@ -6111,7 +5973,6 @@
"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",
@@ -6135,7 +5996,6 @@
"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"
},
@@ -6147,7 +6007,6 @@
"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",
@@ -6166,7 +6025,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
"integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
- "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -6199,11 +6057,10 @@
}
},
"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==",
+ "version": "3.43.0",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.43.0.tgz",
+ "integrity": "sha512-i/AgxU2+A+BbJdMxh3v7/vxi2SbFqxiFmg6VsDwYB4jkucrd1BZNA9a9gphC0fYMG5IBSgQcbQnk865VCLe7xA==",
"hasInstallScript": true,
- "license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/core-js"
@@ -6295,7 +6152,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"postcss-selector-parser": "^7.0.0"
},
@@ -6310,7 +6166,6 @@
"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"
@@ -6323,7 +6178,6 @@
"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"
},
@@ -6345,7 +6199,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/selector-specificity": "^5.0.0",
"postcss-selector-parser": "^7.0.0",
@@ -6372,7 +6225,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"engines": {
"node": ">=18"
},
@@ -6384,7 +6236,6 @@
"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"
@@ -6397,7 +6248,6 @@
"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",
@@ -6432,7 +6282,6 @@
"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",
@@ -6486,7 +6335,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"engines": {
"node": ">=18"
},
@@ -6533,9 +6381,9 @@
}
},
"node_modules/cssdb": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.3.0.tgz",
- "integrity": "sha512-c7bmItIg38DgGjSwDPZOYF/2o0QU/sSgkWOMyl8votOfgFuyiFKWPesmCGEsrGLxEA9uL540cp8LdaGEjUGsZQ==",
+ "version": "8.3.1",
+ "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.3.1.tgz",
+ "integrity": "sha512-XnDRQMXucLueX92yDe0LPKupXetWoFOgawr4O4X41l5TltgK2NVbJJVDnnOywDYfW1sTJ28AcXGKOqdRKwCcmQ==",
"funding": [
{
"type": "opencollective",
@@ -6545,14 +6393,12 @@
"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"
},
@@ -6564,7 +6410,6 @@
"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"
@@ -6584,7 +6429,6 @@
"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",
@@ -6605,7 +6449,6 @@
"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",
@@ -6649,7 +6492,6 @@
"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"
},
@@ -6766,7 +6608,6 @@
"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"
}
@@ -6796,7 +6637,6 @@
"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",
@@ -6822,7 +6662,6 @@
"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",
@@ -7593,7 +7432,6 @@
"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"
},
@@ -7605,7 +7443,6 @@
"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"
},
@@ -7620,7 +7457,6 @@
"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"
}
@@ -7737,7 +7573,6 @@
"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"
@@ -7753,7 +7588,6 @@
"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"
@@ -7823,7 +7657,6 @@
"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": "*"
},
@@ -8163,7 +7996,6 @@
"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"
},
@@ -8502,7 +8334,6 @@
"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",
@@ -8523,7 +8354,6 @@
"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"
}
@@ -8623,7 +8453,6 @@
"url": "https://github.com/sponsors/fb55"
}
],
- "license": "MIT",
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3",
@@ -8753,7 +8582,6 @@
"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"
},
@@ -8827,7 +8655,6 @@
"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"
}
@@ -9165,7 +8992,6 @@
"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": "*",
@@ -9182,7 +9008,6 @@
"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",
@@ -9197,7 +9022,6 @@
"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"
},
@@ -9357,7 +9181,6 @@
"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"
},
@@ -9395,7 +9218,6 @@
"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"
},
@@ -9419,14 +9241,12 @@
"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"
+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="
},
"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"
+ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
},
"node_modules/longest-streak": {
"version": "3.1.0",
@@ -11727,7 +11547,6 @@
"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"
@@ -11797,9 +11616,9 @@
}
},
"node_modules/nanoid": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
- "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"funding": [
{
"type": "github",
@@ -11879,7 +11698,6 @@
"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"
}
@@ -11911,8 +11729,7 @@
"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"
+ "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA=="
},
"node_modules/nth-check": {
"version": "2.1.1",
@@ -11929,7 +11746,6 @@
"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"
@@ -11949,7 +11765,6 @@
"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",
@@ -11965,7 +11780,6 @@
"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"
}
@@ -11973,14 +11787,12 @@
"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"
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
},
"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",
@@ -12018,7 +11830,6 @@
"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"
}
@@ -12027,7 +11838,6 @@
"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",
@@ -12141,7 +11951,6 @@
"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"
},
@@ -12156,7 +11965,6 @@
"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"
},
@@ -12306,8 +12114,7 @@
"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"
+ "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ=="
},
"node_modules/parse5": {
"version": "7.1.2",
@@ -12324,7 +12131,6 @@
"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"
@@ -12356,7 +12162,6 @@
"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"
}
@@ -12435,7 +12240,6 @@
"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"
},
@@ -12447,9 +12251,9 @@
}
},
"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==",
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"funding": [
{
"type": "opencollective",
@@ -12465,9 +12269,9 @@
}
],
"dependencies": {
- "nanoid": "^3.3.7",
- "picocolors": "^1.0.1",
- "source-map-js": "^1.2.0"
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -12487,7 +12291,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT",
"dependencies": {
"postcss-selector-parser": "^7.0.0"
},
@@ -12502,7 +12305,6 @@
"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"
@@ -12515,7 +12317,6 @@
"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"
@@ -12531,7 +12332,6 @@
"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"
},
@@ -12556,7 +12356,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-color-parser": "^3.0.10",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -12585,7 +12384,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT",
"dependencies": {
"@csstools/utilities": "^2.0.0",
"postcss-value-parser": "^4.2.0"
@@ -12611,7 +12409,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/utilities": "^2.0.0",
"postcss-value-parser": "^4.2.0"
@@ -12627,7 +12424,6 @@
"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",
@@ -12645,7 +12441,6 @@
"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"
@@ -12671,7 +12466,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT",
"dependencies": {
"@csstools/cascade-layer-name-parser": "^2.0.5",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -12686,9 +12480,9 @@
}
},
"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==",
+ "version": "14.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz",
+ "integrity": "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==",
"funding": [
{
"type": "github",
@@ -12699,7 +12493,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT",
"dependencies": {
"@csstools/cascade-layer-name-parser": "^2.0.5",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -12728,7 +12521,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT",
"dependencies": {
"@csstools/cascade-layer-name-parser": "^2.0.5",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -12746,7 +12538,6 @@
"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"
@@ -12769,7 +12560,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"postcss-selector-parser": "^7.0.0"
},
@@ -12784,7 +12574,6 @@
"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"
@@ -12797,7 +12586,6 @@
"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"
},
@@ -12809,7 +12597,6 @@
"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"
},
@@ -12821,7 +12608,6 @@
"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"
},
@@ -12833,7 +12619,6 @@
"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"
},
@@ -12845,7 +12630,6 @@
"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"
},
@@ -12870,7 +12654,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/postcss-progressive-custom-properties": "^4.1.0",
"@csstools/utilities": "^2.0.0",
@@ -12897,7 +12680,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"postcss-selector-parser": "^7.0.0"
},
@@ -12912,7 +12694,6 @@
"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"
@@ -12935,7 +12716,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"postcss-selector-parser": "^7.0.0"
},
@@ -12950,7 +12730,6 @@
"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"
@@ -12963,7 +12742,6 @@
"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"
}
@@ -12982,7 +12760,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"engines": {
"node": ">=18"
},
@@ -13004,7 +12781,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/utilities": "^2.0.0",
"postcss-value-parser": "^4.2.0"
@@ -13030,7 +12806,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"@csstools/css-color-parser": "^3.0.10",
"@csstools/css-parser-algorithms": "^3.0.5",
@@ -13049,7 +12824,6 @@
"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",
@@ -13081,7 +12855,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
@@ -13096,7 +12869,6 @@
"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"
@@ -13112,7 +12884,6 @@
"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"
@@ -13128,7 +12899,6 @@
"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",
@@ -13146,7 +12916,6 @@
"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"
},
@@ -13161,7 +12930,6 @@
"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",
@@ -13178,7 +12946,6 @@
"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",
@@ -13195,7 +12962,6 @@
"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"
},
@@ -13210,7 +12976,6 @@
"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"
},
@@ -13222,7 +12987,6 @@
"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",
@@ -13239,7 +13003,6 @@
"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"
@@ -13252,7 +13015,6 @@
"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"
},
@@ -13267,7 +13029,6 @@
"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"
@@ -13280,7 +13041,6 @@
"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"
},
@@ -13292,9 +13052,9 @@
}
},
"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==",
+ "version": "13.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz",
+ "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==",
"funding": [
{
"type": "github",
@@ -13305,9 +13065,8 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
- "@csstools/selector-resolve-nested": "^3.0.0",
+ "@csstools/selector-resolve-nested": "^3.1.0",
"@csstools/selector-specificity": "^5.0.0",
"postcss-selector-parser": "^7.0.0"
},
@@ -13319,9 +13078,9 @@
}
},
"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==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz",
+ "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==",
"funding": [
{
"type": "github",
@@ -13332,7 +13091,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"engines": {
"node": ">=18"
},
@@ -13354,7 +13112,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"engines": {
"node": ">=18"
},
@@ -13366,7 +13123,6 @@
"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"
@@ -13379,7 +13135,6 @@
"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"
},
@@ -13391,7 +13146,6 @@
"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"
},
@@ -13406,7 +13160,6 @@
"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"
},
@@ -13421,7 +13174,6 @@
"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"
},
@@ -13436,7 +13188,6 @@
"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"
},
@@ -13451,7 +13202,6 @@
"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"
},
@@ -13466,7 +13216,6 @@
"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"
@@ -13482,7 +13231,6 @@
"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"
},
@@ -13497,7 +13245,6 @@
"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"
},
@@ -13522,7 +13269,6 @@
"url": "https://liberapay.com/mrcgrtz"
}
],
- "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -13534,7 +13280,6 @@
"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"
@@ -13560,7 +13305,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
@@ -13575,7 +13319,6 @@
"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"
}
@@ -13594,7 +13337,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
@@ -13606,9 +13348,9 @@
}
},
"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==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.4.tgz",
+ "integrity": "sha512-q+lXgqmTMdB0Ty+EQ31SuodhdfZetUlwCA/F0zRcd/XdxjzI+Rl2JhZNz5US2n/7t9ePsvuhCnEN4Bmu86zXlA==",
"funding": [
{
"type": "github",
@@ -13619,9 +13361,8 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
- "@csstools/postcss-cascade-layers": "^5.0.1",
+ "@csstools/postcss-cascade-layers": "^5.0.2",
"@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",
@@ -13633,7 +13374,7 @@
"@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-is-pseudo-class": "^5.0.3",
"@csstools/postcss-light-dark-function": "^2.0.9",
"@csstools/postcss-logical-float-and-clear": "^3.0.0",
"@csstools/postcss-logical-overflow": "^2.0.0",
@@ -13655,7 +13396,7 @@
"@csstools/postcss-trigonometric-functions": "^4.0.9",
"@csstools/postcss-unset-value": "^4.0.0",
"autoprefixer": "^10.4.21",
- "browserslist": "^4.24.5",
+ "browserslist": "^4.25.0",
"css-blank-pseudo": "^7.0.1",
"css-has-pseudo": "^7.0.2",
"css-prefers-color-scheme": "^10.0.0",
@@ -13666,7 +13407,7 @@
"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-properties": "^14.0.6",
"postcss-custom-selectors": "^8.0.5",
"postcss-dir-pseudo-class": "^9.0.1",
"postcss-double-position-gradients": "^6.0.2",
@@ -13677,7 +13418,7 @@
"postcss-image-set-function": "^7.0.0",
"postcss-lab-function": "^7.0.10",
"postcss-logical": "^8.1.0",
- "postcss-nesting": "^13.0.1",
+ "postcss-nesting": "^13.0.2",
"postcss-opacity-percentage": "^3.0.0",
"postcss-overflow-shorthand": "^6.0.0",
"postcss-page-break": "^3.0.4",
@@ -13707,7 +13448,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
"dependencies": {
"postcss-selector-parser": "^7.0.0"
},
@@ -13722,7 +13462,6 @@
"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"
@@ -13735,7 +13474,6 @@
"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"
},
@@ -13750,7 +13488,6 @@
"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"
@@ -13766,7 +13503,6 @@
"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"
},
@@ -13781,7 +13517,6 @@
"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"
}
@@ -13800,7 +13535,6 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT",
"dependencies": {
"postcss-selector-parser": "^7.0.0"
},
@@ -13815,7 +13549,6 @@
"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"
@@ -13828,7 +13561,6 @@
"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"
@@ -13841,7 +13573,6 @@
"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"
},
@@ -13856,7 +13587,6 @@
"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"
@@ -13872,7 +13602,6 @@
"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"
},
@@ -13886,14 +13615,12 @@
"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"
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
},
"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"
},
@@ -13915,7 +13642,6 @@
"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"
}
@@ -13936,7 +13662,6 @@
"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"
}
@@ -14186,7 +13911,6 @@
"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"
},
@@ -14638,7 +14362,6 @@
"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"
}
@@ -14754,7 +14477,6 @@
"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",
@@ -14818,8 +14540,7 @@
"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"
+ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="
},
"node_modules/scheduler": {
"version": "0.26.0",
@@ -14830,8 +14551,7 @@
"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"
+ "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg=="
},
"node_modules/schema-utils": {
"version": "4.3.0",
@@ -14856,7 +14576,6 @@
"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": {
@@ -15106,7 +14825,6 @@
"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",
@@ -15276,7 +14994,6 @@
"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",
@@ -15294,8 +15011,7 @@
"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"
+ "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
},
"node_modules/skin-tone": {
"version": "2.0.0",
@@ -15321,7 +15037,6 @@
"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"
@@ -15342,7 +15057,6 @@
"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"
}
@@ -15356,9 +15070,9 @@
}
},
"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==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"engines": {
"node": ">=0.10.0"
}
@@ -15428,7 +15142,6 @@
"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"
},
@@ -15448,8 +15161,7 @@
"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"
+ "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw=="
},
"node_modules/string_decoder": {
"version": "1.3.0",
@@ -15564,7 +15276,6 @@
"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"
},
@@ -15584,7 +15295,6 @@
"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"
@@ -15621,8 +15331,7 @@
"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"
+ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ=="
},
"node_modules/svgo": {
"version": "3.3.2",
@@ -16762,7 +16471,6 @@
"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",
@@ -16783,14 +16491,12 @@
"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"
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"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"
},
@@ -16803,7 +16509,6 @@
"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",
@@ -16817,7 +16522,6 @@
"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",
@@ -16998,7 +16702,6 @@
"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"
},
@@ -17015,7 +16718,6 @@
"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"
},
diff --git a/docs/package.json b/docs/package.json
index 2bb440711..def8214d8 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -14,9 +14,9 @@
"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",
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/plugin-client-redirects": "^3.8.1",
+ "@docusaurus/preset-classic": "3.8.1",
"@mdx-js/react": "^3.1.0",
"clsx": "^2.0.0",
"docusaurus-theme-github-codeblock": "^2.0.2",
@@ -25,8 +25,8 @@
"react-dom": "^19.1.0"
},
"devDependencies": {
- "@docusaurus/module-type-aliases": "3.8.0",
- "@docusaurus/types": "3.8.0"
+ "@docusaurus/module-type-aliases": "3.8.1",
+ "@docusaurus/types": "3.8.1"
},
"browserslist": {
"production": [
From 50b424e8e644606646e1800e28d68301b7c1b703 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 2 Jul 2025 00:26:36 +0000
Subject: [PATCH 27/85] chore(deps): bump flake8 from 7.2.0 to 7.3.0 (#1326)
---
requirements/tools.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/requirements/tools.txt b/requirements/tools.txt
index 0e6090497..41c427cf7 100644
--- a/requirements/tools.txt
+++ b/requirements/tools.txt
@@ -1,3 +1,3 @@
mypy==1.16.0
-flake8==7.2.0
+flake8==7.3.0
black==24.8.0 # Until we drop Python 3.6 support, we have to stay with this version
From c75897e7b18c44e53455258836f0408fcfe9c1ab Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 2 Jul 2025 00:30:46 +0000
Subject: [PATCH 28/85] chore(deps): bump mypy from 1.16.0 to 1.16.1 (#1327)
---
requirements/tools.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/requirements/tools.txt b/requirements/tools.txt
index 41c427cf7..0603319d7 100644
--- a/requirements/tools.txt
+++ b/requirements/tools.txt
@@ -1,3 +1,3 @@
-mypy==1.16.0
+mypy==1.16.1
flake8==7.3.0
black==24.8.0 # Until we drop Python 3.6 support, we have to stay with this version
From 347cb5e0e4f32a26fa8d19268557bf6cd2a42052 Mon Sep 17 00:00:00 2001
From: ewanek1
Date: Wed, 2 Jul 2025 09:53:15 -0700
Subject: [PATCH 29/85] Remove py36 references (#1330)
---
.github/maintainers_guide.md | 1 -
README.md | 2 +-
pyproject.toml | 3 +--
scripts/install_all_and_run_tests.sh | 7 +------
slack_bolt/async_app.py | 2 +-
5 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/.github/maintainers_guide.md b/.github/maintainers_guide.md
index 85b4e13be..4ab491789 100644
--- a/.github/maintainers_guide.md
+++ b/.github/maintainers_guide.md
@@ -25,7 +25,6 @@ $ pyenv local 3.8.5
$ pyenv versions
system
- 3.6.10
3.7.7
* 3.8.5 (set by /path-to-bolt-python/.python-version)
diff --git a/README.md b/README.md
index 7576597d5..862c63e96 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@ A Python framework to build Slack apps in a flash with the latest platform featu
## Setup
```bash
-# Python 3.6+ required
+# Python 3.7+ required
python -m venv .venv
source .venv/bin/activate
diff --git a/pyproject.toml b/pyproject.toml
index 5ce2c62bc..5337b5c55 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -8,7 +8,6 @@ dynamic = ["version", "readme", "dependencies", "authors"]
description = "The Bolt Framework for Python"
license = { text = "MIT" }
classifiers = [
- "Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
@@ -20,7 +19,7 @@ classifiers = [
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
-requires-python = ">=3.6"
+requires-python = ">=3.7"
[project.urls]
diff --git a/scripts/install_all_and_run_tests.sh b/scripts/install_all_and_run_tests.sh
index 21660dca5..e71c8511b 100755
--- a/scripts/install_all_and_run_tests.sh
+++ b/scripts/install_all_and_run_tests.sh
@@ -16,12 +16,7 @@ pip uninstall python-lambda
test_target="$1"
python_version=`python --version | awk '{print $2}'`
-if [ ${python_version:0:3} == "3.6" ]
-then
- pip install -U -r requirements.txt
-else
- pip install -e .
-fi
+pip install -e .
if [[ $test_target != "" ]]
then
diff --git a/slack_bolt/async_app.py b/slack_bolt/async_app.py
index 10878c51b..fdf724d4c 100644
--- a/slack_bolt/async_app.py
+++ b/slack_bolt/async_app.py
@@ -5,7 +5,7 @@
If you'd prefer to build your app with [asyncio](https://docs.python.org/3/library/asyncio.html), you can import the [AIOHTTP](https://docs.aiohttp.org/en/stable/) library and call the `AsyncApp` constructor. Within async apps, you can use the async/await pattern.
```bash
-# Python 3.6+ required
+# Python 3.7+ required
python -m venv .venv
source .venv/bin/activate
From 46e25d3e1f02a9a50bc1b214f3772957473d70a5 Mon Sep 17 00:00:00 2001
From: ewanek1
Date: Wed, 2 Jul 2025 12:16:29 -0700
Subject: [PATCH 30/85] Remove py36 references (#1331)
---
.github/maintainers_guide.md | 1 +
README.md | 2 +-
pyproject.toml | 3 ++-
scripts/install_all_and_run_tests.sh | 7 ++++++-
slack_bolt/async_app.py | 2 +-
5 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/.github/maintainers_guide.md b/.github/maintainers_guide.md
index 4ab491789..85b4e13be 100644
--- a/.github/maintainers_guide.md
+++ b/.github/maintainers_guide.md
@@ -25,6 +25,7 @@ $ pyenv local 3.8.5
$ pyenv versions
system
+ 3.6.10
3.7.7
* 3.8.5 (set by /path-to-bolt-python/.python-version)
diff --git a/README.md b/README.md
index 862c63e96..7576597d5 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@ A Python framework to build Slack apps in a flash with the latest platform featu
## Setup
```bash
-# Python 3.7+ required
+# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
diff --git a/pyproject.toml b/pyproject.toml
index 5337b5c55..5ce2c62bc 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -8,6 +8,7 @@ dynamic = ["version", "readme", "dependencies", "authors"]
description = "The Bolt Framework for Python"
license = { text = "MIT" }
classifiers = [
+ "Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
@@ -19,7 +20,7 @@ classifiers = [
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
-requires-python = ">=3.7"
+requires-python = ">=3.6"
[project.urls]
diff --git a/scripts/install_all_and_run_tests.sh b/scripts/install_all_and_run_tests.sh
index e71c8511b..21660dca5 100755
--- a/scripts/install_all_and_run_tests.sh
+++ b/scripts/install_all_and_run_tests.sh
@@ -16,7 +16,12 @@ pip uninstall python-lambda
test_target="$1"
python_version=`python --version | awk '{print $2}'`
-pip install -e .
+if [ ${python_version:0:3} == "3.6" ]
+then
+ pip install -U -r requirements.txt
+else
+ pip install -e .
+fi
if [[ $test_target != "" ]]
then
diff --git a/slack_bolt/async_app.py b/slack_bolt/async_app.py
index fdf724d4c..10878c51b 100644
--- a/slack_bolt/async_app.py
+++ b/slack_bolt/async_app.py
@@ -5,7 +5,7 @@
If you'd prefer to build your app with [asyncio](https://docs.python.org/3/library/asyncio.html), you can import the [AIOHTTP](https://docs.aiohttp.org/en/stable/) library and call the `AsyncApp` constructor. Within async apps, you can use the async/await pattern.
```bash
-# Python 3.7+ required
+# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
From 1e69f1d0c9a68c9967864f52e50544c19b2b1d3b Mon Sep 17 00:00:00 2001
From: Luke Russell <31357343+lukegalbraithrussell@users.noreply.github.com>
Date: Fri, 11 Jul 2025 10:05:33 -0700
Subject: [PATCH 31/85] Docs: Updates Modals tutorial to not use Glitch (#1334)
---
docs/content/tutorial/modals.md | 166 +++++++++++++++++++-------------
1 file changed, 100 insertions(+), 66 deletions(-)
diff --git a/docs/content/tutorial/modals.md b/docs/content/tutorial/modals.md
index 678d3783b..b6d672d08 100644
--- a/docs/content/tutorial/modals.md
+++ b/docs/content/tutorial/modals.md
@@ -1,101 +1,135 @@
+
# 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 Glitch, and using that server to run your Slack app.
+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).
-Let's take a look at the technologies we'll use in this tutorial:
+:::info[GitHub Codespaces]
+GitHub Codespaces is an online IDE that allows you to work on code and host your own server at the same time. While Codespaces is good for testing and development purposes, it should not be used in production.
-* Glitch is a online IDE that allows you to collaboratively work on code and host your own server. Glitch should only be used for development purposes and should not be used in production.
-* We'll use Python in conjunction with our [Bolt for Python](https://github.com/SlackAPI/bolt-python) SDK.
-* [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 are similar to 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.
+:::
----
+At the end of this tutorial, your final app will look like this:
-## Final product overview {#final_product}
-If you follow through with the extra credit tasks, your final app will look like this:
+
-
+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`.
----
+If you're familiar with using Heroku you can also deploy directly to Heroku with the following button.
-## The process {#steps}
+[](https://www.heroku.com/deploy?template=https://github.com/wongjas/modal-example)
-1. [Create a new app](https://api.slack.com/apps/new) and name it whatever you like.
+---
+
+## Setting up your app within App Settings {#setting-up-app-settings}
-2. [Remix (or clone)](https://glitch.com/edit/#!/remix/intro-to-modals-bolt) the Glitch template.
+You'll need to create an app and configure it properly within App Settings before using it.
-Here's a copy of what the modal payload looks like — this is what powers the modal.
+1. [Create a new app](https://api.slack.com/apps/new), click `From a Manifest`, and choose the workspace that you want to develop on. Then copy the following JSON object; it describes the metadata about your app, like its name, its bot display name and permissions it will request.
```json
{
- "type": "modal",
- "callback_id": "gratitude-modal",
- "title": {
- "type": "plain_text",
- "text": "Gratitude Box",
- "emoji": true
- },
- "submit": {
- "type": "plain_text",
- "text": "Submit",
- "emoji": true
- },
- "close": {
- "type": "plain_text",
- "text": "Cancel",
- "emoji": true
- },
- "blocks": [
- {
- "type": "input",
- "block_id": "my_block",
- "element": {
- "type": "plain_text_input",
- "action_id": "my_action"
- },
- "label": {
- "type": "plain_text",
- "text": "Say something nice!",
- "emoji": true
- }
+ "display_information": {
+ "name": "Intro to Modals"
+ },
+ "features": {
+ "bot_user": {
+ "display_name": "Intro to Modals",
+ "always_online": false
+ },
+ "slash_commands": [
+ {
+ "command": "/announce",
+ "description": "Makes an announcement",
+ "should_escape": false
+ }
+ ]
+ },
+ "oauth_config": {
+ "scopes": {
+ "bot": [
+ "chat:write",
+ "commands"
+ ]
+ }
+ },
+ "settings": {
+ "interactivity": {
+ "is_enabled": true
+ },
+ "org_deploy_enabled": false,
+ "socket_mode_enabled": true,
+ "token_rotation_enabled": false
}
- ]
}
```
-3. Find the base path to your server by clicking **Share**, then copy the Live site link.
+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.
+
+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.
- 
+## Starting your Codespaces server {#starting-server}
-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.
+1. Log into GitHub and head to this [repository](https://github.com/wongjas/modal-example).
- 
+2. Click the green `Code` button and hit the `Codespaces` tab and then `Create codespace on main`. This will bring up a code editor within your browser so you can start coding.
-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.
+## Understanding the project files {#understanding-files}
- 
+Within the project you'll find a `manifest.json` file. This is a a configuration file used by Slack apps. With a manifest, you can create an app with a pre-defined configuration, or adjust the configuration of an existing app.
-6. Select **Install App**. After you've done this, you'll see a **Bot User OAuth Access Token**, copy this.
+The `simple_modal_example.py` Python script contains the code that powers your app. If you're going to tinker with the app itself, take a look at the comments found within the `simple_modal_example.py` file!
-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.
+The `requirements.txt` file contains the Python package dependencies needed to run this app.
- 
+:::info[This repo contains optional Heroku-specific configurations]
-8. Test by heading to Slack and typing `/thankyou`.
+The `app.json` file defines your Heroku app configuration including environment variables and deployment settings, to allow your app to deploy with one click. `Procfile` is a Heroku-specific file that tells Heroku what command to run when starting your app — in this case a Python script would run as a `worker` process. If you aren't deploying to Heroku, you can ignore both these files.
-All done! 🎉 You've created your first slash command using Block Kit and modals! The world is your oyster; you can create more complex modals by playing around with [Block Kit Builder](https://app.slack.com/block-kit-builder).
+:::
+
+## Adding tokens {#adding-tokens}
+
+1. Open a terminal up within the browser's editor.
+
+2. Grab the app and bot tokens that you kept safe. We're going to set them as environment variables.
+
+```bash
+export SLACK_APP_TOKEN=
+export SLACK_BOT_TOKEN=
+```
-### Extra credit {#extra_credit}
+## Running the app {#running-app}
+
+1. Activate a virtual environment for your Python packages to be installed.
+
+```bash
+# Setup your python virtual environment
+python3 -m venv .venv
+source .venv/bin/activate
+```
+
+2. Install the dependencies from the `requirements.txt` file.
+
+
+```bash
+# Install the dependencies
+pip install -r requirements.txt
+```
+
+3. Start your app using the `python3 simple_modal_example.py` command.
+
+```bash
+# Start your local server
+python3 simple_modal_example.py
+```
-For a little extra credit, let's post the feedback we received in a channel.
+4. Now that your app is running, you should be able to see it within Slack. Test this by heading to Slack and typing `/announce`.
-1. Add the `chat:write` bot scope, which allows your bot to post messages within Slack. You can do this in the **OAuth & Permissions** section for your Slack app.
-2. Reinstall your app to apply the scope.
-3. Create a channel and name it `#thanks`. Get its ID by right clicking the channel name, copying the link, and copying the last part starting with the letter `C`. For example, if your channel link looks like this: https://my.slack.com/archives/C123FCN2MLM, the ID is `C123FCN2MLM`.
-4. Add your bot to the channel by typing the command `/invite @your_bots_name`.
-5. Uncomment the `Extra Credit` code within your Glitch project and make sure to replace `your_channel_id` with the ID above.
-6. Test it out by typing `/thankyou`, and watching all the feedback come into your channel!
+All done! 🎉 You've created your first slash command using Block Kit and modals! The world is your oyster; play around with [Block Kit Builder](https://app.slack.com/block-kit-builder) and create more complex modals and place them in your code to see what happens!
## Next steps {#next-steps}
-If you want to learn more about Bolt for Python, refer to the [Getting Started guide](/bolt-python/getting-started).
+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
From e6b34ebba6c5f43d72e006190e9072a7af5b3ada Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 17 Jul 2025 21:05:45 -0400
Subject: [PATCH 32/85] chore(deps): bump on-headers and compression in /docs
(#1336)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
docs/package-lock.json | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/docs/package-lock.json b/docs/package-lock.json
index 6790558aa..773665646 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -5828,16 +5828,16 @@
}
},
"node_modules/compression": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz",
- "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz",
+ "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==",
"license": "MIT",
"dependencies": {
"bytes": "3.1.2",
"compressible": "~2.0.18",
"debug": "2.6.9",
"negotiator": "~0.6.4",
- "on-headers": "~1.0.2",
+ "on-headers": "~1.1.0",
"safe-buffer": "5.2.1",
"vary": "~1.1.2"
},
@@ -11872,9 +11872,9 @@
}
},
"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==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz",
+ "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
From 88ddc7cbe1cf23b45dd4349a357f60d9bfcaa1a6 Mon Sep 17 00:00:00 2001
From: Haley Elmendorf <31392893+haleychaas@users.noreply.github.com>
Date: Mon, 21 Jul 2025 13:43:07 -0500
Subject: [PATCH 33/85] Docs: Update language around AI Apps (#1335)
---
docs/content/concepts/ai-apps.md | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/docs/content/concepts/ai-apps.md b/docs/content/concepts/ai-apps.md
index d30513bdd..a8da2bf1f 100644
--- a/docs/content/concepts/ai-apps.md
+++ b/docs/content/concepts/ai-apps.md
@@ -1,5 +1,5 @@
---
-title: AI Apps
+title: Using AI in Apps
lang: en
slug: /concepts/ai-apps
---
@@ -8,7 +8,7 @@ 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!
+The Agents & AI Apps feature comprises a unique messaging experience for Slack. If you're unfamiliar with using the Agents & AI Apps feature 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!
## Configuring your app to support AI features {#configuring-your-app}
@@ -25,12 +25,12 @@ AI apps comprise a new messaging experience for Slack. If you're unfamiliar with
* [`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!
+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!
:::
## The `Assistant` class instance {#assistant-class}
-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:
+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:
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.
@@ -107,13 +107,13 @@ Refer to the [module document](https://tools.slack.dev/bolt-python/api-docs/slac
## 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-enabled 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.
+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 AI app thread {#block-kit-interactions}
+### Block Kit interactions in the 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.
From beba392234ca149a8f3b2cd65141619a09aeea3d Mon Sep 17 00:00:00 2001
From: Eden Zimbelman
Date: Thu, 24 Jul 2025 19:49:22 -0700
Subject: [PATCH 34/85] docs: filter against bot_id in listener middleware
example (#1339)
---
docs/content/concepts/listener-middleware.md | 11 +++++------
.../current/concepts/listener-middleware.md | 13 ++++++-------
2 files changed, 11 insertions(+), 13 deletions(-)
diff --git a/docs/content/concepts/listener-middleware.md b/docs/content/concepts/listener-middleware.md
index 338cb0d4f..3507d7d97 100644
--- a/docs/content/concepts/listener-middleware.md
+++ b/docs/content/concepts/listener-middleware.md
@@ -11,11 +11,10 @@ If your listener middleware is a quite simple one, you can use a listener matche
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.
```python
-# Listener middleware which filters out messages with "bot_message" subtype
+# Listener middleware which filters out messages from a bot
def no_bot_messages(message, next):
- subtype = message.get("subtype")
- if subtype != "bot_message":
- next()
+ if "bot_id" not in message:
+ next()
# This listener only receives messages from humans
@app.event(event="message", middleware=[no_bot_messages])
@@ -24,10 +23,10 @@ def log_message(logger, event):
# Listener matchers: simplified version of listener middleware
def no_bot_messages(message) -> bool:
- return message.get("subtype") != "bot_message"
+ return "bot_id" not in message
@app.event(
- event="message",
+ event="message",
matchers=[no_bot_messages]
# or matchers=[lambda message: message.get("subtype") != "bot_message"]
)
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/listener-middleware.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/listener-middleware.md
index 822b5ac63..a013dde42 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/listener-middleware.md
+++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/listener-middleware.md
@@ -11,11 +11,10 @@ slug: /concepts/listener-middleware
指定可能な引数の一覧はモジュールドキュメントを参考にしてください。
```python
-# "bot_message" サブタイプのメッセージを抽出するリスナーミドルウェア
+# ボットからのメッセージをフィルタリングするリスナーミドルウェア
def no_bot_messages(message, next):
- subtype = message.get("subtype")
- if subtype != "bot_message":
- next()
+ if "bot_id" not in message:
+ next()
# このリスナーは人間によって送信されたメッセージのみを受け取ります
@app.event(event="message", middleware=[no_bot_messages])
@@ -24,13 +23,13 @@ def log_message(logger, event):
# リスナーマッチャー: 簡略化されたバージョンのリスナーミドルウェア
def no_bot_messages(message) -> bool:
- return message.get("subtype") != "bot_message"
+ return "bot_id" not in message
@app.event(
- event="message",
+ event="message",
matchers=[no_bot_messages]
# or matchers=[lambda message: message.get("subtype") != "bot_message"]
)
def log_message(logger, event):
logger.info(f"(MSG) User: {event['user']}\nMessage: {event['text']}")
-```
\ No newline at end of file
+```
From df3c426093dd3349ba05dae49820e3709117b25b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 1 Aug 2025 16:53:42 -0400
Subject: [PATCH 35/85] chore(deps): update pytest requirement from
<8.4,>=6.2.5 to >=6.2.5,<8.5 (#1328)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: William Bergamin
---
requirements/testing_without_asyncio.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/requirements/testing_without_asyncio.txt b/requirements/testing_without_asyncio.txt
index 754889faf..d10c4345e 100644
--- a/requirements/testing_without_asyncio.txt
+++ b/requirements/testing_without_asyncio.txt
@@ -1,3 +1,3 @@
# pip install -r requirements/testing_without_asyncio.txt
-pytest>=6.2.5,<8.4 # https://github.com/tornadoweb/tornado/issues/3375
+pytest>=6.2.5,<8.5 # https://github.com/tornadoweb/tornado/issues/3375
pytest-cov>=3,<7
From 1b876abb16b1cd9f0a6bf8ab8decaaa7a179e85c Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 1 Aug 2025 15:42:14 -0700
Subject: [PATCH 36/85] chore(deps): bump mypy from 1.16.1 to 1.17.1 (#1343)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
requirements/tools.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/requirements/tools.txt b/requirements/tools.txt
index 0603319d7..c3a383a13 100644
--- a/requirements/tools.txt
+++ b/requirements/tools.txt
@@ -1,3 +1,3 @@
-mypy==1.16.1
+mypy==1.17.1
flake8==7.3.0
black==24.8.0 # Until we drop Python 3.6 support, we have to stay with this version
From dd4d622e8a407567dfbd22b0b36a741b51c574fd Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 1 Aug 2025 22:47:10 +0000
Subject: [PATCH 37/85] chore(deps): bump the react group in /docs with 2
updates (#1344)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
docs/package-lock.json | 18 +++++++++---------
docs/package.json | 4 ++--
2 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/docs/package-lock.json b/docs/package-lock.json
index 773665646..ec7f3558a 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -15,8 +15,8 @@
"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"
+ "react": "^19.1.1",
+ "react-dom": "^19.1.1"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.8.1",
@@ -13858,24 +13858,24 @@
}
},
"node_modules/react": {
- "version": "19.1.0",
- "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
- "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
+ "version": "19.1.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz",
+ "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==",
"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==",
+ "version": "19.1.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz",
+ "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==",
"license": "MIT",
"dependencies": {
"scheduler": "^0.26.0"
},
"peerDependencies": {
- "react": "^19.1.0"
+ "react": "^19.1.1"
}
},
"node_modules/react-fast-compare": {
diff --git a/docs/package.json b/docs/package.json
index def8214d8..b67d8a7a4 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -21,8 +21,8 @@
"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"
+ "react": "^19.1.1",
+ "react-dom": "^19.1.1"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.8.1",
From 9596797e55f56c92a07868595f002eb2751f0739 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 1 Aug 2025 23:45:47 +0000
Subject: [PATCH 38/85] chore(deps): bump slackapi/slack-github-action from
2.1.0 to 2.1.1 (#1345)
---
.github/workflows/tests.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 4fe757b1a..f53a603ff 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -89,7 +89,7 @@ jobs:
if: failure() && github.ref == 'refs/heads/main' && github.event_name != 'workflow_dispatch'
steps:
- name: Send notifications of failing tests
- uses: slackapi/slack-github-action@b0fa283ad8fea605de13dc3f449259339835fc52 # v2.1.0
+ uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a # v2.1.1
with:
errors: true
webhook: ${{ secrets.SLACK_REGRESSION_FAILURES_WEBHOOK_URL }}
From eb3a51923a38fda54f89515dd9e3853014ffaf64 Mon Sep 17 00:00:00 2001
From: Luke Russell <31357343+lukegalbraithrussell@users.noreply.github.com>
Date: Thu, 7 Aug 2025 12:04:46 -0700
Subject: [PATCH 39/85] Build: remove docusaurus configuration files (#1342)
---
.github/workflows/docs-deploy.yml | 65 -
README.md | 6 +-
docs/.gitignore | 3 -
docs/README.md | 129 -
docs/babel.config.js | 3 -
docs/content/concepts/custom-steps.md | 154 -
docs/content/concepts/web-api.md | 28 -
docs/docusaurus.config.js | 114 -
docs/english/_sidebar.json | 209 +
docs/{content => english}/building-an-app.md | 49 +-
.../concepts/acknowledge.md | 14 +-
docs/{content => english}/concepts/actions.md | 14 +-
.../{content => english}/concepts/adapters.md | 6 +-
docs/{content => english}/concepts/ai-apps.md | 62 +-
.../{content => english}/concepts/app-home.md | 14 +-
docs/{content => english}/concepts/async.md | 6 +-
.../concepts/authenticating-oauth.md | 12 +-
.../concepts/authorization.md | 8 +-
.../{content => english}/concepts/commands.md | 10 +-
docs/{content => english}/concepts/context.md | 6 +-
.../concepts/custom-adapters.md | 8 +-
.../concepts/custom-steps-dynamic-options.md | 32 +-
.../concepts/custom-steps.md | 16 +-
docs/{content => english}/concepts/errors.md | 6 +-
.../concepts/event-listening.md | 12 +-
.../concepts/global-middleware.md | 8 +-
.../concepts/lazy-listeners.md | 6 +-
.../concepts/listener-middleware.md | 8 +-
docs/{content => english}/concepts/logging.md | 6 +-
.../concepts/message-listening.md | 13 +-
.../concepts/message-sending.md | 12 +-
.../concepts/opening-modals.md | 12 +-
.../concepts/select-menu-options.md | 14 +-
.../concepts/shortcuts.md | 18 +-
.../concepts/socket-mode.md | 10 +-
.../concepts/token-rotation.md | 10 +-
.../concepts/updating-pushing-views.md | 14 +-
.../concepts/view-submissions.md | 16 +-
docs/english/concepts/web-api.md | 22 +
docs/{content => english}/getting-started.md | 39 +-
docs/{content => english}/index.md | 2 +-
.../legacy}/steps-from-apps.md | 38 +-
.../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 | 26 +-
.../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 | 24 +-
.../add-step.png | Bin
.../app-message.png | Bin
.../custom-steps-workflow-builder-existing.md | 26 +-
.../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 | 49 +-
.../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 | 12 +-
.../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 | 11 +-
.../tutorial}/modals/slash_command.png | Bin
docs/footerConfig.js | 21 -
docs/i18n/ja-jp/README.md | 121 -
docs/i18n/ja-jp/code.json | 321 -
.../current.json | 78 -
.../current/concepts/app-home.md | 43 -
.../current/concepts/web-api.md | 23 -
.../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 | 12 +-
.../current => japanese}/concepts/actions.md | 14 +-
.../current => japanese}/concepts/adapters.md | 6 +-
docs/japanese/concepts/app-home.md | 40 +
.../concepts/assistant.md | 16 +-
.../current => japanese}/concepts/async.md | 6 +-
.../concepts/authenticating-oauth.md | 12 +-
.../concepts/authorization.md | 8 +-
.../current => japanese}/concepts/commands.md | 10 +-
.../current => japanese}/concepts/context.md | 6 +-
.../concepts/custom-adapters.md | 8 +-
.../current => japanese}/concepts/errors.md | 6 +-
.../concepts/event-listening.md | 12 +-
.../concepts/global-middleware.md | 9 +-
.../concepts/lazy-listeners.md | 6 +-
.../concepts/listener-middleware.md | 8 +-
.../current => japanese}/concepts/logging.md | 6 +-
.../concepts/message-listening.md | 10 +-
.../concepts/message-sending.md | 12 +-
.../concepts/opening-modals.md | 12 +-
.../concepts/select-menu-options.md | 14 +-
.../concepts/shortcuts.md | 18 +-
.../concepts/socket-mode.md | 10 +-
.../concepts/token-rotation.md | 10 +-
.../concepts/updating-pushing-views.md | 14 +-
.../concepts/view-submissions.md | 16 +-
docs/japanese/concepts/web-api.md | 19 +
.../current => japanese}/getting-started.md | 62 +-
.../legacy/steps-from-apps.md | 30 +-
docs/navbarConfig.js | 97 -
docs/package-lock.json | 16738 ----------------
docs/package.json | 46 -
.../adapter/aiohttp/index.html | 0
.../adapter/asgi/aiohttp/index.html | 0
.../adapter/asgi/async_handler.html | 0
.../adapter/asgi/base_handler.html | 0
.../adapter/asgi/builtin/index.html | 0
.../adapter/asgi/http_request.html | 0
.../adapter/asgi/http_response.html | 0
.../adapter/asgi/index.html | 0
.../adapter/asgi/utils.html | 0
.../adapter/aws_lambda/chalice_handler.html | 0
.../chalice_lazy_listener_runner.html | 0
.../adapter/aws_lambda/handler.html | 0
.../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
.../adapter/bottle/handler.html | 0
.../adapter/bottle/index.html | 0
.../adapter/cherrypy/handler.html | 0
.../adapter/cherrypy/index.html | 0
.../adapter/django/handler.html | 0
.../adapter/django/index.html | 0
.../adapter/falcon/async_resource.html | 0
.../adapter/falcon/index.html | 0
.../adapter/falcon/resource.html | 0
.../adapter/fastapi/async_handler.html | 0
.../adapter/fastapi/index.html | 0
.../adapter/flask/handler.html | 0
.../adapter/flask/index.html | 0
.../google_cloud_functions/handler.html | 0
.../adapter/google_cloud_functions/index.html | 0
.../adapter/index.html | 0
.../adapter/pyramid/handler.html | 0
.../adapter/pyramid/index.html | 0
.../adapter/sanic/async_handler.html | 0
.../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
.../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
.../adapter/starlette/handler.html | 0
.../adapter/starlette/index.html | 0
.../adapter/tornado/async_handler.html | 0
.../adapter/tornado/handler.html | 0
.../adapter/tornado/index.html | 0
.../adapter/wsgi/handler.html | 0
.../adapter/wsgi/http_request.html | 0
.../adapter/wsgi/http_response.html | 0
.../adapter/wsgi/index.html | 0
.../adapter/wsgi/internals.html | 0
.../slack_bolt => reference}/app/app.html | 0
.../app/async_app.html | 0
.../app/async_server.html | 0
.../slack_bolt => reference}/app/index.html | 0
.../slack_bolt => reference}/async_app.html | 0
.../authorization/async_authorize.html | 0
.../authorization/async_authorize_args.html | 0
.../authorization/authorize.html | 0
.../authorization/authorize_args.html | 0
.../authorization/authorize_result.html | 0
.../authorization/index.html | 0
.../context/ack/ack.html | 0
.../context/ack/async_ack.html | 0
.../context/ack/index.html | 0
.../context/ack/internals.html | 0
.../assistant/assistant_utilities.html | 0
.../assistant/async_assistant_utilities.html | 0
.../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
.../context/async_context.html | 0
.../context/base_context.html | 0
.../context/complete/async_complete.html | 0
.../context/complete/complete.html | 0
.../context/complete/index.html | 0
.../context/context.html | 0
.../context/fail/async_fail.html | 0
.../context/fail/fail.html | 0
.../context/fail/index.html | 0
.../async_get_thread_context.html | 0
.../get_thread_context.html | 0
.../context/get_thread_context/index.html | 0
.../context/index.html | 0
.../context/respond/async_respond.html | 0
.../context/respond/index.html | 0
.../context/respond/internals.html | 0
.../context/respond/respond.html | 0
.../async_save_thread_context.html | 0
.../context/save_thread_context/index.html | 0
.../save_thread_context.html | 0
.../context/say/async_say.html | 0
.../context/say/index.html | 0
.../context/say/internals.html | 0
.../context/say/say.html | 0
.../context/set_status/async_set_status.html | 0
.../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
.../context/set_title/index.html | 0
.../context/set_title/set_title.html | 0
.../slack_bolt => reference}/error/index.html | 0
.../slack_bolt => reference}/index.html | 0
.../kwargs_injection/args.html | 0
.../kwargs_injection/async_args.html | 0
.../kwargs_injection/async_utils.html | 0
.../kwargs_injection/index.html | 0
.../kwargs_injection/utils.html | 0
.../lazy_listener/async_internals.html | 0
.../lazy_listener/async_runner.html | 0
.../lazy_listener/asyncio_runner.html | 0
.../lazy_listener/index.html | 0
.../lazy_listener/internals.html | 0
.../lazy_listener/runner.html | 0
.../lazy_listener/thread_runner.html | 0
.../listener/async_builtins.html | 0
.../listener/async_listener.html | 0
.../async_listener_completion_handler.html | 0
.../async_listener_error_handler.html | 0
.../async_listener_start_handler.html | 0
.../listener/asyncio_runner.html | 0
.../listener/builtins.html | 0
.../listener/custom_listener.html | 0
.../listener/index.html | 0
.../listener/listener.html | 0
.../listener/listener_completion_handler.html | 0
.../listener/listener_error_handler.html | 0
.../listener/listener_start_handler.html | 0
.../listener/thread_runner.html | 0
.../listener_matcher/async_builtins.html | 0
.../async_listener_matcher.html | 0
.../listener_matcher/builtins.html | 0
.../custom_listener_matcher.html | 0
.../listener_matcher/index.html | 0
.../listener_matcher/listener_matcher.html | 0
.../logger/index.html | 0
.../logger/messages.html | 0
.../middleware/assistant/assistant.html | 0
.../middleware/assistant/async_assistant.html | 0
.../middleware/assistant/index.html | 0
.../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
.../middleware/index.html | 0
.../async_message_listener_matches.html | 0
.../message_listener_matches/index.html | 0
.../message_listener_matches.html | 0
.../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
.../oauth/async_internals.html | 0
.../oauth/async_oauth_flow.html | 0
.../oauth/async_oauth_settings.html | 0
.../oauth/callback_options.html | 0
.../slack_bolt => reference}/oauth/index.html | 0
.../oauth/internals.html | 0
.../oauth/oauth_flow.html | 0
.../oauth/oauth_settings.html | 0
.../request/async_internals.html | 0
.../request/async_request.html | 0
.../request/index.html | 0
.../request/internals.html | 0
.../request/payload_utils.html | 0
.../request/request.html | 0
.../response/index.html | 0
.../response/response.html | 0
.../util/async_utils.html | 0
.../slack_bolt => reference}/util/index.html | 0
.../slack_bolt => reference}/util/utils.html | 0
.../slack_bolt => reference}/version.html | 0
.../workflows/index.html | 0
.../workflows/step/async_step.html | 0
.../workflows/step/async_step_middleware.html | 0
.../workflows/step/index.html | 0
.../workflows/step/internals.html | 0
.../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/sidebars.js | 127 -
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 -
examples/getting_started/app.py | 2 +-
scripts/generate_api_docs.sh | 6 +-
379 files changed, 679 insertions(+), 19452 deletions(-)
delete mode 100644 .github/workflows/docs-deploy.yml
delete mode 100644 docs/.gitignore
delete mode 100644 docs/README.md
delete mode 100644 docs/babel.config.js
delete mode 100644 docs/content/concepts/custom-steps.md
delete mode 100644 docs/content/concepts/web-api.md
delete mode 100644 docs/docusaurus.config.js
create mode 100644 docs/english/_sidebar.json
rename docs/{content => english}/building-an-app.md (81%)
rename docs/{content => english}/concepts/acknowledge.md (60%)
rename docs/{content => english}/concepts/actions.md (74%)
rename docs/{content => english}/concepts/adapters.md (97%)
rename docs/{content => english}/concepts/ai-apps.md (79%)
rename docs/{content => english}/concepts/app-home.md (52%)
rename docs/{content => english}/concepts/async.md (97%)
rename docs/{content => english}/concepts/authenticating-oauth.md (89%)
rename docs/{content => english}/concepts/authorization.md (94%)
rename docs/{content => english}/concepts/commands.md (74%)
rename docs/{content => english}/concepts/context.md (96%)
rename docs/{content => english}/concepts/custom-adapters.md (92%)
rename docs/{content => english}/concepts/custom-steps-dynamic-options.md (75%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => english}/concepts/custom-steps.md (86%)
rename docs/{content => english}/concepts/errors.md (90%)
rename docs/{content => english}/concepts/event-listening.md (60%)
rename docs/{content => english}/concepts/global-middleware.md (82%)
rename docs/{content => english}/concepts/lazy-listeners.md (98%)
rename docs/{content => english}/concepts/listener-middleware.md (83%)
rename docs/{content => english}/concepts/logging.md (94%)
rename docs/{content => english}/concepts/message-listening.md (59%)
rename docs/{content => english}/concepts/message-sending.md (77%)
rename docs/{content => english}/concepts/opening-modals.md (68%)
rename docs/{content => english}/concepts/select-menu-options.md (67%)
rename docs/{content => english}/concepts/shortcuts.md (74%)
rename docs/{content => english}/concepts/socket-mode.md (78%)
rename docs/{content => english}/concepts/token-rotation.md (73%)
rename docs/{content => english}/concepts/updating-pushing-views.md (64%)
rename docs/{content => english}/concepts/view-submissions.md (74%)
create mode 100644 docs/english/concepts/web-api.md
rename docs/{content => english}/getting-started.md (80%)
rename docs/{content => english}/index.md (93%)
rename docs/{content/concepts => english/legacy}/steps-from-apps.md (67%)
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 (88%)
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 (86%)
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 (91%)
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 (90%)
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 (94%)
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 (83%)
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-plugin-content-docs/current.json
delete mode 100644 docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/app-home.md
delete mode 100644 docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/web-api.md
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 (69%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/actions.md (76%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/adapters.md (97%)
create mode 100644 docs/japanese/concepts/app-home.md
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/assistant.md (91%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/async.md (97%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/authenticating-oauth.md (89%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/authorization.md (94%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/commands.md (72%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/context.md (96%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/custom-adapters.md (90%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/errors.md (92%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/event-listening.md (50%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/global-middleware.md (81%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/lazy-listeners.md (98%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/listener-middleware.md (83%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/logging.md (95%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/message-listening.md (55%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/message-sending.md (74%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/opening-modals.md (62%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/select-menu-options.md (68%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/shortcuts.md (77%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/socket-mode.md (86%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/token-rotation.md (67%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/updating-pushing-views.md (60%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/concepts/view-submissions.md (72%)
create mode 100644 docs/japanese/concepts/web-api.md
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/getting-started.md (80%)
rename docs/{i18n/ja-jp/docusaurus-plugin-content-docs/current => japanese}/legacy/steps-from-apps.md (71%)
delete mode 100644 docs/navbarConfig.js
delete mode 100644 docs/package-lock.json
delete mode 100644 docs/package.json
rename docs/{static/api-docs/slack_bolt => reference}/adapter/aiohttp/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/asgi/aiohttp/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/asgi/async_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/asgi/base_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/asgi/builtin/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/asgi/http_request.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/asgi/http_response.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/asgi/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/asgi/utils.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/aws_lambda/chalice_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/aws_lambda/chalice_lazy_listener_runner.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/aws_lambda/handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/aws_lambda/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/aws_lambda/internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/aws_lambda/lambda_s3_oauth_flow.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/aws_lambda/lazy_listener_runner.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/aws_lambda/local_lambda_client.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/bottle/handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/bottle/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/cherrypy/handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/cherrypy/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/django/handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/django/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/falcon/async_resource.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/falcon/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/falcon/resource.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/fastapi/async_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/fastapi/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/flask/handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/flask/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/google_cloud_functions/handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/google_cloud_functions/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/pyramid/handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/pyramid/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/sanic/async_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/sanic/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/socket_mode/aiohttp/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/socket_mode/async_base_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/socket_mode/async_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/socket_mode/async_internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/socket_mode/base_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/socket_mode/builtin/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/socket_mode/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/socket_mode/internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/socket_mode/websocket_client/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/socket_mode/websockets/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/starlette/async_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/starlette/handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/starlette/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/tornado/async_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/tornado/handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/tornado/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/wsgi/handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/wsgi/http_request.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/wsgi/http_response.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/wsgi/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/adapter/wsgi/internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/app/app.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/app/async_app.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/app/async_server.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/app/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/async_app.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/authorization/async_authorize.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/authorization/async_authorize_args.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/authorization/authorize.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/authorization/authorize_args.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/authorization/authorize_result.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/authorization/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/ack/ack.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/ack/async_ack.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/ack/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/ack/internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/assistant/assistant_utilities.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/assistant/async_assistant_utilities.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/assistant/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/assistant/internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/assistant/thread_context/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/assistant/thread_context_store/async_store.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/assistant/thread_context_store/default_async_store.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/assistant/thread_context_store/default_store.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/assistant/thread_context_store/file/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/assistant/thread_context_store/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/assistant/thread_context_store/store.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/async_context.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/base_context.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/complete/async_complete.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/complete/complete.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/complete/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/context.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/fail/async_fail.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/fail/fail.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/fail/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/get_thread_context/async_get_thread_context.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/get_thread_context/get_thread_context.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/get_thread_context/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/respond/async_respond.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/respond/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/respond/internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/respond/respond.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/save_thread_context/async_save_thread_context.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/save_thread_context/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/save_thread_context/save_thread_context.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/say/async_say.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/say/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/say/internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/say/say.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/set_status/async_set_status.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/set_status/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/set_status/set_status.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/set_suggested_prompts/async_set_suggested_prompts.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/set_suggested_prompts/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/set_suggested_prompts/set_suggested_prompts.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/set_title/async_set_title.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/set_title/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/context/set_title/set_title.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/error/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/kwargs_injection/args.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/kwargs_injection/async_args.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/kwargs_injection/async_utils.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/kwargs_injection/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/kwargs_injection/utils.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/lazy_listener/async_internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/lazy_listener/async_runner.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/lazy_listener/asyncio_runner.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/lazy_listener/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/lazy_listener/internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/lazy_listener/runner.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/lazy_listener/thread_runner.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener/async_builtins.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener/async_listener.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener/async_listener_completion_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener/async_listener_error_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener/async_listener_start_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener/asyncio_runner.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener/builtins.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener/custom_listener.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener/listener.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener/listener_completion_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener/listener_error_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener/listener_start_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener/thread_runner.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener_matcher/async_builtins.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener_matcher/async_listener_matcher.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener_matcher/builtins.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener_matcher/custom_listener_matcher.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener_matcher/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/listener_matcher/listener_matcher.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/logger/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/logger/messages.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/assistant/assistant.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/assistant/async_assistant.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/assistant/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/async_builtins.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/async_custom_middleware.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/async_middleware.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/async_middleware_error_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/attaching_function_token/async_attaching_function_token.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/attaching_function_token/attaching_function_token.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/attaching_function_token/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/authorization/async_authorization.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/authorization/async_internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/authorization/async_multi_teams_authorization.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/authorization/async_single_team_authorization.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/authorization/authorization.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/authorization/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/authorization/internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/authorization/multi_teams_authorization.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/authorization/single_team_authorization.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/custom_middleware.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/ignoring_self_events/async_ignoring_self_events.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/ignoring_self_events/ignoring_self_events.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/ignoring_self_events/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/message_listener_matches/async_message_listener_matches.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/message_listener_matches/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/message_listener_matches/message_listener_matches.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/middleware.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/middleware_error_handler.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/request_verification/async_request_verification.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/request_verification/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/request_verification/request_verification.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/ssl_check/async_ssl_check.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/ssl_check/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/ssl_check/ssl_check.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/url_verification/async_url_verification.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/url_verification/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/middleware/url_verification/url_verification.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/oauth/async_callback_options.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/oauth/async_internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/oauth/async_oauth_flow.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/oauth/async_oauth_settings.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/oauth/callback_options.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/oauth/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/oauth/internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/oauth/oauth_flow.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/oauth/oauth_settings.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/request/async_internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/request/async_request.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/request/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/request/internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/request/payload_utils.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/request/request.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/response/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/response/response.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/util/async_utils.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/util/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/util/utils.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/version.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/step/async_step.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/step/async_step_middleware.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/step/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/step/internals.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/step/step.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/step/step_middleware.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/step/utilities/async_complete.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/step/utilities/async_configure.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/step/utilities/async_fail.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/step/utilities/async_update.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/step/utilities/complete.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/step/utilities/configure.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/step/utilities/fail.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/step/utilities/index.html (100%)
rename docs/{static/api-docs/slack_bolt => reference}/workflows/step/utilities/update.html (100%)
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/.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
diff --git a/README.md b/README.md
index 7576597d5..c6b6a536c 100644
--- a/README.md
+++ b/README.md
@@ -10,11 +10,11 @@
-
+
-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://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
@@ -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/.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/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/content/concepts/custom-steps.md b/docs/content/concepts/custom-steps.md
deleted file mode 100644
index 52e3d76e2..000000000
--- a/docs/content/concepts/custom-steps.md
+++ /dev/null
@@ -1,154 +0,0 @@
----
-title: Listening and responding to custom steps
-sidebar_label: Custom Steps
-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.
-
-* `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.
-
-```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](/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).
-
-```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](https://docs.slack.dev/interactivity/handling-user-interaction).
diff --git a/docs/content/concepts/web-api.md b/docs/content/concepts/web-api.md
deleted file mode 100644
index 18b41a029..000000000
--- a/docs/content/concepts/web-api.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Using the Web API
-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.
-
-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.
-
-:::
-
-```python
-@app.message("wake me up")
-def say_hello(client, message):
- # Unix Epoch time for September 30, 2020 11:59:59 PM
- when_september_ends = 1601510399
- channel_id = message["channel"]
- client.chat_scheduleMessage(
- channel=channel_id,
- post_at=when_september_ends,
- text="Summer has come and passed"
- )
-```
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/_sidebar.json b/docs/english/_sidebar.json
new file mode 100644
index 000000000..d42868543
--- /dev/null
+++ b/docs/english/_sidebar.json
@@ -0,0 +1,209 @@
+[
+ {
+ "type": "doc",
+ "id": "tools/bolt-python/index",
+ "label": "Bolt for Python",
+ "className": "sidebar-title"
+ },
+ "tools/bolt-python/getting-started",
+ { "type": "html", "value": "" },
+ "tools/bolt-python/building-an-app",
+ {
+ "type": "category",
+ "label": "Slack API calls",
+ "items": [
+ "tools/bolt-python/concepts/message-sending",
+ "tools/bolt-python/concepts/web-api"
+ ]
+ },
+ {
+ "type": "category",
+ "label": "Events",
+ "items": [
+ "tools/bolt-python/concepts/message-listening",
+ "tools/bolt-python/concepts/event-listening"
+ ]
+ },
+ {
+ "type": "category",
+ "label": "App UI & Interactivity",
+ "items": [
+ "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"
+ ]
+ },
+ "tools/bolt-python/concepts/ai-apps",
+ {
+ "type": "category",
+ "label": "Custom Steps",
+ "items": [
+ "tools/bolt-python/concepts/custom-steps",
+ "tools/bolt-python/concepts/custom-steps-dynamic-options"
+ ]
+ },
+ {
+ "type": "category",
+ "label": "App Configuration",
+ "items": [
+ "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": [
+ "tools/bolt-python/concepts/global-middleware",
+ "tools/bolt-python/concepts/listener-middleware",
+ "tools/bolt-python/concepts/context"
+ ]
+ },
+ "tools/bolt-python/concepts/lazy-listeners",
+ {
+ "type": "category",
+ "label": "Adaptors",
+ "items": [
+ "tools/bolt-python/concepts/adapters",
+ "tools/bolt-python/concepts/custom-adapters"
+ ]
+ },
+ {
+ "type": "category",
+ "label": "Authorization & Security",
+ "items": [
+ "tools/bolt-python/concepts/authenticating-oauth",
+ "tools/bolt-python/concepts/authorization",
+ "tools/bolt-python/concepts/token-rotation"
+ ]
+ },
+ {
+ "type": "category",
+ "label": "Legacy",
+ "items": ["tools/bolt-python/legacy/steps-from-apps"]
+ },
+ { "type": "html", "value": "" },
+ {
+ "type": "category",
+ "label": "Tutorials",
+ "items": [
+ "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/tools/bolt-python/reference/index.html"
+ },
+ { "type": "html", "value": "" },
+ {
+ "type": "category",
+ "label": "日本語 (日本)",
+ "items": [
+ "tools/bolt-python/ja-jp/getting-started",
+ {
+ "type": "category",
+ "label": "Slack API コール",
+ "items": [
+ "tools/bolt-python/ja-jp/concepts/message-sending",
+ "tools/bolt-python/ja-jp/concepts/web-api"
+ ]
+ },
+ {
+ "type": "category",
+ "label": "イベント API",
+ "items": [
+ "tools/bolt-python/ja-jp/concepts/message-listening",
+ "tools/bolt-python/ja-jp/concepts/event-listening"
+ ]
+ },
+ {
+ "type": "category",
+ "label": "インタラクティビティ & ショートカット",
+ "items": [
+ "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": [
+ "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": [
+ "tools/bolt-python/ja-jp/concepts/global-middleware",
+ "tools/bolt-python/ja-jp/concepts/listener-middleware",
+ "tools/bolt-python/ja-jp/concepts/context"
+ ]
+ },
+ "tools/bolt-python/ja-jp/concepts/lazy-listeners",
+ {
+ "type": "category",
+ "label": "アダプター",
+ "items": [
+ "tools/bolt-python/ja-jp/concepts/adapters",
+ "tools/bolt-python/ja-jp/concepts/custom-adapters"
+ ]
+ },
+ {
+ "type": "category",
+ "label": "認可 & セキュリティ",
+ "items": [
+ "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": ["tools/bolt-python/ja-jp/legacy/steps-from-apps"]
+ }
+ ]
+ },
+ { "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/content/building-an-app.md b/docs/english/building-an-app.md
similarity index 81%
rename from docs/content/building-an-app.md
rename to docs/english/building-an-app.md
index deb3146b9..87b26163b 100644
--- a/docs/content/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
---
@@ -24,31 +23,31 @@ 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.
-
+
Look around, add an app icon and description, and then let's start configuring your app 🔩
---
### 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.
4. Once you authorize the installation, you'll land on the **OAuth & Permissions** page and see a **Bot User OAuth Access 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.
@@ -56,7 +55,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 +103,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 +141,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 +168,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](/app-management/hosting-slack-apps).
:::
@@ -181,10 +180,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 +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://tools.slack.dev/bolt-python/api-docs/slack_bolt/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
@@ -234,7 +233,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/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
@@ -268,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!
:::
@@ -476,8 +475,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()`](/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](/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](/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](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/content/concepts/acknowledge.md b/docs/english/concepts/acknowledge.md
similarity index 60%
rename from docs/content/concepts/acknowledge.md
rename to docs/english/concepts/acknowledge.md
index 5e5c0ed25..7d91e0851 100644
--- a/docs/content/concepts/acknowledge.md
+++ b/docs/english/concepts/acknowledge.md
@@ -1,22 +1,16 @@
----
-title: Acknowledging requests
-lang: en
-slug: /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.
-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](/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)](/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.]
:::
-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/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/content/concepts/actions.md b/docs/english/concepts/actions.md
similarity index 74%
rename from docs/content/concepts/actions.md
rename to docs/english/concepts/actions.md
index 018642b4a..d7dfa6ba1 100644
--- a/docs/content/concepts/actions.md
+++ b/docs/english/concepts/actions.md
@@ -1,8 +1,4 @@
----
-title: Listening & responding to actions
-lang: en
-slug: /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.
@@ -10,9 +6,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](/tools/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/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
@@ -49,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://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/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
@@ -62,7 +58,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/content/concepts/adapters.md b/docs/english/concepts/adapters.md
similarity index 97%
rename from docs/content/concepts/adapters.md
rename to docs/english/concepts/adapters.md
index ad4303b15..321dae0ab 100644
--- a/docs/content/concepts/adapters.md
+++ b/docs/english/concepts/adapters.md
@@ -1,8 +1,4 @@
----
-title: Adapters
-lang: en
-slug: /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/content/concepts/ai-apps.md b/docs/english/concepts/ai-apps.md
similarity index 79%
rename from docs/content/concepts/ai-apps.md
rename to docs/english/concepts/ai-apps.md
index a8da2bf1f..b294c6688 100644
--- a/docs/content/concepts/ai-apps.md
+++ b/docs/english/concepts/ai-apps.md
@@ -1,40 +1,36 @@
----
-title: Using AI in Apps
-lang: en
-slug: /concepts/ai-apps
----
+# 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.
:::
-The Agents & AI Apps feature comprises a unique messaging experience for Slack. If you're unfamiliar with using the Agents & AI Apps feature 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!
+The Agents & AI Apps feature comprises a unique messaging experience for Slack. If you're unfamiliar with using the Agents & AI Apps feature 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_ 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!
-:::
+:::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}
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:
-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
@@ -97,25 +93,25 @@ 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/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`](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.]
-:::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.
+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}
-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 +237,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 +252,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/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/content/concepts/app-home.md b/docs/english/concepts/app-home.md
similarity index 52%
rename from docs/content/concepts/app-home.md
rename to docs/english/concepts/app-home.md
index d29bfc4d6..8b0e2cf11 100644
--- a/docs/content/concepts/app-home.md
+++ b/docs/english/concepts/app-home.md
@@ -1,14 +1,10 @@
----
-title: Publishing views to App Home
-lang: en
-slug: /concepts/app-home
----
+# Publishing views to 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.publish) 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/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):
@@ -32,7 +28,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/content/concepts/async.md b/docs/english/concepts/async.md
similarity index 97%
rename from docs/content/concepts/async.md
rename to docs/english/concepts/async.md
index 197377f93..e6ae28fc6 100644
--- a/docs/content/concepts/async.md
+++ b/docs/english/concepts/async.md
@@ -1,8 +1,4 @@
----
-title: Using async (asyncio)
-lang: en
-slug: /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/content/concepts/authenticating-oauth.md b/docs/english/concepts/authenticating-oauth.md
similarity index 89%
rename from docs/content/concepts/authenticating-oauth.md
rename to docs/english/concepts/authenticating-oauth.md
index 1fabe3522..88b422949 100644
--- a/docs/content/concepts/authenticating-oauth.md
+++ b/docs/english/concepts/authenticating-oauth.md
@@ -1,18 +1,14 @@
----
-title: Authenticating with OAuth
-lang: en
-slug: /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](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](/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.
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/content/concepts/authorization.md b/docs/english/concepts/authorization.md
similarity index 94%
rename from docs/content/concepts/authorization.md
rename to docs/english/concepts/authorization.md
index 4c293b5c2..242a86b39 100644
--- a/docs/content/concepts/authorization.md
+++ b/docs/english/concepts/authorization.md
@@ -1,12 +1,8 @@
----
-title: Authorization
-lang: en
-slug: /concepts/authorization
----
+# 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](/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/content/concepts/commands.md b/docs/english/concepts/commands.md
similarity index 74%
rename from docs/content/concepts/commands.md
rename to docs/english/concepts/commands.md
index 4c99f6628..81167fb83 100644
--- a/docs/content/concepts/commands.md
+++ b/docs/english/concepts/commands.md
@@ -1,18 +1,14 @@
----
-title: Listening & responding to commands
-lang: en
-slug: /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`.
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](/tools/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/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/content/concepts/context.md b/docs/english/concepts/context.md
similarity index 96%
rename from docs/content/concepts/context.md
rename to docs/english/concepts/context.md
index cf7fa45f1..fb134c896 100644
--- a/docs/content/concepts/context.md
+++ b/docs/english/concepts/context.md
@@ -1,8 +1,4 @@
----
-title: Adding context
-lang: en
-slug: /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/content/concepts/custom-adapters.md b/docs/english/concepts/custom-adapters.md
similarity index 92%
rename from docs/content/concepts/custom-adapters.md
rename to docs/english/concepts/custom-adapters.md
index 55c73130d..62532e7cd 100644
--- a/docs/content/concepts/custom-adapters.md
+++ b/docs/english/concepts/custom-adapters.md
@@ -1,10 +1,6 @@
----
-title: Custom adapters
-lang: en
-slug: /concepts/custom-adapters
----
+# 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](/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/content/concepts/custom-steps-dynamic-options.md b/docs/english/concepts/custom-steps-dynamic-options.md
similarity index 75%
rename from docs/content/concepts/custom-steps-dynamic-options.md
rename to docs/english/concepts/custom-steps-dynamic-options.md
index cab3f7a61..9a152daa0 100644
--- a/docs/content/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`](/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`](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`](/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`](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`](/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`](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`](/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`](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`](/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`](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`](/tools/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`](/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,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`](/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](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](/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`](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`](/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}
-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/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)
@@ -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/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/custom-steps.md b/docs/english/concepts/custom-steps.md
similarity index 86%
rename from docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/custom-steps.md
rename to docs/english/concepts/custom-steps.md
index e022c3e38..720c53421 100644
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/custom-steps.md
+++ b/docs/english/concepts/custom-steps.md
@@ -1,17 +1,17 @@
---
-title: Listening and responding to custom steps
-lang: ja-jp
-slug: /concepts/custom-steps
+sidebar_label: 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.
+# 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.
* `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/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
@@ -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](/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](/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
@@ -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/handling-user-interaction).
diff --git a/docs/content/concepts/errors.md b/docs/english/concepts/errors.md
similarity index 90%
rename from docs/content/concepts/errors.md
rename to docs/english/concepts/errors.md
index d0e5cccad..ed41c5816 100644
--- a/docs/content/concepts/errors.md
+++ b/docs/english/concepts/errors.md
@@ -1,8 +1,4 @@
----
-title: Handling errors
-lang: en
-slug: /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/content/concepts/event-listening.md b/docs/english/concepts/event-listening.md
similarity index 60%
rename from docs/content/concepts/event-listening.md
rename to docs/english/concepts/event-listening.md
index 7ffa9e3a2..d7b8e5930 100644
--- a/docs/content/concepts/event-listening.md
+++ b/docs/english/concepts/event-listening.md
@@ -1,14 +1,10 @@
----
-title: Listening to events
-lang: en
-slug: /concepts/event-listening
----
+# Listening to events
-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/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")
@@ -23,7 +19,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/content/concepts/global-middleware.md b/docs/english/concepts/global-middleware.md
similarity index 82%
rename from docs/content/concepts/global-middleware.md
rename to docs/english/concepts/global-middleware.md
index ec748c000..dbcdeae99 100644
--- a/docs/content/concepts/global-middleware.md
+++ b/docs/english/concepts/global-middleware.md
@@ -1,14 +1,10 @@
----
-title: Global middleware
-lang: en
-slug: /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.
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/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/content/concepts/lazy-listeners.md b/docs/english/concepts/lazy-listeners.md
similarity index 98%
rename from docs/content/concepts/lazy-listeners.md
rename to docs/english/concepts/lazy-listeners.md
index d72c2f9c0..d775106b9 100644
--- a/docs/content/concepts/lazy-listeners.md
+++ b/docs/english/concepts/lazy-listeners.md
@@ -1,8 +1,4 @@
----
-title: Lazy listeners (FaaS)
-lang: en
-slug: /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/content/concepts/listener-middleware.md b/docs/english/concepts/listener-middleware.md
similarity index 83%
rename from docs/content/concepts/listener-middleware.md
rename to docs/english/concepts/listener-middleware.md
index 3507d7d97..c8bfc964e 100644
--- a/docs/content/concepts/listener-middleware.md
+++ b/docs/english/concepts/listener-middleware.md
@@ -1,14 +1,10 @@
----
-title: Listener middleware
-lang: en
-slug: /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.
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/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/content/concepts/logging.md b/docs/english/concepts/logging.md
similarity index 94%
rename from docs/content/concepts/logging.md
rename to docs/english/concepts/logging.md
index 5f82d168a..49e275d2d 100644
--- a/docs/content/concepts/logging.md
+++ b/docs/english/concepts/logging.md
@@ -1,8 +1,4 @@
----
-title: Logging
-lang: en
-slug: /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/content/concepts/message-listening.md b/docs/english/concepts/message-listening.md
similarity index 59%
rename from docs/content/concepts/message-listening.md
rename to docs/english/concepts/message-listening.md
index b2f8bc05c..be6e74678 100644
--- a/docs/content/concepts/message-listening.md
+++ b/docs/english/concepts/message-listening.md
@@ -1,16 +1,9 @@
----
-title: Listening to messages
-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`.
+# 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.
-:::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/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments.]
:::
diff --git a/docs/content/concepts/message-sending.md b/docs/english/concepts/message-sending.md
similarity index 77%
rename from docs/content/concepts/message-sending.md
rename to docs/english/concepts/message-sending.md
index b4a2f309e..228a7b6b8 100644
--- a/docs/content/concepts/message-sending.md
+++ b/docs/english/concepts/message-sending.md
@@ -1,14 +1,10 @@
----
-title: Sending messages
-lang: en
-slug: /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.
-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](/tools/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/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")
@@ -20,7 +16,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/content/concepts/opening-modals.md b/docs/english/concepts/opening-modals.md
similarity index 68%
rename from docs/content/concepts/opening-modals.md
rename to docs/english/concepts/opening-modals.md
index e7daceafc..1f053539f 100644
--- a/docs/content/concepts/opening-modals.md
+++ b/docs/english/concepts/opening-modals.md
@@ -1,16 +1,12 @@
----
-title: Opening modals
-lang: en
-slug: /concepts/opening-modals
----
+# 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/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments.
```python
# Listen for a shortcut invocation
diff --git a/docs/content/concepts/select-menu-options.md b/docs/english/concepts/select-menu-options.md
similarity index 67%
rename from docs/content/concepts/select-menu-options.md
rename to docs/english/concepts/select-menu-options.md
index d699e6370..40d29472c 100644
--- a/docs/content/concepts/select-menu-options.md
+++ b/docs/english/concepts/select-menu-options.md
@@ -1,19 +1,15 @@
----
-title: Listening & responding to select menu options
-lang: en
-slug: /concepts/options
----
+# Listening & responding to select menu 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()`](/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`.
-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/tools/bolt-python/reference/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/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/content/concepts/shortcuts.md b/docs/english/concepts/shortcuts.md
similarity index 74%
rename from docs/content/concepts/shortcuts.md
rename to docs/english/concepts/shortcuts.md
index 6833d468d..b28f0b352 100644
--- a/docs/content/concepts/shortcuts.md
+++ b/docs/english/concepts/shortcuts.md
@@ -1,22 +1,18 @@
----
-title: Listening & responding to shortcuts
-lang: en
-slug: /concepts/shortcuts
----
+# Listening & responding to 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](/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.
-⚠️ 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/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")
@@ -36,7 +32,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 +71,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/content/concepts/socket-mode.md b/docs/english/concepts/socket-mode.md
similarity index 78%
rename from docs/content/concepts/socket-mode.md
rename to docs/english/concepts/socket-mode.md
index 301fbf94e..5156f6e13 100644
--- a/docs/content/concepts/socket-mode.md
+++ b/docs/english/concepts/socket-mode.md
@@ -1,10 +1,6 @@
----
-title: Using Socket Mode
-lang: en
-slug: /concepts/socket-mode
----
+# Using 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 +34,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](/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/content/concepts/token-rotation.md b/docs/english/concepts/token-rotation.md
similarity index 73%
rename from docs/content/concepts/token-rotation.md
rename to docs/english/concepts/token-rotation.md
index 88af29ffa..96a41bb3c 100644
--- a/docs/content/concepts/token-rotation.md
+++ b/docs/english/concepts/token-rotation.md
@@ -1,13 +1,9 @@
----
-title: Token rotation
-lang: en
-slug: /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).
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](/tools/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/content/concepts/updating-pushing-views.md b/docs/english/concepts/updating-pushing-views.md
similarity index 64%
rename from docs/content/concepts/updating-pushing-views.md
rename to docs/english/concepts/updating-pushing-views.md
index aa1efa3fa..8c05e79c8 100644
--- a/docs/content/concepts/updating-pushing-views.md
+++ b/docs/english/concepts/updating-pushing-views.md
@@ -1,10 +1,6 @@
----
-title: Updating & pushing views
-lang: en
-slug: /concepts/updating-pushing-views
----
+# 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 +8,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](/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](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/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/content/concepts/view-submissions.md b/docs/english/concepts/view-submissions.md
similarity index 74%
rename from docs/content/concepts/view-submissions.md
rename to docs/english/concepts/view-submissions.md
index 60b78cd54..4ff4c2da7 100644
--- a/docs/content/concepts/view-submissions.md
+++ b/docs/english/concepts/view-submissions.md
@@ -1,10 +1,6 @@
----
-title: Listening to views
-lang: en
-slug: /concepts/view_submissions
----
+# Listening to views
-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 +19,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 +29,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 +58,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/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
new file mode 100644
index 000000000..9cf436851
--- /dev/null
+++ b/docs/english/concepts/web-api.md
@@ -0,0 +1,22 @@
+# 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.
+
+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/tools/bolt-python/reference/kwargs_injection/args.html) to learn the available listener arguments.]
+
+:::
+
+```python
+@app.message("wake me up")
+def say_hello(client, message):
+ # Unix Epoch time for September 30, 2020 11:59:59 PM
+ when_september_ends = 1601510399
+ channel_id = message["channel"]
+ client.chat_scheduleMessage(
+ channel=channel_id,
+ post_at=when_september_ends,
+ text="Summer has come and passed"
+ )
+```
diff --git a/docs/content/getting-started.md b/docs/english/getting-started.md
similarity index 80%
rename from docs/content/getting-started.md
rename to docs/english/getting-started.md
index a794f3176..ebdf47189 100644
--- a/docs/content/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!
@@ -14,20 +13,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](/tools/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**](/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](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](/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:
@@ -45,7 +44,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.
:::
@@ -133,9 +132,9 @@ 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:
-
+
-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](/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**.
@@ -149,7 +148,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.
:::
@@ -158,7 +157,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**:
-
+
3. Copy the bot token beginning with `xoxb` from the **OAuth & Permissions page** and then store it in a new environment variable:
@@ -252,7 +251,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.
@@ -265,7 +264,7 @@ $ slack app settings
This will open the following page in a web browser:
-
+
@@ -274,7 +273,7 @@ Browse to https://api.slack.com/apps and select your app "Getting Started Bolt A
This will open the following page:
-
+
@@ -287,14 +286,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](/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()`](/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()`](/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/content/index.md b/docs/english/index.md
similarity index 93%
rename from docs/content/index.md
rename to docs/english/index.md
index 33204bca1..212bd9690 100644
--- a/docs/content/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](/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/content/concepts/steps-from-apps.md b/docs/english/legacy/steps-from-apps.md
similarity index 67%
rename from docs/content/concepts/steps-from-apps.md
rename to docs/english/legacy/steps-from-apps.md
index 09becda0c..03b9fa8ff 100644
--- a/docs/content/concepts/steps-from-apps.md
+++ b/docs/english/legacy/steps-from-apps.md
@@ -1,20 +1,14 @@
----
-title: Steps from apps
-lang: en
-slug: /legacy/steps-from-apps
----
+# Steps from apps
-:::danger
+:::danger[Steps from Apps is a deprecated feature.]
-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](/workflows/), such as [custom steps for Bolt](/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](https://docs.slack.dev/workflows/), such as [custom steps for Bolt](https://docs.slack.dev/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:
@@ -24,7 +18,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
@@ -36,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://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/tools/bolt-python/reference/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/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
@@ -74,15 +68,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/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):
@@ -132,9 +126,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/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,13 +167,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/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/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 88%
rename from docs/content/tutorial/ai-chatbot.md
rename to docs/english/tutorial/ai-chatbot/ai-chatbot.md
index 7db10b722..fa4da90a7 100644
--- a/docs/content/tutorial/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:
@@ -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**.
-
+
## 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**.
-
+
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**.
-
+
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**.
-
+
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**.
-
+
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**.
-
+
When finished, click **Finish Up**, then click **Publish** to make the workflow available in your workspace.
@@ -149,9 +149,9 @@ 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.
-
+
-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`](/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
@@ -191,12 +191,12 @@ 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.
-
+
## Next steps {#next-steps}
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.
+* 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/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 86%
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..f310e75cc 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**
@@ -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**).
@@ -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**.
-
+
4. Select **Choose an event** under **Start the workflow...**, and then select **From a link in Slack**. Click **Continue**.
-
+
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**.
-
+
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**.
-
+
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.
-
+
3. Click **Allow** on the screen that appears.
-
+
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.
-
+
When finished, you can click the **Disconnect Account** button in the home tab to disconnect your app from your JIRA account.
@@ -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](/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](/tools/bolt-python/concepts/custom-steps-dynamic-options).
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 91%
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
index e5c584a4c..0441b033c 100644
--- 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
@@ -1,12 +1,10 @@
----
-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.
:::
-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](/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
@@ -28,7 +26,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**.
-
+
## Adding a new workflow step {#add-step}
@@ -54,19 +52,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.
-
+
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:
-
+
Remember this `callback_id`. We will use this later when implementing a function listener. Then add the input and output parameters:
-
+
-
+
Save your changes.
@@ -260,11 +258,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.
-
+
Select the step and choose the desired inputs and click **Save**.
-
+
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,12 +270,12 @@ 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.
-
+
## Next steps {#next-steps}
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](/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](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](/tools/deno-slack-sdk/tutorials/workflow-builder-custom-step/).
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 90%
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
index 9d01b8676..1dceed45a 100644
--- 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
@@ -1,12 +1,10 @@
----
-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.
:::
-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.
@@ -58,7 +56,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.
-
+
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.
@@ -70,11 +68,11 @@ 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.
-
+
### Tokens {#tokens}
@@ -85,17 +83,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**.
-
+
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.
-
+
You will then have a bot token. Again, copy that value and save it somewhere accessible.
-
+
💡 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.
@@ -120,8 +118,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}
@@ -130,15 +127,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**:
-
+
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:
-
+
Click the **Continue** button to confirm that this is workflow should start with a shortcut link:
-
+
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 +143,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:
-
+
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:
-
+
Configure the user input to be “Person who used this workflow”, then click the **Save** button:
-
+
Click the **Finish Up** button, then provide a name and description for your workflow.
Finally, click the **Publish** button:
-
+
Copy the shortcut link, then exit Workflow Builder and paste the link to a message in any channel you’re in:
-
+
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:
-
+
You should see a new direct message from your app:
-
+
The message from your app asks you to click the **Complete step** button:
-
+
Once you click the button, the direct message to you will be updated to let you know that the step interaction was successfully completed:
-
+
Now that we’ve gotten a feel for how we will use the custom step, let’s learn more about how function listeners work.
@@ -354,6 +351,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](/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](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](/tools/deno-slack-sdk/tutorials/workflow-builder-custom-step/).
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 94%
rename from docs/content/tutorial/custom-steps.md
rename to docs/english/tutorial/custom-steps.md
index 2486a49ef..66dc16198 100644
--- a/docs/content/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](/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.
@@ -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](/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](/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](/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.
@@ -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](/tools/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)](/tutorial/custom-steps-WB-new)
-* [Custom steps for Workflow Builder (existing app)](/tutorial/custom-steps-WB-existing)
+* [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/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 83%
rename from docs/content/tutorial/modals.md
rename to docs/english/tutorial/modals/modals.md
index b6d672d08..ee6d1e0d8 100644
--- a/docs/content/tutorial/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).
@@ -13,9 +12,9 @@ At the end of this tutorial, your final app will look like this:

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 +65,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 +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://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/tools/bolt-python/getting-started).
\ No newline at end of file
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: `
-
-
- `,
- },
- ],
- },
- ],
-};
-
-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-plugin-content-docs/current.json b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current.json
deleted file mode 100644
index eb3b5be26..000000000
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current.json
+++ /dev/null
@@ -1,78 +0,0 @@
-{
- "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://tools.slack.dev/bolt-python/api-docs/slack_bolt/"
- },
- "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"
- }
-}
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/app-home.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/app-home.md
deleted file mode 100644
index 2dc5fd6c0..000000000
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/app-home.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: ホームタブの更新
-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_opened` イベントをサブスクライブすると、ユーザーが App Home を開く操作をリッスンできます。
-
-指定可能な引数の一覧はモジュールドキュメントを参考にしてください。
-```python
-@app.event("app_home_opened")
-def update_home_tab(client, event, logger):
- try:
- # 組み込みのクライアントを使って views.publish を呼び出す
- client.views_publish(
- # イベントに関連づけられたユーザー ID を使用
- user_id=event["user"],
- # アプリの設定で予めホームタブが有効になっている必要がある
- view={
- "type": "home",
- "blocks": [
- {
- "type": "section",
- "text": {
- "type": "mrkdwn",
- "text": "*Welcome home, <@" + event["user"] + "> :house:*"
- }
- },
- {
- "type": "section",
- "text": {
- "type": "mrkdwn",
- "text":"Learn how home tabs can be more useful and interactive ."
- }
- }
- ]
- }
- )
- except Exception as e:
- logger.error(f"Error publishing home tab: {e}")
-```
\ No newline at end of file
diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/web-api.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/web-api.md
deleted file mode 100644
index 75953b5bd..000000000
--- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/concepts/web-api.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Web API の使い方
-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 からの応答情報を含むオブジェクトが返されます。
-
-Bolt の初期化に使用するトークンは `context` オブジェクトに設定されます。このトークンは、多くの Web API メソッドを呼び出す際に必要となります。
-
-指定可能な引数の一覧はモジュールドキュメントを参考にしてください。
-```python
-@app.message("wake me up")
-def say_hello(client, message):
- # 2020 年 9 月 30 日午後 11:59:59 を示す Unix エポック秒
- when_september_ends = 1601510399
- channel_id = message["channel"]
- client.chat_scheduleMessage(
- channel=channel_id,
- post_at=when_september_ends,
- text="Summer has come and passed"
- )
-```
\ No newline at end of file
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": "