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