dash-startup-loading-plugin 1.0.2__tar.gz → 1.0.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/MANIFEST.in +1 -0
  2. {dash_startup_loading_plugin-1.0.2/src/dash_startup_loading_plugin.egg-info → dash_startup_loading_plugin-1.0.3}/PKG-INFO +12 -8
  3. {dash_startup_loading_plugin-1.0.2/src/dash_startup_loading_plugin → dash_startup_loading_plugin-1.0.3}/README.md +11 -7
  4. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/README.zh-CN.md +9 -6
  5. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/pyproject.toml +1 -1
  6. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3/src/dash_startup_loading_plugin}/README.md +11 -7
  7. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin/README.zh-CN.md +9 -6
  8. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin/__init__.py +1 -1
  9. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin/plugin.py +1 -1
  10. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3/src/dash_startup_loading_plugin.egg-info}/PKG-INFO +12 -8
  11. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/tests/test_plugin.py +9 -0
  12. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/LICENSE +0 -0
  13. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/setup.cfg +0 -0
  14. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin/examples/__init__.py +0 -0
  15. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin/examples/__main__.py +0 -0
  16. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin/examples/antd.py +0 -0
  17. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin/examples/basic.py +0 -0
  18. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin/examples/cli.py +0 -0
  19. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin/examples/fac.py +0 -0
  20. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin/examples/mantine.py +0 -0
  21. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin/examples/shared.py +0 -0
  22. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin/resources/loading.css +0 -0
  23. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin/resources/loading.js +0 -0
  24. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin/resources/theme.js +0 -0
  25. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin.egg-info/SOURCES.txt +0 -0
  26. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin.egg-info/dependency_links.txt +0 -0
  27. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin.egg-info/entry_points.txt +0 -0
  28. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin.egg-info/requires.txt +0 -0
  29. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/src/dash_startup_loading_plugin.egg-info/top_level.txt +0 -0
  30. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/tests/test_documentation.py +0 -0
  31. {dash_startup_loading_plugin-1.0.2 → dash_startup_loading_plugin-1.0.3}/tests/test_examples.py +0 -0
@@ -1 +1,2 @@
1
1
  include README.zh-CN.md
2
+ include README.md
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dash-startup-loading-plugin
3
- Version: 1.0.2
3
+ Version: 1.0.3
4
4
  Summary: A configurable full-screen startup loading overlay for Dash apps, packaged as a Dash Hooks plugin.
5
5
  Author-email: Ethan Zhang <ethan.zhang2016@gmail.com>
6
6
  License-Expression: MIT
@@ -34,7 +34,7 @@ document.
34
34
  ## Installation
35
35
 
36
36
  ```bash
37
- pip install "dash-startup-loading-plugin>=1.0.2"
37
+ pip install "dash-startup-loading-plugin>=1.0.3"
38
38
  ```
39
39
 
40
40
  Dash discovers the plugin through its `dash_hooks` entry point. Installing the
@@ -62,6 +62,10 @@ if __name__ == "__main__":
62
62
  app.run(debug=True)
63
63
  ```
64
64
 
65
+ By default, the overlay only replaces Dash's built-in `._dash-loading`
66
+ animation and closes once Dash has rendered the application layout. Waiting
67
+ for lazy or asynchronous component placeholders is opt-in.
68
+
65
69
  Call `configure()` before creating `Dash` when custom behavior is needed:
66
70
 
67
71
  ```python
@@ -180,16 +184,16 @@ The overlay closes when:
180
184
  1. `root_selector` exists and no longer contains `._dash-loading`.
181
185
  2. The root contains rendered content.
182
186
  3. Every `required_selectors` entry exists.
183
- 4. No `pending_selector` node remains under the root.
187
+ 4. If `pending_selector` is configured, no matching node remains under the root.
184
188
  5. The conditions remain true for two animation frames.
185
189
 
186
190
  `timeout_ms` is a forced-dismiss fallback. `minimum_display_ms` applies to
