plotly-cloud 0.1.0rc5__tar.gz → 0.2.1__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.
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/PKG-INFO +7 -12
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/README.md +3 -7
- plotly_cloud-0.2.1/plotly_cloud/__init__.py +3 -0
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/plotly_cloud/_api_types.py +22 -1
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/plotly_cloud/_cloud_env.py +2 -2
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/plotly_cloud/_commands.py +104 -7
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/plotly_cloud/_definitions.py +5 -3
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/plotly_cloud/_deploy.py +45 -6
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/plotly_cloud/_devtool_hooks.py +2 -17
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/plotly_cloud/_devtool_publish_rpc.py +22 -2
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/plotly_cloud/_oauth.py +3 -3
- plotly_cloud-0.2.1/plotly_cloud/_run_sync.py +34 -0
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/plotly_cloud/cli.py +0 -3
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/plotly_cloud/cloud-env.toml +1 -1
- plotly_cloud-0.2.1/plotly_cloud/cloud_devtools.js +15 -0
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/plotly_cloud/exceptions.py +2 -2
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/pyproject.toml +6 -5
- plotly_cloud-0.1.0rc5/plotly_cloud/__init__.py +0 -3
- plotly_cloud-0.1.0rc5/plotly_cloud/cloud_devtools.js +0 -15
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/.gitignore +0 -0
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/LICENSE +0 -0
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/plotly_cloud/_changes.py +0 -0
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/plotly_cloud/_parser.py +0 -0
- {plotly_cloud-0.1.0rc5 → plotly_cloud-0.2.1}/plotly_cloud/cloud_devtools.css +0 -0
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plotly-cloud
|
|
3
|
-
Version: 0.1
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.2.1
|
|
4
|
+
Summary: Python extension for Plotly Cloud with CLI and Dash dev tools integration
|
|
5
|
+
Project-URL: Repository, https://github.com/plotly/plotly-cloud-extension
|
|
5
6
|
License-File: LICENSE
|
|
6
7
|
Requires-Python: >=3.9
|
|
7
|
-
Requires-Dist: dash>=2.0
|
|
8
|
+
Requires-Dist: dash>=3.2.0
|
|
8
9
|
Requires-Dist: httpx<1.0.0,>=0.24.0
|
|
9
|
-
Requires-Dist: nest-asyncio>=1.6.0
|
|
10
|
-
Requires-Dist: rich-argparse>=1.7.1
|
|
11
10
|
Requires-Dist: rich>=10.0.0
|
|
12
11
|
Requires-Dist: tomli-w>=1.2.0
|
|
13
12
|
Requires-Dist: tomli>=2.2.1
|
|
14
13
|
Description-Content-Type: text/markdown
|
|
15
14
|
|
|
16
|
-
# Plotly Cloud
|
|
15
|
+
# Plotly Cloud Extension
|
|
17
16
|
|
|
18
|
-
A command-line interface
|
|
17
|
+
A Python extension for [Plotly Cloud](https://cloud.plotly.com) that provides both a command-line interface and Dash dev tools integration for publishing and managing Dash applications.
|
|
19
18
|
|
|
20
19
|
## Features
|
|
21
20
|
|
|
@@ -67,10 +66,6 @@ plotly publish --poll-status=false
|
|
|
67
66
|
plotly logout
|
|
68
67
|
```
|
|
69
68
|
|
|
70
|
-
## Environment Configuration
|
|
71
|
-
|
|
72
|
-
The CLI uses a `cloud-env.toml` file for environment-specific configuration (OAuth client IDs, API URLs). This file is gitignored and should be created during development or at packaging time.
|
|
73
|
-
|
|
74
69
|
## Usage
|
|
75
70
|
|
|
76
71
|
### Authentication Commands
|
|
@@ -275,7 +270,7 @@ If you prefer not to use Just:
|
|
|
275
270
|
### Project Structure
|
|
276
271
|
|
|
277
272
|
```
|
|
278
|
-
plotly-cloud-
|
|
273
|
+
plotly-cloud-extension/
|
|
279
274
|
├── plotly_cloud/
|
|
280
275
|
│ ├── __init__.py # Package initialization
|
|
281
276
|
│ ├── cli.py # Main CLI entry point
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Plotly Cloud
|
|
1
|
+
# Plotly Cloud Extension
|
|
2
2
|
|
|
3
|
-
A command-line interface
|
|
3
|
+
A Python extension for [Plotly Cloud](https://cloud.plotly.com) that provides both a command-line interface and Dash dev tools integration for publishing and managing Dash applications.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
@@ -52,10 +52,6 @@ plotly publish --poll-status=false
|
|
|
52
52
|
plotly logout
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
## Environment Configuration
|
|
56
|
-
|
|
57
|
-
The CLI uses a `cloud-env.toml` file for environment-specific configuration (OAuth client IDs, API URLs). This file is gitignored and should be created during development or at packaging time.
|
|
58
|
-
|
|
59
55
|
## Usage
|
|
60
56
|
|
|
61
57
|
### Authentication Commands
|
|
@@ -260,7 +256,7 @@ If you prefer not to use Just:
|
|
|
260
256
|
### Project Structure
|
|
261
257
|
|
|
262
258
|
```
|
|
263
|
-
plotly-cloud-
|
|
259
|
+
plotly-cloud-extension/
|
|
264
260
|
├── plotly_cloud/
|
|
265
261
|
│ ├── __init__.py # Package initialization
|
|
266
262
|
│ ├── cli.py # Main CLI entry point
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""API type definitions for Plotly Cloud."""
|
|
1
|
+
"""Autogenerated API type definitions for Plotly Cloud."""
|
|
2
2
|
|
|
3
3
|
from typing import Any, Dict, List
|
|
4
4
|
|
|
@@ -11,16 +11,31 @@ class AppRequest(TypedDict):
|
|
|
11
11
|
name: NotRequired[str]
|
|
12
12
|
appUrl: NotRequired[str]
|
|
13
13
|
description: NotRequired[str]
|
|
14
|
+
teamId: NotRequired[str]
|
|
14
15
|
isViewPrivate: NotRequired[str]
|
|
16
|
+
watermarkEnabled: NotRequired[str]
|
|
15
17
|
invitations: NotRequired[List[str]]
|
|
16
18
|
environmentVariables: NotRequired[List[Dict[str, Any]]]
|
|
17
19
|
|
|
20
|
+
|
|
18
21
|
EnvironmentVariables = Dict[str, Any]
|
|
19
22
|
|
|
23
|
+
|
|
20
24
|
class ErrorResponse(TypedDict):
|
|
21
25
|
error: NotRequired[str]
|
|
22
26
|
error_description: NotRequired[str]
|
|
23
27
|
|
|
28
|
+
|
|
29
|
+
class Team(TypedDict):
|
|
30
|
+
id: str
|
|
31
|
+
schematic_company_id: NotRequired[str]
|
|
32
|
+
organization_id: NotRequired[str]
|
|
33
|
+
name: str
|
|
34
|
+
description: NotRequired[str]
|
|
35
|
+
created_at: NotRequired[str]
|
|
36
|
+
updated_at: NotRequired[str]
|
|
37
|
+
|
|
38
|
+
|
|
24
39
|
class App(TypedDict):
|
|
25
40
|
id: NotRequired[str]
|
|
26
41
|
author_id: NotRequired[str]
|
|
@@ -28,6 +43,7 @@ class App(TypedDict):
|
|
|
28
43
|
description: NotRequired[str]
|
|
29
44
|
app_url: NotRequired[str]
|
|
30
45
|
is_view_private: NotRequired[bool]
|
|
46
|
+
watermark_enabled: NotRequired[bool]
|
|
31
47
|
created_with_desktop: NotRequired[bool]
|
|
32
48
|
desktop_app_version: NotRequired[str]
|
|
33
49
|
environment_variables: NotRequired[EnvironmentVariables]
|
|
@@ -35,3 +51,8 @@ class App(TypedDict):
|
|
|
35
51
|
status: NotRequired[str]
|
|
36
52
|
created_at: NotRequired[str]
|
|
37
53
|
last_published: NotRequired[str]
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class UserTeamMembership(TypedDict):
|
|
57
|
+
team: Team
|
|
58
|
+
role: str
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Cloud environment configuration management for Plotly Cloud
|
|
1
|
+
"""Cloud environment configuration management for Plotly Cloud Extension."""
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
4
|
from pathlib import Path
|
|
@@ -12,7 +12,7 @@ console = Console()
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class CloudConfig:
|
|
15
|
-
"""Manages cloud configuration for Plotly Cloud
|
|
15
|
+
"""Manages cloud configuration for Plotly Cloud Extension."""
|
|
16
16
|
|
|
17
17
|
def __init__(self):
|
|
18
18
|
self._config_cache = None
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Command implementations for Plotly Cloud
|
|
1
|
+
"""Command implementations for Plotly Cloud Extension."""
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import importlib
|
|
@@ -8,7 +8,7 @@ import sys
|
|
|
8
8
|
import tempfile
|
|
9
9
|
import time
|
|
10
10
|
import webbrowser
|
|
11
|
-
from typing import Dict, List, TypedDict
|
|
11
|
+
from typing import Dict, List, TypedDict
|
|
12
12
|
|
|
13
13
|
from rich.console import Console
|
|
14
14
|
from rich.live import Live
|
|
@@ -20,7 +20,7 @@ from rich.text import Text
|
|
|
20
20
|
|
|
21
21
|
from plotly_cloud._changes import collect_module_files, until_change
|
|
22
22
|
from plotly_cloud._cloud_env import cloud_config
|
|
23
|
-
from plotly_cloud._definitions import REVISION_STATUS_MAP, CommandArgument
|
|
23
|
+
from plotly_cloud._definitions import REVISION_STATUS_MAP, CommandArgument
|
|
24
24
|
from plotly_cloud._deploy import (
|
|
25
25
|
DeploymentClient,
|
|
26
26
|
create_deployment_zip,
|
|
@@ -442,6 +442,14 @@ class PublishCommand(BaseCommand):
|
|
|
442
442
|
"name": "--entrypoint-module",
|
|
443
443
|
"help": "Entrypoint module for the application in 'module:variable' format (e.g., 'app:app')",
|
|
444
444
|
},
|
|
445
|
+
{
|
|
446
|
+
"name": "--team-id",
|
|
447
|
+
"help": "Team ID to assign the app to (uses user's default team if not specified)",
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
"name": "--team",
|
|
451
|
+
"help": "Team name or slug to assign the app to (alternative to --team-id)",
|
|
452
|
+
},
|
|
445
453
|
{
|
|
446
454
|
"name": "--output",
|
|
447
455
|
"help": "Output path for zip file of the published app (default: temporary file)",
|
|
@@ -535,9 +543,7 @@ class PublishCommand(BaseCommand):
|
|
|
535
543
|
status_text.append("Timeout", style="bold yellow")
|
|
536
544
|
return Panel(status_text, title="🚀 Publish Status", border_style="yellow", padding=(0, 1))
|
|
537
545
|
|
|
538
|
-
status_info =
|
|
539
|
-
RevisionStatusInfo, REVISION_STATUS_MAP.get(status, {"label": status, "emoji": "⏳", "color": "white"})
|
|
540
|
-
)
|
|
546
|
+
status_info = REVISION_STATUS_MAP.get(status, {"label": status, "emoji": "⏳", "color": "white"})
|
|
541
547
|
|
|
542
548
|
status_text = Text()
|
|
543
549
|
status_text.append(f"{status_info['emoji']} ", style="bold")
|
|
@@ -625,6 +631,38 @@ class PublishCommand(BaseCommand):
|
|
|
625
631
|
|
|
626
632
|
progress.remove_task(validate_task)
|
|
627
633
|
|
|
634
|
+
# Resolve team_id if --team argument is provided
|
|
635
|
+
team_id = getattr(args, "team_id", None)
|
|
636
|
+
team_name_or_slug = getattr(args, "team", None)
|
|
637
|
+
|
|
638
|
+
if team_name_or_slug and not team_id:
|
|
639
|
+
# Need to resolve team name/slug to team_id
|
|
640
|
+
team_resolve_task = progress.add_task(f"Resolving team '{team_name_or_slug}'...", total=None)
|
|
641
|
+
try:
|
|
642
|
+
teams = await deploy_client.list_teams()
|
|
643
|
+
matching_team = None
|
|
644
|
+
for team in teams:
|
|
645
|
+
if (
|
|
646
|
+
team.get("name", "").lower() == team_name_or_slug.lower()
|
|
647
|
+
or team.get("team_slug", "").lower() == team_name_or_slug.lower()
|
|
648
|
+
or team.get("id", "").lower() == team_name_or_slug.lower()
|
|
649
|
+
):
|
|
650
|
+
matching_team = team
|
|
651
|
+
break
|
|
652
|
+
|
|
653
|
+
if matching_team:
|
|
654
|
+
team_id = matching_team.get("id")
|
|
655
|
+
progress.update(
|
|
656
|
+
team_resolve_task, description=f"✓ Resolved team to: {matching_team.get('name')}"
|
|
657
|
+
)
|
|
658
|
+
else:
|
|
659
|
+
progress.stop()
|
|
660
|
+
raise ApplicationError(
|
|
661
|
+
f"Team '{team_name_or_slug}' not found. Use 'plotly teams' to list available teams."
|
|
662
|
+
)
|
|
663
|
+
finally:
|
|
664
|
+
progress.remove_task(team_resolve_task)
|
|
665
|
+
|
|
628
666
|
try:
|
|
629
667
|
# Create deployment zip
|
|
630
668
|
package_task = progress.add_task("Creating deployment package...", total=None)
|
|
@@ -647,7 +685,7 @@ class PublishCommand(BaseCommand):
|
|
|
647
685
|
deploy_task = progress.add_task(f"Creating new app: {app_name}...", total=None)
|
|
648
686
|
|
|
649
687
|
entrypoint_module = getattr(args, "entrypoint_module", None)
|
|
650
|
-
app_data = await deploy_client.create_app(app_name, zip_path, entrypoint_module)
|
|
688
|
+
app_data = await deploy_client.create_app(app_name, zip_path, entrypoint_module, team_id)
|
|
651
689
|
|
|
652
690
|
progress.update(
|
|
653
691
|
deploy_task,
|
|
@@ -835,6 +873,65 @@ class StatusCommand(BaseCommand):
|
|
|
835
873
|
console.print()
|
|
836
874
|
|
|
837
875
|
|
|
876
|
+
class TeamsCommand(BaseCommand):
|
|
877
|
+
"""List all teams for the authenticated user."""
|
|
878
|
+
|
|
879
|
+
name = "teams"
|
|
880
|
+
group = "user"
|
|
881
|
+
short_description = "👥 List all teams you have access to"
|
|
882
|
+
description = "Display all teams that you are a member of."
|
|
883
|
+
arguments: List[CommandArgument] = []
|
|
884
|
+
|
|
885
|
+
@classmethod
|
|
886
|
+
async def execute(cls, args: ParsedArguments) -> None:
|
|
887
|
+
"""Execute teams command."""
|
|
888
|
+
# Get OAuth client for authentication
|
|
889
|
+
client_id = cloud_config.get_oauth_client_id()
|
|
890
|
+
oauth_client = OAuthClient(client_id)
|
|
891
|
+
|
|
892
|
+
# Check if authenticated
|
|
893
|
+
if not await oauth_client.is_authenticated():
|
|
894
|
+
raise ApplicationError("Not authenticated. Please run 'plotly login' first.")
|
|
895
|
+
|
|
896
|
+
# Get access token
|
|
897
|
+
auth_token = await oauth_client.get_access_token()
|
|
898
|
+
if not auth_token:
|
|
899
|
+
raise ApplicationError("Unable to retrieve access token. Please try logging in again.")
|
|
900
|
+
|
|
901
|
+
# List teams
|
|
902
|
+
async with DeploymentClient(oauth_client) as deploy_client:
|
|
903
|
+
teams = await deploy_client.list_teams()
|
|
904
|
+
|
|
905
|
+
if not teams:
|
|
906
|
+
console.print(Panel("You are not a member of any teams.", title="👥 Teams", border_style="yellow"))
|
|
907
|
+
return
|
|
908
|
+
|
|
909
|
+
# Create a table for the teams
|
|
910
|
+
table = Table(show_header=True, header_style="bold blue")
|
|
911
|
+
table.add_column("Name", style="cyan", no_wrap=True)
|
|
912
|
+
table.add_column("Slug", style="green")
|
|
913
|
+
table.add_column("Team ID", style="white", overflow="fold")
|
|
914
|
+
table.add_column("Created", style="magenta")
|
|
915
|
+
|
|
916
|
+
# Add rows for each team
|
|
917
|
+
for team in teams:
|
|
918
|
+
table.add_row(
|
|
919
|
+
team.get("name", "—"),
|
|
920
|
+
team.get("team_slug", "—"),
|
|
921
|
+
team.get("id", "—"),
|
|
922
|
+
team.get("created_at", "—")[:10] if team.get("created_at") else "—", # Show only date
|
|
923
|
+
)
|
|
924
|
+
|
|
925
|
+
console.print()
|
|
926
|
+
console.print(Panel.fit(table, title="👥 Your Teams", border_style="bold blue"))
|
|
927
|
+
console.print()
|
|
928
|
+
console.print(
|
|
929
|
+
"💡 Use [cyan]--team <name>[/cyan] or [cyan]--team-id <id>[/cyan] "
|
|
930
|
+
"with 'plotly publish' to publish to a specific team"
|
|
931
|
+
)
|
|
932
|
+
console.print()
|
|
933
|
+
|
|
934
|
+
|
|
838
935
|
class WhoamiCommand(BaseCommand):
|
|
839
936
|
"""Show current user information."""
|
|
840
937
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"""Type definitions for Plotly Cloud
|
|
1
|
+
"""Type definitions for Plotly Cloud Extension."""
|
|
2
2
|
|
|
3
|
-
from typing import Literal, Union
|
|
3
|
+
from typing import Callable, Literal, Union
|
|
4
4
|
|
|
5
5
|
from typing_extensions import NotRequired, TypedDict
|
|
6
6
|
|
|
@@ -20,7 +20,7 @@ class CommandArgument(TypedDict):
|
|
|
20
20
|
name: str
|
|
21
21
|
help: str
|
|
22
22
|
action: NotRequired[str]
|
|
23
|
-
type: NotRequired[type]
|
|
23
|
+
type: NotRequired[Union[type, Callable[[str], object]]]
|
|
24
24
|
default: NotRequired[Union[str, int, float, bool]]
|
|
25
25
|
choices: NotRequired[list]
|
|
26
26
|
required: NotRequired[bool]
|
|
@@ -35,6 +35,8 @@ class AppDeploymentConfig(TypedDict):
|
|
|
35
35
|
description: NotRequired[str]
|
|
36
36
|
app_id: NotRequired[str]
|
|
37
37
|
app_url: NotRequired[str]
|
|
38
|
+
team_id: NotRequired[str]
|
|
39
|
+
team_name: NotRequired[str]
|
|
38
40
|
|
|
39
41
|
|
|
40
42
|
# Revision status enum values
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Deployment utilities for Plotly Cloud
|
|
1
|
+
"""Deployment utilities for Plotly Cloud Extension."""
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
4
|
import os
|
|
@@ -11,7 +11,7 @@ import httpx
|
|
|
11
11
|
import tomli
|
|
12
12
|
import tomli_w
|
|
13
13
|
|
|
14
|
-
from plotly_cloud._api_types import App, AppRequest
|
|
14
|
+
from plotly_cloud._api_types import App, AppRequest, Team
|
|
15
15
|
from plotly_cloud._cloud_env import cloud_config
|
|
16
16
|
from plotly_cloud._definitions import AppDeploymentConfig
|
|
17
17
|
from plotly_cloud._oauth import OAuthClient
|
|
@@ -135,9 +135,7 @@ async def create_deployment_zip(project_path: str, output_path: str) -> int:
|
|
|
135
135
|
dirs[:] = [
|
|
136
136
|
d
|
|
137
137
|
for d in dirs
|
|
138
|
-
if not should_exclude_path(
|
|
139
|
-
str(os.path.relpath(os.path.join(root, d), project_path)), exclude_patterns
|
|
140
|
-
)
|
|
138
|
+
if not should_exclude_path(str(os.path.relpath(os.path.join(root, d), project_path)), exclude_patterns)
|
|
141
139
|
]
|
|
142
140
|
|
|
143
141
|
for file in files:
|
|
@@ -327,13 +325,16 @@ class DeploymentClient:
|
|
|
327
325
|
pass
|
|
328
326
|
return False
|
|
329
327
|
|
|
330
|
-
async def create_app(
|
|
328
|
+
async def create_app(
|
|
329
|
+
self, name: str, zip_path: str = "", entrypoint_module: Optional[str] = None, team_id: Optional[str] = None
|
|
330
|
+
) -> App:
|
|
331
331
|
"""Create a new application and upload deployment in same request.
|
|
332
332
|
|
|
333
333
|
Args:
|
|
334
334
|
name: Application name
|
|
335
335
|
zip_path: Path to deployment zip file to upload
|
|
336
336
|
entrypoint_module: Entrypoint module for the application (e.g., "app:app")
|
|
337
|
+
team_id: Team ID to assign the app to (uses user's default team if not specified)
|
|
337
338
|
|
|
338
339
|
Returns:
|
|
339
340
|
App response from the API
|
|
@@ -354,6 +355,8 @@ class DeploymentClient:
|
|
|
354
355
|
app_request: AppRequest = {"name": name}
|
|
355
356
|
if entrypoint_module:
|
|
356
357
|
app_request["entrypointModule"] = entrypoint_module
|
|
358
|
+
if team_id:
|
|
359
|
+
app_request["teamId"] = team_id
|
|
357
360
|
|
|
358
361
|
# Upload deployment in same request as app creation
|
|
359
362
|
retry_count = 0
|
|
@@ -468,3 +471,39 @@ class DeploymentClient:
|
|
|
468
471
|
raise _handle_error_response(response, "get app status")
|
|
469
472
|
except httpx.RequestError as e:
|
|
470
473
|
raise NetworkError("Failed to get app status", str(e)) from e
|
|
474
|
+
|
|
475
|
+
async def list_teams(self) -> list[Team]:
|
|
476
|
+
"""List all teams for the authenticated user.
|
|
477
|
+
|
|
478
|
+
Returns:
|
|
479
|
+
List of Team objects
|
|
480
|
+
|
|
481
|
+
Raises:
|
|
482
|
+
DeploymentClientError: If client is not initialized
|
|
483
|
+
APIError: If API call fails
|
|
484
|
+
NetworkError: If network request fails
|
|
485
|
+
"""
|
|
486
|
+
if not self._client:
|
|
487
|
+
raise DeploymentClientError("Client not initialized. Use within async context manager.")
|
|
488
|
+
|
|
489
|
+
url = f"https://{self.api_base_url}/api/teams"
|
|
490
|
+
|
|
491
|
+
try:
|
|
492
|
+
retry_count = 0
|
|
493
|
+
response = None
|
|
494
|
+
while retry_count <= 1:
|
|
495
|
+
response = await self._client.get(url)
|
|
496
|
+
|
|
497
|
+
if response.status_code == 200:
|
|
498
|
+
teams: list[Team] = response.json()
|
|
499
|
+
return teams
|
|
500
|
+
|
|
501
|
+
token_refreshed = await self._refresh_token_if_needed(response)
|
|
502
|
+
if token_refreshed:
|
|
503
|
+
retry_count += 1
|
|
504
|
+
else:
|
|
505
|
+
break
|
|
506
|
+
|
|
507
|
+
raise _handle_error_response(response, "list teams")
|
|
508
|
+
except httpx.RequestError as e:
|
|
509
|
+
raise NetworkError("Failed to list teams", str(e)) from e
|
|
@@ -1,26 +1,11 @@
|
|
|
1
|
-
import asyncio
|
|
2
|
-
|
|
3
1
|
import dash
|
|
4
2
|
import flask
|
|
5
|
-
from packaging.version import parse as _parse_version
|
|
6
3
|
|
|
7
4
|
from plotly_cloud._devtool_publish_rpc import PlotlyCloudPublishRPC
|
|
8
|
-
|
|
9
|
-
dash_version = _parse_version(dash.__version__)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def _run_sync(coro):
|
|
13
|
-
loop = asyncio.get_event_loop()
|
|
14
|
-
return loop.run_until_complete(coro)
|
|
5
|
+
from plotly_cloud._run_sync import run_sync
|
|
15
6
|
|
|
16
7
|
|
|
17
8
|
def install_hook():
|
|
18
|
-
import nest_asyncio
|
|
19
|
-
|
|
20
|
-
# Make asyncio stuff runs smoothly.
|
|
21
|
-
# Prevent no loop and existing loop errors.
|
|
22
|
-
nest_asyncio.apply()
|
|
23
|
-
|
|
24
9
|
rpc = PlotlyCloudPublishRPC()
|
|
25
10
|
|
|
26
11
|
try:
|
|
@@ -49,7 +34,7 @@ def install_hook():
|
|
|
49
34
|
@dash.hooks.route("_plotly_cloud_publish", methods=["POST"])
|
|
50
35
|
def plotly_cloud_publish_rpc():
|
|
51
36
|
data = flask.request.get_json()
|
|
52
|
-
data =
|
|
37
|
+
data = run_sync(rpc.handle_operation(data))
|
|
53
38
|
return flask.jsonify(data)
|
|
54
39
|
|
|
55
40
|
@dash.hooks.setup()
|
|
@@ -4,6 +4,7 @@ import asyncio
|
|
|
4
4
|
import importlib
|
|
5
5
|
import os
|
|
6
6
|
import tempfile
|
|
7
|
+
import traceback
|
|
7
8
|
from typing import Any
|
|
8
9
|
|
|
9
10
|
import dash
|
|
@@ -33,7 +34,7 @@ class PublishOperations:
|
|
|
33
34
|
class PublishOperation(TypedDict):
|
|
34
35
|
"""RPC operation structure for dev tools publishing."""
|
|
35
36
|
|
|
36
|
-
operation: Literal["initialize", "authenticate", "auth_poll", "publish", "status"]
|
|
37
|
+
operation: Literal["initialize", "authenticate", "auth_poll", "publish", "status", "fetch_teams"]
|
|
37
38
|
data: Any
|
|
38
39
|
|
|
39
40
|
|
|
@@ -167,6 +168,7 @@ class PlotlyCloudPublishRPC:
|
|
|
167
168
|
method = getattr(self, operation_name)
|
|
168
169
|
return await method(data)
|
|
169
170
|
except Exception as e:
|
|
171
|
+
traceback.print_exc()
|
|
170
172
|
return {"error": str(e)}
|
|
171
173
|
|
|
172
174
|
async def initialize(self, data: Any) -> RPCResponse:
|
|
@@ -189,6 +191,8 @@ class PlotlyCloudPublishRPC:
|
|
|
189
191
|
status = "new"
|
|
190
192
|
app_name = config.get("name", os.path.basename(project_path))
|
|
191
193
|
app_url = ""
|
|
194
|
+
team_id = config.get("team_id")
|
|
195
|
+
team_name = config.get("team_name")
|
|
192
196
|
|
|
193
197
|
if app_id is not None and is_authenticated:
|
|
194
198
|
async with DeploymentClient(self.oauth_client) as deploy_client:
|
|
@@ -208,6 +212,8 @@ class PlotlyCloudPublishRPC:
|
|
|
208
212
|
"app_path": project_path,
|
|
209
213
|
"app_id": app_id,
|
|
210
214
|
"app_url": app_url,
|
|
215
|
+
"team_id": team_id,
|
|
216
|
+
"team_name": team_name,
|
|
211
217
|
"size_error": size_error if exceeds_limit else None,
|
|
212
218
|
}
|
|
213
219
|
}
|
|
@@ -243,10 +249,18 @@ class PlotlyCloudPublishRPC:
|
|
|
243
249
|
app_url = format_app_url(status_data.get("app_url", ""))
|
|
244
250
|
return {"result": {"status": status_data.get("status", ""), "app_url": app_url}}
|
|
245
251
|
|
|
252
|
+
async def fetch_teams(self, data: Any) -> RPCResponse:
|
|
253
|
+
"""Fetch all teams for the authenticated user."""
|
|
254
|
+
async with DeploymentClient(self.oauth_client) as deploy_client:
|
|
255
|
+
teams = await deploy_client.list_teams()
|
|
256
|
+
return {"result": teams}
|
|
257
|
+
|
|
246
258
|
async def publish(self, data: Any) -> RPCResponse:
|
|
247
259
|
app_path = data.get("app_path")
|
|
248
260
|
app_id = data.get("app_id")
|
|
249
261
|
app_name = data.get("app_name")
|
|
262
|
+
team_id = data.get("team_id")
|
|
263
|
+
team_name = data.get("team_name")
|
|
250
264
|
|
|
251
265
|
config_path = get_config_path(app_path)
|
|
252
266
|
|
|
@@ -272,7 +286,7 @@ class PlotlyCloudPublishRPC:
|
|
|
272
286
|
return {"result": {"app_id": app_id, "app_url": format_app_url(app_data.get("app_url"))}}
|
|
273
287
|
else:
|
|
274
288
|
# create new app
|
|
275
|
-
app_data = await deploy_client.create_app(app_name, zip_path, entrypoint_module)
|
|
289
|
+
app_data = await deploy_client.create_app(app_name, zip_path, entrypoint_module, team_id)
|
|
276
290
|
|
|
277
291
|
config: AppDeploymentConfig = {
|
|
278
292
|
"name": app_name,
|
|
@@ -280,6 +294,12 @@ class PlotlyCloudPublishRPC:
|
|
|
280
294
|
"app_url": app_data.get("app_url", ""),
|
|
281
295
|
}
|
|
282
296
|
|
|
297
|
+
# Save team info if provided
|
|
298
|
+
if team_id:
|
|
299
|
+
config["team_id"] = team_id
|
|
300
|
+
if team_name:
|
|
301
|
+
config["team_name"] = team_name
|
|
302
|
+
|
|
283
303
|
save_deployment_config(config, config_path)
|
|
284
304
|
|
|
285
305
|
return {"result": {"app_id": app_data.get("id"), "app_url": format_app_url(app_data.get("app_url"))}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""OAuth client implementation for Plotly Cloud
|
|
1
|
+
"""OAuth client implementation for Plotly Cloud Extension using WorkOS CLI Auth."""
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import json
|
|
@@ -214,11 +214,11 @@ class OAuthClient:
|
|
|
214
214
|
raise
|
|
215
215
|
|
|
216
216
|
# Step 4: Save credentials
|
|
217
|
-
await self._save_credentials(
|
|
217
|
+
await self._save_credentials(tokens)
|
|
218
218
|
|
|
219
219
|
return tokens
|
|
220
220
|
|
|
221
|
-
async def _save_credentials(self, credentials: Dict[str, Any]):
|
|
221
|
+
async def _save_credentials(self, credentials: Union[AuthTokenResponse, Dict[str, Any]]):
|
|
222
222
|
"""Save credentials to file."""
|
|
223
223
|
try:
|
|
224
224
|
# Ensure parent directory exists
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Background event loop for async operations
|
|
2
|
+
import asyncio
|
|
3
|
+
import threading
|
|
4
|
+
|
|
5
|
+
_loop: asyncio.AbstractEventLoop = None # type: ignore
|
|
6
|
+
_loop_thread: threading.Thread = None # type: ignore
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _get_event_loop():
|
|
10
|
+
"""Get or create a background event loop running in a separate thread."""
|
|
11
|
+
global _loop, _loop_thread
|
|
12
|
+
|
|
13
|
+
if _loop is None or _loop.is_closed():
|
|
14
|
+
_loop = asyncio.new_event_loop()
|
|
15
|
+
|
|
16
|
+
def run_loop():
|
|
17
|
+
asyncio.set_event_loop(_loop)
|
|
18
|
+
_loop.run_forever()
|
|
19
|
+
|
|
20
|
+
_loop_thread = threading.Thread(target=run_loop, daemon=True)
|
|
21
|
+
_loop_thread.start()
|
|
22
|
+
|
|
23
|
+
return _loop
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def run_sync(coro):
|
|
27
|
+
"""Run an async coroutine synchronously using a background event loop.
|
|
28
|
+
|
|
29
|
+
This avoids issues with nested event loops and ensures proper task context
|
|
30
|
+
for Python 3.14+ where anyio requires asyncio.current_task() to return a valid task.
|
|
31
|
+
"""
|
|
32
|
+
loop = _get_event_loop()
|
|
33
|
+
future = asyncio.run_coroutine_threadsafe(coro, loop)
|
|
34
|
+
return future.result()
|
|
@@ -7,7 +7,6 @@ import textwrap
|
|
|
7
7
|
from collections.abc import Sequence
|
|
8
8
|
from typing import Union
|
|
9
9
|
|
|
10
|
-
import nest_asyncio
|
|
11
10
|
from rich.console import Console
|
|
12
11
|
from rich.panel import Panel
|
|
13
12
|
|
|
@@ -216,8 +215,6 @@ def print_command_help(command_class: BaseCommand, group: str, command: str) ->
|
|
|
216
215
|
|
|
217
216
|
def main() -> None:
|
|
218
217
|
"""Main CLI entry point."""
|
|
219
|
-
# Allow to run multiple calls to asyncio run.
|
|
220
|
-
nest_asyncio.apply()
|
|
221
218
|
|
|
222
219
|
# Parse group and command
|
|
223
220
|
group, command, args_index = parse_group_and_command()
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const React = window.React; const ReactDOM = window.ReactDOM;
|
|
2
|
+
"use strict";var plotly_cloud_publish_component=(()=>{var ka=Object.create;var K=Object.defineProperty;var ya=Object.getOwnPropertyDescriptor;var Fa=Object.getOwnPropertyNames;var Ba=Object.getPrototypeOf,Da=Object.prototype.hasOwnProperty;var wo=(o,a)=>()=>(a||o((a={exports:{}}).exports,a),a.exports),Ha=(o,a)=>{for(var r in a)K(o,r,{get:a[r],enumerable:!0})},Zo=(o,a,r,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let i of Fa(a))!Da.call(o,i)&&i!==r&&K(o,i,{get:()=>a[i],enumerable:!(e=ya(a,i))||e.enumerable});return o};var s=(o,a,r)=>(r=o!=null?ka(Ba(o)):{},Zo(a||!o||!o.__esModule?K(r,"default",{value:o,enumerable:!0}):r,o)),Ma=o=>Zo(K({},"__esModule",{value:!0}),o);var c=wo((Ya,_o)=>{_o.exports=React});var Jo=wo(Q=>{"use strict";var Ra=c(),Na=Symbol.for("react.element"),xa=Symbol.for("react.fragment"),va=Object.prototype.hasOwnProperty,Ua=Ra.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Ea={key:!0,ref:!0,__self:!0,__source:!0};function Xo(o,a,r){var e,i={},m=null,k=null;r!==void 0&&(m=""+r),a.key!==void 0&&(m=""+a.key),a.ref!==void 0&&(k=a.ref);for(e in a)va.call(a,e)&&!Ea.hasOwnProperty(e)&&(i[e]=a[e]);if(o&&o.defaultProps)for(e in a=o.defaultProps,a)i[e]===void 0&&(i[e]=a[e]);return{$$typeof:Na,type:o,key:m,ref:k,props:i,_owner:Ua.current}}Q.Fragment=xa;Q.jsx=Xo;Q.jsxs=Xo});var L=wo((or,Ko)=>{"use strict";Ko.exports=Jo()});var Ka={};Ha(Ka,{PlotlyCloudPublishComponent:()=>Ao});var t=s(c());var E=s(L()),Ga=({title:o,onClose:a,children:r})=>(0,E.jsx)("div",{className:"plotly-cloud-publish-modal-overlay",children:(0,E.jsxs)("div",{className:"plotly-cloud-publish-modal-content",children:[(0,E.jsxs)("div",{className:"plotly-cloud-publish-modal-header",children:[(0,E.jsx)("h3",{children:o},"modal-title"),(0,E.jsx)("button",{className:"plotly-cloud-publish-modal-close",onClick:a,children:"\xD7"},"modal-close")]}),(0,E.jsx)("div",{className:"plotly-cloud-publish-modal-body",children:r},"modal-body")]})}),Qo=Ga;var jo=s(c()),F=s(L()),Oa=o=>{let[a,r]=(0,jo.useState)(o.waiting);return(0,F.jsx)("div",{className:"plotly-cloud-publish-signin",children:a?(0,F.jsxs)("div",{children:[o.verificationUrlComplete?(0,F.jsxs)("div",{children:["A browser window should open for sign-in."," ",(0,F.jsx)("a",{href:o.verificationUrlComplete,target:"_blank",rel:"noopener noreferrer",children:"Click here"})," ","if it doesn't open automatically."]}):(0,F.jsx)("div",{children:"Preparing sign-in..."}),o.userCode?(0,F.jsxs)("div",{className:"plotly-cloud-confirm-code",children:["Confirm your device code"," ",(0,F.jsx)("span",{className:"plotly-cloud-user-code",children:o.userCode})," ","when prompted."]}):null]}):(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)("span",{children:"Sign in to publish your app to Plotly Cloud."}),(0,F.jsx)("button",{className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",onClick:()=>{r(!0),o.onSignIn()},children:"Sign In"})]})})},Yo=Oa;var qa=o=>{let a=async e=>await(await fetch(`${o}_plotly_cloud_publish`,{method:"POST",body:JSON.stringify(e),headers:{"Content-Type":"application/json"}})).json(),r=e=>i=>a({operation:e,data:i});return{initialize:r("initialize"),authenticate:r("authenticate"),auth_poll:r("auth_poll"),publish:r("publish"),status:r("status"),fetch_teams:r("fetch_teams"),wait_auth:r("wait_auth"),logout:r("logout")}},$o=qa;var oa=s(c()),N=s(L()),Wa=({initialAppName:o="",onCancel:a,onPublish:r,sizeError:e=""})=>{let[i,m]=(0,oa.useState)(o);return(0,N.jsxs)("div",{className:"plotly-cloud-name-input",children:[e&&(0,N.jsx)("div",{className:"plotly-cloud-size-error",children:e}),(0,N.jsx)("div",{className:"plotly-cloud-name-input-label",children:"App Name"}),(0,N.jsxs)("form",{onSubmit:y=>{y.preventDefault(),i.trim()&&!e&&r(i.trim())},children:[(0,N.jsx)("input",{type:"text",value:i,onChange:y=>m(y.target.value),placeholder:"My Dash App",className:"plotly-cloud-name-input-field",disabled:!!e}),(0,N.jsx)("div",{className:"plotly-cloud-button-bar",children:(0,N.jsx)("button",{type:"submit",disabled:!i.trim()||!!e,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",children:"Publish App"})})]})]})},aa=Wa;var W=s(c());var f=s(c(),1),ra=new Map([["bold",f.createElement(f.Fragment,null,f.createElement("path",{d:"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z"}))],["duotone",f.createElement(f.Fragment,null,f.createElement("path",{d:"M184,80V208a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V80a8,8,0,0,1,8-8H176A8,8,0,0,1,184,80Z",opacity:"0.2"}),f.createElement("path",{d:"M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"}))],["fill",f.createElement(f.Fragment,null,f.createElement("path",{d:"M192,136v72a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V80A16,16,0,0,1,48,64h72a8,8,0,0,1,0,16H48V208H176V136a8,8,0,0,1,16,0Zm32-96a8,8,0,0,0-8-8H152a8,8,0,0,0-5.66,13.66L172.69,72l-42.35,42.34a8,8,0,0,0,11.32,11.32L184,83.31l26.34,26.35A8,8,0,0,0,224,104Z"}))],["light",f.createElement(f.Fragment,null,f.createElement("path",{d:"M222,104a6,6,0,0,1-12,0V54.49l-69.75,69.75a6,6,0,0,1-8.48-8.48L201.51,46H152a6,6,0,0,1,0-12h64a6,6,0,0,1,6,6Zm-38,26a6,6,0,0,0-6,6v72a2,2,0,0,1-2,2H48a2,2,0,0,1-2-2V80a2,2,0,0,1,2-2h72a6,6,0,0,0,0-12H48A14,14,0,0,0,34,80V208a14,14,0,0,0,14,14H176a14,14,0,0,0,14-14V136A6,6,0,0,0,184,130Z"}))],["regular",f.createElement(f.Fragment,null,f.createElement("path",{d:"M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"}))],["thin",f.createElement(f.Fragment,null,f.createElement("path",{d:"M220,104a4,4,0,0,1-8,0V49.66l-73.16,73.17a4,4,0,0,1-5.66-5.66L206.34,44H152a4,4,0,0,1,0-8h64a4,4,0,0,1,4,4Zm-36,28a4,4,0,0,0-4,4v72a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V80a4,4,0,0,1,4-4h72a4,4,0,0,0,0-8H48A12,12,0,0,0,36,80V208a12,12,0,0,0,12,12H176a12,12,0,0,0,12-12V136A4,4,0,0,0,184,132Z"}))]]);var u=s(c(),1),sa=new Map([["bold",u.createElement(u.Fragment,null,u.createElement("path",{d:"M236,128a108,108,0,0,1-216,0c0-42.52,24.73-81.34,63-98.9A12,12,0,1,1,93,50.91C63.24,64.57,44,94.83,44,128a84,84,0,0,0,168,0c0-33.17-19.24-63.43-49-77.09A12,12,0,1,1,173,29.1C211.27,46.66,236,85.48,236,128Z"}))],["duotone",u.createElement(u.Fragment,null,u.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),u.createElement("path",{d:"M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"}))],["fill",u.createElement(u.Fragment,null,u.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,176A72,72,0,0,1,92,65.64a8,8,0,0,1,8,13.85,56,56,0,1,0,56,0,8,8,0,0,1,8-13.85A72,72,0,0,1,128,200Z"}))],["light",u.createElement(u.Fragment,null,u.createElement("path",{d:"M230,128a102,102,0,0,1-204,0c0-40.18,23.35-76.86,59.5-93.45a6,6,0,0,1,5,10.9C58.61,60.09,38,92.49,38,128a90,90,0,0,0,180,0c0-35.51-20.61-67.91-52.5-82.55a6,6,0,0,1,5-10.9C206.65,51.14,230,87.82,230,128Z"}))],["regular",u.createElement(u.Fragment,null,u.createElement("path",{d:"M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"}))],["thin",u.createElement(u.Fragment,null,u.createElement("path",{d:"M228,128a100,100,0,0,1-200,0c0-39.4,22.9-75.37,58.33-91.63a4,4,0,1,1,3.34,7.27C57.07,58.6,36,91.71,36,128a92,92,0,0,0,184,0c0-36.29-21.07-69.4-53.67-84.36a4,4,0,1,1,3.34-7.27C205.1,52.63,228,88.6,228,128Z"}))]]);var d=s(c(),1),ea=new Map([["bold",d.createElement(d.Fragment,null,d.createElement("path",{d:"M160,36A92.09,92.09,0,0,0,79,84.36,68,68,0,1,0,72,220h88a92,92,0,0,0,0-184Zm0,160H72a44,44,0,0,1-1.82-88A91.86,91.86,0,0,0,68,128a12,12,0,0,0,24,0,68,68,0,1,1,68,68Zm40.49-92.49a12,12,0,0,1,0,17l-48,48a12,12,0,0,1-17,0l-24-24a12,12,0,1,1,17-17L144,143l39.51-39.52A12,12,0,0,1,200.49,103.51Z"}))],["duotone",d.createElement(d.Fragment,null,d.createElement("path",{d:"M240,128a80,80,0,0,1-80,80H72A56,56,0,1,1,85.92,97.74l0,.1A80,80,0,0,1,240,128Z",opacity:"0.2"}),d.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm37.66-93.66a8,8,0,0,1,0,11.32l-48,48a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L144,148.69l42.34-42.35A8,8,0,0,1,197.66,106.34Z"}))],["fill",d.createElement(d.Fragment,null,d.createElement("path",{d:"M247.93,124.52C246.11,77.54,207.07,40,160.06,40A88.1,88.1,0,0,0,81.29,88.67h0A87.48,87.48,0,0,0,72,127.73,8.18,8.18,0,0,1,64.57,136,8,8,0,0,1,56,128a103.66,103.66,0,0,1,5.34-32.92,4,4,0,0,0-4.75-5.18A64.09,64.09,0,0,0,8,152c0,35.19,29.75,64,65,64H160A88.09,88.09,0,0,0,247.93,124.52Zm-50.27-6.86-48,48a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L144,148.69l42.34-42.35a8,8,0,0,1,11.32,11.32Z"}))],["light",d.createElement(d.Fragment,null,d.createElement("path",{d:"M160,42A86.11,86.11,0,0,0,82.43,90.88,62,62,0,1,0,72,214h88a86,86,0,0,0,0-172Zm0,160H72a50,50,0,0,1,0-100,50.67,50.67,0,0,1,5.91.35A85.61,85.61,0,0,0,74,128a6,6,0,0,0,12,0,74,74,0,1,1,74,74Zm36.24-94.24a6,6,0,0,1,0,8.48l-48,48a6,6,0,0,1-8.48,0l-24-24a6,6,0,0,1,8.48-8.48L144,151.51l43.76-43.75A6,6,0,0,1,196.24,107.76Z"}))],["regular",d.createElement(d.Fragment,null,d.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm37.66-93.66a8,8,0,0,1,0,11.32l-48,48a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L144,148.69l42.34-42.35A8,8,0,0,1,197.66,106.34Z"}))],["thin",d.createElement(d.Fragment,null,d.createElement("path",{d:"M160,44A84.11,84.11,0,0,0,83.59,93.12,60.71,60.71,0,0,0,72,92a60,60,0,0,0,0,120h88a84,84,0,0,0,0-168Zm0,160H72a52,52,0,1,1,8.55-103.3A83.66,83.66,0,0,0,76,128a4,4,0,0,0,8,0,76,76,0,1,1,76,76Zm34.83-94.83a4,4,0,0,1,0,5.66l-48,48a4,4,0,0,1-5.66,0l-24-24a4,4,0,0,1,5.66-5.66L144,154.34l45.17-45.17A4,4,0,0,1,194.83,109.17Z"}))]]);var g=s(c(),1),na=new Map([["bold",g.createElement(g.Fragment,null,g.createElement("path",{d:"M56.88,31.93A12,12,0,1,0,39.12,48.07L71.79,84A68,68,0,0,0,72,220h88a91.26,91.26,0,0,0,30.66-5.24l8.46,9.31a12,12,0,0,0,17.76-16.14ZM160,196H72a44,44,0,0,1-1.8-87.95A91.91,91.91,0,0,0,68,128a12,12,0,0,0,24,0,68.22,68.22,0,0,1,2.66-18.84l77.88,85.67A68.67,68.67,0,0,1,160,196Zm92-68a91.32,91.32,0,0,1-17.53,54,12,12,0,1,1-19.41-14.11,68,68,0,0,0-89.57-98.53,12,12,0,0,1-12.2-20.66A92,92,0,0,1,252,128Z"}))],["duotone",g.createElement(g.Fragment,null,g.createElement("path",{d:"M240,128a80,80,0,0,1-80,80H72A56,56,0,1,1,85.92,97.74l0,.1A80,80,0,0,1,240,128Z",opacity:"0.2"}),g.createElement("path",{d:"M53.92,34.62A8,8,0,1,0,42.08,45.38L81.32,88.55l-.06.12A65,65,0,0,0,72,88a64,64,0,0,0,0,128h88a87.34,87.34,0,0,0,31.8-5.93l10.28,11.31a8,8,0,1,0,11.84-10.76ZM160,200H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.3.12A88.4,88.4,0,0,0,72,128a8,8,0,0,0,16,0,72.25,72.25,0,0,1,5.06-26.54l87,95.7A71.66,71.66,0,0,1,160,200Zm88-72a87.89,87.89,0,0,1-22.35,58.61A8,8,0,0,1,213.71,176,72,72,0,0,0,117.37,70a8,8,0,0,1-9.48-12.89A88,88,0,0,1,248,128Z"}))],["fill",g.createElement(g.Fragment,null,g.createElement("path",{d:"M248,128.72A87.74,87.74,0,0,1,222.41,190a4,4,0,0,1-5.77-.16L103.78,65.67a4,4,0,0,1,.39-5.76A87.82,87.82,0,0,1,160.87,40C209.15,40.47,248.38,80.43,248,128.72ZM53.92,34.62A8,8,0,1,0,42.08,45.38L81.33,88.56l-.06.11A64,64,0,0,0,8,153c.53,35.12,29.84,63,65,63h87a87.65,87.65,0,0,0,31.78-5.95l10.3,11.33a8,8,0,0,0,11.33.52,8.32,8.32,0,0,0,.29-11.52Z"}))],["light",g.createElement(g.Fragment,null,g.createElement("path",{d:"M52.44,36A6,6,0,0,0,43.56,44l40.18,44.2c-.45.87-.9,1.75-1.32,2.64A62,62,0,1,0,72,214h88a85.23,85.23,0,0,0,32.35-6.3L203.56,220a6,6,0,0,0,8.88-8.08ZM160,202H72a50,50,0,1,1,5.9-99.64A86.25,86.25,0,0,0,74,128a6,6,0,0,0,12,0,73.92,73.92,0,0,1,6.44-30.2l91.22,100.34A73.65,73.65,0,0,1,160,202Zm86-74a85.85,85.85,0,0,1-21.85,57.27,6,6,0,0,1-4.47,2,6,6,0,0,1-4.47-10,74,74,0,0,0-99-108.92,6,6,0,1,1-7.11-9.67A86,86,0,0,1,246,128Z"}))],["regular",g.createElement(g.Fragment,null,g.createElement("path",{d:"M53.92,34.62A8,8,0,1,0,42.08,45.38L81.32,88.55l-.06.12A65,65,0,0,0,72,88a64,64,0,0,0,0,128h88a87.34,87.34,0,0,0,31.8-5.93l10.28,11.31a8,8,0,1,0,11.84-10.76ZM160,200H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.3.12A88.4,88.4,0,0,0,72,128a8,8,0,0,0,16,0,72.25,72.25,0,0,1,5.06-26.54l87,95.7A71.66,71.66,0,0,1,160,200Zm88-72a87.89,87.89,0,0,1-22.35,58.61A8,8,0,0,1,213.71,176,72,72,0,0,0,117.37,70a8,8,0,0,1-9.48-12.89A88,88,0,0,1,248,128Z"}))],["thin",g.createElement(g.Fragment,null,g.createElement("path",{d:"M51,37.31A4,4,0,0,0,45,42.69L86.16,87.93q-1.38,2.55-2.59,5.19A60,60,0,1,0,72,212h88a83.19,83.19,0,0,0,32.88-6.69L205,218.69a4,4,0,1,0,5.92-5.38ZM160,204H72a52,52,0,0,1,0-104,52.92,52.92,0,0,1,8.54.72A84.21,84.21,0,0,0,76,128a4,4,0,0,0,8,0,76,76,0,0,1,7.9-33.76L187.13,199A75.37,75.37,0,0,1,160,204Zm84-76a83.86,83.86,0,0,1-21.34,55.94,4,4,0,1,1-6-5.33A76,76,0,0,0,115,66.75a4,4,0,0,1-4.74-6.45A84,84,0,0,1,244,128Z"}))]]);var S=s(c(),1),ia=new Map([["bold",S.createElement(S.Fragment,null,S.createElement("path",{d:"M160,36A92.09,92.09,0,0,0,79,84.36,68,68,0,1,0,72,220h88a92,92,0,0,0,0-184Zm0,160H72a44,44,0,0,1-1.82-88A91.86,91.86,0,0,0,68,128a12,12,0,0,0,24,0,68,68,0,1,1,68,68Zm32.49-79.51L177,132l15.52,15.51a12,12,0,0,1-17,17L160,149l-15.51,15.52a12,12,0,1,1-17-17L143,132l-15.52-15.51a12,12,0,1,1,17-17L160,115l15.51-15.52a12,12,0,0,1,17,17Z"}))],["duotone",S.createElement(S.Fragment,null,S.createElement("path",{d:"M240,127.62a80,80,0,0,1-80,80H72A56,56,0,1,1,85.92,97.36l0,.1A80,80,0,0,1,240,127.62Z",opacity:"0.2"}),S.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm29.66-82.34L171.31,136l18.35,18.34a8,8,0,0,1-11.32,11.32L160,147.31l-18.34,18.35a8,8,0,0,1-11.32-11.32L148.69,136l-18.35-18.34a8,8,0,0,1,11.32-11.32L160,124.69l18.34-18.35a8,8,0,0,1,11.32,11.32Z"}))],["fill",S.createElement(S.Fragment,null,S.createElement("path",{d:"M247.93,124.52C246.11,77.54,207.07,40,160.06,40A88.1,88.1,0,0,0,81.29,88.67h0A87.48,87.48,0,0,0,72,127.73,8.18,8.18,0,0,1,64.57,136,8,8,0,0,1,56,128a103.66,103.66,0,0,1,5.34-32.92,4,4,0,0,0-4.75-5.18A64.09,64.09,0,0,0,8,152c0,35.19,29.75,64,65,64H160A88.09,88.09,0,0,0,247.93,124.52Zm-58.27,29.82a8,8,0,0,1-11.32,11.32L160,147.31l-18.34,18.35a8,8,0,0,1-11.32-11.32L148.69,136l-18.35-18.34a8,8,0,0,1,11.32-11.32L160,124.69l18.34-18.35a8,8,0,0,1,11.32,11.32L171.31,136Z"}))],["light",S.createElement(S.Fragment,null,S.createElement("path",{d:"M160,42A86.11,86.11,0,0,0,82.43,90.88,62,62,0,1,0,72,214h88a86,86,0,0,0,0-172Zm0,160H72a50,50,0,0,1,0-100,50.67,50.67,0,0,1,5.91.35A85.61,85.61,0,0,0,74,128a6,6,0,0,0,12,0,74,74,0,1,1,74,74Zm28.24-85.76L168.48,136l19.76,19.76a6,6,0,1,1-8.48,8.48L160,144.48l-19.76,19.76a6,6,0,0,1-8.48-8.48L151.52,136l-19.76-19.76a6,6,0,0,1,8.48-8.48L160,127.52l19.76-19.76a6,6,0,0,1,8.48,8.48Z"}))],["regular",S.createElement(S.Fragment,null,S.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm29.66-82.34L171.31,136l18.35,18.34a8,8,0,0,1-11.32,11.32L160,147.31l-18.34,18.35a8,8,0,0,1-11.32-11.32L148.69,136l-18.35-18.34a8,8,0,0,1,11.32-11.32L160,124.69l18.34-18.35a8,8,0,0,1,11.32,11.32Z"}))],["thin",S.createElement(S.Fragment,null,S.createElement("path",{d:"M160,44A84.11,84.11,0,0,0,83.59,93.12,60.71,60.71,0,0,0,72,92a60,60,0,0,0,0,120h88a84,84,0,0,0,0-168Zm0,160H72a52,52,0,1,1,8.55-103.3A83.66,83.66,0,0,0,76,128a4,4,0,0,0,8,0,76,76,0,1,1,76,76Zm26.83-89.17L165.66,136l21.17,21.17a4,4,0,0,1-5.66,5.66L160,141.66l-21.17,21.17a4,4,0,0,1-5.66-5.66L154.34,136l-21.17-21.17a4,4,0,0,1,5.66-5.66L160,130.34l21.17-21.17a4,4,0,1,1,5.66,5.66Z"}))]]);var h=s(c(),1),ta=new Map([["bold",h.createElement(h.Fragment,null,h.createElement("path",{d:"M128,76a52,52,0,1,0,52,52A52.06,52.06,0,0,0,128,76Zm0,80a28,28,0,1,1,28-28A28,28,0,0,1,128,156Zm92-27.21v-1.58l14-17.51a12,12,0,0,0,2.23-10.59A111.75,111.75,0,0,0,225,71.89,12,12,0,0,0,215.89,66L193.61,63.5l-1.11-1.11L190,40.1A12,12,0,0,0,184.11,31a111.67,111.67,0,0,0-27.23-11.27A12,12,0,0,0,146.3,22L128.79,36h-1.58L109.7,22a12,12,0,0,0-10.59-2.23A111.75,111.75,0,0,0,71.89,31.05,12,12,0,0,0,66,40.11L63.5,62.39,62.39,63.5,40.1,66A12,12,0,0,0,31,71.89,111.67,111.67,0,0,0,19.77,99.12,12,12,0,0,0,22,109.7l14,17.51v1.58L22,146.3a12,12,0,0,0-2.23,10.59,111.75,111.75,0,0,0,11.29,27.22A12,12,0,0,0,40.11,190l22.28,2.48,1.11,1.11L66,215.9A12,12,0,0,0,71.89,225a111.67,111.67,0,0,0,27.23,11.27A12,12,0,0,0,109.7,234l17.51-14h1.58l17.51,14a12,12,0,0,0,10.59,2.23A111.75,111.75,0,0,0,184.11,225a12,12,0,0,0,5.91-9.06l2.48-22.28,1.11-1.11L215.9,190a12,12,0,0,0,9.06-5.91,111.67,111.67,0,0,0,11.27-27.23A12,12,0,0,0,234,146.3Zm-24.12-4.89a70.1,70.1,0,0,1,0,8.2,12,12,0,0,0,2.61,8.22l12.84,16.05A86.47,86.47,0,0,1,207,166.86l-20.43,2.27a12,12,0,0,0-7.65,4,69,69,0,0,1-5.8,5.8,12,12,0,0,0-4,7.65L166.86,207a86.47,86.47,0,0,1-10.49,4.35l-16.05-12.85a12,12,0,0,0-7.5-2.62c-.24,0-.48,0-.72,0a70.1,70.1,0,0,1-8.2,0,12.06,12.06,0,0,0-8.22,2.6L99.63,211.33A86.47,86.47,0,0,1,89.14,207l-2.27-20.43a12,12,0,0,0-4-7.65,69,69,0,0,1-5.8-5.8,12,12,0,0,0-7.65-4L49,166.86a86.47,86.47,0,0,1-4.35-10.49l12.84-16.05a12,12,0,0,0,2.61-8.22,70.1,70.1,0,0,1,0-8.2,12,12,0,0,0-2.61-8.22L44.67,99.63A86.47,86.47,0,0,1,49,89.14l20.43-2.27a12,12,0,0,0,7.65-4,69,69,0,0,1,5.8-5.8,12,12,0,0,0,4-7.65L89.14,49a86.47,86.47,0,0,1,10.49-4.35l16.05,12.85a12.06,12.06,0,0,0,8.22,2.6,70.1,70.1,0,0,1,8.2,0,12,12,0,0,0,8.22-2.6l16.05-12.85A86.47,86.47,0,0,1,166.86,49l2.27,20.43a12,12,0,0,0,4,7.65,69,69,0,0,1,5.8,5.8,12,12,0,0,0,7.65,4L207,89.14a86.47,86.47,0,0,1,4.35,10.49l-12.84,16.05A12,12,0,0,0,195.88,123.9Z"}))],["duotone",h.createElement(h.Fragment,null,h.createElement("path",{d:"M207.86,123.18l16.78-21a99.14,99.14,0,0,0-10.07-24.29l-26.7-3a81,81,0,0,0-6.81-6.81l-3-26.71a99.43,99.43,0,0,0-24.3-10l-21,16.77a81.59,81.59,0,0,0-9.64,0l-21-16.78A99.14,99.14,0,0,0,77.91,41.43l-3,26.7a81,81,0,0,0-6.81,6.81l-26.71,3a99.43,99.43,0,0,0-10,24.3l16.77,21a81.59,81.59,0,0,0,0,9.64l-16.78,21a99.14,99.14,0,0,0,10.07,24.29l26.7,3a81,81,0,0,0,6.81,6.81l3,26.71a99.43,99.43,0,0,0,24.3,10l21-16.77a81.59,81.59,0,0,0,9.64,0l21,16.78a99.14,99.14,0,0,0,24.29-10.07l3-26.7a81,81,0,0,0,6.81-6.81l26.71-3a99.43,99.43,0,0,0,10-24.3l-16.77-21A81.59,81.59,0,0,0,207.86,123.18ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z",opacity:"0.2"}),h.createElement("path",{d:"M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8.06,8.06,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8.06,8.06,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z"}))],["fill",h.createElement(h.Fragment,null,h.createElement("path",{d:"M216,130.16q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z"}))],["light",h.createElement(h.Fragment,null,h.createElement("path",{d:"M128,82a46,46,0,1,0,46,46A46.06,46.06,0,0,0,128,82Zm0,80a34,34,0,1,1,34-34A34,34,0,0,1,128,162ZM214,130.84c.06-1.89.06-3.79,0-5.68L229.33,106a6,6,0,0,0,1.11-5.29A105.34,105.34,0,0,0,219.76,74.9a6,6,0,0,0-4.53-3l-24.45-2.71q-1.93-2.07-4-4l-2.72-24.46a6,6,0,0,0-3-4.53,105.65,105.65,0,0,0-25.77-10.66A6,6,0,0,0,150,26.68l-19.2,15.37c-1.89-.06-3.79-.06-5.68,0L106,26.67a6,6,0,0,0-5.29-1.11A105.34,105.34,0,0,0,74.9,36.24a6,6,0,0,0-3,4.53L69.23,65.22q-2.07,1.94-4,4L40.76,72a6,6,0,0,0-4.53,3,105.65,105.65,0,0,0-10.66,25.77A6,6,0,0,0,26.68,106l15.37,19.2c-.06,1.89-.06,3.79,0,5.68L26.67,150.05a6,6,0,0,0-1.11,5.29A105.34,105.34,0,0,0,36.24,181.1a6,6,0,0,0,4.53,3l24.45,2.71q1.94,2.07,4,4L72,215.24a6,6,0,0,0,3,4.53,105.65,105.65,0,0,0,25.77,10.66,6,6,0,0,0,5.29-1.11L125.16,214c1.89.06,3.79.06,5.68,0l19.21,15.38a6,6,0,0,0,3.75,1.31,6.2,6.2,0,0,0,1.54-.2,105.34,105.34,0,0,0,25.76-10.68,6,6,0,0,0,3-4.53l2.71-24.45q2.07-1.93,4-4l24.46-2.72a6,6,0,0,0,4.53-3,105.49,105.49,0,0,0,10.66-25.77,6,6,0,0,0-1.11-5.29Zm-3.1,41.63-23.64,2.63a6,6,0,0,0-3.82,2,75.14,75.14,0,0,1-6.31,6.31,6,6,0,0,0-2,3.82l-2.63,23.63A94.28,94.28,0,0,1,155.14,218l-18.57-14.86a6,6,0,0,0-3.75-1.31h-.36a78.07,78.07,0,0,1-8.92,0,6,6,0,0,0-4.11,1.3L100.87,218a94.13,94.13,0,0,1-17.34-7.17L80.9,187.21a6,6,0,0,0-2-3.82,75.14,75.14,0,0,1-6.31-6.31,6,6,0,0,0-3.82-2l-23.63-2.63A94.28,94.28,0,0,1,38,155.14l14.86-18.57a6,6,0,0,0,1.3-4.11,78.07,78.07,0,0,1,0-8.92,6,6,0,0,0-1.3-4.11L38,100.87a94.13,94.13,0,0,1,7.17-17.34L68.79,80.9a6,6,0,0,0,3.82-2,75.14,75.14,0,0,1,6.31-6.31,6,6,0,0,0,2-3.82l2.63-23.63A94.28,94.28,0,0,1,100.86,38l18.57,14.86a6,6,0,0,0,4.11,1.3,78.07,78.07,0,0,1,8.92,0,6,6,0,0,0,4.11-1.3L155.13,38a94.13,94.13,0,0,1,17.34,7.17l2.63,23.64a6,6,0,0,0,2,3.82,75.14,75.14,0,0,1,6.31,6.31,6,6,0,0,0,3.82,2l23.63,2.63A94.28,94.28,0,0,1,218,100.86l-14.86,18.57a6,6,0,0,0-1.3,4.11,78.07,78.07,0,0,1,0,8.92,6,6,0,0,0,1.3,4.11L218,155.13A94.13,94.13,0,0,1,210.85,172.47Z"}))],["regular",h.createElement(h.Fragment,null,h.createElement("path",{d:"M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.21,107.21,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.71,107.71,0,0,0-26.25-10.87,8,8,0,0,0-7.06,1.49L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.21,107.21,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8,8,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8,8,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z"}))],["thin",h.createElement(h.Fragment,null,h.createElement("path",{d:"M128,84a44,44,0,1,0,44,44A44.05,44.05,0,0,0,128,84Zm0,80a36,36,0,1,1,36-36A36,36,0,0,1,128,164Zm83.93-32.49q.13-3.51,0-7l15.83-19.79a4,4,0,0,0,.75-3.53A103.64,103.64,0,0,0,218,75.9a4,4,0,0,0-3-2l-25.19-2.8c-1.58-1.71-3.24-3.37-4.95-4.95L182.07,41a4,4,0,0,0-2-3A104,104,0,0,0,154.82,27.5a4,4,0,0,0-3.53.74L131.51,44.07q-3.51-.14-7,0L104.7,28.24a4,4,0,0,0-3.53-.75A103.64,103.64,0,0,0,75.9,38a4,4,0,0,0-2,3l-2.8,25.19c-1.71,1.58-3.37,3.24-4.95,4.95L41,73.93a4,4,0,0,0-3,2A104,104,0,0,0,27.5,101.18a4,4,0,0,0,.74,3.53l15.83,19.78q-.14,3.51,0,7L28.24,151.3a4,4,0,0,0-.75,3.53A103.64,103.64,0,0,0,38,180.1a4,4,0,0,0,3,2l25.19,2.8c1.58,1.71,3.24,3.37,4.95,4.95l2.8,25.2a4,4,0,0,0,2,3,104,104,0,0,0,25.28,10.46,4,4,0,0,0,3.53-.74l19.78-15.83q3.51.13,7,0l19.79,15.83a4,4,0,0,0,2.5.88,4,4,0,0,0,1-.13A103.64,103.64,0,0,0,180.1,218a4,4,0,0,0,2-3l2.8-25.19c1.71-1.58,3.37-3.24,4.95-4.95l25.2-2.8a4,4,0,0,0,3-2,104,104,0,0,0,10.46-25.28,4,4,0,0,0-.74-3.53Zm.17,42.83-24.67,2.74a4,4,0,0,0-2.55,1.32,76.2,76.2,0,0,1-6.48,6.48,4,4,0,0,0-1.32,2.55l-2.74,24.66a95.45,95.45,0,0,1-19.64,8.15l-19.38-15.51a4,4,0,0,0-2.5-.87h-.24a73.67,73.67,0,0,1-9.16,0,4,4,0,0,0-2.74.87l-19.37,15.5a95.33,95.33,0,0,1-19.65-8.13l-2.74-24.67a4,4,0,0,0-1.32-2.55,76.2,76.2,0,0,1-6.48-6.48,4,4,0,0,0-2.55-1.32l-24.66-2.74a95.45,95.45,0,0,1-8.15-19.64l15.51-19.38a4,4,0,0,0,.87-2.74,77.76,77.76,0,0,1,0-9.16,4,4,0,0,0-.87-2.74l-15.5-19.37A95.33,95.33,0,0,1,43.9,81.66l24.67-2.74a4,4,0,0,0,2.55-1.32,76.2,76.2,0,0,1,6.48-6.48,4,4,0,0,0,1.32-2.55l2.74-24.66a95.45,95.45,0,0,1,19.64-8.15l19.38,15.51a4,4,0,0,0,2.74.87,73.67,73.67,0,0,1,9.16,0,4,4,0,0,0,2.74-.87l19.37-15.5a95.33,95.33,0,0,1,19.65,8.13l2.74,24.67a4,4,0,0,0,1.32,2.55,76.2,76.2,0,0,1,6.48,6.48,4,4,0,0,0,2.55,1.32l24.66,2.74a95.45,95.45,0,0,1,8.15,19.64l-15.51,19.38a4,4,0,0,0-.87,2.74,77.76,77.76,0,0,1,0,9.16,4,4,0,0,0,.87,2.74l15.5,19.37A95.33,95.33,0,0,1,212.1,174.34Z"}))]]);var C=s(c(),1),ca=new Map([["bold",C.createElement(C.Fragment,null,C.createElement("path",{d:"M124,216a12,12,0,0,1-12,12H48a12,12,0,0,1-12-12V40A12,12,0,0,1,48,28h64a12,12,0,0,1,0,24H60V204h52A12,12,0,0,1,124,216Zm108.49-96.49-40-40a12,12,0,0,0-17,17L195,116H112a12,12,0,0,0,0,24h83l-19.52,19.51a12,12,0,0,0,17,17l40-40A12,12,0,0,0,232.49,119.51Z"}))],["duotone",C.createElement(C.Fragment,null,C.createElement("path",{d:"M224,56V200a16,16,0,0,1-16,16H48V40H208A16,16,0,0,1,224,56Z",opacity:"0.2"}),C.createElement("path",{d:"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40a8,8,0,0,0-11.32,11.32L204.69,120H112a8,8,0,0,0,0,16h92.69l-26.35,26.34a8,8,0,0,0,11.32,11.32l40-40A8,8,0,0,0,229.66,122.34Z"}))],["fill",C.createElement(C.Fragment,null,C.createElement("path",{d:"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40A8,8,0,0,0,176,88v32H112a8,8,0,0,0,0,16h64v32a8,8,0,0,0,13.66,5.66l40-40A8,8,0,0,0,229.66,122.34Z"}))],["light",C.createElement(C.Fragment,null,C.createElement("path",{d:"M118,216a6,6,0,0,1-6,6H48a6,6,0,0,1-6-6V40a6,6,0,0,1,6-6h64a6,6,0,0,1,0,12H54V210h58A6,6,0,0,1,118,216Zm110.24-92.24-40-40a6,6,0,0,0-8.48,8.48L209.51,122H112a6,6,0,0,0,0,12h97.51l-29.75,29.76a6,6,0,1,0,8.48,8.48l40-40A6,6,0,0,0,228.24,123.76Z"}))],["regular",C.createElement(C.Fragment,null,C.createElement("path",{d:"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40a8,8,0,0,0-11.32,11.32L204.69,120H112a8,8,0,0,0,0,16h92.69l-26.35,26.34a8,8,0,0,0,11.32,11.32l40-40A8,8,0,0,0,229.66,122.34Z"}))],["thin",C.createElement(C.Fragment,null,C.createElement("path",{d:"M116,216a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V40a4,4,0,0,1,4-4h64a4,4,0,0,1,0,8H52V212h60A4,4,0,0,1,116,216Zm110.83-90.83-40-40a4,4,0,0,0-5.66,5.66L214.34,124H112a4,4,0,0,0,0,8H214.34l-33.17,33.17a4,4,0,0,0,5.66,5.66l40-40A4,4,0,0,0,226.83,125.17Z"}))]]);var w=s(c(),1),la=new Map([["bold",w.createElement(w.Fragment,null,w.createElement("path",{d:"M240.26,186.1,152.81,34.23h0a28.74,28.74,0,0,0-49.62,0L15.74,186.1a27.45,27.45,0,0,0,0,27.71A28.31,28.31,0,0,0,40.55,228h174.9a28.31,28.31,0,0,0,24.79-14.19A27.45,27.45,0,0,0,240.26,186.1Zm-20.8,15.7a4.46,4.46,0,0,1-4,2.2H40.55a4.46,4.46,0,0,1-4-2.2,3.56,3.56,0,0,1,0-3.73L124,46.2a4.77,4.77,0,0,1,8,0l87.44,151.87A3.56,3.56,0,0,1,219.46,201.8ZM116,136V104a12,12,0,0,1,24,0v32a12,12,0,0,1-24,0Zm28,40a16,16,0,1,1-16-16A16,16,0,0,1,144,176Z"}))],["duotone",w.createElement(w.Fragment,null,w.createElement("path",{d:"M215.46,216H40.54C27.92,216,20,202.79,26.13,192.09L113.59,40.22c6.3-11,22.52-11,28.82,0l87.46,151.87C236,202.79,228.08,216,215.46,216Z",opacity:"0.2"}),w.createElement("path",{d:"M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM222.93,203.8a8.5,8.5,0,0,1-7.48,4.2H40.55a8.5,8.5,0,0,1-7.48-4.2,7.59,7.59,0,0,1,0-7.72L120.52,44.21a8.75,8.75,0,0,1,15,0l87.45,151.87A7.59,7.59,0,0,1,222.93,203.8ZM120,144V104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,180Z"}))],["fill",w.createElement(w.Fragment,null,w.createElement("path",{d:"M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM120,104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm8,88a12,12,0,1,1,12-12A12,12,0,0,1,128,192Z"}))],["light",w.createElement(w.Fragment,null,w.createElement("path",{d:"M235.07,189.09,147.61,37.22h0a22.75,22.75,0,0,0-39.22,0L20.93,189.09a21.53,21.53,0,0,0,0,21.72A22.35,22.35,0,0,0,40.55,222h174.9a22.35,22.35,0,0,0,19.6-11.19A21.53,21.53,0,0,0,235.07,189.09ZM224.66,204.8a10.46,10.46,0,0,1-9.21,5.2H40.55a10.46,10.46,0,0,1-9.21-5.2,9.51,9.51,0,0,1,0-9.72L118.79,43.21a10.75,10.75,0,0,1,18.42,0l87.46,151.87A9.51,9.51,0,0,1,224.66,204.8ZM122,144V104a6,6,0,0,1,12,0v40a6,6,0,0,1-12,0Zm16,36a10,10,0,1,1-10-10A10,10,0,0,1,138,180Z"}))],["regular",w.createElement(w.Fragment,null,w.createElement("path",{d:"M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM222.93,203.8a8.5,8.5,0,0,1-7.48,4.2H40.55a8.5,8.5,0,0,1-7.48-4.2,7.59,7.59,0,0,1,0-7.72L120.52,44.21a8.75,8.75,0,0,1,15,0l87.45,151.87A7.59,7.59,0,0,1,222.93,203.8ZM120,144V104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,180Z"}))],["thin",w.createElement(w.Fragment,null,w.createElement("path",{d:"M233.34,190.09,145.88,38.22h0a20.75,20.75,0,0,0-35.76,0L22.66,190.09a19.52,19.52,0,0,0,0,19.71A20.36,20.36,0,0,0,40.54,220H215.46a20.36,20.36,0,0,0,17.86-10.2A19.52,19.52,0,0,0,233.34,190.09ZM226.4,205.8a12.47,12.47,0,0,1-10.94,6.2H40.54a12.47,12.47,0,0,1-10.94-6.2,11.45,11.45,0,0,1,0-11.72L117.05,42.21a12.76,12.76,0,0,1,21.9,0L226.4,194.08A11.45,11.45,0,0,1,226.4,205.8ZM124,144V104a4,4,0,0,1,8,0v40a4,4,0,0,1-8,0Zm12,36a8,8,0,1,1-8-8A8,8,0,0,1,136,180Z"}))]]);var q=s(c(),1);var ma=s(c(),1),pa=(0,ma.createContext)({color:"currentColor",size:"1em",weight:"regular",mirrored:!1});var b=q.forwardRef((o,a)=>{let{alt:r,color:e,size:i,weight:m,mirrored:k,children:y,weights:l,...x}=o,{color:G="currentColor",size:D,weight:A="regular",mirrored:O=!1,...v}=q.useContext(pa);return q.createElement("svg",{ref:a,xmlns:"http://www.w3.org/2000/svg",width:i??D,height:i??D,fill:e??G,viewBox:"0 0 256 256",transform:k||O?"scale(-1, 1)":void 0,...v,...x},!!r&&q.createElement("title",null,r),y,l.get(m??A))});b.displayName="IconBase";var j=s(c(),1);var Y=j.forwardRef((o,a)=>j.createElement(b,{ref:a,...o,weights:ra}));Y.displayName="ArrowSquareOutIcon";var $=s(c(),1);var oo=$.forwardRef((o,a)=>$.createElement(b,{ref:a,...o,weights:sa}));oo.displayName="CircleNotchIcon";var ao=s(c(),1);var ro=ao.forwardRef((o,a)=>ao.createElement(b,{ref:a,...o,weights:ea}));ro.displayName="CloudCheckIcon";var so=s(c(),1);var eo=so.forwardRef((o,a)=>so.createElement(b,{ref:a,...o,weights:na}));eo.displayName="CloudSlashIcon";var no=s(c(),1);var io=no.forwardRef((o,a)=>no.createElement(b,{ref:a,...o,weights:ia}));io.displayName="CloudXIcon";var to=s(c(),1);var co=to.forwardRef((o,a)=>to.createElement(b,{ref:a,...o,weights:ta}));co.displayName="GearIcon";var lo=s(c(),1);var mo=lo.forwardRef((o,a)=>lo.createElement(b,{ref:a,...o,weights:ca}));mo.displayName="SignOutIcon";var po=s(c(),1);var Io=po.forwardRef((o,a)=>po.createElement(b,{ref:a,...o,weights:la}));Io.displayName="WarningIcon";var Ia=s(L()),Va=o=>(0,Ia.jsx)(oo,{size:o.size,className:"plotly-cloud-spin plotly-cloud-gray-icon",weight:"bold"}),z=Va;var P=s(L()),za=({initialAppName:o="",teams:a,loadingTeams:r,onCancel:e,onPublish:i,sizeError:m=""})=>{let[k,y]=(0,W.useState)(o),[l,x]=(0,W.useState)("");(0,W.useEffect)(()=>{a.length>0&&!l&&x(a[0].team.id)},[a,l]);let G=A=>{if(A.preventDefault(),k.trim()&&!m){let O=a.find(v=>v.team.id===l);i(k.trim(),l||void 0,O?.team.name||void 0)}},D=(0,W.useMemo)(()=>{if(!(r||!a||!a.length))return a.find(A=>A.team.id===l)},[a]);return r?null:(0,P.jsxs)("div",{className:"plotly-cloud-name-input",children:[m&&(0,P.jsx)("div",{className:"plotly-cloud-size-error",children:m}),(0,P.jsxs)("form",{onSubmit:G,children:[(0,P.jsx)("div",{className:"plotly-cloud-name-input-label",children:"App Name"}),(0,P.jsx)("input",{type:"text",value:k,onChange:A=>y(A.target.value),placeholder:"My Dash App",className:"plotly-cloud-name-input-field",disabled:!!m||r}),(0,P.jsx)("div",{className:"plotly-cloud-name-input-label",style:{marginTop:"16px"},children:"Team"}),r?(0,P.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"8px"},children:[(0,P.jsx)(z,{size:16}),(0,P.jsx)("span",{style:{marginLeft:"8px"},children:"Loading teams..."})]}):a.length===0?(0,P.jsx)("div",{style:{padding:"8px",color:"#666"},children:"No teams available"}):(0,P.jsx)("select",{value:l,onChange:A=>x(A.target.value),className:"plotly-cloud-name-input-field",disabled:!!m,children:a?.map(A=>(0,P.jsx)("option",{value:A.team.id,children:A.team.name},A.team.id))}),D&&D.team.description&&(0,P.jsx)("div",{style:{marginTop:"8px",fontSize:"12px",color:"#666"},children:D.team.description}),(0,P.jsx)("div",{className:"plotly-cloud-button-bar",children:(0,P.jsx)("button",{type:"submit",disabled:!k.trim()||!!m||r||a.length===0,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",children:"Publish App"})})]})]})},fa=za;var uo=s(c());var Z=s(L()),Za=({status:o,size:a=16,isButtonIcon:r})=>o==="BUILDING"||o==="STARTING"||o==="unknown"?(0,Z.jsx)(z,{size:a}):o==="RUNNING"?(0,Z.jsx)(ro,{size:a,className:"plotly-cloud-green-icon",weight:r?"fill":"duotone"}):o==="new"?(0,Z.jsx)(eo,{size:a,className:"plotly-cloud-gray-icon",weight:r?"fill":"duotone"}):(0,Z.jsx)(io,{size:a,className:"plotly-cloud-red-icon",weight:"duotone"}),fo=Za;var p=s(L()),_a=({status:o,onPublish:a,isUpdate:r,publishing:e,onCancel:i,onLogout:m,appUrl:k,teamName:y,sizeError:l=""})=>{let x=()=>{i&&i()},G=()=>{window.open(k,"_blank")},[D,A,O]=(0,uo.useMemo)(()=>o==="BUILDING"||o==="STARTING"?["App is building","Wait for your app to finish publishing before publishing again","gray"]:o==="RUNNING"?["App is live","Your app is running in Plotly Cloud.","green"]:["App is stopped","Start your app by publishing again or starting it in the app manager","red"],[o]),[v,_]=(0,uo.useMemo)(()=>e?r?["Open Settings in Plotly Cloud","Republishing",""]:[null,"Publishing",""]:r?[(0,p.jsxs)("span",{children:[(0,p.jsx)(co,{}),"\xA0Open Settings in Plotly Cloud"]}),"Republish"]:[null,"Publish",""],[e,r]),V=(0,uo.useMemo)(()=>["BUILDING","STARTING"].includes(o)||!!l,[o,l]);return(0,p.jsxs)("div",{className:"plotly-cloud-status-banner",children:[l&&(0,p.jsx)("div",{className:"plotly-cloud-size-error",children:l}),(0,p.jsxs)("div",{className:`plotly-cloud-status-info plotly-cloud-status-${O}`,children:[(0,p.jsx)(fo,{status:o,size:20}),(0,p.jsxs)("div",{className:"plotly-cloud-status-description",children:[(0,p.jsx)("div",{className:"plotly-cloud-status-title",children:D}),(0,p.jsx)("div",{className:"plotly-cloud-status-text",children:A}),y&&(0,p.jsxs)("div",{style:{marginTop:"4px",fontSize:"12px",color:"#666"},children:["Team: ",y]})]})]}),(0,p.jsxs)("div",{className:"plotly-cloud-button-bar",children:[(0,p.jsx)("div",{style:{flex:1},children:(0,p.jsxs)("button",{disabled:e,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary plotly-cloud-logout",onClick:m,children:[(0,p.jsx)(mo,{}),"\xA0Logout"]})}),v?(0,p.jsx)("button",{type:"button",onClick:x,disabled:r?!1:e,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary",children:v}):null,k?(0,p.jsx)("button",{onClick:G,disabled:e,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary",children:(0,p.jsxs)("span",{children:[(0,p.jsx)(Y,{}),"\xA0View App"]})}):null,(0,p.jsxs)("button",{type:"button",onClick:a,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",disabled:e||V,children:[e?(0,p.jsx)(z,{size:12}):null,_]})]})]})},Lo=_a;var go=s(L()),Xa=({error:o})=>(0,go.jsxs)("div",{className:"plotly-cloud-error",children:[(0,go.jsx)(Io,{className:"plotly-cloud-red-icon",size:24}),"\xA0",o]}),ua=Xa;function da(o){switch(o){case"BUILDING":return 1e4;case"STARTING":return 7e3;case"CHECKING":case"STOPPING":return 15e3;case"RUNNING":return 18e4;case"FAILING":case"PENDING_ENTITLEMENTS":case"BUILD_COMPLETED":case"BUILD_FAILED":case"STOPPED":case"DEPLOYED_BY_OTHER_PLATFORM":return 6e4;default:return 6e4}}var T=s(L()),So="cloud",Ja=()=>{let{popup:o,setPopup:a}=window.dash_component_api.devtool.useDevtool(),r=window.dash_component_api.devtool.useDevtoolMenuButtonClassName(So),[e,i]=(0,t.useState)(""),[m,k]=(0,t.useState)(""),[y,l]=(0,t.useState)("initialize"),[x,G]=(0,t.useState)(!1),[D,A]=(0,t.useState)(""),[O,v]=(0,t.useState)(""),[_,V]=(0,t.useState)(!1),[ga,ho]=(0,t.useState)(!1),[bo,Sa]=(0,t.useState)(""),[Po,To]=(0,t.useState)(""),[ko,yo]=(0,t.useState)(""),[Co,ha]=(0,t.useState)([]),[Fo,Bo]=(0,t.useState)(!1),[Do,Ho]=(0,t.useState)(""),[M,U]=(0,t.useState)("unknown"),[Mo,Ro]=(0,t.useState)(0),[Ca,wa]=(0,t.useState)(1),[No,xo]=(0,t.useState)(-1),X=(0,t.useRef)(""),R=(0,t.useRef)(""),B=(0,t.useMemo)(()=>$o("/"),[]),vo=(0,t.useMemo)(()=>o===So,[o]),J=()=>{a("")},La=()=>{a(o===So?"":So)},Uo=()=>{B.logout().then(()=>{l("initialize")})},Eo=()=>{G(!0),B.authenticate().then(n=>{n.error?i(n.error):(l("auth_poll"),A(n.result.user_code),v(n.result.verification_uri_complete),X.current=n.result.device_code,B.wait_auth().then(()=>{window.open(n.result.verification_uri_complete,"_blank"),xo(setTimeout(()=>{B.auth_poll({device_code:X.current}).then(Go)},8e3))}))})},Go=n=>{if(n.error)i(n.error);else{if(n.result.success){X.current="",R.current?(U("unknown"),l("update_app"),B.status({app_id:R.current}).then(H=>{U(H.result.status)})):(Oo(),l("enter_name"));return}if(n.result.try_again){Eo();return}let I=Ca||1;n.result.delay&&(I=n.result.delay,wa(I)),xo(setTimeout(()=>{B.auth_poll({device_code:X.current}).then(Go)},1e3+I*1e3))}},Aa=()=>{setTimeout(Eo,2e3)},Oo=()=>{Bo(!0),B.fetch_teams().then(n=>{n.error?console.error("Failed to fetch teams:",n.error):ha(n.result.teams),Bo(!1)})};(0,t.useEffect)(()=>{y==="initialize"&&B.initialize().then(n=>{let{result:I,error:H}=n;H?i(H):(Sa(I.app_path),To(I.app_name),U(I.status),yo(I.app_url),k(I.size_error||""),I.team_name&&Ho(I.team_name),I.app_id&&(R.current=I.app_id),I?.authenticated?I.status==="new"?(Oo(),l("enter_name")):l("update_app"):l("sign_in"))})},[y,vo]);let ba=()=>{B.status({app_id:R.current}).then(Pa)},Pa=n=>{if(n.error){i(n.error);return}U(n.result.status),Ro(Date.now()),n.result.status==="RUNNING"?(V(!1),ho(!0),l("update_app")):["BUILDING","STARTING"].includes(n.result.status)||(V(!1),l("update_app"))},qo=n=>{if(n.error){i(n.error);return}l("status_poll"),R.current=n.result.app_id,yo(n.result.app_url),U("BUILDING"),Ro(0)},Wo=(n,I,H)=>{To(n),H&&Ho(H),V(!0),ho(!1),U("BUILDING"),B.publish({app_path:bo,app_name:n,team_id:I,team_name:H}).then(qo)},Vo=()=>{V(!0),ho(!0),U("BUILDING"),B.publish({app_id:R.current,app_path:bo}).then(qo)};(0,t.useEffect)(()=>{if(!R.current||M==="unknown"||M==="new")return;let n=setInterval(()=>{let H=Date.now()-Mo,Ta=da(M);H>=Ta&&ba()},1e3);return()=>{clearInterval(n)}},[R.current,M,Mo]),(0,t.useEffect)(()=>()=>{No>0&&clearTimeout(No)}),(0,t.useEffect)(()=>{e&&M!=="error"&&U("error")},[e,M]);let zo=()=>{window.open(`https://cloud.plotly.com/app/${R.current}/settings`,"_blank")};return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsxs)("button",{className:r,onClick:La,children:[(0,T.jsx)(fo,{status:M,isButtonIcon:!0}),"\xA0Plotly Cloud"]}),vo?(0,T.jsx)(Qo,{title:"Plotly Cloud",onClose:J,children:e?(0,T.jsx)(ua,{error:e}):(()=>{switch(y){case"authenticate":case"auth_poll":case"sign_in":return(0,T.jsx)(Yo,{onSignIn:Aa,waiting:x,userCode:D,verificationUrlComplete:O});case"enter_name":return!Fo&&Co.length===1?(0,T.jsx)(aa,{onPublish:n=>{let I=Co[0];Wo(n,I.team.id,I.team.name)},onCancel:J,initialAppName:Po,sizeError:m}):(0,T.jsx)(fa,{onPublish:Wo,onCancel:J,initialAppName:Po,teams:Co,loadingTeams:Fo,sizeError:m});case"update_app":return(0,T.jsx)(Lo,{onPublish:Vo,status:M,isUpdate:!0,onCancel:zo,appUrl:ko,teamName:Do,onLogout:Uo,sizeError:m});case"status_poll":case"publish":return(0,T.jsx)(Lo,{publishing:_,onPublish:Vo,status:M,onCancel:_?zo:J,isUpdate:ga,appUrl:ko,teamName:Do,onLogout:Uo,sizeError:m});default:return(0,T.jsx)(T.Fragment,{})}})()},"publish-modal"):null]})},Ao=Ja;typeof window<"u"&&(window.plotly_cloud_publish_component={PlotlyCloudPublishComponent:Ao});return Ma(Ka);})();
|
|
3
|
+
/*! Bundled license information:
|
|
4
|
+
|
|
5
|
+
react/cjs/react-jsx-runtime.production.min.js:
|
|
6
|
+
(**
|
|
7
|
+
* @license React
|
|
8
|
+
* react-jsx-runtime.production.min.js
|
|
9
|
+
*
|
|
10
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
11
|
+
*
|
|
12
|
+
* This source code is licensed under the MIT license found in the
|
|
13
|
+
* LICENSE file in the root directory of this source tree.
|
|
14
|
+
*)
|
|
15
|
+
*/
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
"""Custom exceptions for Plotly Cloud
|
|
1
|
+
"""Custom exceptions for Plotly Cloud Extension."""
|
|
2
2
|
|
|
3
3
|
from typing import Optional
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class PlotlyCloudError(Exception):
|
|
7
|
-
"""Base exception for all Plotly Cloud
|
|
7
|
+
"""Base exception for all Plotly Cloud Extension errors."""
|
|
8
8
|
|
|
9
9
|
def __init__(self, message: str, details: Optional[str] = None):
|
|
10
10
|
"""Initialize exception with message and optional details."""
|
|
@@ -4,20 +4,21 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "plotly-cloud"
|
|
7
|
-
version = "0.1
|
|
8
|
-
description = "
|
|
7
|
+
version = "0.2.1"
|
|
8
|
+
description = "Python extension for Plotly Cloud with CLI and Dash dev tools integration"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
11
11
|
dependencies = [
|
|
12
12
|
"httpx>=0.24.0,<1.0.0",
|
|
13
|
-
"dash>=2.0
|
|
13
|
+
"dash>=3.2.0",
|
|
14
14
|
"rich>=10.0.0",
|
|
15
|
-
"rich-argparse>=1.7.1",
|
|
16
15
|
"tomli>=2.2.1",
|
|
17
16
|
"tomli-w>=1.2.0",
|
|
18
|
-
"nest-asyncio>=1.6.0",
|
|
19
17
|
]
|
|
20
18
|
|
|
19
|
+
[project.urls]
|
|
20
|
+
Repository = "https://github.com/plotly/plotly-cloud-extension"
|
|
21
|
+
|
|
21
22
|
[project.scripts]
|
|
22
23
|
plotly = "plotly_cloud.cli:main"
|
|
23
24
|
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
const React = window.React; const ReactDOM = window.ReactDOM;
|
|
2
|
-
"use strict";var plotly_cloud_publish_component=(()=>{var ga=Object.create;var Z=Object.defineProperty;var Sa=Object.getOwnPropertyDescriptor;var ha=Object.getOwnPropertyNames;var Ca=Object.getPrototypeOf,wa=Object.prototype.hasOwnProperty;var So=(o,a)=>()=>(a||o((a={exports:{}}).exports,a),a.exports),La=(o,a)=>{for(var s in a)Z(o,s,{get:a[s],enumerable:!0})},xo=(o,a,s,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let n of ha(a))!wa.call(o,n)&&n!==s&&Z(o,n,{get:()=>a[n],enumerable:!(r=Sa(a,n))||r.enumerable});return o};var e=(o,a,s)=>(s=o!=null?ga(Ca(o)):{},xo(a||!o||!o.__esModule?Z(s,"default",{value:o,enumerable:!0}):s,o)),Aa=o=>xo(Z({},"__esModule",{value:!0}),o);var c=So((qa,Uo)=>{Uo.exports=React});var Eo=So(_=>{"use strict";var ba=c(),Pa=Symbol.for("react.element"),ka=Symbol.for("react.fragment"),Ta=Object.prototype.hasOwnProperty,ya=ba.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Fa={key:!0,ref:!0,__self:!0,__source:!0};function vo(o,a,s){var r,n={},L=null,T=null;s!==void 0&&(L=""+s),a.key!==void 0&&(L=""+a.key),a.ref!==void 0&&(T=a.ref);for(r in a)Ta.call(a,r)&&!Fa.hasOwnProperty(r)&&(n[r]=a[r]);if(o&&o.defaultProps)for(r in a=o.defaultProps,a)n[r]===void 0&&(n[r]=a[r]);return{$$typeof:Pa,type:o,key:L,ref:T,props:n,_owner:ya.current}}_.Fragment=ka;_.jsx=vo;_.jsxs=vo});var h=So((Va,Go)=>{"use strict";Go.exports=Eo()});var Ea={};La(Ea,{PlotlyCloudPublishComponent:()=>Co});var t=e(c());var M=e(h()),Ba=({title:o,onClose:a,children:s})=>(0,M.jsx)("div",{className:"plotly-cloud-publish-modal-overlay",children:(0,M.jsxs)("div",{className:"plotly-cloud-publish-modal-content",children:[(0,M.jsxs)("div",{className:"plotly-cloud-publish-modal-header",children:[(0,M.jsx)("h3",{children:o},"modal-title"),(0,M.jsx)("button",{className:"plotly-cloud-publish-modal-close",onClick:a,children:"\xD7"},"modal-close")]}),(0,M.jsx)("div",{className:"plotly-cloud-publish-modal-body",children:s},"modal-body")]})}),Oo=Ba;var qo=e(c()),k=e(h()),Da=o=>{let[a,s]=(0,qo.useState)(o.waiting);return(0,k.jsx)("div",{className:"plotly-cloud-publish-signin",children:a?(0,k.jsxs)("div",{children:[o.verificationUrlComplete?(0,k.jsxs)("div",{children:["A browser window should open for sign-in."," ",(0,k.jsx)("a",{href:o.verificationUrlComplete,target:"_blank",rel:"noopener noreferrer",children:"Click here"})," ","if it doesn't open automatically."]}):(0,k.jsx)("div",{children:"Preparing sign-in..."}),o.userCode?(0,k.jsxs)("div",{className:"plotly-cloud-confirm-code",children:["Confirm your device code"," ",(0,k.jsx)("span",{className:"plotly-cloud-user-code",children:o.userCode})," ","when prompted."]}):null]}):(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)("span",{children:"Sign in to publish your app to Plotly Cloud."}),(0,k.jsx)("button",{className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",onClick:()=>{s(!0),o.onSignIn()},children:"Sign In"})]})})},Wo=Da;var Ha=o=>{let a=async r=>await(await fetch(`${o}_plotly_cloud_publish`,{method:"POST",body:JSON.stringify(r),headers:{"Content-Type":"application/json"}})).json(),s=r=>n=>a({operation:r,data:n});return{initialize:s("initialize"),authenticate:s("authenticate"),auth_poll:s("auth_poll"),publish:s("publish"),status:s("status"),wait_auth:s("wait_auth"),logout:s("logout")}},Vo=Ha;var zo=e(c()),D=e(h()),Ma=({initialAppName:o="",onCancel:a,onPublish:s,sizeError:r=""})=>{let[n,L]=(0,zo.useState)(o);return(0,D.jsxs)("div",{className:"plotly-cloud-name-input",children:[r&&(0,D.jsx)("div",{className:"plotly-cloud-size-error",children:r}),(0,D.jsx)("div",{className:"plotly-cloud-name-input-label",children:"App Name"}),(0,D.jsxs)("form",{onSubmit:A=>{A.preventDefault(),n.trim()&&!r&&s(n.trim())},children:[(0,D.jsx)("input",{type:"text",value:n,onChange:A=>L(A.target.value),placeholder:"My Dash App",className:"plotly-cloud-name-input-field",disabled:!!r}),(0,D.jsx)("div",{className:"plotly-cloud-button-bar",children:(0,D.jsx)("button",{type:"submit",disabled:!n.trim()||!!r,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",children:"Publish App"})})]})]})},Zo=Ma;var po=e(c());var l=e(c(),1),_o=new Map([["bold",l.createElement(l.Fragment,null,l.createElement("path",{d:"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z"}))],["duotone",l.createElement(l.Fragment,null,l.createElement("path",{d:"M184,80V208a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V80a8,8,0,0,1,8-8H176A8,8,0,0,1,184,80Z",opacity:"0.2"}),l.createElement("path",{d:"M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"}))],["fill",l.createElement(l.Fragment,null,l.createElement("path",{d:"M192,136v72a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V80A16,16,0,0,1,48,64h72a8,8,0,0,1,0,16H48V208H176V136a8,8,0,0,1,16,0Zm32-96a8,8,0,0,0-8-8H152a8,8,0,0,0-5.66,13.66L172.69,72l-42.35,42.34a8,8,0,0,0,11.32,11.32L184,83.31l26.34,26.35A8,8,0,0,0,224,104Z"}))],["light",l.createElement(l.Fragment,null,l.createElement("path",{d:"M222,104a6,6,0,0,1-12,0V54.49l-69.75,69.75a6,6,0,0,1-8.48-8.48L201.51,46H152a6,6,0,0,1,0-12h64a6,6,0,0,1,6,6Zm-38,26a6,6,0,0,0-6,6v72a2,2,0,0,1-2,2H48a2,2,0,0,1-2-2V80a2,2,0,0,1,2-2h72a6,6,0,0,0,0-12H48A14,14,0,0,0,34,80V208a14,14,0,0,0,14,14H176a14,14,0,0,0,14-14V136A6,6,0,0,0,184,130Z"}))],["regular",l.createElement(l.Fragment,null,l.createElement("path",{d:"M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"}))],["thin",l.createElement(l.Fragment,null,l.createElement("path",{d:"M220,104a4,4,0,0,1-8,0V49.66l-73.16,73.17a4,4,0,0,1-5.66-5.66L206.34,44H152a4,4,0,0,1,0-8h64a4,4,0,0,1,4,4Zm-36,28a4,4,0,0,0-4,4v72a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V80a4,4,0,0,1,4-4h72a4,4,0,0,0,0-8H48A12,12,0,0,0,36,80V208a12,12,0,0,0,12,12H176a12,12,0,0,0,12-12V136A4,4,0,0,0,184,132Z"}))]]);var m=e(c(),1),Xo=new Map([["bold",m.createElement(m.Fragment,null,m.createElement("path",{d:"M236,128a108,108,0,0,1-216,0c0-42.52,24.73-81.34,63-98.9A12,12,0,1,1,93,50.91C63.24,64.57,44,94.83,44,128a84,84,0,0,0,168,0c0-33.17-19.24-63.43-49-77.09A12,12,0,1,1,173,29.1C211.27,46.66,236,85.48,236,128Z"}))],["duotone",m.createElement(m.Fragment,null,m.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),m.createElement("path",{d:"M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"}))],["fill",m.createElement(m.Fragment,null,m.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,176A72,72,0,0,1,92,65.64a8,8,0,0,1,8,13.85,56,56,0,1,0,56,0,8,8,0,0,1,8-13.85A72,72,0,0,1,128,200Z"}))],["light",m.createElement(m.Fragment,null,m.createElement("path",{d:"M230,128a102,102,0,0,1-204,0c0-40.18,23.35-76.86,59.5-93.45a6,6,0,0,1,5,10.9C58.61,60.09,38,92.49,38,128a90,90,0,0,0,180,0c0-35.51-20.61-67.91-52.5-82.55a6,6,0,0,1,5-10.9C206.65,51.14,230,87.82,230,128Z"}))],["regular",m.createElement(m.Fragment,null,m.createElement("path",{d:"M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"}))],["thin",m.createElement(m.Fragment,null,m.createElement("path",{d:"M228,128a100,100,0,0,1-200,0c0-39.4,22.9-75.37,58.33-91.63a4,4,0,1,1,3.34,7.27C57.07,58.6,36,91.71,36,128a92,92,0,0,0,184,0c0-36.29-21.07-69.4-53.67-84.36a4,4,0,1,1,3.34-7.27C205.1,52.63,228,88.6,228,128Z"}))]]);var p=e(c(),1),Jo=new Map([["bold",p.createElement(p.Fragment,null,p.createElement("path",{d:"M160,36A92.09,92.09,0,0,0,79,84.36,68,68,0,1,0,72,220h88a92,92,0,0,0,0-184Zm0,160H72a44,44,0,0,1-1.82-88A91.86,91.86,0,0,0,68,128a12,12,0,0,0,24,0,68,68,0,1,1,68,68Zm40.49-92.49a12,12,0,0,1,0,17l-48,48a12,12,0,0,1-17,0l-24-24a12,12,0,1,1,17-17L144,143l39.51-39.52A12,12,0,0,1,200.49,103.51Z"}))],["duotone",p.createElement(p.Fragment,null,p.createElement("path",{d:"M240,128a80,80,0,0,1-80,80H72A56,56,0,1,1,85.92,97.74l0,.1A80,80,0,0,1,240,128Z",opacity:"0.2"}),p.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm37.66-93.66a8,8,0,0,1,0,11.32l-48,48a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L144,148.69l42.34-42.35A8,8,0,0,1,197.66,106.34Z"}))],["fill",p.createElement(p.Fragment,null,p.createElement("path",{d:"M247.93,124.52C246.11,77.54,207.07,40,160.06,40A88.1,88.1,0,0,0,81.29,88.67h0A87.48,87.48,0,0,0,72,127.73,8.18,8.18,0,0,1,64.57,136,8,8,0,0,1,56,128a103.66,103.66,0,0,1,5.34-32.92,4,4,0,0,0-4.75-5.18A64.09,64.09,0,0,0,8,152c0,35.19,29.75,64,65,64H160A88.09,88.09,0,0,0,247.93,124.52Zm-50.27-6.86-48,48a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L144,148.69l42.34-42.35a8,8,0,0,1,11.32,11.32Z"}))],["light",p.createElement(p.Fragment,null,p.createElement("path",{d:"M160,42A86.11,86.11,0,0,0,82.43,90.88,62,62,0,1,0,72,214h88a86,86,0,0,0,0-172Zm0,160H72a50,50,0,0,1,0-100,50.67,50.67,0,0,1,5.91.35A85.61,85.61,0,0,0,74,128a6,6,0,0,0,12,0,74,74,0,1,1,74,74Zm36.24-94.24a6,6,0,0,1,0,8.48l-48,48a6,6,0,0,1-8.48,0l-24-24a6,6,0,0,1,8.48-8.48L144,151.51l43.76-43.75A6,6,0,0,1,196.24,107.76Z"}))],["regular",p.createElement(p.Fragment,null,p.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm37.66-93.66a8,8,0,0,1,0,11.32l-48,48a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L144,148.69l42.34-42.35A8,8,0,0,1,197.66,106.34Z"}))],["thin",p.createElement(p.Fragment,null,p.createElement("path",{d:"M160,44A84.11,84.11,0,0,0,83.59,93.12,60.71,60.71,0,0,0,72,92a60,60,0,0,0,0,120h88a84,84,0,0,0,0-168Zm0,160H72a52,52,0,1,1,8.55-103.3A83.66,83.66,0,0,0,76,128a4,4,0,0,0,8,0,76,76,0,1,1,76,76Zm34.83-94.83a4,4,0,0,1,0,5.66l-48,48a4,4,0,0,1-5.66,0l-24-24a4,4,0,0,1,5.66-5.66L144,154.34l45.17-45.17A4,4,0,0,1,194.83,109.17Z"}))]]);var I=e(c(),1),Ko=new Map([["bold",I.createElement(I.Fragment,null,I.createElement("path",{d:"M56.88,31.93A12,12,0,1,0,39.12,48.07L71.79,84A68,68,0,0,0,72,220h88a91.26,91.26,0,0,0,30.66-5.24l8.46,9.31a12,12,0,0,0,17.76-16.14ZM160,196H72a44,44,0,0,1-1.8-87.95A91.91,91.91,0,0,0,68,128a12,12,0,0,0,24,0,68.22,68.22,0,0,1,2.66-18.84l77.88,85.67A68.67,68.67,0,0,1,160,196Zm92-68a91.32,91.32,0,0,1-17.53,54,12,12,0,1,1-19.41-14.11,68,68,0,0,0-89.57-98.53,12,12,0,0,1-12.2-20.66A92,92,0,0,1,252,128Z"}))],["duotone",I.createElement(I.Fragment,null,I.createElement("path",{d:"M240,128a80,80,0,0,1-80,80H72A56,56,0,1,1,85.92,97.74l0,.1A80,80,0,0,1,240,128Z",opacity:"0.2"}),I.createElement("path",{d:"M53.92,34.62A8,8,0,1,0,42.08,45.38L81.32,88.55l-.06.12A65,65,0,0,0,72,88a64,64,0,0,0,0,128h88a87.34,87.34,0,0,0,31.8-5.93l10.28,11.31a8,8,0,1,0,11.84-10.76ZM160,200H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.3.12A88.4,88.4,0,0,0,72,128a8,8,0,0,0,16,0,72.25,72.25,0,0,1,5.06-26.54l87,95.7A71.66,71.66,0,0,1,160,200Zm88-72a87.89,87.89,0,0,1-22.35,58.61A8,8,0,0,1,213.71,176,72,72,0,0,0,117.37,70a8,8,0,0,1-9.48-12.89A88,88,0,0,1,248,128Z"}))],["fill",I.createElement(I.Fragment,null,I.createElement("path",{d:"M248,128.72A87.74,87.74,0,0,1,222.41,190a4,4,0,0,1-5.77-.16L103.78,65.67a4,4,0,0,1,.39-5.76A87.82,87.82,0,0,1,160.87,40C209.15,40.47,248.38,80.43,248,128.72ZM53.92,34.62A8,8,0,1,0,42.08,45.38L81.33,88.56l-.06.11A64,64,0,0,0,8,153c.53,35.12,29.84,63,65,63h87a87.65,87.65,0,0,0,31.78-5.95l10.3,11.33a8,8,0,0,0,11.33.52,8.32,8.32,0,0,0,.29-11.52Z"}))],["light",I.createElement(I.Fragment,null,I.createElement("path",{d:"M52.44,36A6,6,0,0,0,43.56,44l40.18,44.2c-.45.87-.9,1.75-1.32,2.64A62,62,0,1,0,72,214h88a85.23,85.23,0,0,0,32.35-6.3L203.56,220a6,6,0,0,0,8.88-8.08ZM160,202H72a50,50,0,1,1,5.9-99.64A86.25,86.25,0,0,0,74,128a6,6,0,0,0,12,0,73.92,73.92,0,0,1,6.44-30.2l91.22,100.34A73.65,73.65,0,0,1,160,202Zm86-74a85.85,85.85,0,0,1-21.85,57.27,6,6,0,0,1-4.47,2,6,6,0,0,1-4.47-10,74,74,0,0,0-99-108.92,6,6,0,1,1-7.11-9.67A86,86,0,0,1,246,128Z"}))],["regular",I.createElement(I.Fragment,null,I.createElement("path",{d:"M53.92,34.62A8,8,0,1,0,42.08,45.38L81.32,88.55l-.06.12A65,65,0,0,0,72,88a64,64,0,0,0,0,128h88a87.34,87.34,0,0,0,31.8-5.93l10.28,11.31a8,8,0,1,0,11.84-10.76ZM160,200H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.3.12A88.4,88.4,0,0,0,72,128a8,8,0,0,0,16,0,72.25,72.25,0,0,1,5.06-26.54l87,95.7A71.66,71.66,0,0,1,160,200Zm88-72a87.89,87.89,0,0,1-22.35,58.61A8,8,0,0,1,213.71,176,72,72,0,0,0,117.37,70a8,8,0,0,1-9.48-12.89A88,88,0,0,1,248,128Z"}))],["thin",I.createElement(I.Fragment,null,I.createElement("path",{d:"M51,37.31A4,4,0,0,0,45,42.69L86.16,87.93q-1.38,2.55-2.59,5.19A60,60,0,1,0,72,212h88a83.19,83.19,0,0,0,32.88-6.69L205,218.69a4,4,0,1,0,5.92-5.38ZM160,204H72a52,52,0,0,1,0-104,52.92,52.92,0,0,1,8.54.72A84.21,84.21,0,0,0,76,128a4,4,0,0,0,8,0,76,76,0,0,1,7.9-33.76L187.13,199A75.37,75.37,0,0,1,160,204Zm84-76a83.86,83.86,0,0,1-21.34,55.94,4,4,0,1,1-6-5.33A76,76,0,0,0,115,66.75a4,4,0,0,1-4.74-6.45A84,84,0,0,1,244,128Z"}))]]);var f=e(c(),1),Qo=new Map([["bold",f.createElement(f.Fragment,null,f.createElement("path",{d:"M160,36A92.09,92.09,0,0,0,79,84.36,68,68,0,1,0,72,220h88a92,92,0,0,0,0-184Zm0,160H72a44,44,0,0,1-1.82-88A91.86,91.86,0,0,0,68,128a12,12,0,0,0,24,0,68,68,0,1,1,68,68Zm32.49-79.51L177,132l15.52,15.51a12,12,0,0,1-17,17L160,149l-15.51,15.52a12,12,0,1,1-17-17L143,132l-15.52-15.51a12,12,0,1,1,17-17L160,115l15.51-15.52a12,12,0,0,1,17,17Z"}))],["duotone",f.createElement(f.Fragment,null,f.createElement("path",{d:"M240,127.62a80,80,0,0,1-80,80H72A56,56,0,1,1,85.92,97.36l0,.1A80,80,0,0,1,240,127.62Z",opacity:"0.2"}),f.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm29.66-82.34L171.31,136l18.35,18.34a8,8,0,0,1-11.32,11.32L160,147.31l-18.34,18.35a8,8,0,0,1-11.32-11.32L148.69,136l-18.35-18.34a8,8,0,0,1,11.32-11.32L160,124.69l18.34-18.35a8,8,0,0,1,11.32,11.32Z"}))],["fill",f.createElement(f.Fragment,null,f.createElement("path",{d:"M247.93,124.52C246.11,77.54,207.07,40,160.06,40A88.1,88.1,0,0,0,81.29,88.67h0A87.48,87.48,0,0,0,72,127.73,8.18,8.18,0,0,1,64.57,136,8,8,0,0,1,56,128a103.66,103.66,0,0,1,5.34-32.92,4,4,0,0,0-4.75-5.18A64.09,64.09,0,0,0,8,152c0,35.19,29.75,64,65,64H160A88.09,88.09,0,0,0,247.93,124.52Zm-58.27,29.82a8,8,0,0,1-11.32,11.32L160,147.31l-18.34,18.35a8,8,0,0,1-11.32-11.32L148.69,136l-18.35-18.34a8,8,0,0,1,11.32-11.32L160,124.69l18.34-18.35a8,8,0,0,1,11.32,11.32L171.31,136Z"}))],["light",f.createElement(f.Fragment,null,f.createElement("path",{d:"M160,42A86.11,86.11,0,0,0,82.43,90.88,62,62,0,1,0,72,214h88a86,86,0,0,0,0-172Zm0,160H72a50,50,0,0,1,0-100,50.67,50.67,0,0,1,5.91.35A85.61,85.61,0,0,0,74,128a6,6,0,0,0,12,0,74,74,0,1,1,74,74Zm28.24-85.76L168.48,136l19.76,19.76a6,6,0,1,1-8.48,8.48L160,144.48l-19.76,19.76a6,6,0,0,1-8.48-8.48L151.52,136l-19.76-19.76a6,6,0,0,1,8.48-8.48L160,127.52l19.76-19.76a6,6,0,0,1,8.48,8.48Z"}))],["regular",f.createElement(f.Fragment,null,f.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm29.66-82.34L171.31,136l18.35,18.34a8,8,0,0,1-11.32,11.32L160,147.31l-18.34,18.35a8,8,0,0,1-11.32-11.32L148.69,136l-18.35-18.34a8,8,0,0,1,11.32-11.32L160,124.69l18.34-18.35a8,8,0,0,1,11.32,11.32Z"}))],["thin",f.createElement(f.Fragment,null,f.createElement("path",{d:"M160,44A84.11,84.11,0,0,0,83.59,93.12,60.71,60.71,0,0,0,72,92a60,60,0,0,0,0,120h88a84,84,0,0,0,0-168Zm0,160H72a52,52,0,1,1,8.55-103.3A83.66,83.66,0,0,0,76,128a4,4,0,0,0,8,0,76,76,0,1,1,76,76Zm26.83-89.17L165.66,136l21.17,21.17a4,4,0,0,1-5.66,5.66L160,141.66l-21.17,21.17a4,4,0,0,1-5.66-5.66L154.34,136l-21.17-21.17a4,4,0,0,1,5.66-5.66L160,130.34l21.17-21.17a4,4,0,1,1,5.66,5.66Z"}))]]);var u=e(c(),1),jo=new Map([["bold",u.createElement(u.Fragment,null,u.createElement("path",{d:"M128,76a52,52,0,1,0,52,52A52.06,52.06,0,0,0,128,76Zm0,80a28,28,0,1,1,28-28A28,28,0,0,1,128,156Zm92-27.21v-1.58l14-17.51a12,12,0,0,0,2.23-10.59A111.75,111.75,0,0,0,225,71.89,12,12,0,0,0,215.89,66L193.61,63.5l-1.11-1.11L190,40.1A12,12,0,0,0,184.11,31a111.67,111.67,0,0,0-27.23-11.27A12,12,0,0,0,146.3,22L128.79,36h-1.58L109.7,22a12,12,0,0,0-10.59-2.23A111.75,111.75,0,0,0,71.89,31.05,12,12,0,0,0,66,40.11L63.5,62.39,62.39,63.5,40.1,66A12,12,0,0,0,31,71.89,111.67,111.67,0,0,0,19.77,99.12,12,12,0,0,0,22,109.7l14,17.51v1.58L22,146.3a12,12,0,0,0-2.23,10.59,111.75,111.75,0,0,0,11.29,27.22A12,12,0,0,0,40.11,190l22.28,2.48,1.11,1.11L66,215.9A12,12,0,0,0,71.89,225a111.67,111.67,0,0,0,27.23,11.27A12,12,0,0,0,109.7,234l17.51-14h1.58l17.51,14a12,12,0,0,0,10.59,2.23A111.75,111.75,0,0,0,184.11,225a12,12,0,0,0,5.91-9.06l2.48-22.28,1.11-1.11L215.9,190a12,12,0,0,0,9.06-5.91,111.67,111.67,0,0,0,11.27-27.23A12,12,0,0,0,234,146.3Zm-24.12-4.89a70.1,70.1,0,0,1,0,8.2,12,12,0,0,0,2.61,8.22l12.84,16.05A86.47,86.47,0,0,1,207,166.86l-20.43,2.27a12,12,0,0,0-7.65,4,69,69,0,0,1-5.8,5.8,12,12,0,0,0-4,7.65L166.86,207a86.47,86.47,0,0,1-10.49,4.35l-16.05-12.85a12,12,0,0,0-7.5-2.62c-.24,0-.48,0-.72,0a70.1,70.1,0,0,1-8.2,0,12.06,12.06,0,0,0-8.22,2.6L99.63,211.33A86.47,86.47,0,0,1,89.14,207l-2.27-20.43a12,12,0,0,0-4-7.65,69,69,0,0,1-5.8-5.8,12,12,0,0,0-7.65-4L49,166.86a86.47,86.47,0,0,1-4.35-10.49l12.84-16.05a12,12,0,0,0,2.61-8.22,70.1,70.1,0,0,1,0-8.2,12,12,0,0,0-2.61-8.22L44.67,99.63A86.47,86.47,0,0,1,49,89.14l20.43-2.27a12,12,0,0,0,7.65-4,69,69,0,0,1,5.8-5.8,12,12,0,0,0,4-7.65L89.14,49a86.47,86.47,0,0,1,10.49-4.35l16.05,12.85a12.06,12.06,0,0,0,8.22,2.6,70.1,70.1,0,0,1,8.2,0,12,12,0,0,0,8.22-2.6l16.05-12.85A86.47,86.47,0,0,1,166.86,49l2.27,20.43a12,12,0,0,0,4,7.65,69,69,0,0,1,5.8,5.8,12,12,0,0,0,7.65,4L207,89.14a86.47,86.47,0,0,1,4.35,10.49l-12.84,16.05A12,12,0,0,0,195.88,123.9Z"}))],["duotone",u.createElement(u.Fragment,null,u.createElement("path",{d:"M207.86,123.18l16.78-21a99.14,99.14,0,0,0-10.07-24.29l-26.7-3a81,81,0,0,0-6.81-6.81l-3-26.71a99.43,99.43,0,0,0-24.3-10l-21,16.77a81.59,81.59,0,0,0-9.64,0l-21-16.78A99.14,99.14,0,0,0,77.91,41.43l-3,26.7a81,81,0,0,0-6.81,6.81l-26.71,3a99.43,99.43,0,0,0-10,24.3l16.77,21a81.59,81.59,0,0,0,0,9.64l-16.78,21a99.14,99.14,0,0,0,10.07,24.29l26.7,3a81,81,0,0,0,6.81,6.81l3,26.71a99.43,99.43,0,0,0,24.3,10l21-16.77a81.59,81.59,0,0,0,9.64,0l21,16.78a99.14,99.14,0,0,0,24.29-10.07l3-26.7a81,81,0,0,0,6.81-6.81l26.71-3a99.43,99.43,0,0,0,10-24.3l-16.77-21A81.59,81.59,0,0,0,207.86,123.18ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z",opacity:"0.2"}),u.createElement("path",{d:"M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8.06,8.06,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8.06,8.06,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z"}))],["fill",u.createElement(u.Fragment,null,u.createElement("path",{d:"M216,130.16q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z"}))],["light",u.createElement(u.Fragment,null,u.createElement("path",{d:"M128,82a46,46,0,1,0,46,46A46.06,46.06,0,0,0,128,82Zm0,80a34,34,0,1,1,34-34A34,34,0,0,1,128,162ZM214,130.84c.06-1.89.06-3.79,0-5.68L229.33,106a6,6,0,0,0,1.11-5.29A105.34,105.34,0,0,0,219.76,74.9a6,6,0,0,0-4.53-3l-24.45-2.71q-1.93-2.07-4-4l-2.72-24.46a6,6,0,0,0-3-4.53,105.65,105.65,0,0,0-25.77-10.66A6,6,0,0,0,150,26.68l-19.2,15.37c-1.89-.06-3.79-.06-5.68,0L106,26.67a6,6,0,0,0-5.29-1.11A105.34,105.34,0,0,0,74.9,36.24a6,6,0,0,0-3,4.53L69.23,65.22q-2.07,1.94-4,4L40.76,72a6,6,0,0,0-4.53,3,105.65,105.65,0,0,0-10.66,25.77A6,6,0,0,0,26.68,106l15.37,19.2c-.06,1.89-.06,3.79,0,5.68L26.67,150.05a6,6,0,0,0-1.11,5.29A105.34,105.34,0,0,0,36.24,181.1a6,6,0,0,0,4.53,3l24.45,2.71q1.94,2.07,4,4L72,215.24a6,6,0,0,0,3,4.53,105.65,105.65,0,0,0,25.77,10.66,6,6,0,0,0,5.29-1.11L125.16,214c1.89.06,3.79.06,5.68,0l19.21,15.38a6,6,0,0,0,3.75,1.31,6.2,6.2,0,0,0,1.54-.2,105.34,105.34,0,0,0,25.76-10.68,6,6,0,0,0,3-4.53l2.71-24.45q2.07-1.93,4-4l24.46-2.72a6,6,0,0,0,4.53-3,105.49,105.49,0,0,0,10.66-25.77,6,6,0,0,0-1.11-5.29Zm-3.1,41.63-23.64,2.63a6,6,0,0,0-3.82,2,75.14,75.14,0,0,1-6.31,6.31,6,6,0,0,0-2,3.82l-2.63,23.63A94.28,94.28,0,0,1,155.14,218l-18.57-14.86a6,6,0,0,0-3.75-1.31h-.36a78.07,78.07,0,0,1-8.92,0,6,6,0,0,0-4.11,1.3L100.87,218a94.13,94.13,0,0,1-17.34-7.17L80.9,187.21a6,6,0,0,0-2-3.82,75.14,75.14,0,0,1-6.31-6.31,6,6,0,0,0-3.82-2l-23.63-2.63A94.28,94.28,0,0,1,38,155.14l14.86-18.57a6,6,0,0,0,1.3-4.11,78.07,78.07,0,0,1,0-8.92,6,6,0,0,0-1.3-4.11L38,100.87a94.13,94.13,0,0,1,7.17-17.34L68.79,80.9a6,6,0,0,0,3.82-2,75.14,75.14,0,0,1,6.31-6.31,6,6,0,0,0,2-3.82l2.63-23.63A94.28,94.28,0,0,1,100.86,38l18.57,14.86a6,6,0,0,0,4.11,1.3,78.07,78.07,0,0,1,8.92,0,6,6,0,0,0,4.11-1.3L155.13,38a94.13,94.13,0,0,1,17.34,7.17l2.63,23.64a6,6,0,0,0,2,3.82,75.14,75.14,0,0,1,6.31,6.31,6,6,0,0,0,3.82,2l23.63,2.63A94.28,94.28,0,0,1,218,100.86l-14.86,18.57a6,6,0,0,0-1.3,4.11,78.07,78.07,0,0,1,0,8.92,6,6,0,0,0,1.3,4.11L218,155.13A94.13,94.13,0,0,1,210.85,172.47Z"}))],["regular",u.createElement(u.Fragment,null,u.createElement("path",{d:"M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.21,107.21,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.71,107.71,0,0,0-26.25-10.87,8,8,0,0,0-7.06,1.49L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.21,107.21,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8,8,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8,8,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z"}))],["thin",u.createElement(u.Fragment,null,u.createElement("path",{d:"M128,84a44,44,0,1,0,44,44A44.05,44.05,0,0,0,128,84Zm0,80a36,36,0,1,1,36-36A36,36,0,0,1,128,164Zm83.93-32.49q.13-3.51,0-7l15.83-19.79a4,4,0,0,0,.75-3.53A103.64,103.64,0,0,0,218,75.9a4,4,0,0,0-3-2l-25.19-2.8c-1.58-1.71-3.24-3.37-4.95-4.95L182.07,41a4,4,0,0,0-2-3A104,104,0,0,0,154.82,27.5a4,4,0,0,0-3.53.74L131.51,44.07q-3.51-.14-7,0L104.7,28.24a4,4,0,0,0-3.53-.75A103.64,103.64,0,0,0,75.9,38a4,4,0,0,0-2,3l-2.8,25.19c-1.71,1.58-3.37,3.24-4.95,4.95L41,73.93a4,4,0,0,0-3,2A104,104,0,0,0,27.5,101.18a4,4,0,0,0,.74,3.53l15.83,19.78q-.14,3.51,0,7L28.24,151.3a4,4,0,0,0-.75,3.53A103.64,103.64,0,0,0,38,180.1a4,4,0,0,0,3,2l25.19,2.8c1.58,1.71,3.24,3.37,4.95,4.95l2.8,25.2a4,4,0,0,0,2,3,104,104,0,0,0,25.28,10.46,4,4,0,0,0,3.53-.74l19.78-15.83q3.51.13,7,0l19.79,15.83a4,4,0,0,0,2.5.88,4,4,0,0,0,1-.13A103.64,103.64,0,0,0,180.1,218a4,4,0,0,0,2-3l2.8-25.19c1.71-1.58,3.37-3.24,4.95-4.95l25.2-2.8a4,4,0,0,0,3-2,104,104,0,0,0,10.46-25.28,4,4,0,0,0-.74-3.53Zm.17,42.83-24.67,2.74a4,4,0,0,0-2.55,1.32,76.2,76.2,0,0,1-6.48,6.48,4,4,0,0,0-1.32,2.55l-2.74,24.66a95.45,95.45,0,0,1-19.64,8.15l-19.38-15.51a4,4,0,0,0-2.5-.87h-.24a73.67,73.67,0,0,1-9.16,0,4,4,0,0,0-2.74.87l-19.37,15.5a95.33,95.33,0,0,1-19.65-8.13l-2.74-24.67a4,4,0,0,0-1.32-2.55,76.2,76.2,0,0,1-6.48-6.48,4,4,0,0,0-2.55-1.32l-24.66-2.74a95.45,95.45,0,0,1-8.15-19.64l15.51-19.38a4,4,0,0,0,.87-2.74,77.76,77.76,0,0,1,0-9.16,4,4,0,0,0-.87-2.74l-15.5-19.37A95.33,95.33,0,0,1,43.9,81.66l24.67-2.74a4,4,0,0,0,2.55-1.32,76.2,76.2,0,0,1,6.48-6.48,4,4,0,0,0,1.32-2.55l2.74-24.66a95.45,95.45,0,0,1,19.64-8.15l19.38,15.51a4,4,0,0,0,2.74.87,73.67,73.67,0,0,1,9.16,0,4,4,0,0,0,2.74-.87l19.37-15.5a95.33,95.33,0,0,1,19.65,8.13l2.74,24.67a4,4,0,0,0,1.32,2.55,76.2,76.2,0,0,1,6.48,6.48,4,4,0,0,0,2.55,1.32l24.66,2.74a95.45,95.45,0,0,1,8.15,19.64l-15.51,19.38a4,4,0,0,0-.87,2.74,77.76,77.76,0,0,1,0,9.16,4,4,0,0,0,.87,2.74l15.5,19.37A95.33,95.33,0,0,1,212.1,174.34Z"}))]]);var d=e(c(),1),Yo=new Map([["bold",d.createElement(d.Fragment,null,d.createElement("path",{d:"M124,216a12,12,0,0,1-12,12H48a12,12,0,0,1-12-12V40A12,12,0,0,1,48,28h64a12,12,0,0,1,0,24H60V204h52A12,12,0,0,1,124,216Zm108.49-96.49-40-40a12,12,0,0,0-17,17L195,116H112a12,12,0,0,0,0,24h83l-19.52,19.51a12,12,0,0,0,17,17l40-40A12,12,0,0,0,232.49,119.51Z"}))],["duotone",d.createElement(d.Fragment,null,d.createElement("path",{d:"M224,56V200a16,16,0,0,1-16,16H48V40H208A16,16,0,0,1,224,56Z",opacity:"0.2"}),d.createElement("path",{d:"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40a8,8,0,0,0-11.32,11.32L204.69,120H112a8,8,0,0,0,0,16h92.69l-26.35,26.34a8,8,0,0,0,11.32,11.32l40-40A8,8,0,0,0,229.66,122.34Z"}))],["fill",d.createElement(d.Fragment,null,d.createElement("path",{d:"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40A8,8,0,0,0,176,88v32H112a8,8,0,0,0,0,16h64v32a8,8,0,0,0,13.66,5.66l40-40A8,8,0,0,0,229.66,122.34Z"}))],["light",d.createElement(d.Fragment,null,d.createElement("path",{d:"M118,216a6,6,0,0,1-6,6H48a6,6,0,0,1-6-6V40a6,6,0,0,1,6-6h64a6,6,0,0,1,0,12H54V210h58A6,6,0,0,1,118,216Zm110.24-92.24-40-40a6,6,0,0,0-8.48,8.48L209.51,122H112a6,6,0,0,0,0,12h97.51l-29.75,29.76a6,6,0,1,0,8.48,8.48l40-40A6,6,0,0,0,228.24,123.76Z"}))],["regular",d.createElement(d.Fragment,null,d.createElement("path",{d:"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40a8,8,0,0,0-11.32,11.32L204.69,120H112a8,8,0,0,0,0,16h92.69l-26.35,26.34a8,8,0,0,0,11.32,11.32l40-40A8,8,0,0,0,229.66,122.34Z"}))],["thin",d.createElement(d.Fragment,null,d.createElement("path",{d:"M116,216a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V40a4,4,0,0,1,4-4h64a4,4,0,0,1,0,8H52V212h60A4,4,0,0,1,116,216Zm110.83-90.83-40-40a4,4,0,0,0-5.66,5.66L214.34,124H112a4,4,0,0,0,0,8H214.34l-33.17,33.17a4,4,0,0,0,5.66,5.66l40-40A4,4,0,0,0,226.83,125.17Z"}))]]);var g=e(c(),1),$o=new Map([["bold",g.createElement(g.Fragment,null,g.createElement("path",{d:"M240.26,186.1,152.81,34.23h0a28.74,28.74,0,0,0-49.62,0L15.74,186.1a27.45,27.45,0,0,0,0,27.71A28.31,28.31,0,0,0,40.55,228h174.9a28.31,28.31,0,0,0,24.79-14.19A27.45,27.45,0,0,0,240.26,186.1Zm-20.8,15.7a4.46,4.46,0,0,1-4,2.2H40.55a4.46,4.46,0,0,1-4-2.2,3.56,3.56,0,0,1,0-3.73L124,46.2a4.77,4.77,0,0,1,8,0l87.44,151.87A3.56,3.56,0,0,1,219.46,201.8ZM116,136V104a12,12,0,0,1,24,0v32a12,12,0,0,1-24,0Zm28,40a16,16,0,1,1-16-16A16,16,0,0,1,144,176Z"}))],["duotone",g.createElement(g.Fragment,null,g.createElement("path",{d:"M215.46,216H40.54C27.92,216,20,202.79,26.13,192.09L113.59,40.22c6.3-11,22.52-11,28.82,0l87.46,151.87C236,202.79,228.08,216,215.46,216Z",opacity:"0.2"}),g.createElement("path",{d:"M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM222.93,203.8a8.5,8.5,0,0,1-7.48,4.2H40.55a8.5,8.5,0,0,1-7.48-4.2,7.59,7.59,0,0,1,0-7.72L120.52,44.21a8.75,8.75,0,0,1,15,0l87.45,151.87A7.59,7.59,0,0,1,222.93,203.8ZM120,144V104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,180Z"}))],["fill",g.createElement(g.Fragment,null,g.createElement("path",{d:"M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM120,104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm8,88a12,12,0,1,1,12-12A12,12,0,0,1,128,192Z"}))],["light",g.createElement(g.Fragment,null,g.createElement("path",{d:"M235.07,189.09,147.61,37.22h0a22.75,22.75,0,0,0-39.22,0L20.93,189.09a21.53,21.53,0,0,0,0,21.72A22.35,22.35,0,0,0,40.55,222h174.9a22.35,22.35,0,0,0,19.6-11.19A21.53,21.53,0,0,0,235.07,189.09ZM224.66,204.8a10.46,10.46,0,0,1-9.21,5.2H40.55a10.46,10.46,0,0,1-9.21-5.2,9.51,9.51,0,0,1,0-9.72L118.79,43.21a10.75,10.75,0,0,1,18.42,0l87.46,151.87A9.51,9.51,0,0,1,224.66,204.8ZM122,144V104a6,6,0,0,1,12,0v40a6,6,0,0,1-12,0Zm16,36a10,10,0,1,1-10-10A10,10,0,0,1,138,180Z"}))],["regular",g.createElement(g.Fragment,null,g.createElement("path",{d:"M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM222.93,203.8a8.5,8.5,0,0,1-7.48,4.2H40.55a8.5,8.5,0,0,1-7.48-4.2,7.59,7.59,0,0,1,0-7.72L120.52,44.21a8.75,8.75,0,0,1,15,0l87.45,151.87A7.59,7.59,0,0,1,222.93,203.8ZM120,144V104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,180Z"}))],["thin",g.createElement(g.Fragment,null,g.createElement("path",{d:"M233.34,190.09,145.88,38.22h0a20.75,20.75,0,0,0-35.76,0L22.66,190.09a19.52,19.52,0,0,0,0,19.71A20.36,20.36,0,0,0,40.54,220H215.46a20.36,20.36,0,0,0,17.86-10.2A19.52,19.52,0,0,0,233.34,190.09ZM226.4,205.8a12.47,12.47,0,0,1-10.94,6.2H40.54a12.47,12.47,0,0,1-10.94-6.2,11.45,11.45,0,0,1,0-11.72L117.05,42.21a12.76,12.76,0,0,1,21.9,0L226.4,194.08A11.45,11.45,0,0,1,226.4,205.8ZM124,144V104a4,4,0,0,1,8,0v40a4,4,0,0,1-8,0Zm12,36a8,8,0,1,1-8-8A8,8,0,0,1,136,180Z"}))]]);var R=e(c(),1);var oa=e(c(),1),aa=(0,oa.createContext)({color:"currentColor",size:"1em",weight:"regular",mirrored:!1});var C=R.forwardRef((o,a)=>{let{alt:s,color:r,size:n,weight:L,mirrored:T,children:A,weights:b,...v}=o,{color:E="currentColor",size:N,weight:G="regular",mirrored:x=!1,...O}=R.useContext(aa);return R.createElement("svg",{ref:a,xmlns:"http://www.w3.org/2000/svg",width:n??N,height:n??N,fill:r??E,viewBox:"0 0 256 256",transform:T||x?"scale(-1, 1)":void 0,...O,...v},!!s&&R.createElement("title",null,s),A,b.get(L??G))});C.displayName="IconBase";var X=e(c(),1);var J=X.forwardRef((o,a)=>X.createElement(C,{ref:a,...o,weights:_o}));J.displayName="ArrowSquareOutIcon";var K=e(c(),1);var Q=K.forwardRef((o,a)=>K.createElement(C,{ref:a,...o,weights:Xo}));Q.displayName="CircleNotchIcon";var j=e(c(),1);var Y=j.forwardRef((o,a)=>j.createElement(C,{ref:a,...o,weights:Jo}));Y.displayName="CloudCheckIcon";var $=e(c(),1);var oo=$.forwardRef((o,a)=>$.createElement(C,{ref:a,...o,weights:Ko}));oo.displayName="CloudSlashIcon";var ao=e(c(),1);var ro=ao.forwardRef((o,a)=>ao.createElement(C,{ref:a,...o,weights:Qo}));ro.displayName="CloudXIcon";var so=e(c(),1);var eo=so.forwardRef((o,a)=>so.createElement(C,{ref:a,...o,weights:jo}));eo.displayName="GearIcon";var no=e(c(),1);var io=no.forwardRef((o,a)=>no.createElement(C,{ref:a,...o,weights:Yo}));io.displayName="SignOutIcon";var to=e(c(),1);var co=to.forwardRef((o,a)=>to.createElement(C,{ref:a,...o,weights:$o}));co.displayName="WarningIcon";var ra=e(h()),Ra=o=>(0,ra.jsx)(Q,{size:o.size,className:"plotly-cloud-spin plotly-cloud-gray-icon",weight:"bold"}),lo=Ra;var q=e(h()),Na=({status:o,size:a=16,isButtonIcon:s})=>o==="BUILDING"||o==="STARTING"||o==="unknown"?(0,q.jsx)(lo,{size:a}):o==="RUNNING"?(0,q.jsx)(Y,{size:a,className:"plotly-cloud-green-icon",weight:s?"fill":"duotone"}):o==="new"?(0,q.jsx)(oo,{size:a,className:"plotly-cloud-gray-icon",weight:s?"fill":"duotone"}):(0,q.jsx)(ro,{size:a,className:"plotly-cloud-red-icon",weight:"duotone"}),mo=Na;var S=e(h()),xa=({status:o,onPublish:a,isUpdate:s,publishing:r,onCancel:n,onLogout:L,appUrl:T,sizeError:A=""})=>{let b=()=>{n&&n()},v=()=>{window.open(T,"_blank")},[E,N,G]=(0,po.useMemo)(()=>o==="BUILDING"||o==="STARTING"?["App is building","Wait for your app to finish publishing before publishing again","gray"]:o==="RUNNING"?["App is live","Your app is running in Plotly Cloud.","green"]:["App is stopped","Start your app by publishing again or starting it in the app manager","red"],[o]),[x,O]=(0,po.useMemo)(()=>r?s?["Open Settings in Plotly Cloud","Republishing",""]:[null,"Publishing",""]:s?[(0,S.jsxs)("span",{children:[(0,S.jsx)(eo,{}),"\xA0Open Settings in Plotly Cloud"]}),"Republish"]:[null,"Publish",""],[r,s]),W=(0,po.useMemo)(()=>["BUILDING","STARTING"].includes(o)||!!A,[o,A]);return(0,S.jsxs)("div",{className:"plotly-cloud-status-banner",children:[A&&(0,S.jsx)("div",{className:"plotly-cloud-size-error",children:A}),(0,S.jsxs)("div",{className:`plotly-cloud-status-info plotly-cloud-status-${G}`,children:[(0,S.jsx)(mo,{status:o,size:20}),(0,S.jsxs)("div",{className:"plotly-cloud-status-description",children:[(0,S.jsx)("div",{className:"plotly-cloud-status-title",children:E}),(0,S.jsx)("div",{className:"plotly-cloud-status-text",children:N})]})]}),(0,S.jsxs)("div",{className:"plotly-cloud-button-bar",children:[(0,S.jsx)("div",{style:{flex:1},children:(0,S.jsxs)("button",{disabled:r,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary plotly-cloud-logout",onClick:L,children:[(0,S.jsx)(io,{}),"\xA0Logout"]})}),x?(0,S.jsx)("button",{type:"button",onClick:b,disabled:s?!1:r,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary",children:x}):null,T?(0,S.jsx)("button",{onClick:v,disabled:r,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary",children:(0,S.jsxs)("span",{children:[(0,S.jsx)(J,{}),"\xA0View App"]})}):null,(0,S.jsxs)("button",{type:"button",onClick:a,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",disabled:r||W,children:[r?(0,S.jsx)(lo,{size:12}):null,O]})]})]})},ho=xa;var Io=e(h()),Ua=({error:o})=>(0,Io.jsxs)("div",{className:"plotly-cloud-error",children:[(0,Io.jsx)(co,{className:"plotly-cloud-red-icon",size:24}),"\xA0",o]}),sa=Ua;function ea(o){switch(o){case"BUILDING":return 1e4;case"STARTING":return 7e3;case"CHECKING":case"STOPPING":return 15e3;case"RUNNING":return 18e4;case"FAILING":case"PENDING_ENTITLEMENTS":case"BUILD_COMPLETED":case"BUILD_FAILED":case"STOPPED":case"DEPLOYED_BY_OTHER_PLATFORM":return 6e4;default:return 6e4}}var w=e(h()),fo="cloud",va=()=>{let{popup:o,setPopup:a}=window.dash_component_api.devtool.useDevtool(),s=window.dash_component_api.devtool.useDevtoolMenuButtonClassName(fo),[r,n]=(0,t.useState)(""),[L,T]=(0,t.useState)(""),[A,b]=(0,t.useState)("initialize"),[v,E]=(0,t.useState)(!1),[N,G]=(0,t.useState)(""),[x,O]=(0,t.useState)(""),[W,V]=(0,t.useState)(!1),[na,uo]=(0,t.useState)(!1),[wo,ia]=(0,t.useState)(""),[ta,Lo]=(0,t.useState)(""),[Ao,bo]=(0,t.useState)(""),[F,H]=(0,t.useState)("unknown"),[Po,ko]=(0,t.useState)(0),[ca,la]=(0,t.useState)(1),[To,yo]=(0,t.useState)(-1),z=(0,t.useRef)(""),B=(0,t.useRef)(""),y=(0,t.useMemo)(()=>Vo("/"),[]),Fo=(0,t.useMemo)(()=>o===fo,[o]),go=()=>{a("")},ma=()=>{a(o===fo?"":fo)},Bo=()=>{y.logout().then(()=>{b("initialize")})},Do=()=>{E(!0),y.authenticate().then(i=>{i.error?n(i.error):(b("auth_poll"),G(i.result.user_code),O(i.result.verification_uri_complete),z.current=i.result.device_code,y.wait_auth().then(()=>{window.open(i.result.verification_uri_complete,"_blank"),yo(setTimeout(()=>{y.auth_poll({device_code:z.current}).then(Ho)},8e3))}))})},Ho=i=>{if(i.error)n(i.error);else{if(i.result.success){z.current="",B.current?(H("unknown"),b("update_app"),y.status({app_id:B.current}).then(U=>{H(U.result.status)})):b("enter_name");return}if(i.result.try_again){Do();return}let P=ca||1;i.result.delay&&(P=i.result.delay,la(P)),yo(setTimeout(()=>{y.auth_poll({device_code:z.current}).then(Ho)},1e3+P*1e3))}},pa=()=>{setTimeout(Do,2e3)};(0,t.useEffect)(()=>{A==="initialize"&&y.initialize().then(i=>{let{result:P,error:U}=i;U?n(U):(ia(P.app_path),Lo(P.app_name),H(P.status),bo(P.app_url),T(P.size_error||""),P.app_id&&(B.current=P.app_id),P?.authenticated?P.status==="new"?b("enter_name"):b("update_app"):b("sign_in"))})},[A,Fo]);let Ia=()=>{y.status({app_id:B.current}).then(fa)},fa=i=>{if(i.error){n(i.error);return}H(i.result.status),ko(Date.now()),i.result.status==="RUNNING"?(V(!1),uo(!0),b("update_app")):["BUILDING","STARTING"].includes(i.result.status)||(V(!1),b("update_app"))},Mo=i=>{if(i.error){n(i.error);return}b("status_poll"),B.current=i.result.app_id,bo(i.result.app_url),H("BUILDING"),ko(0)},ua=i=>{Lo(i),V(!0),uo(!1),H("BUILDING"),y.publish({app_path:wo,app_name:i}).then(Mo)},Ro=()=>{V(!0),uo(!0),H("BUILDING"),y.publish({app_id:B.current,app_path:wo}).then(Mo)};(0,t.useEffect)(()=>{if(!B.current||F==="unknown"||F==="new")return;let i=setInterval(()=>{let U=Date.now()-Po,da=ea(F);U>=da&&Ia()},1e3);return()=>{clearInterval(i)}},[B.current,F,Po]),(0,t.useEffect)(()=>()=>{To>0&&clearTimeout(To)}),(0,t.useEffect)(()=>{r&&F!=="error"&&H("error")},[r,F]);let No=()=>{window.open(`https://cloud.plotly.com/app/${B.current}/settings`,"_blank")};return(0,w.jsxs)(w.Fragment,{children:[(0,w.jsxs)("button",{className:s,onClick:ma,children:[(0,w.jsx)(mo,{status:F,isButtonIcon:!0}),"\xA0Plotly Cloud"]}),Fo?(0,w.jsx)(Oo,{title:"Plotly Cloud",onClose:go,children:r?(0,w.jsx)(sa,{error:r}):(()=>{switch(A){case"authenticate":case"auth_poll":case"sign_in":return(0,w.jsx)(Wo,{onSignIn:pa,waiting:v,userCode:N,verificationUrlComplete:x});case"enter_name":return(0,w.jsx)(Zo,{onPublish:ua,onCancel:go,initialAppName:ta,sizeError:L});case"update_app":return(0,w.jsx)(ho,{onPublish:Ro,status:F,isUpdate:!0,onCancel:No,appUrl:Ao,onLogout:Bo,sizeError:L});case"status_poll":case"publish":return(0,w.jsx)(ho,{publishing:W,onPublish:Ro,status:F,onCancel:W?No:go,isUpdate:na,appUrl:Ao,onLogout:Bo,sizeError:L});default:return(0,w.jsx)(w.Fragment,{})}})()},"publish-modal"):null]})},Co=va;typeof window<"u"&&(window.plotly_cloud_publish_component={PlotlyCloudPublishComponent:Co});return Aa(Ea);})();
|
|
3
|
-
/*! Bundled license information:
|
|
4
|
-
|
|
5
|
-
react/cjs/react-jsx-runtime.production.min.js:
|
|
6
|
-
(**
|
|
7
|
-
* @license React
|
|
8
|
-
* react-jsx-runtime.production.min.js
|
|
9
|
-
*
|
|
10
|
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
11
|
-
*
|
|
12
|
-
* This source code is licensed under the MIT license found in the
|
|
13
|
-
* LICENSE file in the root directory of this source tree.
|
|
14
|
-
*)
|
|
15
|
-
*/
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|