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.
Files changed (24) hide show
  1. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/PKG-INFO +6 -10
  2. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/README.md +3 -7
  3. plotly_cloud-0.2.0/plotly_cloud/__init__.py +3 -0
  4. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/plotly_cloud/_api_types.py +22 -1
  5. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/plotly_cloud/_cloud_env.py +2 -2
  6. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/plotly_cloud/_commands.py +104 -7
  7. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/plotly_cloud/_definitions.py +5 -3
  8. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/plotly_cloud/_deploy.py +65 -12
  9. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/plotly_cloud/_devtool_hooks.py +11 -1
  10. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/plotly_cloud/_devtool_publish_rpc.py +71 -2
  11. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/plotly_cloud/_oauth.py +3 -3
  12. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/plotly_cloud/cloud-env.toml +1 -1
  13. plotly_cloud-0.2.0/plotly_cloud/cloud_devtools.css +1 -0
  14. plotly_cloud-0.2.0/plotly_cloud/cloud_devtools.js +15 -0
  15. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/plotly_cloud/exceptions.py +2 -2
  16. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/pyproject.toml +5 -3
  17. plotly_cloud-0.1.0rc4/plotly_cloud/__init__.py +0 -3
  18. plotly_cloud-0.1.0rc4/plotly_cloud/cloud_devtools.css +0 -1
  19. plotly_cloud-0.1.0rc4/plotly_cloud/cloud_devtools.js +0 -15
  20. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/.gitignore +0 -0
  21. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/LICENSE +0 -0
  22. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/plotly_cloud/_changes.py +0 -0
  23. {plotly_cloud-0.1.0rc4 → plotly_cloud-0.2.0}/plotly_cloud/_parser.py +0 -0
  24. {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.1.0rc4
4
- Summary: CLI for interacting with Plotly Cloud to deploy Dash apps
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 CLI
16
+ # Plotly Cloud Extension
17
17
 
18
- A command-line interface for interacting with Plotly Cloud to publish and manage Dash applications.
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-cli/
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 CLI
1
+ # Plotly Cloud Extension
2
2
 
3
- A command-line interface for interacting with Plotly Cloud to publish and manage Dash applications.
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-cli/
259
+ plotly-cloud-extension/
264
260
  ├── plotly_cloud/
265
261
  │ ├── __init__.py # Package initialization
266
262
  │ ├── cli.py # Main CLI entry point
@@ -0,0 +1,3 @@
1
+ """Plotly Cloud Extension package."""
2
+
3
+ __version__ = "0.2.0"
@@ -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 CLI."""
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 CLI."""
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 CLI."""
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, cast
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, RevisionStatusInfo
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 = cast(
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 CLI."""
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 CLI."""
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 (80MB)
34
- MAX_ZIP_SIZE = 80 * 1024 * 1024
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
- dirs[:] = [d for d in dirs if not should_exclude_path(os.path.join(root, d), exclude_patterns)]
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 zip file size
167
+ # Check uncompressed size only
158
168
  zip_size = os.path.getsize(output_path)
159
- if zip_size > MAX_ZIP_SIZE:
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"Deployment package is too large ({zip_size / (1024 * 1024):.1f}MB)",
163
- f"Maximum allowed size is {MAX_ZIP_SIZE / (1024 * 1024):.0f}MB. "
164
- "Consider excluding more files in your .gitignore.",
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(self, name: str, zip_path: str = "", entrypoint_module: Optional[str] = None) -> 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 = asyncio.get_event_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 CLI using WorkOS CLI Auth."""
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(dict(tokens))
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
@@ -1,4 +1,4 @@
1
- # Plotly Cloud CLI Configuration
1
+ # Plotly Cloud Extension Configuration
2
2
  # This file contains the configuration for Plotly Cloud.
3
3
  # Edit this file to configure your OAuth client ID and API endpoint.
4
4
 
@@ -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 CLI."""
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 CLI errors."""
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.1.0rc4"
8
- description = "CLI for interacting with Plotly Cloud to deploy Dash apps"
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,3 +0,0 @@
1
- """Plotly Cloud CLI package."""
2
-
3
- __version__ = "0.1.0"
@@ -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