plotly-cloud 0.1.0rc2__tar.gz → 0.1.0rc4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/PKG-INFO +2 -2
  2. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_api_types.py +8 -7
  3. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_commands.py +13 -11
  4. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_deploy.py +14 -80
  5. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_devtool_publish_rpc.py +67 -10
  6. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_oauth.py +6 -1
  7. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/cli.py +14 -0
  8. plotly_cloud-0.1.0rc4/plotly_cloud/cloud_devtools.css +1 -0
  9. plotly_cloud-0.1.0rc4/plotly_cloud/cloud_devtools.js +15 -0
  10. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/pyproject.toml +2 -2
  11. plotly_cloud-0.1.0rc2/plotly_cloud/cloud_devtools.css +0 -1
  12. plotly_cloud-0.1.0rc2/plotly_cloud/cloud_devtools.js +0 -15
  13. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/.gitignore +0 -0
  14. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/LICENSE +0 -0
  15. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/README.md +0 -0
  16. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/__init__.py +0 -0
  17. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_changes.py +0 -0
  18. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_cloud_env.py +0 -0
  19. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_definitions.py +0 -0
  20. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_devtool_hooks.py +0 -0
  21. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/_parser.py +0 -0
  22. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/cloud-env.toml +0 -0
  23. {plotly_cloud-0.1.0rc2 → plotly_cloud-0.1.0rc4}/plotly_cloud/exceptions.py +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plotly-cloud
3
- Version: 0.1.0rc2
3
+ Version: 0.1.0rc4
4
4
  Summary: CLI for interacting with Plotly Cloud to deploy Dash apps
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.9
7
7
  Requires-Dist: dash>=2.0.0
8
- Requires-Dist: httpx>=0.24.0
8
+ Requires-Dist: httpx<1.0.0,>=0.24.0
9
9
  Requires-Dist: nest-asyncio>=1.6.0
10
10
  Requires-Dist: rich-argparse>=1.7.1
11
11
  Requires-Dist: rich>=10.0.0
@@ -4,16 +4,10 @@ from typing import Any, Dict, List
4
4
 
5
5
  from typing_extensions import NotRequired, TypedDict
6
6
 
7
- EnvironmentVariables = Dict[str, Any]
8
-
9
-
10
- class ErrorResponse(TypedDict):
11
- error: NotRequired[str]
12
- error_description: NotRequired[str]
13
-
14
7
 
15
8
  class AppRequest(TypedDict):
16
9
  pythonVersion: NotRequired[str]
10
+ entrypointModule: NotRequired[str]
17
11
  name: NotRequired[str]
18
12
  appUrl: NotRequired[str]
19
13
  description: NotRequired[str]
@@ -21,6 +15,11 @@ class AppRequest(TypedDict):
21
15
  invitations: NotRequired[List[str]]
22
16
  environmentVariables: NotRequired[List[Dict[str, Any]]]
23
17
 
18
+ EnvironmentVariables = Dict[str, Any]
19
+
20
+ class ErrorResponse(TypedDict):
21
+ error: NotRequired[str]
22
+ error_description: NotRequired[str]
24
23
 
25
24
  class App(TypedDict):
26
25
  id: NotRequired[str]
@@ -29,6 +28,8 @@ class App(TypedDict):
29
28
  description: NotRequired[str]
30
29
  app_url: NotRequired[str]
31
30
  is_view_private: NotRequired[bool]
31
+ created_with_desktop: NotRequired[bool]
32
+ desktop_app_version: NotRequired[str]
32
33
  environment_variables: NotRequired[EnvironmentVariables]
33
34
  invitations: NotRequired[List[str]]
34
35
  status: NotRequired[str]
@@ -8,7 +8,7 @@ import sys
8
8
  import tempfile
9
9
  import time
10
10
  import webbrowser
11
- from typing import Dict, List, TypedDict
11
+ from typing import Dict, List, TypedDict, cast
12
12
 
13
13
  from rich.console import Console
14
14
  from rich.live import Live
@@ -20,7 +20,7 @@ from rich.text import Text
20
20
 
21
21
  from plotly_cloud._changes import collect_module_files, until_change
22
22
  from plotly_cloud._cloud_env import cloud_config
23
- from plotly_cloud._definitions import REVISION_STATUS_MAP, CommandArgument
23
+ from plotly_cloud._definitions import REVISION_STATUS_MAP, CommandArgument, RevisionStatusInfo
24
24
  from plotly_cloud._deploy import (
25
25
  DeploymentClient,
26
26
  create_deployment_zip,
@@ -28,7 +28,6 @@ from plotly_cloud._deploy import (
28
28
  get_config_path,
29
29
  load_deployment_config,
30
30
  save_deployment_config,
31
- validate_dependencies,
32
31
  )
33
32
  from plotly_cloud._oauth import OAuthClient
34
33
  from plotly_cloud._parser import ParsedArguments
@@ -439,6 +438,10 @@ class PublishCommand(BaseCommand):
439
438
  "name": "--name",
440
439
  "help": "Application name (will prompt if not provided first time app is published)",
441
440
  },