187
191
  ready and manual dismissal, but does not delay a timeout.
188
192
 
189
- `pending_selector` delays dismissal while any matching element remains inside
190
- `root_selector`. It is useful for lazy or asynchronous placeholders that are
191
- mounted before the real content. Set it to an application-specific CSS
192
- selector, or use `None` when no pending-node check is needed:
193
+ `pending_selector` optionally delays dismissal while any matching element
194
+ remains inside `root_selector`. It is useful for lazy or asynchronous
195
+ placeholders that are mounted before the real content. The check is disabled
196
+ by default; opt in with an application-specific CSS selector:
193
197
 
194
198
  ```python
195
199
  configure(pending_selector="[data-async-placeholder]")
@@ -208,7 +212,7 @@ configure(pending_selector=None)
208
212
  | `aria_label` | `"Loading"` | Accessible status label. |
209
213
  | `root_selector` | `"#react-entry-point"` | Root observed for rendered content. |
210
214
  | `required_selectors` | `("#react-entry-point",)` | Selectors that must exist before dismissal. |
211
- | `pending_selector` | `"[data-dac-async-placeholder]"` | Selector checked under `root_selector`; dismissal waits until all matches disappear. Use `None` to disable. |
215
+ | `pending_selector` | `None` | Optional selector checked under `root_selector`; when configured, dismissal waits until all matches disappear. |
212
216
  | `timeout_ms` | `6000` | Forced-dismiss timeout; use `None` to disable. |
213
217
  | `minimum_display_ms` | `0` | Minimum display time. |
214
218
  | `fade_duration_ms` | `160` | Fade-out duration. |
@@ -20,7 +20,7 @@ document.
20
20
  ## Installation
21
21
 
22
22
  ```bash
23
- pip install "dash-startup-loading-plugin>=1.0.2"
23
+ pip install "dash-startup-loading-plugin>=1.0.3"
24
24
  ```
25
25
 
26
26
  Dash discovers the plugin through its `dash_hooks` entry point. Installing the
@@ -48,6 +48,10 @@ if __name__ == "__main__":
48
48
  app.run(debug=True)
49
49
  ```
50
50
 
51
+ By default, the overlay only replaces Dash's built-in `._dash-loading`
52
+ animation and closes once Dash has rendered the application layout. Waiting
53
+ for lazy or asynchronous component placeholders is opt-in.
54
+
51
55
  Call `configure()` before creating `Dash` when custom behavior is needed:
52
56
 
53
57
  ```python
@@ -166,16 +170,16 @@ The overlay closes when:
166
170
  1. `root_selector` exists and no longer contains `._dash-loading`.
167
171
  2. The root contains rendered content.
168
172
  3. Every `required_selectors` entry exists.
169
- 4. No `pending_selector` node remains under the root.
173
+ 4. If `pending_selector` is configured, no matching node remains under the root.
170
174
  5. The conditions remain true for two animation frames.
171
175
 
172
176
  `timeout_ms` is a forced-dismiss fallback. `minimum_display_ms` applies to
173
177
  ready and manual dismissal, but does not delay a timeout.
174
178
 
175
- `pending_selector` delays dismissal while any matching element remains inside
176
- `root_selector`. It is useful for lazy or asynchronous placeholders that are
177
- mounted before the real content. Set it to an application-specific CSS
178
- selector, or use `None` when no pending-node check is needed:
179
+ `pending_selector` optionally delays dismissal while any matching element
180
+ remains inside `root_selector`. It is useful for lazy or asynchronous
181
+ placeholders that are mounted before the real content. The check is disabled
182
+ by default; opt in with an application-specific CSS selector:
179
183
 
180
184
  ```python
181
185
  configure(pending_selector="[data-async-placeholder]")
@@ -194,7 +198,7 @@ configure(pending_selector=None)
194
198
  | `aria_label` | `"Loading"` | Accessible status label. |
195
199
  | `root_selector` | `"#react-entry-point"` | Root observed for rendered content. |
