plotly-cloud 0.1.0rc2__tar.gz → 0.1.0rc4__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.0rc2 → plotly_cloud-0.1.0rc4}/PKG-INFO +2 -2
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_api_types.py +8 -7
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_commands.py +13 -11
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_deploy.py +14 -80
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_devtool_publish_rpc.py +67 -10
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_oauth.py +6 -1
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/cli.py +14 -0
- plotly_cloud-0.1.0rc4/plotly_cloud/cloud_devtools.css +1 -0
- plotly_cloud-0.1.0rc4/plotly_cloud/cloud_devtools.js +15 -0
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/pyproject.toml +2 -2
- plotly_cloud-0.1.0rc2/plotly_cloud/cloud_devtools.css +0 -1
- plotly_cloud-0.1.0rc2/plotly_cloud/cloud_devtools.js +0 -15
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/.gitignore +0 -0
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/LICENSE +0 -0
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/README.md +0 -0
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/__init__.py +0 -0
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_changes.py +0 -0
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_cloud_env.py +0 -0
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_definitions.py +0 -0
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_devtool_hooks.py +0 -0
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_parser.py +0 -0
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/cloud-env.toml +0 -0
- {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/exceptions.py +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plotly-cloud
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.0rc4
|
|
4
4
|
Summary: CLI for interacting with Plotly Cloud to deploy Dash apps
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Requires-Python: >=3.9
|
|
7
7
|
Requires-Dist: dash>=2.0.0
|
|
8
|
-
Requires-Dist: httpx
|
|
8
|
+
Requires-Dist: httpx<1.0.0,>=0.24.0
|
|
9
9
|
Requires-Dist: nest-asyncio>=1.6.0
|
|
10
10
|
Requires-Dist: rich-argparse>=1.7.1
|
|
11
11
|
Requires-Dist: rich>=10.0.0
|
|
@@ -4,16 +4,10 @@ from typing import Any, Dict, List
|
|
|
4
4
|
|
|
5
5
|
from typing_extensions import NotRequired, TypedDict
|
|
6
6
|
|
|
7
|
-
EnvironmentVariables = Dict[str, Any]
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class ErrorResponse(TypedDict):
|
|
11
|
-
error: NotRequired[str]
|
|
12
|
-
error_description: NotRequired[str]
|
|
13
|
-
|
|
14
7
|
|
|
15
8
|
class AppRequest(TypedDict):
|
|
16
9
|
pythonVersion: NotRequired[str]
|
|
10
|
+
entrypointModule: NotRequired[str]
|
|
17
11
|
name: NotRequired[str]
|
|
18
12
|
appUrl: NotRequired[str]
|
|
19
13
|
description: NotRequired[str]
|
|
@@ -21,6 +15,11 @@ class AppRequest(TypedDict):
|
|
|
21
15
|
invitations: NotRequired[List[str]]
|
|
22
16
|
environmentVariables: NotRequired[List[Dict[str, Any]]]
|
|
23
17
|
|
|
18
|
+
EnvironmentVariables = Dict[str, Any]
|
|
19
|
+
|
|
20
|
+
class ErrorResponse(TypedDict):
|
|
21
|
+
error: NotRequired[str]
|
|
22
|
+
error_description: NotRequired[str]
|
|
24
23
|
|
|
25
24
|
class App(TypedDict):
|
|
26
25
|
id: NotRequired[str]
|
|
@@ -29,6 +28,8 @@ class App(TypedDict):
|
|
|
29
28
|
description: NotRequired[str]
|
|
30
29
|
app_url: NotRequired[str]
|
|
31
30
|
is_view_private: NotRequired[bool]
|
|
31
|
+
created_with_desktop: NotRequired[bool]
|
|
32
|
+
desktop_app_version: NotRequired[str]
|
|
32
33
|
environment_variables: NotRequired[EnvironmentVariables]
|
|
33
34
|
invitations: NotRequired[List[str]]
|
|
34
35
|
status: NotRequired[str]
|
|
@@ -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, cast
|
|
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, RevisionStatusInfo
|
|
24
24
|
from plotly_cloud._deploy import (
|
|
25
25
|
DeploymentClient,
|
|
26
26
|
create_deployment_zip,
|
|
@@ -28,7 +28,6 @@ from plotly_cloud._deploy import (
|
|
|
28
28
|
get_config_path,
|
|
29
29
|
load_deployment_config,
|
|
30
30
|
save_deployment_config,
|
|
31
|
-
validate_dependencies,
|
|
32
31
|
)
|
|
33
32
|
from plotly_cloud._oauth import OAuthClient
|
|
34
33
|
from plotly_cloud._parser import ParsedArguments
|
|
@@ -439,6 +438,10 @@ class PublishCommand(BaseCommand):
|
|
|
439
438
|
"name": "--name",
|
|
440
439
|
"help": "Application name (will prompt if not provided first time app is published)",
|
|
441
440
|
},
|
|
441
|
+
{
|
|
442
|
+
"name": "--entrypoint-module",
|
|
443
|
+
"help": "Entrypoint module for the application in 'module:variable' format (e.g., 'app:app')",
|
|
444
|
+
},
|
|
442
445
|
{
|
|
443
446
|
"name": "--output",
|
|
444
447
|
"help": "Output path for zip file of the published app (default: temporary file)",
|
|
@@ -532,7 +535,9 @@ class PublishCommand(BaseCommand):
|
|
|
532
535
|
status_text.append("Timeout", style="bold yellow")
|
|
533
536
|
return Panel(status_text, title="🚀 Publish Status", border_style="yellow", padding=(0, 1))
|
|
534
537
|
|
|
535
|
-
status_info =
|
|
538
|
+
status_info = cast(
|
|
539
|
+
RevisionStatusInfo, REVISION_STATUS_MAP.get(status, {"label": status, "emoji": "⏳", "color": "white"})
|
|
540
|
+
)
|
|
536
541
|
|
|
537
542
|
status_text = Text()
|
|
538
543
|
status_text.append(f"{status_info['emoji']} ", style="bold")
|
|
@@ -609,11 +614,6 @@ class PublishCommand(BaseCommand):
|
|
|
609
614
|
else:
|
|
610
615
|
progress.update(validate_task, description="No existing configuration found")
|
|
611
616
|
|
|
612
|
-
# Validate dependencies
|
|
613
|
-
progress.update(validate_task, description="Validating project dependencies...")
|
|
614
|
-
validate_dependencies(project_path)
|
|
615
|
-
progress.update(validate_task, description="✓ Dependencies validated!")
|
|
616
|
-
|
|
617
617
|
# Determine output path for zip file
|
|
618
618
|
if args.output:
|
|
619
619
|
zip_path = os.path.abspath(args.output)
|
|
@@ -646,7 +646,8 @@ class PublishCommand(BaseCommand):
|
|
|
646
646
|
progress.remove_task(package_task)
|
|
647
647
|
deploy_task = progress.add_task(f"Creating new app: {app_name}...", total=None)
|
|
648
648
|
|
|
649
|
-
|
|
649
|
+
entrypoint_module = getattr(args, "entrypoint_module", None)
|
|
650
|
+
app_data = await deploy_client.create_app(app_name, zip_path, entrypoint_module)
|
|
650
651
|
|
|
651
652
|
progress.update(
|
|
652
653
|
deploy_task,
|
|
@@ -671,7 +672,8 @@ class PublishCommand(BaseCommand):
|
|
|
671
672
|
assert app_id is not None # We know this is not None in else branch
|
|
672
673
|
progress.remove_task(package_task)
|
|
673
674
|
deploy_task = progress.add_task(f"Updating existing app (ID: {app_id})...", total=None)
|
|
674
|
-
|
|
675
|
+
entrypoint_module = getattr(args, "entrypoint_module", None)
|
|
676
|
+
app_data = await deploy_client.publish_app(app_id, zip_path, entrypoint_module)
|
|
675
677
|
progress.update(deploy_task, description=f"✓ Published app update (ID: {app_id})")
|
|
676
678
|
|
|
677
679
|
# Update config with any new data
|
|
@@ -20,7 +20,6 @@ from .exceptions import (
|
|
|
20
20
|
APIError,
|
|
21
21
|
AppCreationError,
|
|
22
22
|
AppPublishError,
|
|
23
|
-
DependencyValidationError,
|
|
24
23
|
DeploymentClientError,
|
|
25
24
|
DeploymentError,
|
|
26
25
|
FileSizeError,
|
|
@@ -34,82 +33,6 @@ from .exceptions import (
|
|
|
34
33
|
# Maximum allowed zip file size (80MB)
|
|
35
34
|
MAX_ZIP_SIZE = 80 * 1024 * 1024
|
|
36
35
|
|
|
37
|
-
# Required dependencies for deployment
|
|
38
|
-
REQUIRED_DEPENDENCIES = {"dash"}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def validate_dependencies(project_path: str) -> None:
|
|
42
|
-
"""
|
|
43
|
-
Validate that the project has required dependencies (dash).
|
|
44
|
-
|
|
45
|
-
Checks requirements.txt or pyproject.toml for the required dependencies.
|
|
46
|
-
|
|
47
|
-
Args:
|
|
48
|
-
project_path: Path to the project directory
|
|
49
|
-
|
|
50
|
-
Returns:
|
|
51
|
-
True if all required dependencies are found, False otherwise
|
|
52
|
-
"""
|
|
53
|
-
requirements_path = os.path.join(project_path, "requirements.txt")
|
|
54
|
-
pyproject_path = os.path.join(project_path, "pyproject.toml")
|
|
55
|
-
|
|
56
|
-
found_deps = set()
|
|
57
|
-
|
|
58
|
-
# Check requirements.txt
|
|
59
|
-
if os.path.exists(requirements_path):
|
|
60
|
-
try:
|
|
61
|
-
with open(requirements_path, encoding="utf-8") as f:
|
|
62
|
-
for line in f:
|
|
63
|
-
line = line.strip()
|
|
64
|
-
if line and not line.startswith("#"):
|
|
65
|
-
# Extract package name (handle versions, extras, etc.)
|
|
66
|
-
# Split on version operators and extras
|
|
67
|
-
dep_name = re.split(r"[>=<!\[~]", line)[0].strip()
|
|
68
|
-
if dep_name: # Only add non-empty names
|
|
69
|
-
found_deps.add(dep_name.lower())
|
|
70
|
-
except Exception as err:
|
|
71
|
-
raise DependencyValidationError(f"Error reading requirement file: {requirements_path}") from err
|
|
72
|
-
|
|
73
|
-
# Check pyproject.toml
|
|
74
|
-
elif os.path.exists(pyproject_path):
|
|
75
|
-
try:
|
|
76
|
-
with open(pyproject_path, "rb") as f:
|
|
77
|
-
data = tomli.load(f)
|
|
78
|
-
|
|
79
|
-
# Check different possible locations for dependencies
|
|
80
|
-
dep_sources = [
|
|
81
|
-
data.get("project", {}).get("dependencies", []),
|
|
82
|
-
data.get("tool", {}).get("poetry", {}).get("dependencies", {}),
|
|
83
|
-
data.get("build-system", {}).get("requires", []),
|
|
84
|
-
]
|
|
85
|
-
|
|
86
|
-
for deps in dep_sources:
|
|
87
|
-
if isinstance(deps, list):
|
|
88
|
-
# Handle list format (like project.dependencies)
|
|
89
|
-
for dep in deps:
|
|
90
|
-
if isinstance(dep, str):
|
|
91
|
-
dep_name = re.split(r"[>=<!\[~]", dep)[0].strip()
|
|
92
|
-
if dep_name: # Only add non-empty names
|
|
93
|
-
found_deps.add(dep_name.lower())
|
|
94
|
-
elif isinstance(deps, dict):
|
|
95
|
-
# Handle dict format (like poetry dependencies)
|
|
96
|
-
for dep_name in deps.keys():
|
|
97
|
-
found_deps.add(dep_name.lower())
|
|
98
|
-
except Exception as err:
|
|
99
|
-
raise DependencyValidationError(f"Error reading pyproject file: {pyproject_path}") from err
|
|
100
|
-
else:
|
|
101
|
-
raise FileNotFoundError("No requirements.txt or pyproject.toml found in project directory.")
|
|
102
|
-
|
|
103
|
-
# Check if all required dependencies are present
|
|
104
|
-
missing_deps = REQUIRED_DEPENDENCIES - found_deps
|
|
105
|
-
|
|
106
|
-
if missing_deps:
|
|
107
|
-
raise DependencyValidationError(
|
|
108
|
-
f"Missing required dependencies: {', '.join(sorted(missing_deps))}.\n\n"
|
|
109
|
-
""
|
|
110
|
-
"please add them to your requirements.txt or pyproject.toml"
|
|
111
|
-
)
|
|
112
|
-
|
|
113
36
|
|
|
114
37
|
def parse_gitignore(project_path: str) -> set[str]:
|
|
115
38
|
"""Parse .gitignore file and return set of patterns to exclude."""
|
|
@@ -392,12 +315,13 @@ class DeploymentClient:
|
|
|
392
315
|
pass
|
|
393
316
|
return False
|
|
394
317
|
|
|
395
|
-
async def create_app(self, name: str, zip_path: str = "") -> App:
|
|
318
|
+
async def create_app(self, name: str, zip_path: str = "", entrypoint_module: Optional[str] = None) -> App:
|
|
396
319
|
"""Create a new application and upload deployment in same request.
|
|
397
320
|
|
|
398
321
|
Args:
|
|
399
322
|
name: Application name
|
|
400
323
|
zip_path: Path to deployment zip file to upload
|
|
324
|
+
entrypoint_module: Entrypoint module for the application (e.g., "app:app")
|
|
401
325
|
|
|
402
326
|
Returns:
|
|
403
327
|
App response from the API
|
|
@@ -416,6 +340,8 @@ class DeploymentClient:
|
|
|
416
340
|
try:
|
|
417
341
|
# Create typed request data
|
|
418
342
|
app_request: AppRequest = {"name": name}
|
|
343
|
+
if entrypoint_module:
|
|
344
|
+
app_request["entrypointModule"] = entrypoint_module
|
|
419
345
|
|
|
420
346
|
# Upload deployment in same request as app creation
|
|
421
347
|
retry_count = 0
|
|
@@ -440,12 +366,13 @@ class DeploymentClient:
|
|
|
440
366
|
except httpx.RequestError as e:
|
|
441
367
|
raise NetworkError("Failed to create app", str(e)) from e
|
|
442
368
|
|
|
443
|
-
async def publish_app(self, app_id: str, zip_path: str = "") -> App:
|
|
369
|
+
async def publish_app(self, app_id: str, zip_path: str = "", entrypoint_module: Optional[str] = None) -> App:
|
|
444
370
|
"""Publish existing application and upload deployment in same request.
|
|
445
371
|
|
|
446
372
|
Args:
|
|
447
373
|
app_id: Application ID
|
|
448
374
|
zip_path: Path to deployment zip file to upload
|
|
375
|
+
entrypoint_module: Entrypoint module for the application (e.g., "app:app")
|
|
449
376
|
|
|
450
377
|
Returns:
|
|
451
378
|
App response from the API
|
|
@@ -468,7 +395,14 @@ class DeploymentClient:
|
|
|
468
395
|
while retry_count <= 1:
|
|
469
396
|
with open(zip_path, "rb") as f:
|
|
470
397
|
files = {"file": (os.path.basename(zip_path), f, "application/zip")}
|
|
471
|
-
|
|
398
|
+
|
|
399
|
+
# Add entrypoint module if provided
|
|
400
|
+
data = {}
|
|
401
|
+
if entrypoint_module:
|
|
402
|
+
app_request: AppRequest = {"entrypointModule": entrypoint_module}
|
|
403
|
+
data["json"] = json.dumps(app_request)
|
|
404
|
+
|
|
405
|
+
response = await self._client.post(url, files=files, data=data if data else None)
|
|
472
406
|
|
|
473
407
|
if response.status_code in (200, 201):
|
|
474
408
|
api_response: App = response.json()
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"""RPC interface for Plotly Cloud publishing in dev tools."""
|
|
2
2
|
|
|
3
|
+
import asyncio
|
|
3
4
|
import importlib
|
|
4
5
|
import os
|
|
5
6
|
import tempfile
|
|
6
|
-
import traceback
|
|
7
7
|
from typing import Any
|
|
8
8
|
|
|
9
9
|
import dash
|
|
@@ -14,12 +14,13 @@ from plotly_cloud._definitions import AppDeploymentConfig
|
|
|
14
14
|
from plotly_cloud._deploy import (
|
|
15
15
|
DeploymentClient,
|
|
16
16
|
create_deployment_zip,
|
|
17
|
+
format_app_url,
|
|
17
18
|
get_config_path,
|
|
18
19
|
load_deployment_config,
|
|
19
20
|
save_deployment_config,
|
|
20
|
-
validate_dependencies,
|
|
21
21
|
)
|
|
22
22
|
from plotly_cloud._oauth import OAuthClient
|
|
23
|
+
from plotly_cloud.exceptions import TokenError
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
class PublishOperations:
|
|
@@ -60,6 +61,42 @@ class PlotlyCloudPublishRPC:
|
|
|
60
61
|
app_module = importlib.import_module(app.config.name)
|
|
61
62
|
return os.path.dirname(str(app_module.__file__))
|
|
62
63
|
|
|
64
|
+
def resolve_entrypoint_module(self) -> str:
|
|
65
|
+
"""Resolve the entrypoint module for the current Dash app.
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
Entrypoint module name (e.g., 'app' or 'src.app')
|
|
69
|
+
"""
|
|
70
|
+
app = None
|
|
71
|
+
try:
|
|
72
|
+
app = dash.det_app() # type: ignore
|
|
73
|
+
except Exception:
|
|
74
|
+
app = self._app_setup
|
|
75
|
+
|
|
76
|
+
if not app:
|
|
77
|
+
return "app" # Default fallback
|
|
78
|
+
|
|
79
|
+
try:
|
|
80
|
+
# Get the module name and import it
|
|
81
|
+
module_name = app.config.name
|
|
82
|
+
app_module = importlib.import_module(module_name)
|
|
83
|
+
|
|
84
|
+
# Get the absolute path of the module file
|
|
85
|
+
module_file = str(app_module.__file__)
|
|
86
|
+
|
|
87
|
+
# Get the project path
|
|
88
|
+
project_path = self.get_project_path()
|
|
89
|
+
|
|
90
|
+
# Make it relative to the project path
|
|
91
|
+
rel_path = os.path.relpath(module_file, project_path)
|
|
92
|
+
|
|
93
|
+
# Remove .py extension and convert path separators to dots
|
|
94
|
+
entrypoint_module = str(rel_path).replace(".py", "").replace(os.sep, ".")
|
|
95
|
+
|
|
96
|
+
return entrypoint_module
|
|
97
|
+
except Exception:
|
|
98
|
+
return "app" # Fallback
|
|
99
|
+
|
|
63
100
|
async def handle_operation(self, publish_operation: PublishOperation) -> RPCResponse:
|
|
64
101
|
"""Handle a publish operation from dev tools.
|
|
65
102
|
|
|
@@ -83,12 +120,18 @@ class PlotlyCloudPublishRPC:
|
|
|
83
120
|
method = getattr(self, operation_name)
|
|
84
121
|
return await method(data)
|
|
85
122
|
except Exception as e:
|
|
86
|
-
traceback.print_last()
|
|
87
123
|
return {"error": str(e)}
|
|
88
124
|
|
|
89
125
|
async def initialize(self, data: Any) -> RPCResponse:
|
|
90
126
|
is_authenticated = await self.oauth_client.is_authenticated()
|
|
91
127
|
|
|
128
|
+
try:
|
|
129
|
+
# Try to refresh the access token so it's still valid
|
|
130
|
+
await self.oauth_client.refresh_access_token()
|
|
131
|
+
except TokenError:
|
|
132
|
+
is_authenticated = False
|
|
133
|
+
self.oauth_client.clear_credentials()
|
|
134
|
+
|
|
92
135
|
project_path = self.get_project_path()
|
|
93
136
|
|
|
94
137
|
config_path = get_config_path(project_path, os.path.join(project_path, "plotly-cloud.toml"))
|
|
@@ -98,11 +141,13 @@ class PlotlyCloudPublishRPC:
|
|
|
98
141
|
existing = app_id is not None
|
|
99
142
|
status = "new"
|
|
100
143
|
app_name = config.get("name", os.path.basename(project_path))
|
|
144
|
+
app_url = ""
|
|
101
145
|
|
|
102
146
|
if app_id is not None and is_authenticated:
|
|
103
147
|
async with DeploymentClient(self.oauth_client) as deploy_client:
|
|
104
148
|
status_data = await deploy_client.get_app_status(app_id)
|
|
105
149
|
status = status_data.get("status", "")
|
|
150
|
+
app_url = format_app_url(status_data.get("app_url", ""))
|
|
106
151
|
|
|
107
152
|
return {
|
|
108
153
|
"result": {
|
|
@@ -112,6 +157,7 @@ class PlotlyCloudPublishRPC:
|
|
|
112
157
|
"app_name": app_name,
|
|
113
158
|
"app_path": project_path,
|
|
114
159
|
"app_id": app_id,
|
|
160
|
+
"app_url": app_url,
|
|
115
161
|
}
|
|
116
162
|
}
|
|
117
163
|
|
|
@@ -143,7 +189,8 @@ class PlotlyCloudPublishRPC:
|
|
|
143
189
|
app_id = data.get("app_id")
|
|
144
190
|
async with DeploymentClient(self.oauth_client) as deploy_client:
|
|
145
191
|
status_data = await deploy_client.get_app_status(app_id)
|
|
146
|
-
|
|
192
|
+
app_url = format_app_url(status_data.get("app_url", ""))
|
|
193
|
+
return {"result": {"status": status_data.get("status", ""), "app_url": app_url}}
|
|
147
194
|
|
|
148
195
|
async def publish(self, data: Any) -> RPCResponse:
|
|
149
196
|
app_path = data.get("app_path")
|
|
@@ -156,24 +203,25 @@ class PlotlyCloudPublishRPC:
|
|
|
156
203
|
zip_path = temp_file.name
|
|
157
204
|
temp_file.close()
|
|
158
205
|
|
|
159
|
-
validate_dependencies(app_path)
|
|
160
|
-
|
|
161
206
|
await create_deployment_zip(app_path, zip_path)
|
|
162
207
|
|
|
208
|
+
# Resolve the entrypoint module
|
|
209
|
+
entrypoint_module = self.resolve_entrypoint_module()
|
|
210
|
+
|
|
163
211
|
async with DeploymentClient(self.oauth_client) as deploy_client:
|
|
164
212
|
if app_id:
|
|
165
213
|
# update app
|
|
166
|
-
app_data = await deploy_client.publish_app(app_id, zip_path)
|
|
214
|
+
app_data = await deploy_client.publish_app(app_id, zip_path, entrypoint_module)
|
|
167
215
|
config = load_deployment_config(config_path)
|
|
168
216
|
|
|
169
217
|
if config.get("app_url") != app_data.get("app_url"):
|
|
170
218
|
config["app_url"] = app_data.get("app_url", "")
|
|
171
219
|
save_deployment_config(config, config_path)
|
|
172
220
|
|
|
173
|
-
return {"result": {"app_id": app_id}}
|
|
221
|
+
return {"result": {"app_id": app_id, "app_url": format_app_url(app_data.get("app_url"))}}
|
|
174
222
|
else:
|
|
175
223
|
# create new app
|
|
176
|
-
app_data = await deploy_client.create_app(app_name, zip_path)
|
|
224
|
+
app_data = await deploy_client.create_app(app_name, zip_path, entrypoint_module)
|
|
177
225
|
|
|
178
226
|
config: AppDeploymentConfig = {
|
|
179
227
|
"name": app_name,
|
|
@@ -183,4 +231,13 @@ class PlotlyCloudPublishRPC:
|
|
|
183
231
|
|
|
184
232
|
save_deployment_config(config, config_path)
|
|
185
233
|
|
|
186
|
-
return {"result": {"app_id": app_data.get("id")}}
|
|
234
|
+
return {"result": {"app_id": app_data.get("id"), "app_url": format_app_url(app_data.get("app_url"))}}
|
|
235
|
+
|
|
236
|
+
async def wait_auth(self, data: Any):
|
|
237
|
+
# this just wait to circumvent setTimeout with window.open restriction.
|
|
238
|
+
await asyncio.sleep(2)
|
|
239
|
+
return {"result": {}}
|
|
240
|
+
|
|
241
|
+
async def logout(self, data: Any):
|
|
242
|
+
await self.oauth_client.logout()
|
|
243
|
+
return {"result": {}}
|
|
@@ -267,9 +267,14 @@ class OAuthClient:
|
|
|
267
267
|
# Continue with local cleanup even if remote logout fails
|
|
268
268
|
|
|
269
269
|
# Clear local credentials
|
|
270
|
+
if self.clear_credentials():
|
|
271
|
+
console.print("Local credentials cleared")
|
|
272
|
+
|
|
273
|
+
def clear_credentials(self):
|
|
270
274
|
if self.credentials_path.exists():
|
|
271
275
|
self.credentials_path.unlink()
|
|
272
|
-
|
|
276
|
+
return True
|
|
277
|
+
return False
|
|
273
278
|
|
|
274
279
|
async def is_authenticated(self) -> bool:
|
|
275
280
|
"""Check if user is authenticated."""
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Main CLI entry point for Plotly Cloud."""
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
+
import logging
|
|
4
5
|
import sys
|
|
5
6
|
import textwrap
|
|
6
7
|
from collections.abc import Sequence
|
|
@@ -15,6 +16,10 @@ from plotly_cloud._definitions import CommandArgument, HelpPanelStyle
|
|
|
15
16
|
from plotly_cloud._parser import parse_args, parse_group_and_command
|
|
16
17
|
from plotly_cloud.exceptions import PlotlyCloudError
|
|
17
18
|
|
|
19
|
+
# Suppress asyncio task exception warnings during Flask reloads
|
|
20
|
+
# These occur when Flask's werkzeug reloader terminates the process
|
|
21
|
+
logging.getLogger("asyncio").setLevel(logging.CRITICAL)
|
|
22
|
+
|
|
18
23
|
console = Console()
|
|
19
24
|
|
|
20
25
|
|
|
@@ -232,6 +237,15 @@ def main() -> None:
|
|
|
232
237
|
# Find the command group
|
|
233
238
|
group_data = CommandRegistry.commands.get(group)
|
|
234
239
|
|
|
240
|
+
# Check if group exists
|
|
241
|
+
if group_data is None:
|
|
242
|
+
create_error_panel(
|
|
243
|
+
f"Unknown command group: [yellow]'{group}'[/yellow]\n\n"
|
|
244
|
+
f"Available groups: [cyan]{', '.join(CommandRegistry.commands.keys())}[/cyan]\n\n"
|
|
245
|
+
f"Use [cyan]'plotly --help'[/cyan] to see all available commands."
|
|
246
|
+
)
|
|
247
|
+
sys.exit(1)
|
|
248
|
+
|
|
235
249
|
# Type guard to ensure group_data is not None
|
|
236
250
|
assert group_data is not None
|
|
237
251
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.plotly-cloud-publish-container{position:relative;font-family:Verdana,Geneva,sans-serif}.plotly-cloud-publish-button{cursor:pointer}.plotly-cloud-publish-button:hover{color:#7f4bc4}.plotly-cloud-publish-modal-overlay{position:absolute;bottom:100%;left:-2px;z-index:10000;margin-bottom:2px}.plotly-cloud-publish-modal-content{width:552px;background:#fff;border:1px solid #d1d5db;border-radius:4px 4px 0 0;box-shadow:0 -4px 6px #00000014;overflow:hidden}.plotly-cloud-publish-modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #e5e5e5;background:#f9fafb}.plotly-cloud-publish-modal-header h3{margin:0;color:#333}.plotly-cloud-publish-modal-close{background:none;border:none;font-size:24px;cursor:pointer;color:#666;padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center}.plotly-cloud-publish-modal-close:hover{color:#333}.plotly-cloud-publish-modal-body{padding:20px;color:#000!important;font-weight:100}button.plotly-cloud-publish-modal-button{display:inline-flex;align-items:center;gap:6px;padding:6px 10px!important;border-radius:4px!important;font-size:12px!important;font-weight:600;cursor:pointer;border:1px solid transparent;border-top-color:transparent;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent;background:#f3f4f6;color:#374151}.plotly-cloud-publish-modal-button:disabled{cursor:not-allowed}button.plotly-cloud-btn-primary{background:#8b5cf6!important;color:#fff;border-color:#7c3aed!important}button.plotly-cloud-btn-secondary{background:#fff;border:none;color:#8b5cf6!important;font-weight:100}.plotly-cloud-button-bar{display:flex;justify-content:flex-end;align-items:center}.plotly-cloud-publish-signin{display:flex;justify-content:space-between;align-items:center}.plotly-cloud-name-input-label{font-weight:600;color:#374151;font-size:12px;margin-bottom:6px}.plotly-cloud-name-input-field{margin-bottom:12px;width:calc(100% - 8px)}.plotly-cloud-status-info{display:flex;border-radius:5px;margin-bottom:12px;align-items:center;padding:6px;font-size:12px!important}.plotly-cloud-status-red{background:#fef2f2;color:#991b1b;border:1px solid #fecaca}.plotly-cloud-status-description{font-size:12px!important;margin-left:8px}.plotly-cloud-status-title{font-weight:700}.plotly-cloud-status-green{background:#ecfdf5;color:#065f46;border:1px solid #a7f3d0}.plotly-cloud-status-red .plotly-cloud-status-title{color:#a10}.plotly-cloud-status-green .plotly-cloud-status-title{color:#065f46}.plotly-cloud-status-gray{background:#f9fafb;color:#000;border:1px solid #dadada}.plotly-cloud-status-gray .plotly-cloud-status-title{color:#2e2e2e}.plotly-cloud-green-icon{color:#10b981!important}.plotly-cloud-red-icon{color:#ef4444}.plotly-cloud-gray-icon{color:#9ca3af}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.plotly-cloud-spin{animation:spin 2s linear infinite}.plotly-cloud-confirm-code{margin-top:1rem}.plotly-cloud-user-code{color:#8b5cf6;font-weight:700}button.plotly-cloud-logout{padding-left:0!important}.plotly-cloud-error{display:flex;border-radius:5px;margin-bottom:12px;align-items:center;padding:6px;font-size:12px!important;background:#fef2f2;color:#991b1b;border:1px solid #fecaca}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const React = window.React; const ReactDOM = window.ReactDOM;
|
|
2
|
+
"use strict";var plotly_cloud_publish_component=(()=>{var ua=Object.create;var V=Object.defineProperty;var ga=Object.getOwnPropertyDescriptor;var da=Object.getOwnPropertyNames;var Sa=Object.getPrototypeOf,ha=Object.prototype.hasOwnProperty;var uo=(o,a)=>()=>(a||o((a={exports:{}}).exports,a),a.exports),Ca=(o,a)=>{for(var s in a)V(o,s,{get:a[s],enumerable:!0})},Ro=(o,a,s,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let i of da(a))!ha.call(o,i)&&i!==s&&V(o,i,{get:()=>a[i],enumerable:!(r=ga(a,i))||r.enumerable});return o};var e=(o,a,s)=>(s=o!=null?ua(Sa(o)):{},Ro(a||!o||!o.__esModule?V(s,"default",{value:o,enumerable:!0}):s,o)),wa=o=>Ro(V({},"__esModule",{value:!0}),o);var c=uo((Ga,No)=>{No.exports=React});var Uo=uo(z=>{"use strict";var La=c(),Aa=Symbol.for("react.element"),ba=Symbol.for("react.fragment"),Pa=Object.prototype.hasOwnProperty,ka=La.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Ta={key:!0,ref:!0,__self:!0,__source:!0};function xo(o,a,s){var r,i={},b=null,l=null;s!==void 0&&(b=""+s),a.key!==void 0&&(b=""+a.key),a.ref!==void 0&&(l=a.ref);for(r in a)Pa.call(a,r)&&!Ta.hasOwnProperty(r)&&(i[r]=a[r]);if(o&&o.defaultProps)for(r in a=o.defaultProps,a)i[r]===void 0&&(i[r]=a[r]);return{$$typeof:Aa,type:o,key:b,ref:l,props:i,_owner:ka.current}}z.Fragment=ba;z.jsx=xo;z.jsxs=xo});var C=uo((qa,vo)=>{"use strict";vo.exports=Uo()});var Ua={};Ca(Ua,{PlotlyCloudPublishComponent:()=>So});var t=e(c());var H=e(C()),ya=({title:o,onClose:a,children:s})=>(0,H.jsx)("div",{className:"plotly-cloud-publish-modal-overlay",children:(0,H.jsxs)("div",{className:"plotly-cloud-publish-modal-content",children:[(0,H.jsxs)("div",{className:"plotly-cloud-publish-modal-header",children:[(0,H.jsx)("h3",{children:o},"modal-title"),(0,H.jsx)("button",{className:"plotly-cloud-publish-modal-close",onClick:a,children:"\xD7"},"modal-close")]}),(0,H.jsx)("div",{className:"plotly-cloud-publish-modal-body",children:s},"modal-body")]})}),Eo=ya;var Go=e(c()),A=e(C()),Fa=o=>{let[a,s]=(0,Go.useState)(o.waiting);return(0,A.jsx)("div",{className:"plotly-cloud-publish-signin",children:a?(0,A.jsxs)("div",{children:[o.verificationUrlComplete?(0,A.jsxs)("div",{children:["A browser window should open for sign-in."," ",(0,A.jsx)("a",{href:o.verificationUrlComplete,target:"_blank",rel:"noopener noreferrer",children:"Click here"})," ","if it doesn't open automatically."]}):(0,A.jsx)("div",{children:"Preparing sign-in..."}),o.userCode?(0,A.jsxs)("div",{className:"plotly-cloud-confirm-code",children:["Confirm your device code"," ",(0,A.jsx)("span",{className:"plotly-cloud-user-code",children:o.userCode})," ","when prompted."]}):null]}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)("span",{children:"Sign in to publish your app to Plotly Cloud."}),(0,A.jsx)("button",{className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",onClick:()=>{s(!0),o.onSignIn()},children:"Sign In"})]})})},Oo=Fa;var Ba=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=>i=>a({operation:r,data:i});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")}},qo=Ba;var Wo=e(c()),F=e(C()),Da=({initialAppName:o="",onCancel:a,onPublish:s})=>{let[r,i]=(0,Wo.useState)(o);return(0,F.jsxs)("div",{className:"plotly-cloud-name-input",children:[(0,F.jsx)("div",{className:"plotly-cloud-name-input-label",children:"App Name"}),(0,F.jsxs)("form",{onSubmit:l=>{l.preventDefault(),r.trim()&&s(r.trim())},children:[(0,F.jsx)("input",{type:"text",value:r,onChange:l=>i(l.target.value),placeholder:"My Dash App",className:"plotly-cloud-name-input-field"}),(0,F.jsxs)("div",{className:"plotly-cloud-button-bar",children:[(0,F.jsx)("button",{type:"button",onClick:a,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary",children:"Cancel"}),(0,F.jsx)("button",{type:"submit",disabled:!r.trim(),className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",children:"Publish App"})]})]})]})},Vo=Da;var lo=e(c());var m=e(c(),1),zo=new Map([["bold",m.createElement(m.Fragment,null,m.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",m.createElement(m.Fragment,null,m.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"}),m.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",m.createElement(m.Fragment,null,m.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",m.createElement(m.Fragment,null,m.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",m.createElement(m.Fragment,null,m.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",m.createElement(m.Fragment,null,m.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 p=e(c(),1),Zo=new Map([["bold",p.createElement(p.Fragment,null,p.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",p.createElement(p.Fragment,null,p.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),p.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",p.createElement(p.Fragment,null,p.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",p.createElement(p.Fragment,null,p.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",p.createElement(p.Fragment,null,p.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",p.createElement(p.Fragment,null,p.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 I=e(c(),1),_o=new Map([["bold",I.createElement(I.Fragment,null,I.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",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:"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",I.createElement(I.Fragment,null,I.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",I.createElement(I.Fragment,null,I.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",I.createElement(I.Fragment,null,I.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",I.createElement(I.Fragment,null,I.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 f=e(c(),1),Xo=new Map([["bold",f.createElement(f.Fragment,null,f.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",f.createElement(f.Fragment,null,f.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"}),f.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",f.createElement(f.Fragment,null,f.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",f.createElement(f.Fragment,null,f.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",f.createElement(f.Fragment,null,f.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",f.createElement(f.Fragment,null,f.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 u=e(c(),1),Jo=new Map([["bold",u.createElement(u.Fragment,null,u.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",u.createElement(u.Fragment,null,u.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"}),u.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",u.createElement(u.Fragment,null,u.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",u.createElement(u.Fragment,null,u.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",u.createElement(u.Fragment,null,u.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",u.createElement(u.Fragment,null,u.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 g=e(c(),1),Ko=new Map([["bold",g.createElement(g.Fragment,null,g.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",g.createElement(g.Fragment,null,g.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"}),g.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",g.createElement(g.Fragment,null,g.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",g.createElement(g.Fragment,null,g.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",g.createElement(g.Fragment,null,g.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",g.createElement(g.Fragment,null,g.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),Qo=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 S=e(c(),1),jo=new Map([["bold",S.createElement(S.Fragment,null,S.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",S.createElement(S.Fragment,null,S.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"}),S.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",S.createElement(S.Fragment,null,S.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",S.createElement(S.Fragment,null,S.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",S.createElement(S.Fragment,null,S.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",S.createElement(S.Fragment,null,S.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 M=e(c(),1);var Yo=e(c(),1),$o=(0,Yo.createContext)({color:"currentColor",size:"1em",weight:"regular",mirrored:!1});var w=M.forwardRef((o,a)=>{let{alt:s,color:r,size:i,weight:b,mirrored:l,children:U,weights:v,...E}=o,{color:G="currentColor",size:R,weight:O="regular",mirrored:N=!1,...B}=M.useContext($o);return M.createElement("svg",{ref:a,xmlns:"http://www.w3.org/2000/svg",width:i??R,height:i??R,fill:r??G,viewBox:"0 0 256 256",transform:l||N?"scale(-1, 1)":void 0,...B,...E},!!s&&M.createElement("title",null,s),U,v.get(b??O))});w.displayName="IconBase";var Z=e(c(),1);var _=Z.forwardRef((o,a)=>Z.createElement(w,{ref:a,...o,weights:zo}));_.displayName="ArrowSquareOutIcon";var X=e(c(),1);var J=X.forwardRef((o,a)=>X.createElement(w,{ref:a,...o,weights:Zo}));J.displayName="CircleNotchIcon";var K=e(c(),1);var Q=K.forwardRef((o,a)=>K.createElement(w,{ref:a,...o,weights:_o}));Q.displayName="CloudCheckIcon";var j=e(c(),1);var Y=j.forwardRef((o,a)=>j.createElement(w,{ref:a,...o,weights:Xo}));Y.displayName="CloudSlashIcon";var $=e(c(),1);var oo=$.forwardRef((o,a)=>$.createElement(w,{ref:a,...o,weights:Jo}));oo.displayName="CloudXIcon";var ao=e(c(),1);var so=ao.forwardRef((o,a)=>ao.createElement(w,{ref:a,...o,weights:Ko}));so.displayName="GearIcon";var ro=e(c(),1);var eo=ro.forwardRef((o,a)=>ro.createElement(w,{ref:a,...o,weights:Qo}));eo.displayName="SignOutIcon";var no=e(c(),1);var io=no.forwardRef((o,a)=>no.createElement(w,{ref:a,...o,weights:jo}));io.displayName="WarningIcon";var oa=e(C()),Ha=o=>(0,oa.jsx)(J,{size:o.size,className:"plotly-cloud-spin plotly-cloud-gray-icon",weight:"bold"}),to=Ha;var q=e(C()),Ma=({status:o,size:a=16,isButtonIcon:s})=>o==="BUILDING"||o==="STARTING"||o==="unknown"?(0,q.jsx)(to,{size:a}):o==="RUNNING"?(0,q.jsx)(Q,{size:a,className:"plotly-cloud-green-icon",weight:s?"fill":"duotone"}):o==="new"?(0,q.jsx)(Y,{size:a,className:"plotly-cloud-gray-icon",weight:s?"fill":"duotone"}):(0,q.jsx)(oo,{size:a,className:"plotly-cloud-red-icon",weight:"duotone"}),co=Ma;var h=e(C()),Ra=({status:o,onPublish:a,isUpdate:s,publishing:r,onCancel:i,onLogout:b,appUrl:l})=>{let U=()=>{i&&i()},v=()=>{window.open(l,"_blank")},[E,G,R]=(0,lo.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]),[O,N]=(0,lo.useMemo)(()=>r?s?["Open Settings in Plotly Cloud","Republishing",""]:["Cancel","Publishing",""]:s?[(0,h.jsxs)("span",{children:[(0,h.jsx)(so,{}),"\xA0Open Settings in Plotly Cloud"]}),"Republish"]:["Cancel","Publish",""],[r,s]),B=(0,lo.useMemo)(()=>["BUILDING","STARTING"].includes(o),[o]);return(0,h.jsxs)("div",{className:"plotly-cloud-status-banner",children:[(0,h.jsxs)("div",{className:`plotly-cloud-status-info plotly-cloud-status-${R}`,children:[(0,h.jsx)(co,{status:o,size:20}),(0,h.jsxs)("div",{className:"plotly-cloud-status-description",children:[(0,h.jsx)("div",{className:"plotly-cloud-status-title",children:E}),(0,h.jsx)("div",{className:"plotly-cloud-status-text",children:G})]})]}),(0,h.jsxs)("div",{className:"plotly-cloud-button-bar",children:[(0,h.jsx)("div",{style:{flex:1},children:(0,h.jsxs)("button",{disabled:r,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary plotly-cloud-logout",onClick:b,children:[(0,h.jsx)(eo,{}),"\xA0Logout"]})}),(0,h.jsx)("button",{type:"button",onClick:U,disabled:s?!1:r,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary",children:O}),l?(0,h.jsx)("button",{onClick:v,disabled:r,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary",children:(0,h.jsxs)("span",{children:[(0,h.jsx)(_,{}),"\xA0View App"]})}):null,(0,h.jsxs)("button",{type:"button",onClick:a,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",disabled:r||B,children:[r?(0,h.jsx)(to,{size:12}):null,N]})]})]})},go=Ra;var mo=e(C()),Na=({error:o})=>(0,mo.jsxs)("div",{className:"plotly-cloud-error",children:[(0,mo.jsx)(io,{className:"plotly-cloud-red-icon",size:24}),"\xA0",o]}),aa=Na;function sa(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 L=e(C()),po="cloud",xa=()=>{let{popup:o,setPopup:a}=window.dash_component_api.devtool.useDevtool(),s=window.dash_component_api.devtool.useDevtoolMenuButtonClassName(po),[r,i]=(0,t.useState)(""),[b,l]=(0,t.useState)("initialize"),[U,v]=(0,t.useState)(!1),[E,G]=(0,t.useState)(""),[R,O]=(0,t.useState)(""),[N,B]=(0,t.useState)(!1),[ra,Io]=(0,t.useState)(!1),[ho,ea]=(0,t.useState)(""),[na,Co]=(0,t.useState)(""),[wo,Lo]=(0,t.useState)(""),[T,D]=(0,t.useState)("unknown"),[Ao,bo]=(0,t.useState)(0),[ia,ta]=(0,t.useState)(1),[Po,ko]=(0,t.useState)(-1),W=(0,t.useRef)(""),y=(0,t.useRef)(""),k=(0,t.useMemo)(()=>qo("/"),[]),To=(0,t.useMemo)(()=>o===po,[o]),fo=()=>{a("")},ca=()=>{a(o===po?"":po)},yo=()=>{k.logout().then(()=>{l("initialize")})},Fo=()=>{v(!0),k.authenticate().then(n=>{n.error?i(n.error):(l("auth_poll"),G(n.result.user_code),O(n.result.verification_uri_complete),W.current=n.result.device_code,k.wait_auth().then(()=>{window.open(n.result.verification_uri_complete,"_blank"),ko(setTimeout(()=>{k.auth_poll({device_code:W.current}).then(Bo)},8e3))}))})},Bo=n=>{if(n.error)i(n.error);else{if(n.result.success){W.current="",y.current?(D("unknown"),l("update_app"),k.status({app_id:y.current}).then(x=>{D(x.result.status)})):l("enter_name");return}if(n.result.try_again){Fo();return}let P=ia||1;n.result.delay&&(P=n.result.delay,ta(P)),ko(setTimeout(()=>{k.auth_poll({device_code:W.current}).then(Bo)},1e3+P*1e3))}},la=()=>{setTimeout(Fo,2e3)};(0,t.useEffect)(()=>{b==="initialize"&&k.initialize().then(n=>{let{result:P,error:x}=n;x?i(x):(ea(P.app_path),Co(P.app_name),D(P.status),Lo(P.app_url),P.app_id&&(y.current=P.app_id),P?.authenticated?P.status==="new"?l("enter_name"):l("update_app"):l("sign_in"))})},[b,To]);let ma=()=>{k.status({app_id:y.current}).then(pa)},pa=n=>{if(n.error){i(n.error);return}D(n.result.status),bo(Date.now()),n.result.status==="RUNNING"?(B(!1),Io(!0),l("update_app")):["BUILDING","STARTING"].includes(n.result.status)||(B(!1),l("update_app"))},Do=n=>{if(n.error){i(n.error);return}l("status_poll"),y.current=n.result.app_id,Lo(n.result.app_url),D("BUILDING"),bo(0)},Ia=n=>{Co(n),B(!0),Io(!1),D("BUILDING"),k.publish({app_path:ho,app_name:n}).then(Do)},Ho=()=>{B(!0),Io(!0),D("BUILDING"),k.publish({app_id:y.current,app_path:ho}).then(Do)};(0,t.useEffect)(()=>{if(!y.current||T==="unknown"||T==="new")return;let n=setInterval(()=>{let x=Date.now()-Ao,fa=sa(T);x>=fa&&ma()},1e3);return()=>{clearInterval(n)}},[y.current,T,Ao]),(0,t.useEffect)(()=>()=>{Po>0&&clearTimeout(Po)}),(0,t.useEffect)(()=>{r&&T!=="error"&&D("error")},[r,T]);let Mo=()=>{window.open(`https://cloud.plotly.com/app/${y.current}/settings`,"_blank")};return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)("button",{className:s,onClick:ca,children:[(0,L.jsx)(co,{status:T,isButtonIcon:!0}),"\xA0Plotly Cloud"]}),To?(0,L.jsx)(Eo,{title:"Plotly Cloud",onClose:fo,children:r?(0,L.jsx)(aa,{error:r}):(()=>{switch(b){case"authenticate":case"auth_poll":case"sign_in":return(0,L.jsx)(Oo,{onSignIn:la,waiting:U,userCode:E,verificationUrlComplete:R});case"enter_name":return(0,L.jsx)(Vo,{onPublish:Ia,onCancel:fo,initialAppName:na});case"update_app":return(0,L.jsx)(go,{onPublish:Ho,status:T,isUpdate:!0,onCancel:Mo,appUrl:wo,onLogout:yo});case"status_poll":case"publish":return(0,L.jsx)(go,{publishing:N,onPublish:Ho,status:T,onCancel:N?Mo:fo,isUpdate:ra,appUrl:wo,onLogout:yo});default:return(0,L.jsx)(L.Fragment,{})}})()},"publish-modal"):null]})},So=xa;typeof window<"u"&&(window.plotly_cloud_publish_component={PlotlyCloudPublishComponent:So});return wa(Ua);})();
|
|
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
|
+
*/
|
|
@@ -4,12 +4,12 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "plotly-cloud"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.0rc4"
|
|
8
8
|
description = "CLI for interacting with Plotly Cloud to deploy Dash apps"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
11
11
|
dependencies = [
|
|
12
|
-
"httpx>=0.24.0",
|
|
12
|
+
"httpx>=0.24.0,<1.0.0",
|
|
13
13
|
"dash>=2.0.0",
|
|
14
14
|
"rich>=10.0.0",
|
|
15
15
|
"rich-argparse>=1.7.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.plotly-cloud-publish-container{position:relative;font-family:Verdana,Geneva,sans-serif}.plotly-cloud-publish-button{cursor:pointer}.plotly-cloud-publish-button:hover{color:#7f4bc4}.plotly-cloud-publish-modal-overlay{position:absolute;bottom:100%;left:-16px;z-index:10000;margin-bottom:1.25rem}.plotly-cloud-publish-modal-content{width:522px;background:#fff;border:1px solid #d1d5db;border-radius:4px 4px 0 0;box-shadow:0 -4px 6px #00000014;overflow:hidden}.plotly-cloud-publish-modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #e5e5e5;background:#f9fafb}.plotly-cloud-publish-modal-header h3{margin:0;color:#333}.plotly-cloud-publish-modal-close{background:none;border:none;font-size:24px;cursor:pointer;color:#666;padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center}.plotly-cloud-publish-modal-close:hover{color:#333}.plotly-cloud-publish-modal-body{padding:20px;color:#000!important;font-weight:100}button.plotly-cloud-publish-modal-button{display:inline-flex;align-items:center;gap:6px;padding:6px 10px!important;border-radius:4px!important;font-size:12px!important;font-weight:600!important;cursor:pointer;border:1px solid transparent;border-top-color:transparent;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent;background:#f3f4f6;color:#374151}.plotly-cloud-publish-modal-button:disabled{cursor:not-allowed}button.plotly-cloud-btn-primary{background:#8b5cf6!important;color:#fff;border-color:#7c3aed!important}button.plotly-cloud-btn-secondary{background:#fff;border:none;color:#8b5cf6!important}.plotly-cloud-button-bar{display:flex;justify-content:flex-end;align-items:center}.plotly-cloud-publish-signin{display:flex;justify-content:space-between;align-items:center}.plotly-cloud-name-input-label{font-weight:600;color:#374151;font-size:12px;margin-bottom:6px}.plotly-cloud-name-input-field{margin-bottom:12px;width:calc(100% - 8px)}.plotly-cloud-status-info{display:flex;border-radius:5px;margin-bottom:12px;align-items:center;padding:6px;font-size:12px!important}.plotly-cloud-status-red{background:#fef2f2;color:#991b1b;border:1px solid #fecaca}.plotly-cloud-status-description{font-size:12px!important;margin-left:8px}.plotly-cloud-status-title{font-weight:700}.plotly-cloud-status-green{background:#ecfdf5;color:#065f46;border:1px solid #a7f3d0}.plotly-cloud-status-red .plotly-cloud-status-title{color:#a10}.plotly-cloud-status-green .plotly-cloud-status-title{color:#065f46}.plotly-cloud-status-gray{background:#f9fafb;color:#000;border:1px solid #dadada}.plotly-cloud-status-gray .plotly-cloud-status-title{color:#2e2e2e}.plotly-cloud-green-icon{color:#10b981!important}.plotly-cloud-red-icon{color:#ef4444}.plotly-cloud-gray-icon{color:#9ca3af}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.plotly-cloud-spin{animation:spin 2s linear infinite}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
const React = window.React; const ReactDOM = window.ReactDOM;
|
|
2
|
-
"use strict";var plotly_cloud_publish_component=(()=>{var Go=Object.create;var G=Object.defineProperty;var Oo=Object.getOwnPropertyDescriptor;var Wo=Object.getOwnPropertyNames;var qo=Object.getPrototypeOf,Vo=Object.prototype.hasOwnProperty;var ao=(o,a)=>()=>(a||o((a={exports:{}}).exports,a),a.exports),zo=(o,a)=>{for(var s in a)G(o,s,{get:a[s],enumerable:!0})},mo=(o,a,s,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let n of Wo(a))!Vo.call(o,n)&&n!==s&&G(o,n,{get:()=>a[n],enumerable:!(r=Oo(a,n))||r.enumerable});return o};var e=(o,a,s)=>(s=o!=null?Go(qo(o)):{},mo(a||!o||!o.__esModule?G(s,"default",{value:o,enumerable:!0}):s,o)),Xo=o=>mo(G({},"__esModule",{value:!0}),o);var u=ao((fa,po)=>{po.exports=React});var fo=ao(O=>{"use strict";var _o=u(),Zo=Symbol.for("react.element"),Jo=Symbol.for("react.fragment"),Ko=Object.prototype.hasOwnProperty,jo=_o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Qo={key:!0,ref:!0,__self:!0,__source:!0};function Io(o,a,s){var r,n={},I=null,h=null;s!==void 0&&(I=""+s),a.key!==void 0&&(I=""+a.key),a.ref!==void 0&&(h=a.ref);for(r in a)Ko.call(a,r)&&!Qo.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:Zo,type:o,key:I,ref:h,props:n,_owner:jo.current}}O.Fragment=Jo;O.jsx=Io;O.jsxs=Io});var S=ao((Sa,uo)=>{"use strict";uo.exports=fo()});var ia={};zo(ia,{PlotlyCloudPublishComponent:()=>ro});var t=e(u());var k=e(S()),Yo=({title:o,onClose:a,children:s})=>(0,k.jsx)("div",{className:"plotly-cloud-publish-modal-overlay",children:(0,k.jsxs)("div",{className:"plotly-cloud-publish-modal-content",children:[(0,k.jsxs)("div",{className:"plotly-cloud-publish-modal-header",children:[(0,k.jsx)("h3",{children:o},"modal-title"),(0,k.jsx)("button",{className:"plotly-cloud-publish-modal-close",onClick:a,children:"\xD7"},"modal-close")]}),(0,k.jsx)("div",{className:"plotly-cloud-publish-modal-body",children:s},"modal-body")]})}),So=Yo;var go=e(u()),L=e(S()),$o=o=>{let[a,s]=(0,go.useState)(o.waiting);return(0,L.jsx)("div",{className:"plotly-cloud-publish-signin",children:a?(0,L.jsx)("span",{children:"Waiting for succesful sign-in on signin.cloud.plotly.com"}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)("span",{children:"Sign in to publish your app to Plotly Cloud."}),(0,L.jsx)("button",{className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",onClick:()=>{s(!0),o.onSignIn()},children:"Sign In"})]})})},ho=$o;var oa=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")}},Co=oa;var wo=e(u()),b=e(S()),aa=({initialAppName:o="",onCancel:a,onPublish:s})=>{let[r,n]=(0,wo.useState)(o);return(0,b.jsxs)("div",{className:"plotly-cloud-name-input",children:[(0,b.jsx)("div",{className:"plotly-cloud-name-input-label",children:"App Name"}),(0,b.jsxs)("form",{onSubmit:h=>{h.preventDefault(),r.trim()&&s(r.trim())},children:[(0,b.jsx)("input",{type:"text",value:r,onChange:h=>n(h.target.value),placeholder:"My Dash App",className:"plotly-cloud-name-input-field"}),(0,b.jsxs)("div",{className:"plotly-cloud-button-bar",children:[(0,b.jsx)("button",{type:"button",onClick:a,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary",children:"Cancel"}),(0,b.jsx)("button",{type:"submit",disabled:!r.trim(),className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",children:"Publish App"})]})]})]})},Lo=aa;var Q=e(u());var c=e(u(),1),bo=new Map([["bold",c.createElement(c.Fragment,null,c.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",c.createElement(c.Fragment,null,c.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),c.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",c.createElement(c.Fragment,null,c.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",c.createElement(c.Fragment,null,c.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",c.createElement(c.Fragment,null,c.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",c.createElement(c.Fragment,null,c.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 l=e(u(),1),Po=new Map([["bold",l.createElement(l.Fragment,null,l.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",l.createElement(l.Fragment,null,l.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"}),l.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",l.createElement(l.Fragment,null,l.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",l.createElement(l.Fragment,null,l.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",l.createElement(l.Fragment,null,l.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",l.createElement(l.Fragment,null,l.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 m=e(u(),1),Ao=new Map([["bold",m.createElement(m.Fragment,null,m.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",m.createElement(m.Fragment,null,m.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"}),m.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",m.createElement(m.Fragment,null,m.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",m.createElement(m.Fragment,null,m.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",m.createElement(m.Fragment,null,m.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",m.createElement(m.Fragment,null,m.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 p=e(u(),1),ko=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,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",p.createElement(p.Fragment,null,p.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"}),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,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",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-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",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,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",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,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",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,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 y=e(u(),1);var To=e(u(),1),yo=(0,To.createContext)({color:"currentColor",size:"1em",weight:"regular",mirrored:!1});var P=y.forwardRef((o,a)=>{let{alt:s,color:r,size:n,weight:I,mirrored:h,children:B,weights:F,...D}=o,{color:H="currentColor",size:C,weight:Y="regular",mirrored:M=!1,...x}=y.useContext(yo);return y.createElement("svg",{ref:a,xmlns:"http://www.w3.org/2000/svg",width:n??C,height:n??C,fill:r??H,viewBox:"0 0 256 256",transform:h||M?"scale(-1, 1)":void 0,...x,...D},!!s&&y.createElement("title",null,s),B,F.get(I??Y))});P.displayName="IconBase";var W=e(u(),1);var q=W.forwardRef((o,a)=>W.createElement(P,{ref:a,...o,weights:bo}));q.displayName="CircleNotchIcon";var V=e(u(),1);var z=V.forwardRef((o,a)=>V.createElement(P,{ref:a,...o,weights:Po}));z.displayName="CloudCheckIcon";var X=e(u(),1);var _=X.forwardRef((o,a)=>X.createElement(P,{ref:a,...o,weights:Ao}));_.displayName="CloudSlashIcon";var Z=e(u(),1);var J=Z.forwardRef((o,a)=>Z.createElement(P,{ref:a,...o,weights:ko}));J.displayName="CloudXIcon";var Bo=e(S()),sa=o=>(0,Bo.jsx)(q,{size:o.size,className:"plotly-cloud-spin plotly-cloud-gray-icon",weight:"bold"}),K=sa;var R=e(S()),ra=({status:o,size:a=16,isButtonIcon:s})=>o==="BUILDING"||o==="STARTING"||o==="unknown"?(0,R.jsx)(K,{size:a}):o==="RUNNING"?(0,R.jsx)(z,{size:a,className:"plotly-cloud-green-icon",weight:s?"fill":"duotone"}):o==="new"?(0,R.jsx)(_,{size:a,className:"plotly-cloud-gray-icon",weight:s?"fill":"duotone"}):(0,R.jsx)(J,{size:a,className:"plotly-cloud-red-icon",weight:"duotone"}),j=ra;var d=e(S()),ea=({status:o,onPublish:a,isUpdate:s,publishing:r,onCancel:n})=>{let I=()=>{n&&n()},[h,B,F]=(0,Q.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]),[D,H]=(0,Q.useMemo)(()=>r?s?["Open Settings in Plotly Cloud","Republishing"]:["Cancel","Publishing"]:s?["Open Settings in Plotly Cloud","Republish"]:["Cancel","Publish"],[r,s]),C=(0,Q.useMemo)(()=>["BUILDING","STARTING"].includes(o),[o]);return(0,d.jsxs)("div",{className:"plotly-cloud-status-banner",children:[(0,d.jsxs)("div",{className:`plotly-cloud-status-info plotly-cloud-status-${F}`,children:[(0,d.jsx)(j,{status:o,size:20}),(0,d.jsxs)("div",{className:"plotly-cloud-status-description",children:[(0,d.jsx)("div",{className:"plotly-cloud-status-title",children:h}),(0,d.jsx)("div",{className:"plotly-cloud-status-text",children:B})]})]}),(0,d.jsxs)("div",{className:"plotly-cloud-button-bar",children:[(0,d.jsx)("button",{type:"button",onClick:I,disabled:s?!1:r,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary",children:D}),(0,d.jsxs)("button",{type:"button",onClick:a,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",disabled:r||C,children:[r?(0,d.jsx)(K,{size:12}):null,H]})]})]})},so=ea;var g=e(S()),na=()=>{let[o,a]=(0,t.useState)(!1),[s,r]=(0,t.useState)(""),[n,I]=(0,t.useState)("initialize"),[h,B]=(0,t.useState)(!1),[F,D]=(0,t.useState)(!1),[H,C]=(0,t.useState)(!1),[Y,M]=(0,t.useState)(!1),[x,Fo]=(0,t.useState)(""),[Do,eo]=(0,t.useState)(""),[$,T]=(0,t.useState)("unknown"),[ta,Ho]=(0,t.useState)(!1),[N,U]=(0,t.useState)(-1),[Mo,Ro]=(0,t.useState)(1),v=(0,t.useRef)(""),A=(0,t.useRef)(""),[ca,la]=(0,t.useReducer)((i,f)=>{switch(f.type){case"init":return{...f.payload};case"slow_down":return{...i,delay:f.payload.delay};case"try_again":case"success":return{}}return{...i}},{}),w=(0,t.useMemo)(()=>Co("/"),[]),ma=()=>{a(!0)},oo=()=>{a(!1)},xo=()=>{a(!o)},No=(0,t.useMemo)(()=>o?"plotly-cloud-publish-container dash-debug-menu__button dash-debug-menu__button--selected":"plotly-cloud-publish-container dash-debug-menu__button",[o]),no=()=>{D(!0),w.authenticate().then(i=>{i.error?r(i.error):(I("auth_poll"),v.current=i.result.device_code,window.open(i.result.verification_uri_complete,"_blank"),U(setTimeout(()=>{w.auth_poll({device_code:v.current}).then(io)},8e3)))})},io=i=>{if(i.error)r(i.error);else{if(i.result.success){B(!0),v.current="",A.current?(T("unknown"),I("update_app"),w.status({app_id:A.current}).then(E=>{T(E.result.status)})):I("enter_name");return}if(i.result.try_again){no();return}let f=Mo||1;i.result.delay&&(f=i.result.delay,Ro(f)),U(setTimeout(()=>{w.auth_poll({device_code:v.current}).then(io)},1e3+f*1e3))}},Uo=no;(0,t.useEffect)(()=>{n==="initialize"&&w.initialize().then(i=>{let{result:f,error:E}=i;E?r(E):(B(!f?.authenticated),Fo(f.app_path),eo(f.app_name),T(f.status),f.app_id&&(A.current=f.app_id),f?.authenticated?f.status==="new"?I("enter_name"):I("update_app"):I("sign_in"))})},[n,o]);let to=i=>{T(i.result.status),i.result.status==="RUNNING"?(C(!1),M(!0),I("update_app")):["BUILDING","STARTING"].includes(i.result.status)?U(setTimeout(()=>{w.status({app_id:A.current}).then(to)},2e3)):(C(!1),I("update_app"))},co=i=>{if(i.error){r(i.error);return}I("status_poll"),A.current=i.result.app_id,T("BUILDING"),N>0&&clearTimeout(N),U(setTimeout(()=>{w.status({app_id:A.current}).then(to)},2500))},vo=i=>{Ho(!0),eo(i),C(!0),M(!1),T("BUILDING"),w.publish({app_path:x,app_name:i}).then(co)},lo=()=>{C(!0),M(!0),T("BUILDING"),w.publish({app_id:A.current,app_path:x}).then(co)};(0,t.useEffect)(()=>()=>{N&&clearTimeout(N)});let Eo=()=>{window.open(`https://cloud.plotly.com/app/${A.current}/settings`,"_blank")};return(0,g.jsxs)("div",{className:No,children:[(0,g.jsxs)("button",{className:"plotly-cloud-publish-button",onClick:xo,children:[(0,g.jsx)(j,{status:$,isButtonIcon:!0})," Plotly Cloud"]},"publish-button"),o?(0,g.jsx)(So,{title:"Plotly Cloud",onClose:oo,children:s||(()=>{switch(n){case"authenticate":case"auth_poll":case"sign_in":return(0,g.jsx)(ho,{onSignIn:Uo,waiting:F});case"enter_name":return(0,g.jsx)(Lo,{onPublish:vo,onCancel:oo,initialAppName:Do});case"update_app":return(0,g.jsx)(so,{onPublish:lo,status:$,isUpdate:!0,onCancel:Eo});case"status_poll":case"publish":return(0,g.jsx)(so,{publishing:H,onPublish:lo,status:$,onCancel:oo,isUpdate:Y});default:return(0,g.jsx)(g.Fragment,{})}})()},"publish-modal"):null]})},ro=na;typeof window<"u"&&(window.plotly_cloud_publish_component={PlotlyCloudPublishComponent:ro});return Xo(ia);})();
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|