441
+ {
442
+ "name": "--entrypoint-module",
443
+ "help": "Entrypoint module for the application in 'module:variable' format (e.g., 'app:app')",
444
+ },
442
445
  {
443
446
  "name": "--output",
444
447
  "help": "Output path for zip file of the published app (default: temporary file)",
@@ -532,7 +535,9 @@ class PublishCommand(BaseCommand):
532
535
  status_text.append("Timeout", style="bold yellow")
533
536
  return Panel(status_text, title="🚀 Publish Status", border_style="yellow", padding=(0, 1))
534
537
 
535
- status_info = REVISION_STATUS_MAP.get(status, {"label": status, "emoji": "⏳", "color": "white"})
538
+ status_info = cast(
539
+ RevisionStatusInfo, REVISION_STATUS_MAP.get(status, {"label": status, "emoji": "⏳", "color": "white"})
540
+ )
536
541
 
537
542
  status_text = Text()
538
543
  status_text.append(f"{status_info['emoji']} ", style="bold")
@@ -609,11 +614,6 @@ class PublishCommand(BaseCommand):
609
614
  else:
610
615
  progress.update(validate_task, description="No existing configuration found")
611
616
 
612
- # Validate dependencies
613
- progress.update(validate_task, description="Validating project dependencies...")
614
- validate_dependencies(project_path)
615
- progress.update(validate_task, description="✓ Dependencies validated!")
616
-
617
617
  # Determine output path for zip file
618
618
  if args.output:
619
619
  zip_path = os.path.abspath(args.output)
@@ -646,7 +646,8 @@ class PublishCommand(BaseCommand):
646
646
  progress.remove_task(package_task)
647
647
  deploy_task = progress.add_task(f"Creating new app: {app_name}...", total=None)
648
648
 
649
- app_data = await deploy_client.create_app(app_name, zip_path)
649
+ entrypoint_module = getattr(args, "entrypoint_module", None)
650
+ app_data = await deploy_client.create_app(app_name, zip_path, entrypoint_module)
650
651
 
651
652
  progress.update(
652
653
  deploy_task,
@@ -671,7 +672,8 @@ class PublishCommand(BaseCommand):
671
672
  assert app_id is not None # We know this is not None in else branch
672
673
  progress.remove_task(package_task)
673
674
  deploy_task = progress.add_task(f"Updating existing app (ID: {app_id})...", total=None)
674
- app_data = await deploy_client.publish_app(app_id, zip_path)
675
+ entrypoint_module = getattr(args, "entrypoint_module", None)
676
+ app_data = await deploy_client.publish_app(app_id, zip_path, entrypoint_module)
675
677
  progress.update(deploy_task, description=f"✓ Published app update (ID: {app_id})")
676
678
 
677
679
  # Update config with any new data
@@ -20,7 +20,6 @@ from .exceptions import (
20
20
  APIError,
21
21
  AppCreationError,
22
22
  AppPublishError,
23
- DependencyValidationError,
24
23
  DeploymentClientError,
25
24
  DeploymentError,
26
25
  FileSizeError,
@@ -34,82 +33,6 @@ from .exceptions import (
34
33
  # Maximum allowed zip file size (80MB)
35
34
  MAX_ZIP_SIZE = 80 * 1024 * 1024
36
35
 
37
- # Required dependencies for deployment
38
- REQUIRED_DEPENDENCIES = {"dash"}
39
-
40
-
41
- def validate_dependencies(project_path: str) -> None:
42
- """
43
- Validate that the project has required dependencies (dash).
44
-
45
- Checks requirements.txt or pyproject.toml for the required dependencies.
46
-
47
- Args:
48
- project_path: Path to the project directory
49
-
50
- Returns:
51
- True if all required dependencies are found, False otherwise
52
- """
53
- requirements_path = os.path.join(project_path, "requirements.txt")
54
- pyproject_path = os.path.join(project_path, "pyproject.toml")
55
-
56
- found_deps = set()
57
-
58
- # Check requirements.txt
59
- if os.path.exists(requirements_path):
60
- try:
61
- with open(requirements_path, encoding="utf-8") as f:
62
- for line in f:
63
- line = line.strip()
64
- if line and not line.startswith("#"):
65
- # Extract package name (handle versions, extras, etc.)
66
- # Split on version operators and extras
67
- dep_name = re.split(r"[>=<!\[~]", line)[0].strip()
68
- if dep_name: # Only add non-empty names
69
- found_deps.add(dep_name.lower())
70
- except Exception as err:
71
- raise DependencyValidationError(f"Error reading requirement file: {requirements_path}") from err
72
-
73
- # Check pyproject.toml
74
- elif os.path.exists(pyproject_path):
75
- try:
76
- with open(pyproject_path, "rb") as f:
77
- data = tomli.load(f)
78
-
79
- # Check different possible locations for dependencies
80
- dep_sources = [
81
- data.get("project", {}).get("dependencies", []),
82
- data.get("tool", {}).get("poetry", {}).get("dependencies", {}),
83
- data.get("build-system", {}).get("requires", []),
84
- ]
85
-
86
- for deps in dep_sources:
87
- if isinstance(deps, list):
88
- # Handle list format (like project.dependencies)
89
- for dep in deps:
90
- if isinstance(dep, str):
91
- dep_name = re.split(r"[>=<!\[~]", dep)[0].strip()
92
- if dep_name: # Only add non-empty names
93
- found_deps.add(dep_name.lower())
94
- elif isinstance(deps, dict):
95
- # Handle dict format (like poetry dependencies)
96
- for dep_name in deps.keys():
97
- found_deps.add(dep_name.lower())
98
- except Exception as err:
99
- raise DependencyValidationError(f"Error reading pyproject file: {pyproject_path}") from err
100
- else:
101
- raise FileNotFoundError("No requirements.txt or pyproject.toml found in project directory.")
102
-
103
- # Check if all required dependencies are present
104
- missing_deps = REQUIRED_DEPENDENCIES - found_deps
105
-
106
- if missing_deps:
107
- raise DependencyValidationError(
108
- f"Missing required dependencies: {', '.join(sorted(missing_deps))}.\n\n"
109
- ""
110
- "please add them to your requirements.txt or pyproject.toml"
111
- )
112
-
113
36
 
114
37
  def parse_gitignore(project_path: str) -> set[str]:
115
38
  """Parse .gitignore file and return set of patterns to exclude."""
@@ -392,12 +315,13 @@ class DeploymentClient:
392
315
  pass
393
316
  return False
394
317
 
395
- async def create_app(self, name: str, zip_path: str = "") -> App:
318
+ async def create_app(self, name: str, zip_path: str = "", entrypoint_module: Optional[str] = None) -> App:
396
319
  """Create a new application and upload deployment in same request.
397
320
 
398
321
  Args:
399
322
  name: Application name
400
323
  zip_path: Path to deployment zip file to upload
324
+ entrypoint_module: Entrypoint module for the application (e.g., "app:app")
401
325
 
402
326
  Returns:
403
327
  App response from the API
@@ -416,6 +340,8 @@ class DeploymentClient:
416
340
  try:
417
341
  # Create typed request data
418
342
  app_request: AppRequest = {"name": name}
343
+ if entrypoint_module:
344
+ app_request["entrypointModule"] = entrypoint_module
419
345
 
420
346
  # Upload deployment in same request as app creation
421
347
  retry_count = 0
@@ -440,12 +366,13 @@ class DeploymentClient:
440
366
  except httpx.RequestError as e:
441
367
  raise NetworkError("Failed to create app", str(e)) from e
442
368
 
443
- async def publish_app(self, app_id: str, zip_path: str = "") -> App:
369
+ async def publish_app(self, app_id: str, zip_path: str = "", entrypoint_module: Optional[str] = None) -> App:
444
370
  """Publish existing application and upload deployment in same request.
445
371
 
446
372
  Args:
447
373
  app_id: Application ID
448
374
  zip_path: Path to deployment zip file to upload
375
+ entrypoint_module: Entrypoint module for the application (e.g., "app:app")
449
376
 
450
377
  Returns:
451
378
  App response from the API
@@ -468,7 +395,14 @@ class DeploymentClient:
468
395
  while retry_count <= 1:
469
396
  with open(zip_path, "rb") as f:
470
397
  files = {"file": (os.path.basename(zip_path), f, "application/zip")}
471
- response = await self._client.post(url, files=files)
398
+
399
+ # Add entrypoint module if provided
400
+ data = {}
401
+ if entrypoint_module:
402
+ app_request: AppRequest = {"entrypointModule": entrypoint_module}
403
+ data["json"] = json.dumps(app_request)
404
+
405
+ response = await self._client.post(url, files=files, data=data if data else None)
472
406
 
473
407
  if response.status_code in (200, 201):
474
408
  api_response: App = response.json()
@@ -1,9 +1,9 @@
1
1
  """RPC interface for Plotly Cloud publishing in dev tools."""
2
2
 
3
+ import asyncio
3
4
  import importlib
4
5
  import os
5
6
  import tempfile
6
- import traceback
7
7
  from typing import Any
8
8
 
9
9
  import dash
@@ -14,12 +14,13 @@ from plotly_cloud._definitions import AppDeploymentConfig
14
14
  from plotly_cloud._deploy import (
15
15
  DeploymentClient,
16
16
  create_deployment_zip,
17
+ format_app_url,
17
18
  get_config_path,
18
19
  load_deployment_config,
19
20
  save_deployment_config,
20
- validate_dependencies,
21
21
  )
22
22
  from plotly_cloud._oauth import OAuthClient
23
+ from plotly_cloud.exceptions import TokenError
23
24
 
24
25
 
25
26
  class PublishOperations:
@@ -60,6 +61,42 @@ class PlotlyCloudPublishRPC:
60
61
  app_module = importlib.import_module(app.config.name)
61
62
  return os.path.dirname(str(app_module.__file__))
62
63
 
64
+ def resolve_entrypoint_module(self) -> str:
65
+ """Resolve the entrypoint module for the current Dash app.
66
+
67
+ Returns:
68
+ Entrypoint module name (e.g., 'app' or 'src.app')
69
+ """
70
+ app = None
71
+ try:
72
+ app = dash.det_app() # type: ignore
73
+ except Exception:
74
+ app = self._app_setup
75
+
76
+ if not app:
77
+ return "app" # Default fallback
78
+
79
+ try:
80
+ # Get the module name and import it
81
+ module_name = app.config.name
82
+ app_module = importlib.import_module(module_name)
83
+
84
+ # Get the absolute path of the module file
85
+ module_file = str(app_module.__file__)
86
+
87
+ # Get the project path
88
+ project_path = self.get_project_path()
89
+
90
+ # Make it relative to the project path
91
+ rel_path = os.path.relpath(module_file, project_path)
92
+
93
+ # Remove .py extension and convert path separators to dots
94
+ entrypoint_module = str(rel_path).replace(".py", "").replace(os.sep, ".")
95
+
96
+ return entrypoint_module
97
+ except Exception:
98
+ return "app" # Fallback
99
+
63
100
  async def handle_operation(self, publish_operation: PublishOperation) -> RPCResponse:
64
101
  """Handle a publish operation from dev tools.
65
102
 
@@ -83,12 +120,18 @@ class PlotlyCloudPublishRPC:
83
120
  method = getattr(self, operation_name)
84
121
  return await method(data)
85
122
  except Exception as e:
86
- traceback.print_last()
87
123
  return {"error": str(e)}
88
124
 
89
125
  async def initialize(self, data: Any) -> RPCResponse:
90
126
  is_authenticated = await self.oauth_client.is_authenticated()
91
127
 
128
+ try:
129
+ # Try to refresh the access token so it's still valid
130
+ await self.oauth_client.refresh_access_token()
131
+ except TokenError:
132
+ is_authenticated = False
133
+ self.oauth_client.clear_credentials()
134
+
92
135
  project_path = self.get_project_path()
93
136
 
94
137
  config_path = get_config_path(project_path, os.path.join(project_path, "plotly-cloud.toml"))
@@ -98,11 +141,13 @@ class PlotlyCloudPublishRPC:
98
141
  existing = app_id is not None
99
142
  status = "new"
100
143
  app_name = config.get("name", os.path.basename(project_path))
144
+ app_url = ""
101
145
 
102
146
  if app_id is not None and is_authenticated:
103
147
  async with DeploymentClient(self.oauth_client) as deploy_client:
104
148
  status_data = await deploy_client.get_app_status(app_id)
105
149
  status = status_data.get("status", "")
150
+ app_url = format_app_url(status_data.get("app_url", ""))
106
151
 
107
152
  return {
108
153
  "result": {
@@ -112,6 +157,7 @@ class PlotlyCloudPublishRPC:
112
157
  "app_name": app_name,
113
158
  "app_path": project_path,
114
159
  "app_id": app_id,
160
+ "app_url": app_url,
115
161
  }
116
162
  }
117
163
 
@@ -143,7 +189,8 @@ class PlotlyCloudPublishRPC:
143
189
  app_id = data.get("app_id")
144
190
  async with DeploymentClient(self.oauth_client) as deploy_client:
145
191
  status_data = await deploy_client.get_app_status(app_id)
146
- return {"result": {"status": status_data.get("status", "")}}
192
+ app_url = format_app_url(status_data.get("app_url", ""))
193
+ return {"result": {"status": status_data.get("status", ""), "app_url": app_url}}
147
194
 
148
195
  async def publish(self, data: Any) -> RPCResponse:
149
196
  app_path = data.get("app_path")
@@ -156,24 +203,25 @@ class PlotlyCloudPublishRPC:
156
203
  zip_path = temp_file.name
157
204
  temp_file.close()
158
205
 
159
- validate_dependencies(app_path)
160
-
161
206
  await create_deployment_zip(app_path, zip_path)
162
207
 
208
+ # Resolve the entrypoint module
209
+ entrypoint_module = self.resolve_entrypoint_module()
210
+
163
211
  async with DeploymentClient(self.oauth_client) as deploy_client:
164
212
  if app_id:
165
213
  # update app
166
- app_data = await deploy_client.publish_app(app_id, zip_path)
214
+ app_data = await deploy_client.publish_app(app_id, zip_path, entrypoint_module)
167
215
  config = load_deployment_config(config_path)
168
216
 
169
217
  if config.get("app_url") != app_data.get("app_url"):
170
218
  config["app_url"] = app_data.get("app_url", "")
171
219
  save_deployment_config(config, config_path)
172
220
 
173
- return {"result": {"app_id": app_id}}
221
+ return {"result": {"app_id": app_id, "app_url": format_app_url(app_data.get("app_url"))}}
174
222
  else:
175
223
  # create new app
176
- app_data = await deploy_client.create_app(app_name, zip_path)
224
+ app_data = await deploy_client.create_app(app_name, zip_path, entrypoint_module)
177
225
 
178
226
  config: AppDeploymentConfig = {
179
227
  "name": app_name,
@@ -183,4 +231,13 @@ class PlotlyCloudPublishRPC:
183
231
 
184
232
  save_deployment_config(config, config_path)
185
233
 
186
- return {"result": {"app_id": app_data.get("id")}}
234
+ return {"result": {"app_id": app_data.get("id"), "app_url": format_app_url(app_data.get("app_url"))}}
235
+
236
+ async def wait_auth(self, data: Any):
237
+ # this just wait to circumvent setTimeout with window.open restriction.
238
+ await asyncio.sleep(2)
239
+ return {"result": {}}
240
+
241
+ async def logout(self, data: Any):
242
+ await self.oauth_client.logout()
243
+ return {"result": {}}
@@ -267,9 +267,14 @@ class OAuthClient:
267
267
  # Continue with local cleanup even if remote logout fails
268
268
 
269
269
  # Clear local credentials
270
+ if self.clear_credentials():
271
+ console.print("Local credentials cleared")
272
+
273
+ def clear_credentials(self):
270
274
  if self.credentials_path.exists():
271
275
  self.credentials_path.unlink()
272
- console.print("Local credentials cleared")
276
+ return True
277
+ return False
273
278
 
274
279
  async def is_authenticated(self) -> bool:
275
280
  """Check if user is authenticated."""
@@ -1,6 +1,7 @@
1
1
  """Main CLI entry point for Plotly Cloud."""
2
2
 
3
3
  import asyncio
4
+ import logging
4
5
  import sys
5
6
  import textwrap
6
7
  from collections.abc import Sequence
@@ -15,6 +16,10 @@ from plotly_cloud._definitions import CommandArgument, HelpPanelStyle
15
16
  from plotly_cloud._parser import parse_args, parse_group_and_command
16
17
  from plotly_cloud.exceptions import PlotlyCloudError
17
18
 
19
+ # Suppress asyncio task exception warnings during Flask reloads
20
+ # These occur when Flask's werkzeug reloader terminates the process
21
+ logging.getLogger("asyncio").setLevel(logging.CRITICAL)
22
+
18
23
  console = Console()
19
24
 
20
25
 
@@ -232,6 +237,15 @@ def main() -> None:
232
237
  # Find the command group
233
238
  group_data = CommandRegistry.commands.get(group)
234
239
 
240
+ # Check if group exists
241
+ if group_data is None:
242
+ create_error_panel(
243
+ f"Unknown command group: [yellow]'{group}'[/yellow]\n\n"
244
+ f"Available groups: [cyan]{', '.join(CommandRegistry.commands.keys())}[/cyan]\n\n"
245
+ f"Use [cyan]'plotly --help'[/cyan] to see all available commands."
246
+ )
247
+ sys.exit(1)
248
+
235
249
  # Type guard to ensure group_data is not None
236
250
  assert group_data is not None
237
251
 
@@ -0,0 +1 @@
1
+ .plotly-cloud-publish-container{position:relative;font-family:Verdana,Geneva,sans-serif}.plotly-cloud-publish-button{cursor:pointer}.plotly-cloud-publish-button:hover{color:#7f4bc4}.plotly-cloud-publish-modal-overlay{position:absolute;bottom:100%;left:-2px;z-index:10000;margin-bottom:2px}.plotly-cloud-publish-modal-content{width:552px;background:#fff;border:1px solid #d1d5db;border-radius:4px 4px 0 0;box-shadow:0 -4px 6px #00000014;overflow:hidden}.plotly-cloud-publish-modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #e5e5e5;background:#f9fafb}.plotly-cloud-publish-modal-header h3{margin:0;color:#333}.plotly-cloud-publish-modal-close{background:none;border:none;font-size:24px;cursor:pointer;color:#666;padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center}.plotly-cloud-publish-modal-close:hover{color:#333}.plotly-cloud-publish-modal-body{padding:20px;color:#000!important;font-weight:100}button.plotly-cloud-publish-modal-button{display:inline-flex;align-items:center;gap:6px;padding:6px 10px!important;border-radius:4px!important;font-size:12px!important;font-weight:600;cursor:pointer;border:1px solid transparent;border-top-color:transparent;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent;background:#f3f4f6;color:#374151}.plotly-cloud-publish-modal-button:disabled{cursor:not-allowed}button.plotly-cloud-btn-primary{background:#8b5cf6!important;color:#fff;border-color:#7c3aed!important}button.plotly-cloud-btn-secondary{background:#fff;border:none;color:#8b5cf6!important;font-weight:100}.plotly-cloud-button-bar{display:flex;justify-content:flex-end;align-items:center}.plotly-cloud-publish-signin{display:flex;justify-content:space-between;align-items:center}.plotly-cloud-name-input-label{font-weight:600;color:#374151;font-size:12px;margin-bottom:6px}.plotly-cloud-name-input-field{margin-bottom:12px;width:calc(100% - 8px)}.plotly-cloud-status-info{display:flex;border-radius:5px;margin-bottom:12px;align-items:center;padding:6px;font-size:12px!important}.plotly-cloud-status-red{background:#fef2f2;color:#991b1b;border:1px solid #fecaca}.plotly-cloud-status-description{font-size:12px!important;margin-left:8px}.plotly-cloud-status-title{font-weight:700}.plotly-cloud-status-green{background:#ecfdf5;color:#065f46;border:1px solid #a7f3d0}.plotly-cloud-status-red .plotly-cloud-status-title{color:#a10}.plotly-cloud-status-green .plotly-cloud-status-title{color:#065f46}.plotly-cloud-status-gray{background:#f9fafb;color:#000;border:1px solid #dadada}.plotly-cloud-status-gray .plotly-cloud-status-title{color:#2e2e2e}.plotly-cloud-green-icon{color:#10b981!important}.plotly-cloud-red-icon{color:#ef4444}.plotly-cloud-gray-icon{color:#9ca3af}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.plotly-cloud-spin{animation:spin 2s linear infinite}.plotly-cloud-confirm-code{margin-top:1rem}.plotly-cloud-user-code{color:#8b5cf6;font-weight:700}button.plotly-cloud-logout{padding-left:0!important}.plotly-cloud-error{display:flex;border-radius:5px;margin-bottom:12px;align-items:center;padding:6px;font-size:12px!important;background:#fef2f2;color:#991b1b;border:1px solid #fecaca}
@@ -0,0 +1,15 @@
1
+ const React = window.React; const ReactDOM = window.ReactDOM;
2
+ "use strict";var plotly_cloud_publish_component=(()=>{var ua=Object.create;var V=Object.defineProperty;var ga=Object.getOwnPropertyDescriptor;var da=Object.getOwnPropertyNames;var Sa=Object.getPrototypeOf,ha=Object.prototype.hasOwnProperty;var uo=(o,a)=>()=>(a||o((a={exports:{}}).exports,a),a.exports),Ca=(o,a)=>{for(var s in a)V(o,s,{get:a[s],enumerable:!0})},Ro=(o,a,s,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let i of da(a))!ha.call(o,i)&&i!==s&&V(o,i,{get:()=>a[i],enumerable:!(r=ga(a,i))||r.enumerable});return o};var e=(o,a,s)=>(s=o!=null?ua(Sa(o)):{},Ro(a||!o||!o.__esModule?V(s,"default",{value:o,enumerable:!0}):s,o)),wa=o=>Ro(V({},"__esModule",{value:!0}),o);var c=uo((Ga,No)=>{No.exports=React});var Uo=uo(z=>{"use strict";var La=c(),Aa=Symbol.for("react.element"),ba=Symbol.for("react.fragment"),Pa=Object.prototype.hasOwnProperty,ka=La.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Ta={key:!0,ref:!0,__self:!0,__source:!0};function xo(o,a,s){var r,i={},b=null,l=null;s!==void 0&&(b=""+s),a.key!==void 0&&(b=""+a.key),a.ref!==void 0&&(l=a.ref);for(r in a)Pa.call(a,r)&&!Ta.hasOwnProperty(r)&&(i[r]=a[r]);if(o&&o.defaultProps)for(r in a=o.defaultProps,a)i[r]===void 0&&(i[r]=a[r]);return{$$typeof:Aa,type:o,key:b,ref:l,props:i,_owner:ka.current}}z.Fragment=ba;z.jsx=xo;z.jsxs=xo});var C=uo((qa,vo)=>{"use strict";vo.exports=Uo()});var Ua={};Ca(Ua,{PlotlyCloudPublishComponent:()=>So});var t=e(c());var H=e(C()),ya=({title:o,onClose:a,children:s})=>(0,H.jsx)("div",{className:"plotly-cloud-publish-modal-overlay",children:(0,H.jsxs)("div",{className:"plotly-cloud-publish-modal-content",children:[(0,H.jsxs)("div",{className:"plotly-cloud-publish-modal-header",children:[(0,H.jsx)("h3",{children:o},"modal-title"),(0,H.jsx)("button",{className:"plotly-cloud-publish-modal-close",onClick:a,children:"\xD7"},"modal-close")]}),(0,H.jsx)("div",{className:"plotly-cloud-publish-modal-body",children:s},"modal-body")]})}),Eo=ya;var Go=e(c()),A=e(C()),Fa=o=>{let[a,s]=(0,Go.useState)(o.waiting);return(0,A.jsx)("div",{className:"plotly-cloud-publish-signin",children:a?(0,A.jsxs)("div",{children:[o.verificationUrlComplete?(0,A.jsxs)("div",{children:["A browser window should open for sign-in."," ",(0,A.jsx)("a",{href:o.verificationUrlComplete,target:"_blank",rel:"noopener noreferrer",children:"Click here"})," ","if it doesn't open automatically."]}):(0,A.jsx)("div",{children:"Preparing sign-in..."}),o.userCode?(0,A.jsxs)("div",{className:"plotly-cloud-confirm-code",children:["Confirm your device code"," ",(0,A.jsx)("span",{className:"plotly-cloud-user-code",children:o.userCode})," ","when prompted."]}):null]}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)("span",{children:"Sign in to publish your app to Plotly Cloud."}),(0,A.jsx)("button",{className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",onClick:()=>{s(!0),o.onSignIn()},children:"Sign In"})]})})},Oo=Fa;var Ba=o=>{let a=async r=>await(await fetch(`${o}_plotly_cloud_publish`,{method:"POST",body:JSON.stringify(r),headers:{"Content-Type":"application/json"}})).json(),s=r=>i=>a({operation:r,data:i});return{initialize:s("initialize"),authenticate:s("authenticate"),auth_poll:s("auth_poll"),publish:s("publish"),status:s("status"),wait_auth:s("wait_auth"),logout:s("logout")}},qo=Ba;var Wo=e(c()),F=e(C()),Da=({initialAppName:o="",onCancel:a,onPublish:s})=>{let[r,i]=(0,Wo.useState)(o);return(0,F.jsxs)("div",{className:"plotly-cloud-name-input",children:[(0,F.jsx)("div",{className:"plotly-cloud-name-input-label",children:"App Name"}),(0,F.jsxs)("form",{onSubmit:l=>{l.preventDefault(),r.trim()&&s(r.trim())},children:[(0,F.jsx)("input",{type:"text",value:r,onChange:l=>i(l.target.value),placeholder:"My Dash App",className:"plotly-cloud-name-input-field"}),(0,F.jsxs)("div",{className:"plotly-cloud-button-bar",children:[(0,F.jsx)("button",{type:"button",onClick:a,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary",children:"Cancel"}),(0,F.jsx)("button",{type:"submit",disabled:!r.trim(),className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",children:"Publish App"})]})]})]})},Vo=Da;var lo=e(c());var m=e(c(),1),zo=new Map([["bold",m.createElement(m.Fragment,null,m.createElement("path",{d:"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z"}))],["duotone",m.createElement(m.Fragment,null,m.createElement("path",{d:"M184,80V208a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V80a8,8,0,0,1,8-8H176A8,8,0,0,1,184,80Z",opacity:"0.2"}),m.createElement("path",{d:"M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"}))],["fill",m.createElement(m.Fragment,null,m.createElement("path",{d:"M192,136v72a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V80A16,16,0,0,1,48,64h72a8,8,0,0,1,0,16H48V208H176V136a8,8,0,0,1,16,0Zm32-96a8,8,0,0,0-8-8H152a8,8,0,0,0-5.66,13.66L172.69,72l-42.35,42.34a8,8,0,0,0,11.32,11.32L184,83.31l26.34,26.35A8,8,0,0,0,224,104Z"}))],["light",m.createElement(m.Fragment,null,m.createElement("path",{d:"M222,104a6,6,0,0,1-12,0V54.49l-69.75,69.75a6,6,0,0,1-8.48-8.48L201.51,46H152a6,6,0,0,1,0-12h64a6,6,0,0,1,6,6Zm-38,26a6,6,0,0,0-6,6v72a2,2,0,0,1-2,2H48a2,2,0,0,1-2-2V80a2,2,0,0,1,2-2h72a6,6,0,0,0,0-12H48A14,14,0,0,0,34,80V208a14,14,0,0,0,14,14H176a14,14,0,0,0,14-14V136A6,6,0,0,0,184,130Z"}))],["regular",m.createElement(m.Fragment,null,m.createElement("path",{d:"M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"}))],["thin",m.createElement(m.Fragment,null,m.createElement("path",{d:"M220,104a4,4,0,0,1-8,0V49.66l-73.16,73.17a4,4,0,0,1-5.66-5.66L206.34,44H152a4,4,0,0,1,0-8h64a4,4,0,0,1,4,4Zm-36,28a4,4,0,0,0-4,4v72a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V80a4,4,0,0,1,4-4h72a4,4,0,0,0,0-8H48A12,12,0,0,0,36,80V208a12,12,0,0,0,12,12H176a12,12,0,0,0,12-12V136A4,4,0,0,0,184,132Z"}))]]);var p=e(c(),1),Zo=new Map([["bold",p.createElement(p.Fragment,null,p.createElement("path",{d:"M236,128a108,108,0,0,1-216,0c0-42.52,24.73-81.34,63-98.9A12,12,0,1,1,93,50.91C63.24,64.57,44,94.83,44,128a84,84,0,0,0,168,0c0-33.17-19.24-63.43-49-77.09A12,12,0,1,1,173,29.1C211.27,46.66,236,85.48,236,128Z"}))],["duotone",p.createElement(p.Fragment,null,p.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),p.createElement("path",{d:"M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"}))],["fill",p.createElement(p.Fragment,null,p.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,176A72,72,0,0,1,92,65.64a8,8,0,0,1,8,13.85,56,56,0,1,0,56,0,8,8,0,0,1,8-13.85A72,72,0,0,1,128,200Z"}))],["light",p.createElement(p.Fragment,null,p.createElement("path",{d:"M230,128a102,102,0,0,1-204,0c0-40.18,23.35-76.86,59.5-93.45a6,6,0,0,1,5,10.9C58.61,60.09,38,92.49,38,128a90,90,0,0,0,180,0c0-35.51-20.61-67.91-52.5-82.55a6,6,0,0,1,5-10.9C206.65,51.14,230,87.82,230,128Z"}))],["regular",p.createElement(p.Fragment,null,p.createElement("path",{d:"M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"}))],["thin",p.createElement(p.Fragment,null,p.createElement("path",{d:"M228,128a100,100,0,0,1-200,0c0-39.4,22.9-75.37,58.33-91.63a4,4,0,1,1,3.34,7.27C57.07,58.6,36,91.71,36,128a92,92,0,0,0,184,0c0-36.29-21.07-69.4-53.67-84.36a4,4,0,1,1,3.34-7.27C205.1,52.63,228,88.6,228,128Z"}))]]);var I=e(c(),1),_o=new Map([["bold",I.createElement(I.Fragment,null,I.createElement("path",{d:"M160,36A92.09,92.09,0,0,0,79,84.36,68,68,0,1,0,72,220h88a92,92,0,0,0,0-184Zm0,160H72a44,44,0,0,1-1.82-88A91.86,91.86,0,0,0,68,128a12,12,0,0,0,24,0,68,68,0,1,1,68,68Zm40.49-92.49a12,12,0,0,1,0,17l-48,48a12,12,0,0,1-17,0l-24-24a12,12,0,1,1,17-17L144,143l39.51-39.52A12,12,0,0,1,200.49,103.51Z"}))],["duotone",I.createElement(I.Fragment,null,I.createElement("path",{d:"M240,128a80,80,0,0,1-80,80H72A56,56,0,1,1,85.92,97.74l0,.1A80,80,0,0,1,240,128Z",opacity:"0.2"}),I.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm37.66-93.66a8,8,0,0,1,0,11.32l-48,48a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L144,148.69l42.34-42.35A8,8,0,0,1,197.66,106.34Z"}))],["fill",I.createElement(I.Fragment,null,I.createElement("path",{d:"M247.93,124.52C246.11,77.54,207.07,40,160.06,40A88.1,88.1,0,0,0,81.29,88.67h0A87.48,87.48,0,0,0,72,127.73,8.18,8.18,0,0,1,64.57,136,8,8,0,0,1,56,128a103.66,103.66,0,0,1,5.34-32.92,4,4,0,0,0-4.75-5.18A64.09,64.09,0,0,0,8,152c0,35.19,29.75,64,65,64H160A88.09,88.09,0,0,0,247.93,124.52Zm-50.27-6.86-48,48a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L144,148.69l42.34-42.35a8,8,0,0,1,11.32,11.32Z"}))],["light",I.createElement(I.Fragment,null,I.createElement("path",{d:"M160,42A86.11,86.11,0,0,0,82.43,90.88,62,62,0,1,0,72,214h88a86,86,0,0,0,0-172Zm0,160H72a50,50,0,0,1,0-100,50.67,50.67,0,0,1,5.91.35A85.61,85.61,0,0,0,74,128a6,6,0,0,0,12,0,74,74,0,1,1,74,74Zm36.24-94.24a6,6,0,0,1,0,8.48l-48,48a6,6,0,0,1-8.48,0l-24-24a6,6,0,0,1,8.48-8.48L144,151.51l43.76-43.75A6,6,0,0,1,196.24,107.76Z"}))],["regular",I.createElement(I.Fragment,null,I.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm37.66-93.66a8,8,0,0,1,0,11.32l-48,48a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L144,148.69l42.34-42.35A8,8,0,0,1,197.66,106.34Z"}))],["thin",I.createElement(I.Fragment,null,I.createElement("path",{d:"M160,44A84.11,84.11,0,0,0,83.59,93.12,60.71,60.71,0,0,0,72,92a60,60,0,0,0,0,120h88a84,84,0,0,0,0-168Zm0,160H72a52,52,0,1,1,8.55-103.3A83.66,83.66,0,0,0,76,128a4,4,0,0,0,8,0,76,76,0,1,1,76,76Zm34.83-94.83a4,4,0,0,1,0,5.66l-48,48a4,4,0,0,1-5.66,0l-24-24a4,4,0,0,1,5.66-5.66L144,154.34l45.17-45.17A4,4,0,0,1,194.83,109.17Z"}))]]);var f=e(c(),1),Xo=new Map([["bold",f.createElement(f.Fragment,null,f.createElement("path",{d:"M56.88,31.93A12,12,0,1,0,39.12,48.07L71.79,84A68,68,0,0,0,72,220h88a91.26,91.26,0,0,0,30.66-5.24l8.46,9.31a12,12,0,0,0,17.76-16.14ZM160,196H72a44,44,0,0,1-1.8-87.95A91.91,91.91,0,0,0,68,128a12,12,0,0,0,24,0,68.22,68.22,0,0,1,2.66-18.84l77.88,85.67A68.67,68.67,0,0,1,160,196Zm92-68a91.32,91.32,0,0,1-17.53,54,12,12,0,1,1-19.41-14.11,68,68,0,0,0-89.57-98.53,12,12,0,0,1-12.2-20.66A92,92,0,0,1,252,128Z"}))],["duotone",f.createElement(f.Fragment,null,f.createElement("path",{d:"M240,128a80,80,0,0,1-80,80H72A56,56,0,1,1,85.92,97.74l0,.1A80,80,0,0,1,240,128Z",opacity:"0.2"}),f.createElement("path",{d:"M53.92,34.62A8,8,0,1,0,42.08,45.38L81.32,88.55l-.06.12A65,65,0,0,0,72,88a64,64,0,0,0,0,128h88a87.34,87.34,0,0,0,31.8-5.93l10.28,11.31a8,8,0,1,0,11.84-10.76ZM160,200H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.3.12A88.4,88.4,0,0,0,72,128a8,8,0,0,0,16,0,72.25,72.25,0,0,1,5.06-26.54l87,95.7A71.66,71.66,0,0,1,160,200Zm88-72a87.89,87.89,0,0,1-22.35,58.61A8,8,0,0,1,213.71,176,72,72,0,0,0,117.37,70a8,8,0,0,1-9.48-12.89A88,88,0,0,1,248,128Z"}))],["fill",f.createElement(f.Fragment,null,f.createElement("path",{d:"M248,128.72A87.74,87.74,0,0,1,222.41,190a4,4,0,0,1-5.77-.16L103.78,65.67a4,4,0,0,1,.39-5.76A87.82,87.82,0,0,1,160.87,40C209.15,40.47,248.38,80.43,248,128.72ZM53.92,34.62A8,8,0,1,0,42.08,45.38L81.33,88.56l-.06.11A64,64,0,0,0,8,153c.53,35.12,29.84,63,65,63h87a87.65,87.65,0,0,0,31.78-5.95l10.3,11.33a8,8,0,0,0,11.33.52,8.32,8.32,0,0,0,.29-11.52Z"}))],["light",f.createElement(f.Fragment,null,f.createElement("path",{d:"M52.44,36A6,6,0,0,0,43.56,44l40.18,44.2c-.45.87-.9,1.75-1.32,2.64A62,62,0,1,0,72,214h88a85.23,85.23,0,0,0,32.35-6.3L203.56,220a6,6,0,0,0,8.88-8.08ZM160,202H72a50,50,0,1,1,5.9-99.64A86.25,86.25,0,0,0,74,128a6,6,0,0,0,12,0,73.92,73.92,0,0,1,6.44-30.2l91.22,100.34A73.65,73.65,0,0,1,160,202Zm86-74a85.85,85.85,0,0,1-21.85,57.27,6,6,0,0,1-4.47,2,6,6,0,0,1-4.47-10,74,74,0,0,0-99-108.92,6,6,0,1,1-7.11-9.67A86,86,0,0,1,246,128Z"}))],["regular",f.createElement(f.Fragment,null,f.createElement("path",{d:"M53.92,34.62A8,8,0,1,0,42.08,45.38L81.32,88.55l-.06.12A65,65,0,0,0,72,88a64,64,0,0,0,0,128h88a87.34,87.34,0,0,0,31.8-5.93l10.28,11.31a8,8,0,1,0,11.84-10.76ZM160,200H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.3.12A88.4,88.4,0,0,0,72,128a8,8,0,0,0,16,0,72.25,72.25,0,0,1,5.06-26.54l87,95.7A71.66,71.66,0,0,1,160,200Zm88-72a87.89,87.89,0,0,1-22.35,58.61A8,8,0,0,1,213.71,176,72,72,0,0,0,117.37,70a8,8,0,0,1-9.48-12.89A88,88,0,0,1,248,128Z"}))],["thin",f.createElement(f.Fragment,null,f.createElement("path",{d:"M51,37.31A4,4,0,0,0,45,42.69L86.16,87.93q-1.38,2.55-2.59,5.19A60,60,0,1,0,72,212h88a83.19,83.19,0,0,0,32.88-6.69L205,218.69a4,4,0,1,0,5.92-5.38ZM160,204H72a52,52,0,0,1,0-104,52.92,52.92,0,0,1,8.54.72A84.21,84.21,0,0,0,76,128a4,4,0,0,0,8,0,76,76,0,0,1,7.9-33.76L187.13,199A75.37,75.37,0,0,1,160,204Zm84-76a83.86,83.86,0,0,1-21.34,55.94,4,4,0,1,1-6-5.33A76,76,0,0,0,115,66.75a4,4,0,0,1-4.74-6.45A84,84,0,0,1,244,128Z"}))]]);var u=e(c(),1),Jo=new Map([["bold",u.createElement(u.Fragment,null,u.createElement("path",{d:"M160,36A92.09,92.09,0,0,0,79,84.36,68,68,0,1,0,72,220h88a92,92,0,0,0,0-184Zm0,160H72a44,44,0,0,1-1.82-88A91.86,91.86,0,0,0,68,128a12,12,0,0,0,24,0,68,68,0,1,1,68,68Zm32.49-79.51L177,132l15.52,15.51a12,12,0,0,1-17,17L160,149l-15.51,15.52a12,12,0,1,1-17-17L143,132l-15.52-15.51a12,12,0,1,1,17-17L160,115l15.51-15.52a12,12,0,0,1,17,17Z"}))],["duotone",u.createElement(u.Fragment,null,u.createElement("path",{d:"M240,127.62a80,80,0,0,1-80,80H72A56,56,0,1,1,85.92,97.36l0,.1A80,80,0,0,1,240,127.62Z",opacity:"0.2"}),u.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm29.66-82.34L171.31,136l18.35,18.34a8,8,0,0,1-11.32,11.32L160,147.31l-18.34,18.35a8,8,0,0,1-11.32-11.32L148.69,136l-18.35-18.34a8,8,0,0,1,11.32-11.32L160,124.69l18.34-18.35a8,8,0,0,1,11.32,11.32Z"}))],["fill",u.createElement(u.Fragment,null,u.createElement("path",{d:"M247.93,124.52C246.11,77.54,207.07,40,160.06,40A88.1,88.1,0,0,0,81.29,88.67h0A87.48,87.48,0,0,0,72,127.73,8.18,8.18,0,0,1,64.57,136,8,8,0,0,1,56,128a103.66,103.66,0,0,1,5.34-32.92,4,4,0,0,0-4.75-5.18A64.09,64.09,0,0,0,8,152c0,35.19,29.75,64,65,64H160A88.09,88.09,0,0,0,247.93,124.52Zm-58.27,29.82a8,8,0,0,1-11.32,11.32L160,147.31l-18.34,18.35a8,8,0,0,1-11.32-11.32L148.69,136l-18.35-18.34a8,8,0,0,1,11.32-11.32L160,124.69l18.34-18.35a8,8,0,0,1,11.32,11.32L171.31,136Z"}))],["light",u.createElement(u.Fragment,null,u.createElement("path",{d:"M160,42A86.11,86.11,0,0,0,82.43,90.88,62,62,0,1,0,72,214h88a86,86,0,0,0,0-172Zm0,160H72a50,50,0,0,1,0-100,50.67,50.67,0,0,1,5.91.35A85.61,85.61,0,0,0,74,128a6,6,0,0,0,12,0,74,74,0,1,1,74,74Zm28.24-85.76L168.48,136l19.76,19.76a6,6,0,1,1-8.48,8.48L160,144.48l-19.76,19.76a6,6,0,0,1-8.48-8.48L151.52,136l-19.76-19.76a6,6,0,0,1,8.48-8.48L160,127.52l19.76-19.76a6,6,0,0,1,8.48,8.48Z"}))],["regular",u.createElement(u.Fragment,null,u.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm29.66-82.34L171.31,136l18.35,18.34a8,8,0,0,1-11.32,11.32L160,147.31l-18.34,18.35a8,8,0,0,1-11.32-11.32L148.69,136l-18.35-18.34a8,8,0,0,1,11.32-11.32L160,124.69l18.34-18.35a8,8,0,0,1,11.32,11.32Z"}))],["thin",u.createElement(u.Fragment,null,u.createElement("path",{d:"M160,44A84.11,84.11,0,0,0,83.59,93.12,60.71,60.71,0,0,0,72,92a60,60,0,0,0,0,120h88a84,84,0,0,0,0-168Zm0,160H72a52,52,0,1,1,8.55-103.3A83.66,83.66,0,0,0,76,128a4,4,0,0,0,8,0,76,76,0,1,1,76,76Zm26.83-89.17L165.66,136l21.17,21.17a4,4,0,0,1-5.66,5.66L160,141.66l-21.17,21.17a4,4,0,0,1-5.66-5.66L154.34,136l-21.17-21.17a4,4,0,0,1,5.66-5.66L160,130.34l21.17-21.17a4,4,0,1,1,5.66,5.66Z"}))]]);var g=e(c(),1),Ko=new Map([["bold",g.createElement(g.Fragment,null,g.createElement("path",{d:"M128,76a52,52,0,1,0,52,52A52.06,52.06,0,0,0,128,76Zm0,80a28,28,0,1,1,28-28A28,28,0,0,1,128,156Zm92-27.21v-1.58l14-17.51a12,12,0,0,0,2.23-10.59A111.75,111.75,0,0,0,225,71.89,12,12,0,0,0,215.89,66L193.61,63.5l-1.11-1.11L190,40.1A12,12,0,0,0,184.11,31a111.67,111.67,0,0,0-27.23-11.27A12,12,0,0,0,146.3,22L128.79,36h-1.58L109.7,22a12,12,0,0,0-10.59-2.23A111.75,111.75,0,0,0,71.89,31.05,12,12,0,0,0,66,40.11L63.5,62.39,62.39,63.5,40.1,66A12,12,0,0,0,31,71.89,111.67,111.67,0,0,0,19.77,99.12,12,12,0,0,0,22,109.7l14,17.51v1.58L22,146.3a12,12,0,0,0-2.23,10.59,111.75,111.75,0,0,0,11.29,27.22A12,12,0,0,0,40.11,190l22.28,2.48,1.11,1.11L66,215.9A12,12,0,0,0,71.89,225a111.67,111.67,0,0,0,27.23,11.27A12,12,0,0,0,109.7,234l17.51-14h1.58l17.51,14a12,12,0,0,0,10.59,2.23A111.75,111.75,0,0,0,184.11,225a12,12,0,0,0,5.91-9.06l2.48-22.28,1.11-1.11L215.9,190a12,12,0,0,0,9.06-5.91,111.67,111.67,0,0,0,11.27-27.23A12,12,0,0,0,234,146.3Zm-24.12-4.89a70.1,70.1,0,0,1,0,8.2,12,12,0,0,0,2.61,8.22l12.84,16.05A86.47,86.47,0,0,1,207,166.86l-20.43,2.27a12,12,0,0,0-7.65,4,69,69,0,0,1-5.8,5.8,12,12,0,0,0-4,7.65L166.86,207a86.47,86.47,0,0,1-10.49,4.35l-16.05-12.85a12,12,0,0,0-7.5-2.62c-.24,0-.48,0-.72,0a70.1,70.1,0,0,1-8.2,0,12.06,12.06,0,0,0-8.22,2.6L99.63,211.33A86.47,86.47,0,0,1,89.14,207l-2.27-20.43a12,12,0,0,0-4-7.65,69,69,0,0,1-5.8-5.8,12,12,0,0,0-7.65-4L49,166.86a86.47,86.47,0,0,1-4.35-10.49l12.84-16.05a12,12,0,0,0,2.61-8.22,70.1,70.1,0,0,1,0-8.2,12,12,0,0,0-2.61-8.22L44.67,99.63A86.47,86.47,0,0,1,49,89.14l20.43-2.27a12,12,0,0,0,7.65-4,69,69,0,0,1,5.8-5.8,12,12,0,0,0,4-7.65L89.14,49a86.47,86.47,0,0,1,10.49-4.35l16.05,12.85a12.06,12.06,0,0,0,8.22,2.6,70.1,70.1,0,0,1,8.2,0,12,12,0,0,0,8.22-2.6l16.05-12.85A86.47,86.47,0,0,1,166.86,49l2.27,20.43a12,12,0,0,0,4,7.65,69,69,0,0,1,5.8,5.8,12,12,0,0,0,7.65,4L207,89.14a86.47,86.47,0,0,1,4.35,10.49l-12.84,16.05A12,12,0,0,0,195.88,123.9Z"}))],["duotone",g.createElement(g.Fragment,null,g.createElement("path",{d:"M207.86,123.18l16.78-21a99.14,99.14,0,0,0-10.07-24.29l-26.7-3a81,81,0,0,0-6.81-6.81l-3-26.71a99.43,99.43,0,0,0-24.3-10l-21,16.77a81.59,81.59,0,0,0-9.64,0l-21-16.78A99.14,99.14,0,0,0,77.91,41.43l-3,26.7a81,81,0,0,0-6.81,6.81l-26.71,3a99.43,99.43,0,0,0-10,24.3l16.77,21a81.59,81.59,0,0,0,0,9.64l-16.78,21a99.14,99.14,0,0,0,10.07,24.29l26.7,3a81,81,0,0,0,6.81,6.81l3,26.71a99.43,99.43,0,0,0,24.3,10l21-16.77a81.59,81.59,0,0,0,9.64,0l21,16.78a99.14,99.14,0,0,0,24.29-10.07l3-26.7a81,81,0,0,0,6.81-6.81l26.71-3a99.43,99.43,0,0,0,10-24.3l-16.77-21A81.59,81.59,0,0,0,207.86,123.18ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z",opacity:"0.2"}),g.createElement("path",{d:"M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8.06,8.06,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8.06,8.06,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z"}))],["fill",g.createElement(g.Fragment,null,g.createElement("path",{d:"M216,130.16q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z"}))],["light",g.createElement(g.Fragment,null,g.createElement("path",{d:"M128,82a46,46,0,1,0,46,46A46.06,46.06,0,0,0,128,82Zm0,80a34,34,0,1,1,34-34A34,34,0,0,1,128,162ZM214,130.84c.06-1.89.06-3.79,0-5.68L229.33,106a6,6,0,0,0,1.11-5.29A105.34,105.34,0,0,0,219.76,74.9a6,6,0,0,0-4.53-3l-24.45-2.71q-1.93-2.07-4-4l-2.72-24.46a6,6,0,0,0-3-4.53,105.65,105.65,0,0,0-25.77-10.66A6,6,0,0,0,150,26.68l-19.2,15.37c-1.89-.06-3.79-.06-5.68,0L106,26.67a6,6,0,0,0-5.29-1.11A105.34,105.34,0,0,0,74.9,36.24a6,6,0,0,0-3,4.53L69.23,65.22q-2.07,1.94-4,4L40.76,72a6,6,0,0,0-4.53,3,105.65,105.65,0,0,0-10.66,25.77A6,6,0,0,0,26.68,106l15.37,19.2c-.06,1.89-.06,3.79,0,5.68L26.67,150.05a6,6,0,0,0-1.11,5.29A105.34,105.34,0,0,0,36.24,181.1a6,6,0,0,0,4.53,3l24.45,2.71q1.94,2.07,4,4L72,215.24a6,6,0,0,0,3,4.53,105.65,105.65,0,0,0,25.77,10.66,6,6,0,0,0,5.29-1.11L125.16,214c1.89.06,3.79.06,5.68,0l19.21,15.38a6,6,0,0,0,3.75,1.31,6.2,6.2,0,0,0,1.54-.2,105.34,105.34,0,0,0,25.76-10.68,6,6,0,0,0,3-4.53l2.71-24.45q2.07-1.93,4-4l24.46-2.72a6,6,0,0,0,4.53-3,105.49,105.49,0,0,0,10.66-25.77,6,6,0,0,0-1.11-5.29Zm-3.1,41.63-23.64,2.63a6,6,0,0,0-3.82,2,75.14,75.14,0,0,1-6.31,6.31,6,6,0,0,0-2,3.82l-2.63,23.63A94.28,94.28,0,0,1,155.14,218l-18.57-14.86a6,6,0,0,0-3.75-1.31h-.36a78.07,78.07,0,0,1-8.92,0,6,6,0,0,0-4.11,1.3L100.87,218a94.13,94.13,0,0,1-17.34-7.17L80.9,187.21a6,6,0,0,0-2-3.82,75.14,75.14,0,0,1-6.31-6.31,6,6,0,0,0-3.82-2l-23.63-2.63A94.28,94.28,0,0,1,38,155.14l14.86-18.57a6,6,0,0,0,1.3-4.11,78.07,78.07,0,0,1,0-8.92,6,6,0,0,0-1.3-4.11L38,100.87a94.13,94.13,0,0,1,7.17-17.34L68.79,80.9a6,6,0,0,0,3.82-2,75.14,75.14,0,0,1,6.31-6.31,6,6,0,0,0,2-3.82l2.63-23.63A94.28,94.28,0,0,1,100.86,38l18.57,14.86a6,6,0,0,0,4.11,1.3,78.07,78.07,0,0,1,8.92,0,6,6,0,0,0,4.11-1.3L155.13,38a94.13,94.13,0,0,1,17.34,7.17l2.63,23.64a6,6,0,0,0,2,3.82,75.14,75.14,0,0,1,6.31,6.31,6,6,0,0,0,3.82,2l23.63,2.63A94.28,94.28,0,0,1,218,100.86l-14.86,18.57a6,6,0,0,0-1.3,4.11,78.07,78.07,0,0,1,0,8.92,6,6,0,0,0,1.3,4.11L218,155.13A94.13,94.13,0,0,1,210.85,172.47Z"}))],["regular",g.createElement(g.Fragment,null,g.createElement("path",{d:"M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.21,107.21,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.71,107.71,0,0,0-26.25-10.87,8,8,0,0,0-7.06,1.49L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.21,107.21,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8,8,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8,8,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z"}))],["thin",g.createElement(g.Fragment,null,g.createElement("path",{d:"M128,84a44,44,0,1,0,44,44A44.05,44.05,0,0,0,128,84Zm0,80a36,36,0,1,1,36-36A36,36,0,0,1,128,164Zm83.93-32.49q.13-3.51,0-7l15.83-19.79a4,4,0,0,0,.75-3.53A103.64,103.64,0,0,0,218,75.9a4,4,0,0,0-3-2l-25.19-2.8c-1.58-1.71-3.24-3.37-4.95-4.95L182.07,41a4,4,0,0,0-2-3A104,104,0,0,0,154.82,27.5a4,4,0,0,0-3.53.74L131.51,44.07q-3.51-.14-7,0L104.7,28.24a4,4,0,0,0-3.53-.75A103.64,103.64,0,0,0,75.9,38a4,4,0,0,0-2,3l-2.8,25.19c-1.71,1.58-3.37,3.24-4.95,4.95L41,73.93a4,4,0,0,0-3,2A104,104,0,0,0,27.5,101.18a4,4,0,0,0,.74,3.53l15.83,19.78q-.14,3.51,0,7L28.24,151.3a4,4,0,0,0-.75,3.53A103.64,103.64,0,0,0,38,180.1a4,4,0,0,0,3,2l25.19,2.8c1.58,1.71,3.24,3.37,4.95,4.95l2.8,25.2a4,4,0,0,0,2,3,104,104,0,0,0,25.28,10.46,4,4,0,0,0,3.53-.74l19.78-15.83q3.51.13,7,0l19.79,15.83a4,4,0,0,0,2.5.88,4,4,0,0,0,1-.13A103.64,103.64,0,0,0,180.1,218a4,4,0,0,0,2-3l2.8-25.19c1.71-1.58,3.37-3.24,4.95-4.95l25.2-2.8a4,4,0,0,0,3-2,104,104,0,0,0,10.46-25.28,4,4,0,0,0-.74-3.53Zm.17,42.83-24.67,2.74a4,4,0,0,0-2.55,1.32,76.2,76.2,0,0,1-6.48,6.48,4,4,0,0,0-1.32,2.55l-2.74,24.66a95.45,95.45,0,0,1-19.64,8.15l-19.38-15.51a4,4,0,0,0-2.5-.87h-.24a73.67,73.67,0,0,1-9.16,0,4,4,0,0,0-2.74.87l-19.37,15.5a95.33,95.33,0,0,1-19.65-8.13l-2.74-24.67a4,4,0,0,0-1.32-2.55,76.2,76.2,0,0,1-6.48-6.48,4,4,0,0,0-2.55-1.32l-24.66-2.74a95.45,95.45,0,0,1-8.15-19.64l15.51-19.38a4,4,0,0,0,.87-2.74,77.76,77.76,0,0,1,0-9.16,4,4,0,0,0-.87-2.74l-15.5-19.37A95.33,95.33,0,0,1,43.9,81.66l24.67-2.74a4,4,0,0,0,2.55-1.32,76.2,76.2,0,0,1,6.48-6.48,4,4,0,0,0,1.32-2.55l2.74-24.66a95.45,95.45,0,0,1,19.64-8.15l19.38,15.51a4,4,0,0,0,2.74.87,73.67,73.67,0,0,1,9.16,0,4,4,0,0,0,2.74-.87l19.37-15.5a95.33,95.33,0,0,1,19.65,8.13l2.74,24.67a4,4,0,0,0,1.32,2.55,76.2,76.2,0,0,1,6.48,6.48,4,4,0,0,0,2.55,1.32l24.66,2.74a95.45,95.45,0,0,1,8.15,19.64l-15.51,19.38a4,4,0,0,0-.87,2.74,77.76,77.76,0,0,1,0,9.16,4,4,0,0,0,.87,2.74l15.5,19.37A95.33,95.33,0,0,1,212.1,174.34Z"}))]]);var d=e(c(),1),Qo=new Map([["bold",d.createElement(d.Fragment,null,d.createElement("path",{d:"M124,216a12,12,0,0,1-12,12H48a12,12,0,0,1-12-12V40A12,12,0,0,1,48,28h64a12,12,0,0,1,0,24H60V204h52A12,12,0,0,1,124,216Zm108.49-96.49-40-40a12,12,0,0,0-17,17L195,116H112a12,12,0,0,0,0,24h83l-19.52,19.51a12,12,0,0,0,17,17l40-40A12,12,0,0,0,232.49,119.51Z"}))],["duotone",d.createElement(d.Fragment,null,d.createElement("path",{d:"M224,56V200a16,16,0,0,1-16,16H48V40H208A16,16,0,0,1,224,56Z",opacity:"0.2"}),d.createElement("path",{d:"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40a8,8,0,0,0-11.32,11.32L204.69,120H112a8,8,0,0,0,0,16h92.69l-26.35,26.34a8,8,0,0,0,11.32,11.32l40-40A8,8,0,0,0,229.66,122.34Z"}))],["fill",d.createElement(d.Fragment,null,d.createElement("path",{d:"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40A8,8,0,0,0,176,88v32H112a8,8,0,0,0,0,16h64v32a8,8,0,0,0,13.66,5.66l40-40A8,8,0,0,0,229.66,122.34Z"}))],["light",d.createElement(d.Fragment,null,d.createElement("path",{d:"M118,216a6,6,0,0,1-6,6H48a6,6,0,0,1-6-6V40a6,6,0,0,1,6-6h64a6,6,0,0,1,0,12H54V210h58A6,6,0,0,1,118,216Zm110.24-92.24-40-40a6,6,0,0,0-8.48,8.48L209.51,122H112a6,6,0,0,0,0,12h97.51l-29.75,29.76a6,6,0,1,0,8.48,8.48l40-40A6,6,0,0,0,228.24,123.76Z"}))],["regular",d.createElement(d.Fragment,null,d.createElement("path",{d:"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40a8,8,0,0,0-11.32,11.32L204.69,120H112a8,8,0,0,0,0,16h92.69l-26.35,26.34a8,8,0,0,0,11.32,11.32l40-40A8,8,0,0,0,229.66,122.34Z"}))],["thin",d.createElement(d.Fragment,null,d.createElement("path",{d:"M116,216a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V40a4,4,0,0,1,4-4h64a4,4,0,0,1,0,8H52V212h60A4,4,0,0,1,116,216Zm110.83-90.83-40-40a4,4,0,0,0-5.66,5.66L214.34,124H112a4,4,0,0,0,0,8H214.34l-33.17,33.17a4,4,0,0,0,5.66,5.66l40-40A4,4,0,0,0,226.83,125.17Z"}))]]);var S=e(c(),1),jo=new Map([["bold",S.createElement(S.Fragment,null,S.createElement("path",{d:"M240.26,186.1,152.81,34.23h0a28.74,28.74,0,0,0-49.62,0L15.74,186.1a27.45,27.45,0,0,0,0,27.71A28.31,28.31,0,0,0,40.55,228h174.9a28.31,28.31,0,0,0,24.79-14.19A27.45,27.45,0,0,0,240.26,186.1Zm-20.8,15.7a4.46,4.46,0,0,1-4,2.2H40.55a4.46,4.46,0,0,1-4-2.2,3.56,3.56,0,0,1,0-3.73L124,46.2a4.77,4.77,0,0,1,8,0l87.44,151.87A3.56,3.56,0,0,1,219.46,201.8ZM116,136V104a12,12,0,0,1,24,0v32a12,12,0,0,1-24,0Zm28,40a16,16,0,1,1-16-16A16,16,0,0,1,144,176Z"}))],["duotone",S.createElement(S.Fragment,null,S.createElement("path",{d:"M215.46,216H40.54C27.92,216,20,202.79,26.13,192.09L113.59,40.22c6.3-11,22.52-11,28.82,0l87.46,151.87C236,202.79,228.08,216,215.46,216Z",opacity:"0.2"}),S.createElement("path",{d:"M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM222.93,203.8a8.5,8.5,0,0,1-7.48,4.2H40.55a8.5,8.5,0,0,1-7.48-4.2,7.59,7.59,0,0,1,0-7.72L120.52,44.21a8.75,8.75,0,0,1,15,0l87.45,151.87A7.59,7.59,0,0,1,222.93,203.8ZM120,144V104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,180Z"}))],["fill",S.createElement(S.Fragment,null,S.createElement("path",{d:"M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM120,104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm8,88a12,12,0,1,1,12-12A12,12,0,0,1,128,192Z"}))],["light",S.createElement(S.Fragment,null,S.createElement("path",{d:"M235.07,189.09,147.61,37.22h0a22.75,22.75,0,0,0-39.22,0L20.93,189.09a21.53,21.53,0,0,0,0,21.72A22.35,22.35,0,0,0,40.55,222h174.9a22.35,22.35,0,0,0,19.6-11.19A21.53,21.53,0,0,0,235.07,189.09ZM224.66,204.8a10.46,10.46,0,0,1-9.21,5.2H40.55a10.46,10.46,0,0,1-9.21-5.2,9.51,9.51,0,0,1,0-9.72L118.79,43.21a10.75,10.75,0,0,1,18.42,0l87.46,151.87A9.51,9.51,0,0,1,224.66,204.8ZM122,144V104a6,6,0,0,1,12,0v40a6,6,0,0,1-12,0Zm16,36a10,10,0,1,1-10-10A10,10,0,0,1,138,180Z"}))],["regular",S.createElement(S.Fragment,null,S.createElement("path",{d:"M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM222.93,203.8a8.5,8.5,0,0,1-7.48,4.2H40.55a8.5,8.5,0,0,1-7.48-4.2,7.59,7.59,0,0,1,0-7.72L120.52,44.21a8.75,8.75,0,0,1,15,0l87.45,151.87A7.59,7.59,0,0,1,222.93,203.8ZM120,144V104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,180Z"}))],["thin",S.createElement(S.Fragment,null,S.createElement("path",{d:"M233.34,190.09,145.88,38.22h0a20.75,20.75,0,0,0-35.76,0L22.66,190.09a19.52,19.52,0,0,0,0,19.71A20.36,20.36,0,0,0,40.54,220H215.46a20.36,20.36,0,0,0,17.86-10.2A19.52,19.52,0,0,0,233.34,190.09ZM226.4,205.8a12.47,12.47,0,0,1-10.94,6.2H40.54a12.47,12.47,0,0,1-10.94-6.2,11.45,11.45,0,0,1,0-11.72L117.05,42.21a12.76,12.76,0,0,1,21.9,0L226.4,194.08A11.45,11.45,0,0,1,226.4,205.8ZM124,144V104a4,4,0,0,1,8,0v40a4,4,0,0,1-8,0Zm12,36a8,8,0,1,1-8-8A8,8,0,0,1,136,180Z"}))]]);var M=e(c(),1);var Yo=e(c(),1),$o=(0,Yo.createContext)({color:"currentColor",size:"1em",weight:"regular",mirrored:!1});var w=M.forwardRef((o,a)=>{let{alt:s,color:r,size:i,weight:b,mirrored:l,children:U,weights:v,...E}=o,{color:G="currentColor",size:R,weight:O="regular",mirrored:N=!1,...B}=M.useContext($o);return M.createElement("svg",{ref:a,xmlns:"http://www.w3.org/2000/svg",width:i??R,height:i??R,fill:r??G,viewBox:"0 0 256 256",transform:l||N?"scale(-1, 1)":void 0,...B,...E},!!s&&M.createElement("title",null,s),U,v.get(b??O))});w.displayName="IconBase";var Z=e(c(),1);var _=Z.forwardRef((o,a)=>Z.createElement(w,{ref:a,...o,weights:zo}));_.displayName="ArrowSquareOutIcon";var X=e(c(),1);var J=X.forwardRef((o,a)=>X.createElement(w,{ref:a,...o,weights:Zo}));J.displayName="CircleNotchIcon";var K=e(c(),1);var Q=K.forwardRef((o,a)=>K.createElement(w,{ref:a,...o,weights:_o}));Q.displayName="CloudCheckIcon";var j=e(c(),1);var Y=j.forwardRef((o,a)=>j.createElement(w,{ref:a,...o,weights:Xo}));Y.displayName="CloudSlashIcon";var $=e(c(),1);var oo=$.forwardRef((o,a)=>$.createElement(w,{ref:a,...o,weights:Jo}));oo.displayName="CloudXIcon";var ao=e(c(),1);var so=ao.forwardRef((o,a)=>ao.createElement(w,{ref:a,...o,weights:Ko}));so.displayName="GearIcon";var ro=e(c(),1);var eo=ro.forwardRef((o,a)=>ro.createElement(w,{ref:a,...o,weights:Qo}));eo.displayName="SignOutIcon";var no=e(c(),1);var io=no.forwardRef((o,a)=>no.createElement(w,{ref:a,...o,weights:jo}));io.displayName="WarningIcon";var oa=e(C()),Ha=o=>(0,oa.jsx)(J,{size:o.size,className:"plotly-cloud-spin plotly-cloud-gray-icon",weight:"bold"}),to=Ha;var q=e(C()),Ma=({status:o,size:a=16,isButtonIcon:s})=>o==="BUILDING"||o==="STARTING"||o==="unknown"?(0,q.jsx)(to,{size:a}):o==="RUNNING"?(0,q.jsx)(Q,{size:a,className:"plotly-cloud-green-icon",weight:s?"fill":"duotone"}):o==="new"?(0,q.jsx)(Y,{size:a,className:"plotly-cloud-gray-icon",weight:s?"fill":"duotone"}):(0,q.jsx)(oo,{size:a,className:"plotly-cloud-red-icon",weight:"duotone"}),co=Ma;var h=e(C()),Ra=({status:o,onPublish:a,isUpdate:s,publishing:r,onCancel:i,onLogout:b,appUrl:l})=>{let U=()=>{i&&i()},v=()=>{window.open(l,"_blank")},[E,G,R]=(0,lo.useMemo)(()=>o==="BUILDING"||o==="STARTING"?["App is building","Wait for your app to finish publishing before publishing again","gray"]:o==="RUNNING"?["App is live","Your app is running in Plotly Cloud.","green"]:["App is stopped","Start your app by publishing again or starting it in the app manager","red"],[o]),[O,N]=(0,lo.useMemo)(()=>r?s?["Open Settings in Plotly Cloud","Republishing",""]:["Cancel","Publishing",""]:s?[(0,h.jsxs)("span",{children:[(0,h.jsx)(so,{}),"\xA0Open Settings in Plotly Cloud"]}),"Republish"]:["Cancel","Publish",""],[r,s]),B=(0,lo.useMemo)(()=>["BUILDING","STARTING"].includes(o),[o]);return(0,h.jsxs)("div",{className:"plotly-cloud-status-banner",children:[(0,h.jsxs)("div",{className:`plotly-cloud-status-info plotly-cloud-status-${R}`,children:[(0,h.jsx)(co,{status:o,size:20}),(0,h.jsxs)("div",{className:"plotly-cloud-status-description",children:[(0,h.jsx)("div",{className:"plotly-cloud-status-title",children:E}),(0,h.jsx)("div",{className:"plotly-cloud-status-text",children:G})]})]}),(0,h.jsxs)("div",{className:"plotly-cloud-button-bar",children:[(0,h.jsx)("div",{style:{flex:1},children:(0,h.jsxs)("button",{disabled:r,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary plotly-cloud-logout",onClick:b,children:[(0,h.jsx)(eo,{}),"\xA0Logout"]})}),(0,h.jsx)("button",{type:"button",onClick:U,disabled:s?!1:r,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary",children:O}),l?(0,h.jsx)("button",{onClick:v,disabled:r,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary",children:(0,h.jsxs)("span",{children:[(0,h.jsx)(_,{}),"\xA0View App"]})}):null,(0,h.jsxs)("button",{type:"button",onClick:a,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",disabled:r||B,children:[r?(0,h.jsx)(to,{size:12}):null,N]})]})]})},go=Ra;var mo=e(C()),Na=({error:o})=>(0,mo.jsxs)("div",{className:"plotly-cloud-error",children:[(0,mo.jsx)(io,{className:"plotly-cloud-red-icon",size:24}),"\xA0",o]}),aa=Na;function sa(o){switch(o){case"BUILDING":return 1e4;case"STARTING":return 7e3;case"CHECKING":case"STOPPING":return 15e3;case"RUNNING":return 18e4;case"FAILING":case"PENDING_ENTITLEMENTS":case"BUILD_COMPLETED":case"BUILD_FAILED":case"STOPPED":case"DEPLOYED_BY_OTHER_PLATFORM":return 6e4;default:return 6e4}}var L=e(C()),po="cloud",xa=()=>{let{popup:o,setPopup:a}=window.dash_component_api.devtool.useDevtool(),s=window.dash_component_api.devtool.useDevtoolMenuButtonClassName(po),[r,i]=(0,t.useState)(""),[b,l]=(0,t.useState)("initialize"),[U,v]=(0,t.useState)(!1),[E,G]=(0,t.useState)(""),[R,O]=(0,t.useState)(""),[N,B]=(0,t.useState)(!1),[ra,Io]=(0,t.useState)(!1),[ho,ea]=(0,t.useState)(""),[na,Co]=(0,t.useState)(""),[wo,Lo]=(0,t.useState)(""),[T,D]=(0,t.useState)("unknown"),[Ao,bo]=(0,t.useState)(0),[ia,ta]=(0,t.useState)(1),[Po,ko]=(0,t.useState)(-1),W=(0,t.useRef)(""),y=(0,t.useRef)(""),k=(0,t.useMemo)(()=>qo("/"),[]),To=(0,t.useMemo)(()=>o===po,[o]),fo=()=>{a("")},ca=()=>{a(o===po?"":po)},yo=()=>{k.logout().then(()=>{l("initialize")})},Fo=()=>{v(!0),k.authenticate().then(n=>{n.error?i(n.error):(l("auth_poll"),G(n.result.user_code),O(n.result.verification_uri_complete),W.current=n.result.device_code,k.wait_auth().then(()=>{window.open(n.result.verification_uri_complete,"_blank"),ko(setTimeout(()=>{k.auth_poll({device_code:W.current}).then(Bo)},8e3))}))})},Bo=n=>{if(n.error)i(n.error);else{if(n.result.success){W.current="",y.current?(D("unknown"),l("update_app"),k.status({app_id:y.current}).then(x=>{D(x.result.status)})):l("enter_name");return}if(n.result.try_again){Fo();return}let P=ia||1;n.result.delay&&(P=n.result.delay,ta(P)),ko(setTimeout(()=>{k.auth_poll({device_code:W.current}).then(Bo)},1e3+P*1e3))}},la=()=>{setTimeout(Fo,2e3)};(0,t.useEffect)(()=>{b==="initialize"&&k.initialize().then(n=>{let{result:P,error:x}=n;x?i(x):(ea(P.app_path),Co(P.app_name),D(P.status),Lo(P.app_url),P.app_id&&(y.current=P.app_id),P?.authenticated?P.status==="new"?l("enter_name"):l("update_app"):l("sign_in"))})},[b,To]);let ma=()=>{k.status({app_id:y.current}).then(pa)},pa=n=>{if(n.error){i(n.error);return}D(n.result.status),bo(Date.now()),n.result.status==="RUNNING"?(B(!1),Io(!0),l("update_app")):["BUILDING","STARTING"].includes(n.result.status)||(B(!1),l("update_app"))},Do=n=>{if(n.error){i(n.error);return}l("status_poll"),y.current=n.result.app_id,Lo(n.result.app_url),D("BUILDING"),bo(0)},Ia=n=>{Co(n),B(!0),Io(!1),D("BUILDING"),k.publish({app_path:ho,app_name:n}).then(Do)},Ho=()=>{B(!0),Io(!0),D("BUILDING"),k.publish({app_id:y.current,app_path:ho}).then(Do)};(0,t.useEffect)(()=>{if(!y.current||T==="unknown"||T==="new")return;let n=setInterval(()=>{let x=Date.now()-Ao,fa=sa(T);x>=fa&&ma()},1e3);return()=>{clearInterval(n)}},[y.current,T,Ao]),(0,t.useEffect)(()=>()=>{Po>0&&clearTimeout(Po)}),(0,t.useEffect)(()=>{r&&T!=="error"&&D("error")},[r,T]);let Mo=()=>{window.open(`https://cloud.plotly.com/app/${y.current}/settings`,"_blank")};return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)("button",{className:s,onClick:ca,children:[(0,L.jsx)(co,{status:T,isButtonIcon:!0}),"\xA0Plotly Cloud"]}),To?(0,L.jsx)(Eo,{title:"Plotly Cloud",onClose:fo,children:r?(0,L.jsx)(aa,{error:r}):(()=>{switch(b){case"authenticate":case"auth_poll":case"sign_in":return(0,L.jsx)(Oo,{onSignIn:la,waiting:U,userCode:E,verificationUrlComplete:R});case"enter_name":return(0,L.jsx)(Vo,{onPublish:Ia,onCancel:fo,initialAppName:na});case"update_app":return(0,L.jsx)(go,{onPublish:Ho,status:T,isUpdate:!0,onCancel:Mo,appUrl:wo,onLogout:yo});case"status_poll":case"publish":return(0,L.jsx)(go,{publishing:N,onPublish:Ho,status:T,onCancel:N?Mo:fo,isUpdate:ra,appUrl:wo,onLogout:yo});default:return(0,L.jsx)(L.Fragment,{})}})()},"publish-modal"):null]})},So=xa;typeof window<"u"&&(window.plotly_cloud_publish_component={PlotlyCloudPublishComponent:So});return wa(Ua);})();
3
+ /*! Bundled license information:
4
+
5
+ react/cjs/react-jsx-runtime.production.min.js:
6
+ (**
7
+ * @license React
8
+ * react-jsx-runtime.production.min.js
9
+ *
10
+ * Copyright (c) Facebook, Inc. and its affiliates.
11
+ *
12
+ * This source code is licensed under the MIT license found in the
13
+ * LICENSE file in the root directory of this source tree.
14
+ *)
15
+ */
@@ -4,12 +4,12 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "plotly-cloud"
7
- version = "0.1.0rc2"
7
+ version = "0.1.0rc4"
8
8
  description = "CLI for interacting with Plotly Cloud to deploy Dash apps"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
11
11
  dependencies = [
12
- "httpx>=0.24.0",
12
+ "httpx>=0.24.0,<1.0.0",
13
13
  "dash>=2.0.0",
14
14
  "rich>=10.0.0",
15
15
  "rich-argparse>=1.7.1",
@@ -1 +0,0 @@
1
- .plotly-cloud-publish-container{position:relative;font-family:Verdana,Geneva,sans-serif}.plotly-cloud-publish-button{cursor:pointer}.plotly-cloud-publish-button:hover{color:#7f4bc4}.plotly-cloud-publish-modal-overlay{position:absolute;bottom:100%;left:-16px;z-index:10000;margin-bottom:1.25rem}.plotly-cloud-publish-modal-content{width:522px;background:#fff;border:1px solid #d1d5db;border-radius:4px 4px 0 0;box-shadow:0 -4px 6px #00000014;overflow:hidden}.plotly-cloud-publish-modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #e5e5e5;background:#f9fafb}.plotly-cloud-publish-modal-header h3{margin:0;color:#333}.plotly-cloud-publish-modal-close{background:none;border:none;font-size:24px;cursor:pointer;color:#666;padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center}.plotly-cloud-publish-modal-close:hover{color:#333}.plotly-cloud-publish-modal-body{padding:20px;color:#000!important;font-weight:100}button.plotly-cloud-publish-modal-button{display:inline-flex;align-items:center;gap:6px;padding:6px 10px!important;border-radius:4px!important;font-size:12px!important;font-weight:600!important;cursor:pointer;border:1px solid transparent;border-top-color:transparent;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent;background:#f3f4f6;color:#374151}.plotly-cloud-publish-modal-button:disabled{cursor:not-allowed}button.plotly-cloud-btn-primary{background:#8b5cf6!important;color:#fff;border-color:#7c3aed!important}button.plotly-cloud-btn-secondary{background:#fff;border:none;color:#8b5cf6!important}.plotly-cloud-button-bar{display:flex;justify-content:flex-end;align-items:center}.plotly-cloud-publish-signin{display:flex;justify-content:space-between;align-items:center}.plotly-cloud-name-input-label{font-weight:600;color:#374151;font-size:12px;margin-bottom:6px}.plotly-cloud-name-input-field{margin-bottom:12px;width:calc(100% - 8px)}.plotly-cloud-status-info{display:flex;border-radius:5px;margin-bottom:12px;align-items:center;padding:6px;font-size:12px!important}.plotly-cloud-status-red{background:#fef2f2;color:#991b1b;border:1px solid #fecaca}.plotly-cloud-status-description{font-size:12px!important;margin-left:8px}.plotly-cloud-status-title{font-weight:700}.plotly-cloud-status-green{background:#ecfdf5;color:#065f46;border:1px solid #a7f3d0}.plotly-cloud-status-red .plotly-cloud-status-title{color:#a10}.plotly-cloud-status-green .plotly-cloud-status-title{color:#065f46}.plotly-cloud-status-gray{background:#f9fafb;color:#000;border:1px solid #dadada}.plotly-cloud-status-gray .plotly-cloud-status-title{color:#2e2e2e}.plotly-cloud-green-icon{color:#10b981!important}.plotly-cloud-red-icon{color:#ef4444}.plotly-cloud-gray-icon{color:#9ca3af}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.plotly-cloud-spin{animation:spin 2s linear infinite}
@@ -1,15 +0,0 @@
1
- const React = window.React; const ReactDOM = window.ReactDOM;
2
- "use strict";var plotly_cloud_publish_component=(()=>{var Go=Object.create;var G=Object.defineProperty;var Oo=Object.getOwnPropertyDescriptor;var Wo=Object.getOwnPropertyNames;var qo=Object.getPrototypeOf,Vo=Object.prototype.hasOwnProperty;var ao=(o,a)=>()=>(a||o((a={exports:{}}).exports,a),a.exports),zo=(o,a)=>{for(var s in a)G(o,s,{get:a[s],enumerable:!0})},mo=(o,a,s,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let n of Wo(a))!Vo.call(o,n)&&n!==s&&G(o,n,{get:()=>a[n],enumerable:!(r=Oo(a,n))||r.enumerable});return o};var e=(o,a,s)=>(s=o!=null?Go(qo(o)):{},mo(a||!o||!o.__esModule?G(s,"default",{value:o,enumerable:!0}):s,o)),Xo=o=>mo(G({},"__esModule",{value:!0}),o);var u=ao((fa,po)=>{po.exports=React});var fo=ao(O=>{"use strict";var _o=u(),Zo=Symbol.for("react.element"),Jo=Symbol.for("react.fragment"),Ko=Object.prototype.hasOwnProperty,jo=_o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Qo={key:!0,ref:!0,__self:!0,__source:!0};function Io(o,a,s){var r,n={},I=null,h=null;s!==void 0&&(I=""+s),a.key!==void 0&&(I=""+a.key),a.ref!==void 0&&(h=a.ref);for(r in a)Ko.call(a,r)&&!Qo.hasOwnProperty(r)&&(n[r]=a[r]);if(o&&o.defaultProps)for(r in a=o.defaultProps,a)n[r]===void 0&&(n[r]=a[r]);return{$$typeof:Zo,type:o,key:I,ref:h,props:n,_owner:jo.current}}O.Fragment=Jo;O.jsx=Io;O.jsxs=Io});var S=ao((Sa,uo)=>{"use strict";uo.exports=fo()});var ia={};zo(ia,{PlotlyCloudPublishComponent:()=>ro});var t=e(u());var k=e(S()),Yo=({title:o,onClose:a,children:s})=>(0,k.jsx)("div",{className:"plotly-cloud-publish-modal-overlay",children:(0,k.jsxs)("div",{className:"plotly-cloud-publish-modal-content",children:[(0,k.jsxs)("div",{className:"plotly-cloud-publish-modal-header",children:[(0,k.jsx)("h3",{children:o},"modal-title"),(0,k.jsx)("button",{className:"plotly-cloud-publish-modal-close",onClick:a,children:"\xD7"},"modal-close")]}),(0,k.jsx)("div",{className:"plotly-cloud-publish-modal-body",children:s},"modal-body")]})}),So=Yo;var go=e(u()),L=e(S()),$o=o=>{let[a,s]=(0,go.useState)(o.waiting);return(0,L.jsx)("div",{className:"plotly-cloud-publish-signin",children:a?(0,L.jsx)("span",{children:"Waiting for succesful sign-in on signin.cloud.plotly.com"}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)("span",{children:"Sign in to publish your app to Plotly Cloud."}),(0,L.jsx)("button",{className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",onClick:()=>{s(!0),o.onSignIn()},children:"Sign In"})]})})},ho=$o;var oa=o=>{let a=async r=>await(await fetch(`${o}_plotly_cloud_publish`,{method:"POST",body:JSON.stringify(r),headers:{"Content-Type":"application/json"}})).json(),s=r=>n=>a({operation:r,data:n});return{initialize:s("initialize"),authenticate:s("authenticate"),auth_poll:s("auth_poll"),publish:s("publish"),status:s("status")}},Co=oa;var wo=e(u()),b=e(S()),aa=({initialAppName:o="",onCancel:a,onPublish:s})=>{let[r,n]=(0,wo.useState)(o);return(0,b.jsxs)("div",{className:"plotly-cloud-name-input",children:[(0,b.jsx)("div",{className:"plotly-cloud-name-input-label",children:"App Name"}),(0,b.jsxs)("form",{onSubmit:h=>{h.preventDefault(),r.trim()&&s(r.trim())},children:[(0,b.jsx)("input",{type:"text",value:r,onChange:h=>n(h.target.value),placeholder:"My Dash App",className:"plotly-cloud-name-input-field"}),(0,b.jsxs)("div",{className:"plotly-cloud-button-bar",children:[(0,b.jsx)("button",{type:"button",onClick:a,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary",children:"Cancel"}),(0,b.jsx)("button",{type:"submit",disabled:!r.trim(),className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",children:"Publish App"})]})]})]})},Lo=aa;var Q=e(u());var c=e(u(),1),bo=new Map([["bold",c.createElement(c.Fragment,null,c.createElement("path",{d:"M236,128a108,108,0,0,1-216,0c0-42.52,24.73-81.34,63-98.9A12,12,0,1,1,93,50.91C63.24,64.57,44,94.83,44,128a84,84,0,0,0,168,0c0-33.17-19.24-63.43-49-77.09A12,12,0,1,1,173,29.1C211.27,46.66,236,85.48,236,128Z"}))],["duotone",c.createElement(c.Fragment,null,c.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),c.createElement("path",{d:"M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"}))],["fill",c.createElement(c.Fragment,null,c.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,176A72,72,0,0,1,92,65.64a8,8,0,0,1,8,13.85,56,56,0,1,0,56,0,8,8,0,0,1,8-13.85A72,72,0,0,1,128,200Z"}))],["light",c.createElement(c.Fragment,null,c.createElement("path",{d:"M230,128a102,102,0,0,1-204,0c0-40.18,23.35-76.86,59.5-93.45a6,6,0,0,1,5,10.9C58.61,60.09,38,92.49,38,128a90,90,0,0,0,180,0c0-35.51-20.61-67.91-52.5-82.55a6,6,0,0,1,5-10.9C206.65,51.14,230,87.82,230,128Z"}))],["regular",c.createElement(c.Fragment,null,c.createElement("path",{d:"M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"}))],["thin",c.createElement(c.Fragment,null,c.createElement("path",{d:"M228,128a100,100,0,0,1-200,0c0-39.4,22.9-75.37,58.33-91.63a4,4,0,1,1,3.34,7.27C57.07,58.6,36,91.71,36,128a92,92,0,0,0,184,0c0-36.29-21.07-69.4-53.67-84.36a4,4,0,1,1,3.34-7.27C205.1,52.63,228,88.6,228,128Z"}))]]);var l=e(u(),1),Po=new Map([["bold",l.createElement(l.Fragment,null,l.createElement("path",{d:"M160,36A92.09,92.09,0,0,0,79,84.36,68,68,0,1,0,72,220h88a92,92,0,0,0,0-184Zm0,160H72a44,44,0,0,1-1.82-88A91.86,91.86,0,0,0,68,128a12,12,0,0,0,24,0,68,68,0,1,1,68,68Zm40.49-92.49a12,12,0,0,1,0,17l-48,48a12,12,0,0,1-17,0l-24-24a12,12,0,1,1,17-17L144,143l39.51-39.52A12,12,0,0,1,200.49,103.51Z"}))],["duotone",l.createElement(l.Fragment,null,l.createElement("path",{d:"M240,128a80,80,0,0,1-80,80H72A56,56,0,1,1,85.92,97.74l0,.1A80,80,0,0,1,240,128Z",opacity:"0.2"}),l.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm37.66-93.66a8,8,0,0,1,0,11.32l-48,48a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L144,148.69l42.34-42.35A8,8,0,0,1,197.66,106.34Z"}))],["fill",l.createElement(l.Fragment,null,l.createElement("path",{d:"M247.93,124.52C246.11,77.54,207.07,40,160.06,40A88.1,88.1,0,0,0,81.29,88.67h0A87.48,87.48,0,0,0,72,127.73,8.18,8.18,0,0,1,64.57,136,8,8,0,0,1,56,128a103.66,103.66,0,0,1,5.34-32.92,4,4,0,0,0-4.75-5.18A64.09,64.09,0,0,0,8,152c0,35.19,29.75,64,65,64H160A88.09,88.09,0,0,0,247.93,124.52Zm-50.27-6.86-48,48a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L144,148.69l42.34-42.35a8,8,0,0,1,11.32,11.32Z"}))],["light",l.createElement(l.Fragment,null,l.createElement("path",{d:"M160,42A86.11,86.11,0,0,0,82.43,90.88,62,62,0,1,0,72,214h88a86,86,0,0,0,0-172Zm0,160H72a50,50,0,0,1,0-100,50.67,50.67,0,0,1,5.91.35A85.61,85.61,0,0,0,74,128a6,6,0,0,0,12,0,74,74,0,1,1,74,74Zm36.24-94.24a6,6,0,0,1,0,8.48l-48,48a6,6,0,0,1-8.48,0l-24-24a6,6,0,0,1,8.48-8.48L144,151.51l43.76-43.75A6,6,0,0,1,196.24,107.76Z"}))],["regular",l.createElement(l.Fragment,null,l.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm37.66-93.66a8,8,0,0,1,0,11.32l-48,48a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L144,148.69l42.34-42.35A8,8,0,0,1,197.66,106.34Z"}))],["thin",l.createElement(l.Fragment,null,l.createElement("path",{d:"M160,44A84.11,84.11,0,0,0,83.59,93.12,60.71,60.71,0,0,0,72,92a60,60,0,0,0,0,120h88a84,84,0,0,0,0-168Zm0,160H72a52,52,0,1,1,8.55-103.3A83.66,83.66,0,0,0,76,128a4,4,0,0,0,8,0,76,76,0,1,1,76,76Zm34.83-94.83a4,4,0,0,1,0,5.66l-48,48a4,4,0,0,1-5.66,0l-24-24a4,4,0,0,1,5.66-5.66L144,154.34l45.17-45.17A4,4,0,0,1,194.83,109.17Z"}))]]);var m=e(u(),1),Ao=new Map([["bold",m.createElement(m.Fragment,null,m.createElement("path",{d:"M56.88,31.93A12,12,0,1,0,39.12,48.07L71.79,84A68,68,0,0,0,72,220h88a91.26,91.26,0,0,0,30.66-5.24l8.46,9.31a12,12,0,0,0,17.76-16.14ZM160,196H72a44,44,0,0,1-1.8-87.95A91.91,91.91,0,0,0,68,128a12,12,0,0,0,24,0,68.22,68.22,0,0,1,2.66-18.84l77.88,85.67A68.67,68.67,0,0,1,160,196Zm92-68a91.32,91.32,0,0,1-17.53,54,12,12,0,1,1-19.41-14.11,68,68,0,0,0-89.57-98.53,12,12,0,0,1-12.2-20.66A92,92,0,0,1,252,128Z"}))],["duotone",m.createElement(m.Fragment,null,m.createElement("path",{d:"M240,128a80,80,0,0,1-80,80H72A56,56,0,1,1,85.92,97.74l0,.1A80,80,0,0,1,240,128Z",opacity:"0.2"}),m.createElement("path",{d:"M53.92,34.62A8,8,0,1,0,42.08,45.38L81.32,88.55l-.06.12A65,65,0,0,0,72,88a64,64,0,0,0,0,128h88a87.34,87.34,0,0,0,31.8-5.93l10.28,11.31a8,8,0,1,0,11.84-10.76ZM160,200H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.3.12A88.4,88.4,0,0,0,72,128a8,8,0,0,0,16,0,72.25,72.25,0,0,1,5.06-26.54l87,95.7A71.66,71.66,0,0,1,160,200Zm88-72a87.89,87.89,0,0,1-22.35,58.61A8,8,0,0,1,213.71,176,72,72,0,0,0,117.37,70a8,8,0,0,1-9.48-12.89A88,88,0,0,1,248,128Z"}))],["fill",m.createElement(m.Fragment,null,m.createElement("path",{d:"M248,128.72A87.74,87.74,0,0,1,222.41,190a4,4,0,0,1-5.77-.16L103.78,65.67a4,4,0,0,1,.39-5.76A87.82,87.82,0,0,1,160.87,40C209.15,40.47,248.38,80.43,248,128.72ZM53.92,34.62A8,8,0,1,0,42.08,45.38L81.33,88.56l-.06.11A64,64,0,0,0,8,153c.53,35.12,29.84,63,65,63h87a87.65,87.65,0,0,0,31.78-5.95l10.3,11.33a8,8,0,0,0,11.33.52,8.32,8.32,0,0,0,.29-11.52Z"}))],["light",m.createElement(m.Fragment,null,m.createElement("path",{d:"M52.44,36A6,6,0,0,0,43.56,44l40.18,44.2c-.45.87-.9,1.75-1.32,2.64A62,62,0,1,0,72,214h88a85.23,85.23,0,0,0,32.35-6.3L203.56,220a6,6,0,0,0,8.88-8.08ZM160,202H72a50,50,0,1,1,5.9-99.64A86.25,86.25,0,0,0,74,128a6,6,0,0,0,12,0,73.92,73.92,0,0,1,6.44-30.2l91.22,100.34A73.65,73.65,0,0,1,160,202Zm86-74a85.85,85.85,0,0,1-21.85,57.27,6,6,0,0,1-4.47,2,6,6,0,0,1-4.47-10,74,74,0,0,0-99-108.92,6,6,0,1,1-7.11-9.67A86,86,0,0,1,246,128Z"}))],["regular",m.createElement(m.Fragment,null,m.createElement("path",{d:"M53.92,34.62A8,8,0,1,0,42.08,45.38L81.32,88.55l-.06.12A65,65,0,0,0,72,88a64,64,0,0,0,0,128h88a87.34,87.34,0,0,0,31.8-5.93l10.28,11.31a8,8,0,1,0,11.84-10.76ZM160,200H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.3.12A88.4,88.4,0,0,0,72,128a8,8,0,0,0,16,0,72.25,72.25,0,0,1,5.06-26.54l87,95.7A71.66,71.66,0,0,1,160,200Zm88-72a87.89,87.89,0,0,1-22.35,58.61A8,8,0,0,1,213.71,176,72,72,0,0,0,117.37,70a8,8,0,0,1-9.48-12.89A88,88,0,0,1,248,128Z"}))],["thin",m.createElement(m.Fragment,null,m.createElement("path",{d:"M51,37.31A4,4,0,0,0,45,42.69L86.16,87.93q-1.38,2.55-2.59,5.19A60,60,0,1,0,72,212h88a83.19,83.19,0,0,0,32.88-6.69L205,218.69a4,4,0,1,0,5.92-5.38ZM160,204H72a52,52,0,0,1,0-104,52.92,52.92,0,0,1,8.54.72A84.21,84.21,0,0,0,76,128a4,4,0,0,0,8,0,76,76,0,0,1,7.9-33.76L187.13,199A75.37,75.37,0,0,1,160,204Zm84-76a83.86,83.86,0,0,1-21.34,55.94,4,4,0,1,1-6-5.33A76,76,0,0,0,115,66.75a4,4,0,0,1-4.74-6.45A84,84,0,0,1,244,128Z"}))]]);var p=e(u(),1),ko=new Map([["bold",p.createElement(p.Fragment,null,p.createElement("path",{d:"M160,36A92.09,92.09,0,0,0,79,84.36,68,68,0,1,0,72,220h88a92,92,0,0,0,0-184Zm0,160H72a44,44,0,0,1-1.82-88A91.86,91.86,0,0,0,68,128a12,12,0,0,0,24,0,68,68,0,1,1,68,68Zm32.49-79.51L177,132l15.52,15.51a12,12,0,0,1-17,17L160,149l-15.51,15.52a12,12,0,1,1-17-17L143,132l-15.52-15.51a12,12,0,1,1,17-17L160,115l15.51-15.52a12,12,0,0,1,17,17Z"}))],["duotone",p.createElement(p.Fragment,null,p.createElement("path",{d:"M240,127.62a80,80,0,0,1-80,80H72A56,56,0,1,1,85.92,97.36l0,.1A80,80,0,0,1,240,127.62Z",opacity:"0.2"}),p.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm29.66-82.34L171.31,136l18.35,18.34a8,8,0,0,1-11.32,11.32L160,147.31l-18.34,18.35a8,8,0,0,1-11.32-11.32L148.69,136l-18.35-18.34a8,8,0,0,1,11.32-11.32L160,124.69l18.34-18.35a8,8,0,0,1,11.32,11.32Z"}))],["fill",p.createElement(p.Fragment,null,p.createElement("path",{d:"M247.93,124.52C246.11,77.54,207.07,40,160.06,40A88.1,88.1,0,0,0,81.29,88.67h0A87.48,87.48,0,0,0,72,127.73,8.18,8.18,0,0,1,64.57,136,8,8,0,0,1,56,128a103.66,103.66,0,0,1,5.34-32.92,4,4,0,0,0-4.75-5.18A64.09,64.09,0,0,0,8,152c0,35.19,29.75,64,65,64H160A88.09,88.09,0,0,0,247.93,124.52Zm-58.27,29.82a8,8,0,0,1-11.32,11.32L160,147.31l-18.34,18.35a8,8,0,0,1-11.32-11.32L148.69,136l-18.35-18.34a8,8,0,0,1,11.32-11.32L160,124.69l18.34-18.35a8,8,0,0,1,11.32,11.32L171.31,136Z"}))],["light",p.createElement(p.Fragment,null,p.createElement("path",{d:"M160,42A86.11,86.11,0,0,0,82.43,90.88,62,62,0,1,0,72,214h88a86,86,0,0,0,0-172Zm0,160H72a50,50,0,0,1,0-100,50.67,50.67,0,0,1,5.91.35A85.61,85.61,0,0,0,74,128a6,6,0,0,0,12,0,74,74,0,1,1,74,74Zm28.24-85.76L168.48,136l19.76,19.76a6,6,0,1,1-8.48,8.48L160,144.48l-19.76,19.76a6,6,0,0,1-8.48-8.48L151.52,136l-19.76-19.76a6,6,0,0,1,8.48-8.48L160,127.52l19.76-19.76a6,6,0,0,1,8.48,8.48Z"}))],["regular",p.createElement(p.Fragment,null,p.createElement("path",{d:"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Zm29.66-82.34L171.31,136l18.35,18.34a8,8,0,0,1-11.32,11.32L160,147.31l-18.34,18.35a8,8,0,0,1-11.32-11.32L148.69,136l-18.35-18.34a8,8,0,0,1,11.32-11.32L160,124.69l18.34-18.35a8,8,0,0,1,11.32,11.32Z"}))],["thin",p.createElement(p.Fragment,null,p.createElement("path",{d:"M160,44A84.11,84.11,0,0,0,83.59,93.12,60.71,60.71,0,0,0,72,92a60,60,0,0,0,0,120h88a84,84,0,0,0,0-168Zm0,160H72a52,52,0,1,1,8.55-103.3A83.66,83.66,0,0,0,76,128a4,4,0,0,0,8,0,76,76,0,1,1,76,76Zm26.83-89.17L165.66,136l21.17,21.17a4,4,0,0,1-5.66,5.66L160,141.66l-21.17,21.17a4,4,0,0,1-5.66-5.66L154.34,136l-21.17-21.17a4,4,0,0,1,5.66-5.66L160,130.34l21.17-21.17a4,4,0,1,1,5.66,5.66Z"}))]]);var y=e(u(),1);var To=e(u(),1),yo=(0,To.createContext)({color:"currentColor",size:"1em",weight:"regular",mirrored:!1});var P=y.forwardRef((o,a)=>{let{alt:s,color:r,size:n,weight:I,mirrored:h,children:B,weights:F,...D}=o,{color:H="currentColor",size:C,weight:Y="regular",mirrored:M=!1,...x}=y.useContext(yo);return y.createElement("svg",{ref:a,xmlns:"http://www.w3.org/2000/svg",width:n??C,height:n??C,fill:r??H,viewBox:"0 0 256 256",transform:h||M?"scale(-1, 1)":void 0,...x,...D},!!s&&y.createElement("title",null,s),B,F.get(I??Y))});P.displayName="IconBase";var W=e(u(),1);var q=W.forwardRef((o,a)=>W.createElement(P,{ref:a,...o,weights:bo}));q.displayName="CircleNotchIcon";var V=e(u(),1);var z=V.forwardRef((o,a)=>V.createElement(P,{ref:a,...o,weights:Po}));z.displayName="CloudCheckIcon";var X=e(u(),1);var _=X.forwardRef((o,a)=>X.createElement(P,{ref:a,...o,weights:Ao}));_.displayName="CloudSlashIcon";var Z=e(u(),1);var J=Z.forwardRef((o,a)=>Z.createElement(P,{ref:a,...o,weights:ko}));J.displayName="CloudXIcon";var Bo=e(S()),sa=o=>(0,Bo.jsx)(q,{size:o.size,className:"plotly-cloud-spin plotly-cloud-gray-icon",weight:"bold"}),K=sa;var R=e(S()),ra=({status:o,size:a=16,isButtonIcon:s})=>o==="BUILDING"||o==="STARTING"||o==="unknown"?(0,R.jsx)(K,{size:a}):o==="RUNNING"?(0,R.jsx)(z,{size:a,className:"plotly-cloud-green-icon",weight:s?"fill":"duotone"}):o==="new"?(0,R.jsx)(_,{size:a,className:"plotly-cloud-gray-icon",weight:s?"fill":"duotone"}):(0,R.jsx)(J,{size:a,className:"plotly-cloud-red-icon",weight:"duotone"}),j=ra;var d=e(S()),ea=({status:o,onPublish:a,isUpdate:s,publishing:r,onCancel:n})=>{let I=()=>{n&&n()},[h,B,F]=(0,Q.useMemo)(()=>o==="BUILDING"||o==="STARTING"?["App is building","Wait for your app to finish publishing before publishing again","gray"]:o==="RUNNING"?["App is live","Your app is running in Plotly Cloud.","green"]:["App is stopped","Start your app by publishing again or starting it in the app manager","red"],[o]),[D,H]=(0,Q.useMemo)(()=>r?s?["Open Settings in Plotly Cloud","Republishing"]:["Cancel","Publishing"]:s?["Open Settings in Plotly Cloud","Republish"]:["Cancel","Publish"],[r,s]),C=(0,Q.useMemo)(()=>["BUILDING","STARTING"].includes(o),[o]);return(0,d.jsxs)("div",{className:"plotly-cloud-status-banner",children:[(0,d.jsxs)("div",{className:`plotly-cloud-status-info plotly-cloud-status-${F}`,children:[(0,d.jsx)(j,{status:o,size:20}),(0,d.jsxs)("div",{className:"plotly-cloud-status-description",children:[(0,d.jsx)("div",{className:"plotly-cloud-status-title",children:h}),(0,d.jsx)("div",{className:"plotly-cloud-status-text",children:B})]})]}),(0,d.jsxs)("div",{className:"plotly-cloud-button-bar",children:[(0,d.jsx)("button",{type:"button",onClick:I,disabled:s?!1:r,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-secondary",children:D}),(0,d.jsxs)("button",{type:"button",onClick:a,className:"plotly-cloud-publish-modal-button plotly-cloud-btn-primary",disabled:r||C,children:[r?(0,d.jsx)(K,{size:12}):null,H]})]})]})},so=ea;var g=e(S()),na=()=>{let[o,a]=(0,t.useState)(!1),[s,r]=(0,t.useState)(""),[n,I]=(0,t.useState)("initialize"),[h,B]=(0,t.useState)(!1),[F,D]=(0,t.useState)(!1),[H,C]=(0,t.useState)(!1),[Y,M]=(0,t.useState)(!1),[x,Fo]=(0,t.useState)(""),[Do,eo]=(0,t.useState)(""),[$,T]=(0,t.useState)("unknown"),[ta,Ho]=(0,t.useState)(!1),[N,U]=(0,t.useState)(-1),[Mo,Ro]=(0,t.useState)(1),v=(0,t.useRef)(""),A=(0,t.useRef)(""),[ca,la]=(0,t.useReducer)((i,f)=>{switch(f.type){case"init":return{...f.payload};case"slow_down":return{...i,delay:f.payload.delay};case"try_again":case"success":return{}}return{...i}},{}),w=(0,t.useMemo)(()=>Co("/"),[]),ma=()=>{a(!0)},oo=()=>{a(!1)},xo=()=>{a(!o)},No=(0,t.useMemo)(()=>o?"plotly-cloud-publish-container dash-debug-menu__button dash-debug-menu__button--selected":"plotly-cloud-publish-container dash-debug-menu__button",[o]),no=()=>{D(!0),w.authenticate().then(i=>{i.error?r(i.error):(I("auth_poll"),v.current=i.result.device_code,window.open(i.result.verification_uri_complete,"_blank"),U(setTimeout(()=>{w.auth_poll({device_code:v.current}).then(io)},8e3)))})},io=i=>{if(i.error)r(i.error);else{if(i.result.success){B(!0),v.current="",A.current?(T("unknown"),I("update_app"),w.status({app_id:A.current}).then(E=>{T(E.result.status)})):I("enter_name");return}if(i.result.try_again){no();return}let f=Mo||1;i.result.delay&&(f=i.result.delay,Ro(f)),U(setTimeout(()=>{w.auth_poll({device_code:v.current}).then(io)},1e3+f*1e3))}},Uo=no;(0,t.useEffect)(()=>{n==="initialize"&&w.initialize().then(i=>{let{result:f,error:E}=i;E?r(E):(B(!f?.authenticated),Fo(f.app_path),eo(f.app_name),T(f.status),f.app_id&&(A.current=f.app_id),f?.authenticated?f.status==="new"?I("enter_name"):I("update_app"):I("sign_in"))})},[n,o]);let to=i=>{T(i.result.status),i.result.status==="RUNNING"?(C(!1),M(!0),I("update_app")):["BUILDING","STARTING"].includes(i.result.status)?U(setTimeout(()=>{w.status({app_id:A.current}).then(to)},2e3)):(C(!1),I("update_app"))},co=i=>{if(i.error){r(i.error);return}I("status_poll"),A.current=i.result.app_id,T("BUILDING"),N>0&&clearTimeout(N),U(setTimeout(()=>{w.status({app_id:A.current}).then(to)},2500))},vo=i=>{Ho(!0),eo(i),C(!0),M(!1),T("BUILDING"),w.publish({app_path:x,app_name:i}).then(co)},lo=()=>{C(!0),M(!0),T("BUILDING"),w.publish({app_id:A.current,app_path:x}).then(co)};(0,t.useEffect)(()=>()=>{N&&clearTimeout(N)});let Eo=()=>{window.open(`https://cloud.plotly.com/app/${A.current}/settings`,"_blank")};return(0,g.jsxs)("div",{className:No,children:[(0,g.jsxs)("button",{className:"plotly-cloud-publish-button",onClick:xo,children:[(0,g.jsx)(j,{status:$,isButtonIcon:!0})," Plotly Cloud"]},"publish-button"),o?(0,g.jsx)(So,{title:"Plotly Cloud",onClose:oo,children:s||(()=>{switch(n){case"authenticate":case"auth_poll":case"sign_in":return(0,g.jsx)(ho,{onSignIn:Uo,waiting:F});case"enter_name":return(0,g.jsx)(Lo,{onPublish:vo,onCancel:oo,initialAppName:Do});case"update_app":return(0,g.jsx)(so,{onPublish:lo,status:$,isUpdate:!0,onCancel:Eo});case"status_poll":case"publish":return(0,g.jsx)(so,{publishing:H,onPublish:lo,status:$,onCancel:oo,isUpdate:Y});default:return(0,g.jsx)(g.Fragment,{})}})()},"publish-modal"):null]})},ro=na;typeof window<"u"&&(window.plotly_cloud_publish_component={PlotlyCloudPublishComponent:ro});return Xo(ia);})();
3
- /*! Bundled license information:
4
-
5
- react/cjs/react-jsx-runtime.production.min.js:
6
- (**
7
- * @license React
8
- * react-jsx-runtime.production.min.js
9
- *
10
- * Copyright (c) Facebook, Inc. and its affiliates.
11
- *
12
- * This source code is licensed under the MIT license found in the
13
- * LICENSE file in the root directory of this source tree.
14
- *)
15
- */
File without changes