196
200
  | `required_selectors` | `("#react-entry-point",)` | Selectors that must exist before dismissal. |
197
- | `pending_selector` | `"[data-dac-async-placeholder]"` | Selector checked under `root_selector`; dismissal waits until all matches disappear. Use `None` to disable. |
201
+ | `pending_selector` | `None` | Optional selector checked under `root_selector`; when configured, dismissal waits until all matches disappear. |
198
202
  | `timeout_ms` | `6000` | Forced-dismiss timeout; use `None` to disable. |
199
203
  | `minimum_display_ms` | `0` | Minimum display time. |
200
204
  | `fade_duration_ms` | `160` | Fade-out duration. |
@@ -18,7 +18,7 @@
18
18
  ## 安装
19
19
 
20
20
  ```bash
21
- pip install "dash-startup-loading-plugin>=1.0.2"
21
+ pip install "dash-startup-loading-plugin>=1.0.3"
22
22
  ```
23
23
 
24
24
  Dash 会通过 `dash_hooks` entry point 自动发现插件。安装后,默认 loading
@@ -46,6 +46,9 @@ if __name__ == "__main__":
46
46
  app.run(debug=True)
47
47
  ```
48
48
 
49
+ 默认情况下,遮罩只替换 Dash 自带的 `._dash-loading` 动画,并在 Dash
50
+ 渲染出应用布局后关闭。等待懒加载或异步组件的占位节点消失属于可选行为。
51
+
49
52
  如需自定义行为,请在创建 `Dash` 实例前调用 `configure()`:
50
53
 
51
54
  ```python
@@ -160,15 +163,15 @@ dash-startup-loading-plugin examples.dash \
160
163
  1. `root_selector` 已存在,且内部不再包含 `._dash-loading`。
161
164
  2. 根节点中已有实际渲染内容。
162
165
  3. `required_selectors` 中的所有选择器都已匹配到节点。
163
- 4. 根节点中已不存在匹配 `pending_selector` 的节点。
166
+ 4. 如果配置了 `pending_selector`,根节点中已不存在匹配它的节点。
164
167
  5. 上述状态连续保持两个动画帧。
165
168
 
166
169
  `timeout_ms` 是强制关闭的安全兜底。`minimum_display_ms` 适用于正常就绪和
167
170
  手动关闭,但不会延迟 timeout。
168
171
 
169
- `pending_selector` 用于在异步或懒加载占位节点仍存在时延迟关闭遮罩。它只会
170
- 在 `root_selector` 内查找匹配节点。可以设置为应用自己的 CSS 选择器;如果
171
- 不需要检查占位节点,请设置为 `None`:
172
+ `pending_selector` 可用于在异步或懒加载占位节点仍存在时延迟关闭遮罩。它只会
173
+ 在 `root_selector` 内查找匹配节点。该检查默认关闭;如需等待异步组件加载完成,
174
+ 请显式设置为应用自己的 CSS 选择器:
172
175
 
173
176
  ```python
174
177
  configure(pending_selector="[data-async-placeholder]")
@@ -186,7 +189,7 @@ configure(pending_selector=None)
186
189
  | `aria_label` | `"Loading"` | 无障碍状态标签。 |
187
190
  | `root_selector` | `"#react-entry-point"` | 用于观察渲染内容的根节点。 |
188
191
  | `required_selectors` | `("#react-entry-point",)` | 关闭遮罩前必须存在的节点选择器。 |
189
- | `pending_selector` | `"[data-dac-async-placeholder]"` | `root_selector` 内检查;所有匹配节点消失后才允许关闭。设置为 `None` 可禁用。 |
192
+ | `pending_selector` | `None` | 可选的根节点内选择器;配置后,所有匹配节点消失才允许关闭。 |
190
193
  | `timeout_ms` | `6000` | 强制关闭超时;设置为 `None` 可禁用。 |
191
194
  | `minimum_display_ms` | `0` | 最短显示时间。 |
192
195
  | `fade_duration_ms` | `160` | 淡出时长。 |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dash-startup-loading-plugin"
7
- version = "1.0.2"
7
+ version = "1.0.3"
8
8
  description = "A configurable full-screen startup loading overlay for Dash apps, packaged as a Dash Hooks plugin."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -20,7 +20,7 @@ document.
20
20
  ## Installation
21
21
 
22
22
  ```bash
23
- pip install "dash-startup-loading-plugin>=1.0.2"
23
+ pip install "dash-startup-loading-plugin>=1.0.3"
24
24
  ```
25
25
 
26
26
  Dash discovers the plugin through its `dash_hooks` entry point. Installing the
@@ -48,6 +48,10 @@ if __name__ == "__main__":
48
48
  app.run(debug=True)
49
49
  ```
50
50
 
51
+ By default, the overlay only replaces Dash's built-in `._dash-loading`
52
+ animation and closes once Dash has rendered the application layout. Waiting
53
+ for lazy or asynchronous component placeholders is opt-in.
54
+
51
55
  Call `configure()` before creating `Dash` when custom behavior is needed:
52
56
 
53
57
  ```python
@@ -166,16 +170,16 @@ The overlay closes when:
166
170
  1. `root_selector` exists and no longer contains `._dash-loading`.
167
171
  2. The root contains rendered content.
168
172
  3. Every `required_selectors` entry exists.
169
- 4. No `pending_selector` node remains under the root.
173
+ 4. If `pending_selector` is configured, no matching node remains under the root.
170
174
  5. The conditions remain true for two animation frames.
171
175
 
172
176
  `timeout_ms` is a forced-dismiss fallback. `minimum_display_ms` applies to
173
177
  ready and manual dismissal, but does not delay a timeout.
174
178
 
175
- `pending_selector` delays dismissal while any matching element remains inside
176
- `root_selector`. It is useful for lazy or asynchronous placeholders that are
177
- mounted before the real content. Set it to an application-specific CSS
178
- selector, or use `None` when no pending-node check is needed:
179
+ `pending_selector` optionally delays dismissal while any matching element
180
+ remains inside `root_selector`. It is useful for lazy or asynchronous
181
+ placeholders that are mounted before the real content. The check is disabled
182
+ by default; opt in with an application-specific CSS selector:
179
183
 
180
184
  ```python
181
185
  configure(pending_selector="[data-async-placeholder]")
@@ -194,7 +198,7 @@ configure(pending_selector=None)
194
198
  | `aria_label` | `"Loading"` | Accessible status label. |
195
199
  | `root_selector` | `"#react-entry-point"` | Root observed for rendered content. |
196
200
  | `required_selectors` | `("#react-entry-point",)` | Selectors that must exist before dismissal. |
197
- | `pending_selector` | `"[data-dac-async-placeholder]"` | Selector checked under `root_selector`; dismissal waits until all matches disappear. Use `None` to disable. |
201
+ | `pending_selector` | `None` | Optional selector checked under `root_selector`; when configured, dismissal waits until all matches disappear. |
198
202
  | `timeout_ms` | `6000` | Forced-dismiss timeout; use `None` to disable. |
199
203
  | `minimum_display_ms` | `0` | Minimum display time. |
200
204
  | `fade_duration_ms` | `160` | Fade-out duration. |
@@ -18,7 +18,7 @@
18
18
  ## 安装
19
19
 
20
20
  ```bash
21
- pip install "dash-startup-loading-plugin>=1.0.2"
21
+ pip install "dash-startup-loading-plugin>=1.0.3"
22
22
  ```
23
23
 
24
24
  Dash 会通过 `dash_hooks` entry point 自动发现插件。安装后,默认 loading
@@ -46,6 +46,9 @@ if __name__ == "__main__":
46
46
  app.run(debug=True)
47
47
  ```
48
48
 
49
+ 默认情况下,遮罩只替换 Dash 自带的 `._dash-loading` 动画,并在 Dash
50
+ 渲染出应用布局后关闭。等待懒加载或异步组件的占位节点消失属于可选行为。
51
+
49
52
  如需自定义行为,请在创建 `Dash` 实例前调用 `configure()`:
50
53
 
51
54
  ```python
@@ -160,15 +163,15 @@ dash-startup-loading-plugin examples.dash \
160
163
  1. `root_selector` 已存在,且内部不再包含 `._dash-loading`。
161
164
  2. 根节点中已有实际渲染内容。
162
165
  3. `required_selectors` 中的所有选择器都已匹配到节点。
163
- 4. 根节点中已不存在匹配 `pending_selector` 的节点。
166
+ 4. 如果配置了 `pending_selector`,根节点中已不存在匹配它的节点。
164
167
  5. 上述状态连续保持两个动画帧。
165
168
 
166
169
  `timeout_ms` 是强制关闭的安全兜底。`minimum_display_ms` 适用于正常就绪和
167
170
  手动关闭,但不会延迟 timeout。
168
171
 
169
- `pending_selector` 用于在异步或懒加载占位节点仍存在时延迟关闭遮罩。它只会
170
- 在 `root_selector` 内查找匹配节点。可以设置为应用自己的 CSS 选择器;如果
171
- 不需要检查占位节点,请设置为 `None`:
172
+ `pending_selector` 可用于在异步或懒加载占位节点仍存在时延迟关闭遮罩。它只会
173
+ 在 `root_selector` 内查找匹配节点。该检查默认关闭;如需等待异步组件加载完成,
174
+ 请显式设置为应用自己的 CSS 选择器:
172
175
 
173
176
  ```python
174
177
  configure(pending_selector="[data-async-placeholder]")
@@ -186,7 +189,7 @@ configure(pending_selector=None)
186
189
  | `aria_label` | `"Loading"` | 无障碍状态标签。 |
187
190
  | `root_selector` | `"#react-entry-point"` | 用于观察渲染内容的根节点。 |
188
191
  | `required_selectors` | `("#react-entry-point",)` | 关闭遮罩前必须存在的节点选择器。 |
189
- | `pending_selector` | `"[data-dac-async-placeholder]"` | `root_selector` 内检查;所有匹配节点消失后才允许关闭。设置为 `None` 可禁用。 |
192
+ | `pending_selector` | `None` | 可选的根节点内选择器;配置后,所有匹配节点消失才允许关闭。 |
190
193
  | `timeout_ms` | `6000` | 强制关闭超时;设置为 `None` 可禁用。 |
191
194
  | `minimum_display_ms` | `0` | 最短显示时间。 |
192
195
  | `fade_duration_ms` | `160` | 淡出时长。 |
@@ -5,7 +5,7 @@ from importlib.metadata import PackageNotFoundError, version
5
5
  try:
6
6
  __version__ = version("dash-startup-loading-plugin")
7
7
  except PackageNotFoundError: # pragma: no cover - source tree fallback
8
- __version__ = "1.0.2"
8
+ __version__ = "1.0.3"
9
9
 
10
10
  from .plugin import (
11
11
  StartupLoadingConfig,
@@ -37,7 +37,7 @@ class StartupLoadingConfig:
37
37
  aria_label: str = "Loading"
38
38
  root_selector: str = "#react-entry-point"
39
39
  required_selectors: tuple[str, ...] = ("#react-entry-point",)
40
- pending_selector: str | None = "[data-dac-async-placeholder]"
40
+ pending_selector: str | None = None
41
41
  timeout_ms: int | None = 6000
42
42
  minimum_display_ms: int = 0
43
43
  fade_duration_ms: int = 160
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dash-startup-loading-plugin
3
- Version: 1.0.2
3
+ Version: 1.0.3
4
4
  Summary: A configurable full-screen startup loading overlay for Dash apps, packaged as a Dash Hooks plugin.
5
5
  Author-email: Ethan Zhang <ethan.zhang2016@gmail.com>
6
6
  License-Expression: MIT
@@ -34,7 +34,7 @@ document.
34
34
  ## Installation
35
35
 
36
36
  ```bash
37
- pip install "dash-startup-loading-plugin>=1.0.2"
37
+ pip install "dash-startup-loading-plugin>=1.0.3"
38
38
  ```
39
39
 
40
40
  Dash discovers the plugin through its `dash_hooks` entry point. Installing the
@@ -62,6 +62,10 @@ if __name__ == "__main__":
62
62
  app.run(debug=True)
63
63
  ```
64
64
 
65
+ By default, the overlay only replaces Dash's built-in `._dash-loading`
66
+ animation and closes once Dash has rendered the application layout. Waiting
67
+ for lazy or asynchronous component placeholders is opt-in.
68
+
65
69
  Call `configure()` before creating `Dash` when custom behavior is needed:
66
70
 
67
71
  ```python
@@ -180,16 +184,16 @@ The overlay closes when:
180
184
  1. `root_selector` exists and no longer contains `._dash-loading`.
181
185
  2. The root contains rendered content.
182
186
  3. Every `required_selectors` entry exists.
183
- 4. No `pending_selector` node remains under the root.
187
+ 4. If `pending_selector` is configured, no matching node remains under the root.
184
188
  5. The conditions remain true for two animation frames.
185
189
 
186
190
  `timeout_ms` is a forced-dismiss fallback. `minimum_display_ms` applies to
187
191
  ready and manual dismissal, but does not delay a timeout.
188
192
 
189
- `pending_selector` delays dismissal while any matching element remains inside
190
- `root_selector`. It is useful for lazy or asynchronous placeholders that are
191
- mounted before the real content. Set it to an application-specific CSS
192
- selector, or use `None` when no pending-node check is needed:
193
+ `pending_selector` optionally delays dismissal while any matching element
194
+ remains inside `root_selector`. It is useful for lazy or asynchronous
195
+ placeholders that are mounted before the real content. The check is disabled
196
+ by default; opt in with an application-specific CSS selector:
193
197
 
194
198
  ```python
195
199
  configure(pending_selector="[data-async-placeholder]")
@@ -208,7 +212,7 @@ configure(pending_selector=None)
208
212
  | `aria_label` | `"Loading"` | Accessible status label. |
209
213
  | `root_selector` | `"#react-entry-point"` | Root observed for rendered content. |
210
214
  | `required_selectors` | `("#react-entry-point",)` | Selectors that must exist before dismissal. |
211
- | `pending_selector` | `"[data-dac-async-placeholder]"` | Selector checked under `root_selector`; dismissal waits until all matches disappear. Use `None` to disable. |
215
+ | `pending_selector` | `None` | Optional selector checked under `root_selector`; when configured, dismissal waits until all matches disappear. |
212
216
  | `timeout_ms` | `6000` | Forced-dismiss timeout; use `None` to disable. |
213
217
  | `minimum_display_ms` | `0` | Minimum display time. |
214
218
  | `fade_duration_ms` | `160` | Fade-out duration. |
@@ -61,6 +61,15 @@ def test_injects_overlay_after_body_with_custom_attributes():
61
61
  assert result.count(" data-dash-loading ") == 1
62
62
  assert '<span class="dash-loading__spinner"' in result
63
63
  assert _data_config(result)["requiredSelectors"] == ["#react-entry-point"]
64
+ assert _data_config(result)["pendingSelector"] is None
65
+
66
+
67
+ def test_waiting_for_async_components_is_opt_in():
68
+ configure(pending_selector="[data-async-placeholder]")
69
+
70
+ result = _inject_overlay("<html><body><main></main></body></html>")
71
+
72
+ assert _data_config(result)["pendingSelector"] == "[data-async-placeholder]"
64
73
 
65
74
 
66
75
  def test_injection_is_idempotent_and_can_be_disabled():