stackport 0.4.5__tar.gz → 0.4.6__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 (150) hide show
  1. {stackport-0.4.5/stackport.egg-info → stackport-0.4.6}/PKG-INFO +1 -1
  2. {stackport-0.4.5 → stackport-0.4.6}/pyproject.toml +1 -1
  3. {stackport-0.4.5 → stackport-0.4.6/stackport.egg-info}/PKG-INFO +1 -1
  4. {stackport-0.4.5 → stackport-0.4.6}/stackport.egg-info/SOURCES.txt +26 -26
  5. stackport-0.4.5/ui/dist/assets/CloudscapeAbout-D8bVx2o1.js → stackport-0.4.6/ui/dist/assets/CloudscapeAbout-xEYYjNc3.js +1 -1
  6. stackport-0.4.5/ui/dist/assets/CloudscapeDashboard-Cb3SVBox.js → stackport-0.4.6/ui/dist/assets/CloudscapeDashboard-dcDZ2KOc.js +1 -1
  7. stackport-0.4.5/ui/dist/assets/CloudscapeLearn-DhnltSEL.js → stackport-0.4.6/ui/dist/assets/CloudscapeLearn-urCq-68_.js +1 -1
  8. stackport-0.4.5/ui/dist/assets/CloudscapeResourceBrowser-BNBaU_zZ.js → stackport-0.4.6/ui/dist/assets/CloudscapeResourceBrowser-kEGPuGi-.js +4 -4
  9. stackport-0.4.5/ui/dist/assets/CloudscapeSettings-BMXbMPTT.js → stackport-0.4.6/ui/dist/assets/CloudscapeSettings-BbsHquP5.js +1 -1
  10. stackport-0.4.5/ui/dist/assets/CloudscapeShell-Dd2hVOGq.js → stackport-0.4.6/ui/dist/assets/CloudscapeShell-uZ1fljIL.js +1 -1
  11. stackport-0.4.5/ui/dist/assets/StateMachineGraph-gL9KABj0.js → stackport-0.4.6/ui/dist/assets/StateMachineGraph-BUugvvkt.js +1 -1
  12. stackport-0.4.5/ui/dist/assets/index-Blob5IHY.js → stackport-0.4.6/ui/dist/assets/index-CRIgpz3m.js +1 -1
  13. stackport-0.4.5/ui/dist/assets/index-BFIBfRr-.js → stackport-0.4.6/ui/dist/assets/index-CSPxY-pb.js +2 -2
  14. stackport-0.4.5/ui/dist/assets/index-D8EPia5i.js → stackport-0.4.6/ui/dist/assets/index-CghKQufp.js +1 -1
  15. stackport-0.4.5/ui/dist/assets/index-u1-TTPf4.js → stackport-0.4.6/ui/dist/assets/index-D1zKGwv5.js +1 -1
  16. stackport-0.4.5/ui/dist/assets/index-BBLXT2u8.js → stackport-0.4.6/ui/dist/assets/index-DcDSxjm9.js +1 -1
  17. stackport-0.4.5/ui/dist/assets/index-CN6POuiI.js → stackport-0.4.6/ui/dist/assets/index-DsTSmMDp.js +1 -1
  18. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/index.html +1 -1
  19. {stackport-0.4.5 → stackport-0.4.6}/LICENSE +0 -0
  20. {stackport-0.4.5 → stackport-0.4.6}/MANIFEST.in +0 -0
  21. {stackport-0.4.5 → stackport-0.4.6}/README.md +0 -0
  22. {stackport-0.4.5 → stackport-0.4.6}/backend/__init__.py +0 -0
  23. {stackport-0.4.5 → stackport-0.4.6}/backend/aws_client.py +0 -0
  24. {stackport-0.4.5 → stackport-0.4.6}/backend/cache.py +0 -0
  25. {stackport-0.4.5 → stackport-0.4.6}/backend/cli.py +0 -0
  26. {stackport-0.4.5 → stackport-0.4.6}/backend/config.py +0 -0
  27. {stackport-0.4.5 → stackport-0.4.6}/backend/endpoint_store.py +0 -0
  28. {stackport-0.4.5 → stackport-0.4.6}/backend/learn/__init__.py +0 -0
  29. {stackport-0.4.5 → stackport-0.4.6}/backend/learn/content.py +0 -0
  30. {stackport-0.4.5 → stackport-0.4.6}/backend/learn/hotspots.py +0 -0
  31. {stackport-0.4.5 → stackport-0.4.6}/backend/learn/trails/aws-first-steps.json +0 -0
  32. {stackport-0.4.5 → stackport-0.4.6}/backend/learn/verify.py +0 -0
  33. {stackport-0.4.5 → stackport-0.4.6}/backend/learn_store.py +0 -0
  34. {stackport-0.4.5 → stackport-0.4.6}/backend/main.py +0 -0
  35. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/__init__.py +0 -0
  36. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/common.py +0 -0
  37. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/dynamodb.py +0 -0
  38. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/ec2.py +0 -0
  39. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/endpoints.py +0 -0
  40. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/iam.py +0 -0
  41. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/kms.py +0 -0
  42. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/lambda_svc.py +0 -0
  43. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/learn.py +0 -0
  44. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/logs.py +0 -0
  45. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/monitoring.py +0 -0
  46. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/rds.py +0 -0
  47. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/resources.py +0 -0
  48. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/s3.py +0 -0
  49. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/secretsmanager.py +0 -0
  50. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/sns.py +0 -0
  51. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/sqs.py +0 -0
  52. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/stats.py +0 -0
  53. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/stepfunctions.py +0 -0
  54. {stackport-0.4.5 → stackport-0.4.6}/backend/routes/tags.py +0 -0
  55. {stackport-0.4.5 → stackport-0.4.6}/backend/schemas/__init__.py +0 -0
  56. {stackport-0.4.5 → stackport-0.4.6}/backend/schemas/dynamodb.py +0 -0
  57. {stackport-0.4.5 → stackport-0.4.6}/backend/schemas/endpoints.py +0 -0
  58. {stackport-0.4.5 → stackport-0.4.6}/backend/schemas/lambda_svc.py +0 -0
  59. {stackport-0.4.5 → stackport-0.4.6}/backend/schemas/learn.py +0 -0
  60. {stackport-0.4.5 → stackport-0.4.6}/backend/schemas/logs.py +0 -0
  61. {stackport-0.4.5 → stackport-0.4.6}/backend/schemas/monitoring.py +0 -0
  62. {stackport-0.4.5 → stackport-0.4.6}/backend/schemas/s3.py +0 -0
  63. {stackport-0.4.5 → stackport-0.4.6}/backend/schemas/secretsmanager.py +0 -0
  64. {stackport-0.4.5 → stackport-0.4.6}/backend/schemas/sns.py +0 -0
  65. {stackport-0.4.5 → stackport-0.4.6}/backend/schemas/sqs.py +0 -0
  66. {stackport-0.4.5 → stackport-0.4.6}/backend/schemas/stepfunctions.py +0 -0
  67. {stackport-0.4.5 → stackport-0.4.6}/backend/schemas/tags.py +0 -0
  68. {stackport-0.4.5 → stackport-0.4.6}/backend/websocket.py +0 -0
  69. {stackport-0.4.5 → stackport-0.4.6}/setup.cfg +0 -0
  70. {stackport-0.4.5 → stackport-0.4.6}/stackport.egg-info/dependency_links.txt +0 -0
  71. {stackport-0.4.5 → stackport-0.4.6}/stackport.egg-info/entry_points.txt +0 -0
  72. {stackport-0.4.5 → stackport-0.4.6}/stackport.egg-info/requires.txt +0 -0
  73. {stackport-0.4.5 → stackport-0.4.6}/stackport.egg-info/top_level.txt +0 -0
  74. {stackport-0.4.5 → stackport-0.4.6}/tests/test_cache.py +0 -0
  75. {stackport-0.4.5 → stackport-0.4.6}/tests/test_cli.py +0 -0
  76. {stackport-0.4.5 → stackport-0.4.6}/tests/test_client.py +0 -0
  77. {stackport-0.4.5 → stackport-0.4.6}/tests/test_config.py +0 -0
  78. {stackport-0.4.5 → stackport-0.4.6}/tests/test_create_resources.py +0 -0
  79. {stackport-0.4.5 → stackport-0.4.6}/tests/test_dynamodb_routes.py +0 -0
  80. {stackport-0.4.5 → stackport-0.4.6}/tests/test_ec2_routes.py +0 -0
  81. {stackport-0.4.5 → stackport-0.4.6}/tests/test_endpoint_store.py +0 -0
  82. {stackport-0.4.5 → stackport-0.4.6}/tests/test_endpoints.py +0 -0
  83. {stackport-0.4.5 → stackport-0.4.6}/tests/test_iam_routes.py +0 -0
  84. {stackport-0.4.5 → stackport-0.4.6}/tests/test_kms_routes.py +0 -0
  85. {stackport-0.4.5 → stackport-0.4.6}/tests/test_lambda_routes.py +0 -0
  86. {stackport-0.4.5 → stackport-0.4.6}/tests/test_learn_content.py +0 -0
  87. {stackport-0.4.5 → stackport-0.4.6}/tests/test_learn_routes.py +0 -0
  88. {stackport-0.4.5 → stackport-0.4.6}/tests/test_learn_store.py +0 -0
  89. {stackport-0.4.5 → stackport-0.4.6}/tests/test_logs_routes.py +0 -0
  90. {stackport-0.4.5 → stackport-0.4.6}/tests/test_logs_tail.py +0 -0
  91. {stackport-0.4.5 → stackport-0.4.6}/tests/test_monitoring_routes.py +0 -0
  92. {stackport-0.4.5 → stackport-0.4.6}/tests/test_multi_endpoint.py +0 -0
  93. {stackport-0.4.5 → stackport-0.4.6}/tests/test_rds_routes.py +0 -0
  94. {stackport-0.4.5 → stackport-0.4.6}/tests/test_readonly_middleware.py +0 -0
  95. {stackport-0.4.5 → stackport-0.4.6}/tests/test_registries.py +0 -0
  96. {stackport-0.4.5 → stackport-0.4.6}/tests/test_routes.py +0 -0
  97. {stackport-0.4.5 → stackport-0.4.6}/tests/test_s3_routes.py +0 -0
  98. {stackport-0.4.5 → stackport-0.4.6}/tests/test_s3_upload_limit_env.py +0 -0
  99. {stackport-0.4.5 → stackport-0.4.6}/tests/test_secretsmanager_routes.py +0 -0
  100. {stackport-0.4.5 → stackport-0.4.6}/tests/test_sns_routes.py +0 -0
  101. {stackport-0.4.5 → stackport-0.4.6}/tests/test_sqs_routes.py +0 -0
  102. {stackport-0.4.5 → stackport-0.4.6}/tests/test_tags_routes.py +0 -0
  103. {stackport-0.4.5 → stackport-0.4.6}/tests/test_websocket.py +0 -0
  104. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/assets/CloudscapeResourceBrowser-CzwePG-V.css +0 -0
  105. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/assets/CloudscapeShell-BXHVWjDE.css +0 -0
  106. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/assets/index-DE--A2EE.css +0 -0
  107. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/assets/index-DKIdXFX0.css +0 -0
  108. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/assets/index-DNBdeKId.css +0 -0
  109. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/assets/index-DoY0HscW.css +0 -0
  110. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/assets/index-DrkkXAoG.css +0 -0
  111. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/assets/index-Vf0UFiCT.css +0 -0
  112. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/assets/stepfunctions-graph-B6nvU4OB.js +0 -0
  113. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/assets/utils-Cfmwk2UT.js +0 -0
  114. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/acm.svg +0 -0
  115. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/apigateway.svg +0 -0
  116. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/appsync.svg +0 -0
  117. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/athena.svg +0 -0
  118. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/cloudformation.svg +0 -0
  119. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/cloudfront.svg +0 -0
  120. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/cognito-idp.svg +0 -0
  121. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/dynamodb.svg +0 -0
  122. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/ec2.svg +0 -0
  123. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/ecr.svg +0 -0
  124. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/ecs.svg +0 -0
  125. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/elasticache.svg +0 -0
  126. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/elasticfilesystem.svg +0 -0
  127. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/elasticloadbalancing.svg +0 -0
  128. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/elasticmapreduce.svg +0 -0
  129. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/events.svg +0 -0
  130. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/firehose.svg +0 -0
  131. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/glue.svg +0 -0
  132. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/iam.svg +0 -0
  133. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/kinesis.svg +0 -0
  134. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/kms.svg +0 -0
  135. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/lambda.svg +0 -0
  136. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/logs.svg +0 -0
  137. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/monitoring.svg +0 -0
  138. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/rds.svg +0 -0
  139. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/route53.svg +0 -0
  140. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/s3.svg +0 -0
  141. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/secretsmanager.svg +0 -0
  142. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/ses.svg +0 -0
  143. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/sns.svg +0 -0
  144. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/sqs.svg +0 -0
  145. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/ssm.svg +0 -0
  146. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/stepfunctions.svg +0 -0
  147. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/aws-icons/wafv2.svg +0 -0
  148. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/favicon.png +0 -0
  149. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/favicon.svg +0 -0
  150. {stackport-0.4.5 → stackport-0.4.6}/ui/dist/stackport-logo.svg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stackport
3
- Version: 0.4.5
3
+ Version: 0.4.6
4
4
  Summary: Universal AWS resource browser for local emulators
5
5
  Author: Davi Reis Vieira
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "stackport"
3
- version = "0.4.5"
3
+ version = "0.4.6"
4
4
  description = "Universal AWS resource browser for local emulators"
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stackport
3
- Version: 0.4.5
3
+ Version: 0.4.6
4
4
  Summary: Universal AWS resource browser for local emulators
5
5
  Author: Davi Reis Vieira
6
6
  License: MIT
@@ -15,27 +15,27 @@ backend/../ui/dist/favicon.png
15
15
  backend/../ui/dist/favicon.svg
16
16
  backend/../ui/dist/index.html
17
17
  backend/../ui/dist/stackport-logo.svg
18
- backend/../ui/dist/assets/CloudscapeAbout-D8bVx2o1.js
19
- backend/../ui/dist/assets/CloudscapeDashboard-Cb3SVBox.js
20
- backend/../ui/dist/assets/CloudscapeLearn-DhnltSEL.js
21
- backend/../ui/dist/assets/CloudscapeResourceBrowser-BNBaU_zZ.js
18
+ backend/../ui/dist/assets/CloudscapeAbout-xEYYjNc3.js
19
+ backend/../ui/dist/assets/CloudscapeDashboard-dcDZ2KOc.js
20
+ backend/../ui/dist/assets/CloudscapeLearn-urCq-68_.js
22
21
  backend/../ui/dist/assets/CloudscapeResourceBrowser-CzwePG-V.css
23
- backend/../ui/dist/assets/CloudscapeSettings-BMXbMPTT.js
22
+ backend/../ui/dist/assets/CloudscapeResourceBrowser-kEGPuGi-.js
23
+ backend/../ui/dist/assets/CloudscapeSettings-BbsHquP5.js
24
24
  backend/../ui/dist/assets/CloudscapeShell-BXHVWjDE.css
25
- backend/../ui/dist/assets/CloudscapeShell-Dd2hVOGq.js
26
- backend/../ui/dist/assets/StateMachineGraph-gL9KABj0.js
27
- backend/../ui/dist/assets/index-BBLXT2u8.js
28
- backend/../ui/dist/assets/index-BFIBfRr-.js
29
- backend/../ui/dist/assets/index-Blob5IHY.js
30
- backend/../ui/dist/assets/index-CN6POuiI.js
31
- backend/../ui/dist/assets/index-D8EPia5i.js
25
+ backend/../ui/dist/assets/CloudscapeShell-uZ1fljIL.js
26
+ backend/../ui/dist/assets/StateMachineGraph-BUugvvkt.js
27
+ backend/../ui/dist/assets/index-CRIgpz3m.js
28
+ backend/../ui/dist/assets/index-CSPxY-pb.js
29
+ backend/../ui/dist/assets/index-CghKQufp.js
30
+ backend/../ui/dist/assets/index-D1zKGwv5.js
32
31
  backend/../ui/dist/assets/index-DE--A2EE.css
33
32
  backend/../ui/dist/assets/index-DKIdXFX0.css
34
33
  backend/../ui/dist/assets/index-DNBdeKId.css
34
+ backend/../ui/dist/assets/index-DcDSxjm9.js
35
35
  backend/../ui/dist/assets/index-DoY0HscW.css
36
36
  backend/../ui/dist/assets/index-DrkkXAoG.css
37
+ backend/../ui/dist/assets/index-DsTSmMDp.js
37
38
  backend/../ui/dist/assets/index-Vf0UFiCT.css
38
- backend/../ui/dist/assets/index-u1-TTPf4.js
39
39
  backend/../ui/dist/assets/stepfunctions-graph-B6nvU4OB.js
40
40
  backend/../ui/dist/assets/utils-Cfmwk2UT.js
41
41
  backend/../ui/dist/aws-icons/acm.svg
@@ -150,27 +150,27 @@ ui/dist/favicon.png
150
150
  ui/dist/favicon.svg
151
151
  ui/dist/index.html
152
152
  ui/dist/stackport-logo.svg
153
- ui/dist/assets/CloudscapeAbout-D8bVx2o1.js
154
- ui/dist/assets/CloudscapeDashboard-Cb3SVBox.js
155
- ui/dist/assets/CloudscapeLearn-DhnltSEL.js
156
- ui/dist/assets/CloudscapeResourceBrowser-BNBaU_zZ.js
153
+ ui/dist/assets/CloudscapeAbout-xEYYjNc3.js
154
+ ui/dist/assets/CloudscapeDashboard-dcDZ2KOc.js
155
+ ui/dist/assets/CloudscapeLearn-urCq-68_.js
157
156
  ui/dist/assets/CloudscapeResourceBrowser-CzwePG-V.css
158
- ui/dist/assets/CloudscapeSettings-BMXbMPTT.js
157
+ ui/dist/assets/CloudscapeResourceBrowser-kEGPuGi-.js
158
+ ui/dist/assets/CloudscapeSettings-BbsHquP5.js
159
159
  ui/dist/assets/CloudscapeShell-BXHVWjDE.css
160
- ui/dist/assets/CloudscapeShell-Dd2hVOGq.js
161
- ui/dist/assets/StateMachineGraph-gL9KABj0.js
162
- ui/dist/assets/index-BBLXT2u8.js
163
- ui/dist/assets/index-BFIBfRr-.js
164
- ui/dist/assets/index-Blob5IHY.js
165
- ui/dist/assets/index-CN6POuiI.js
166
- ui/dist/assets/index-D8EPia5i.js
160
+ ui/dist/assets/CloudscapeShell-uZ1fljIL.js
161
+ ui/dist/assets/StateMachineGraph-BUugvvkt.js
162
+ ui/dist/assets/index-CRIgpz3m.js
163
+ ui/dist/assets/index-CSPxY-pb.js
164
+ ui/dist/assets/index-CghKQufp.js
165
+ ui/dist/assets/index-D1zKGwv5.js
167
166
  ui/dist/assets/index-DE--A2EE.css
168
167
  ui/dist/assets/index-DKIdXFX0.css
169
168
  ui/dist/assets/index-DNBdeKId.css
169
+ ui/dist/assets/index-DcDSxjm9.js
170
170
  ui/dist/assets/index-DoY0HscW.css
171
171
  ui/dist/assets/index-DrkkXAoG.css
172
+ ui/dist/assets/index-DsTSmMDp.js
172
173
  ui/dist/assets/index-Vf0UFiCT.css
173
- ui/dist/assets/index-u1-TTPf4.js
174
174
  ui/dist/assets/stepfunctions-graph-B6nvU4OB.js
175
175
  ui/dist/assets/utils-Cfmwk2UT.js
176
176
  ui/dist/aws-icons/acm.svg
@@ -1 +1 @@
1
- import{b as j,r as m,e1 as f,u as y,j as e,S as o,B as p,A as b,e as i,d as u,L as v}from"./index-BFIBfRr-.js";import{C as S,H as a,K as d,B as h}from"./CloudscapeShell-Dd2hVOGq.js";import{C}from"./index-u1-TTPf4.js";import{f as g}from"./utils-Cfmwk2UT.js";const k=[{label:"GitHub Repository",url:"https://github.com/DaviReisVieira/stackport"},{label:"Report an Issue",url:"https://github.com/DaviReisVieira/stackport/issues"}];function r(t,n){return e.jsxs("div",{children:[e.jsx(u,{variant:"awsui-key-label",children:t}),e.jsx(u,{fontSize:"body-s",children:n})]},t)}function z(){const{activeEndpoint:t}=j(),n=m.useCallback(()=>f(t),[t]),{data:s,error:c,refresh:x}=y(n,1e4);return e.jsx(S,{activeHref:"/about",children:e.jsxs(o,{size:"l",children:[e.jsx(a,{variant:"h1",description:"System information and project details",actions:e.jsx(p,{iconName:"refresh",onClick:()=>x(),ariaLabel:"Refresh system info"}),children:"About"}),c&&!s&&e.jsx(b,{type:"error",header:"Failed to load system info",action:e.jsx(p,{onClick:()=>x(),children:"Retry"}),children:c}),!s&&!c&&e.jsx(i,{type:"loading",children:"Loading system info"}),s&&e.jsxs(C,{columns:3,children:[e.jsx(d,{header:e.jsx(a,{variant:"h3",children:"Project"}),children:e.jsxs(o,{size:"s",children:[r("Name","StackPort"),r("Version",e.jsx(h,{color:"blue",children:s.version})),r("License","MIT"),e.jsx(u,{color:"text-body-secondary",fontSize:"body-s",children:"Universal AWS resource browser for local emulators"})]})}),e.jsx(d,{header:e.jsx(a,{variant:"h3",children:"Connection"}),children:e.jsxs(o,{size:"s",children:[r("Mode",s.connection_type==="local"?e.jsx(h,{color:"grey",children:"Local Emulator"}):e.jsx(h,{color:"severity-medium",children:"Real AWS"})),r("Endpoint",s.endpoint_url??"AWS (default)"),r("Region",s.region),r("Services",String(s.services_count)),r("Writes",s.writes_enabled?e.jsx(i,{type:"success",children:"Enabled"}):e.jsx(i,{type:"stopped",children:"Disabled"})),r("Uptime",g(s.uptime_seconds)),r("Status",s.status==="ok"?e.jsx(i,{type:"success",children:"ok"}):e.jsx(i,{type:"error",children:s.status}))]})}),e.jsx(d,{header:e.jsx(a,{variant:"h3",children:"Links"}),children:e.jsx(o,{size:"s",children:k.map(l=>e.jsx(v,{href:l.url,external:!0,children:l.label},l.url))})})]})]})})}export{z as default};
1
+ import{b as j,r as m,e1 as f,u as y,j as e,S as o,B as p,A as b,e as i,d as u,L as v}from"./index-CSPxY-pb.js";import{C as S,H as a,K as d,B as h}from"./CloudscapeShell-uZ1fljIL.js";import{C}from"./index-D1zKGwv5.js";import{f as g}from"./utils-Cfmwk2UT.js";const k=[{label:"GitHub Repository",url:"https://github.com/DaviReisVieira/stackport"},{label:"Report an Issue",url:"https://github.com/DaviReisVieira/stackport/issues"}];function r(t,n){return e.jsxs("div",{children:[e.jsx(u,{variant:"awsui-key-label",children:t}),e.jsx(u,{fontSize:"body-s",children:n})]},t)}function z(){const{activeEndpoint:t}=j(),n=m.useCallback(()=>f(t),[t]),{data:s,error:c,refresh:x}=y(n,1e4);return e.jsx(S,{activeHref:"/about",children:e.jsxs(o,{size:"l",children:[e.jsx(a,{variant:"h1",description:"System information and project details",actions:e.jsx(p,{iconName:"refresh",onClick:()=>x(),ariaLabel:"Refresh system info"}),children:"About"}),c&&!s&&e.jsx(b,{type:"error",header:"Failed to load system info",action:e.jsx(p,{onClick:()=>x(),children:"Retry"}),children:c}),!s&&!c&&e.jsx(i,{type:"loading",children:"Loading system info"}),s&&e.jsxs(C,{columns:3,children:[e.jsx(d,{header:e.jsx(a,{variant:"h3",children:"Project"}),children:e.jsxs(o,{size:"s",children:[r("Name","StackPort"),r("Version",e.jsx(h,{color:"blue",children:s.version})),r("License","MIT"),e.jsx(u,{color:"text-body-secondary",fontSize:"body-s",children:"Universal AWS resource browser for local emulators"})]})}),e.jsx(d,{header:e.jsx(a,{variant:"h3",children:"Connection"}),children:e.jsxs(o,{size:"s",children:[r("Mode",s.connection_type==="local"?e.jsx(h,{color:"grey",children:"Local Emulator"}):e.jsx(h,{color:"severity-medium",children:"Real AWS"})),r("Endpoint",s.endpoint_url??"AWS (default)"),r("Region",s.region),r("Services",String(s.services_count)),r("Writes",s.writes_enabled?e.jsx(i,{type:"success",children:"Enabled"}):e.jsx(i,{type:"stopped",children:"Disabled"})),r("Uptime",g(s.uptime_seconds)),r("Status",s.status==="ok"?e.jsx(i,{type:"success",children:"ok"}):e.jsx(i,{type:"error",children:s.status}))]})}),e.jsx(d,{header:e.jsx(a,{variant:"h3",children:"Links"}),children:e.jsx(o,{size:"s",children:k.map(l=>e.jsx(v,{href:l.url,external:!0,children:l.label},l.url))})})]})]})})}export{z as default};
@@ -1 +1 @@
1
- import{r as a,u as L,a as W,b as O,c as A,f as D,j as t,S as $,A as E,B as R,d,e as F,L as M}from"./index-BFIBfRr-.js";import{u as P,a as H,H as B,C as U,B as _,g as V}from"./CloudscapeShell-Dd2hVOGq.js";import{S as J,C as G,T as K}from"./index-BBLXT2u8.js";import{C as q}from"./index-u1-TTPf4.js";import{C as Q}from"./index-Blob5IHY.js";import{T as X}from"./index-D8EPia5i.js";import{f as Y}from"./utils-Cfmwk2UT.js";function Z({fallbackFetcher:n,fallbackInterval:r=5e3,messageType:i,endpoint:x}){const[s,g]=a.useState(null),[y,j]=a.useState(!1),[p,C]=a.useState(!1),h=a.useRef(null),c=a.useRef(0),b=a.useRef(null),l=a.useRef(),k=3;a.useEffect(()=>{let v=!1;c.current=0;function S(){var o;if(v||((o=h.current)==null?void 0:o.readyState)===WebSocket.OPEN)return;const m=window.location.protocol==="https:"?"wss:":"ws:",e=new WebSocket(`${m}//${window.location.host}/ws`);h.current=e,e.onopen=()=>{if(v){e.close();return}j(!0),c.current=0,e.send(JSON.stringify({type:"subscribe",services:["all"],endpoint:x??void 0}))},e.onmessage=w=>{try{const f=JSON.parse(w.data);f.type===i&&f.data&&g(f.data)}catch{}},e.onclose=()=>{if(j(!1),h.current=null,!v)if(c.current++,c.current>=k)C(!0);else{const w=Math.min(1e3*Math.pow(2,c.current),3e4);b.current=setTimeout(()=>{var f;return(f=l.current)==null?void 0:f.call(l)},w)}},e.onerror=()=>{e.close()}}return l.current=S,S(),()=>{var m;v=!0,b.current&&clearTimeout(b.current),(m=h.current)==null||m.close(),g(null),C(!1)}},[i,x]);const u=L(n,p?r:void 0),T=s??u.data,N=!T&&u.loading;return{data:T,loading:N,error:p?u.error:null,connected:y,refresh:u.refresh}}function ee(){return localStorage.getItem("stackport:view-mode")==="list"?"list":"grid"}function z(n,r){const i=V(n.name);return t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(i,{className:"h-5 w-5 flex-shrink-0"}),t.jsx(M,{fontSize:"heading-m",href:`/resources/${n.name}`,onFollow:x=>{x.preventDefault(),r(n.name)},children:n.name})]})}function I(n){return n.total===0?t.jsx(d,{color:"text-status-inactive",children:"No resources"}):t.jsx($,{direction:"horizontal",size:"xs",children:Object.entries(n.resources).filter(([,r])=>r>0).map(([r,i])=>t.jsxs(_,{color:"grey",children:[r,": ",i]},r))})}function ce(){const n=W(),{activeEndpoint:r}=O(),{data:i}=A(),x=a.useCallback(()=>D(r),[r]),{data:s,loading:g,error:y,connected:j,refresh:p}=Z({fallbackFetcher:x,fallbackInterval:5e3,messageType:"stats",endpoint:r}),{toggleFavorite:C,isFavorite:h}=P(),[c,b]=a.useState(""),[l,k]=a.useState(ee);a.useEffect(()=>{localStorage.setItem("stackport:view-mode",l)},[l]),H([{key:"r",handler:()=>p()},{key:"v",handler:()=>k(e=>e==="grid"?"list":"grid")}]);const u=a.useMemo(()=>s?Object.entries(s.services).map(([e,o])=>({name:e,status:o.status,resources:o.resources,total:Object.values(o.resources).reduce((w,f)=>w+f,0),favorite:h(e)})).filter(e=>e.name.toLowerCase().includes(c.toLowerCase())).sort((e,o)=>Number(o.favorite)-Number(e.favorite)||o.total-e.total||e.name.localeCompare(o.name)):[],[s,c,h]),T=s?Object.values(s.services).filter(e=>e.status==="available").length:0,N=a.useCallback(e=>n(`/resources/${e}`),[n]),v=e=>t.jsx(R,{variant:"inline-icon",iconName:e.favorite?"star-filled":"star",ariaLabel:e.favorite?`Remove ${e.name} from favorites`:`Add ${e.name} to favorites`,onClick:()=>C(e.name)}),S=t.jsx(B,{variant:"h2",counter:s?`(${u.length})`:void 0,actions:t.jsx(J,{selectedId:l,onChange:({detail:e})=>k(e.selectedId),label:"View mode",options:[{id:"grid",text:"Grid"},{id:"list",text:"List"}]}),children:"Services"}),m=t.jsx(K,{filteringText:c,filteringPlaceholder:"Find a service",onChange:({detail:e})=>b(e.filteringText)});return t.jsx(U,{activeHref:"/",children:t.jsx(Q,{header:t.jsx(B,{variant:"h1",description:r?`Connected to ${r}`:i!=null&&i.endpoint_url?`Connected to ${i.endpoint_url}`:"Using the default endpoint",actions:t.jsxs($,{direction:"horizontal",size:"xs",children:[t.jsx(F,{type:j?"success":"in-progress",children:j?"Live":"Polling"}),t.jsx(R,{iconName:"refresh",onClick:()=>p(),loading:g,children:"Refresh"})]}),children:"Dashboard"}),children:t.jsxs($,{size:"l",children:[!s&&y&&t.jsx(E,{type:"error",header:"Could not reach the endpoint",action:t.jsx(R,{onClick:()=>p(),children:"Retry"}),children:y}),t.jsxs(q,{columns:3,variant:"text-grid",children:[t.jsxs("div",{children:[t.jsx(d,{variant:"awsui-key-label",children:"Services available"}),t.jsx(d,{fontSize:"display-l",fontWeight:"bold",children:s?`${T}/${Object.keys(s.services).length}`:"—"})]}),t.jsxs("div",{children:[t.jsx(d,{variant:"awsui-key-label",children:"Total resources"}),t.jsx(d,{fontSize:"display-l",fontWeight:"bold",children:s?s.total_resources:"—"})]}),t.jsxs("div",{children:[t.jsx(d,{variant:"awsui-key-label",children:"Uptime"}),t.jsx(d,{fontSize:"display-l",fontWeight:"bold",children:s?Y(s.uptime_seconds):"—"})]})]}),l==="grid"?t.jsx(G,{items:u,loading:g&&!s,loadingText:"Probing services",trackBy:"name",cardsPerRow:[{cards:1},{minWidth:500,cards:2},{minWidth:900,cards:3}],header:S,filter:m,cardDefinition:{header:e=>t.jsxs("div",{className:"flex items-center justify-between gap-2",children:[z(e,N),v(e)]}),sections:[{id:"status",content:e=>t.jsx(F,{type:e.status==="available"?"success":"error",children:e.status==="available"?"Available":"Unavailable"})},{id:"resources",header:"Resources",content:e=>I(e)}]},empty:t.jsx(d,{textAlign:"center",children:"No services match the filter"})}):t.jsx(X,{items:u,loading:g&&!s,loadingText:"Probing services",trackBy:"name",header:S,filter:m,variant:"container",columnDefinitions:[{id:"favorite",header:"",width:60,cell:e=>v(e)},{id:"service",header:"Service",cell:e=>z(e,N),sortingField:"name"},{id:"status",header:"Status",cell:e=>t.jsx(F,{type:e.status==="available"?"success":"error",children:e.status==="available"?"Available":"Unavailable"})},{id:"resources",header:"Resources",cell:e=>I(e)},{id:"total",header:"Total",width:90,cell:e=>e.total}],empty:t.jsx(d,{textAlign:"center",children:"No services match the filter"})})]})})})}export{ce as default};
1
+ import{r as a,u as L,a as W,b as O,c as A,f as D,j as t,S as $,A as E,B as R,d,e as F,L as M}from"./index-CSPxY-pb.js";import{u as P,a as H,H as B,C as U,B as _,g as V}from"./CloudscapeShell-uZ1fljIL.js";import{S as J,C as G,T as K}from"./index-DcDSxjm9.js";import{C as q}from"./index-D1zKGwv5.js";import{C as Q}from"./index-CRIgpz3m.js";import{T as X}from"./index-CghKQufp.js";import{f as Y}from"./utils-Cfmwk2UT.js";function Z({fallbackFetcher:n,fallbackInterval:r=5e3,messageType:i,endpoint:x}){const[s,g]=a.useState(null),[y,j]=a.useState(!1),[p,C]=a.useState(!1),h=a.useRef(null),c=a.useRef(0),b=a.useRef(null),l=a.useRef(),k=3;a.useEffect(()=>{let v=!1;c.current=0;function S(){var o;if(v||((o=h.current)==null?void 0:o.readyState)===WebSocket.OPEN)return;const m=window.location.protocol==="https:"?"wss:":"ws:",e=new WebSocket(`${m}//${window.location.host}/ws`);h.current=e,e.onopen=()=>{if(v){e.close();return}j(!0),c.current=0,e.send(JSON.stringify({type:"subscribe",services:["all"],endpoint:x??void 0}))},e.onmessage=w=>{try{const f=JSON.parse(w.data);f.type===i&&f.data&&g(f.data)}catch{}},e.onclose=()=>{if(j(!1),h.current=null,!v)if(c.current++,c.current>=k)C(!0);else{const w=Math.min(1e3*Math.pow(2,c.current),3e4);b.current=setTimeout(()=>{var f;return(f=l.current)==null?void 0:f.call(l)},w)}},e.onerror=()=>{e.close()}}return l.current=S,S(),()=>{var m;v=!0,b.current&&clearTimeout(b.current),(m=h.current)==null||m.close(),g(null),C(!1)}},[i,x]);const u=L(n,p?r:void 0),T=s??u.data,N=!T&&u.loading;return{data:T,loading:N,error:p?u.error:null,connected:y,refresh:u.refresh}}function ee(){return localStorage.getItem("stackport:view-mode")==="list"?"list":"grid"}function z(n,r){const i=V(n.name);return t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(i,{className:"h-5 w-5 flex-shrink-0"}),t.jsx(M,{fontSize:"heading-m",href:`/resources/${n.name}`,onFollow:x=>{x.preventDefault(),r(n.name)},children:n.name})]})}function I(n){return n.total===0?t.jsx(d,{color:"text-status-inactive",children:"No resources"}):t.jsx($,{direction:"horizontal",size:"xs",children:Object.entries(n.resources).filter(([,r])=>r>0).map(([r,i])=>t.jsxs(_,{color:"grey",children:[r,": ",i]},r))})}function ce(){const n=W(),{activeEndpoint:r}=O(),{data:i}=A(),x=a.useCallback(()=>D(r),[r]),{data:s,loading:g,error:y,connected:j,refresh:p}=Z({fallbackFetcher:x,fallbackInterval:5e3,messageType:"stats",endpoint:r}),{toggleFavorite:C,isFavorite:h}=P(),[c,b]=a.useState(""),[l,k]=a.useState(ee);a.useEffect(()=>{localStorage.setItem("stackport:view-mode",l)},[l]),H([{key:"r",handler:()=>p()},{key:"v",handler:()=>k(e=>e==="grid"?"list":"grid")}]);const u=a.useMemo(()=>s?Object.entries(s.services).map(([e,o])=>({name:e,status:o.status,resources:o.resources,total:Object.values(o.resources).reduce((w,f)=>w+f,0),favorite:h(e)})).filter(e=>e.name.toLowerCase().includes(c.toLowerCase())).sort((e,o)=>Number(o.favorite)-Number(e.favorite)||o.total-e.total||e.name.localeCompare(o.name)):[],[s,c,h]),T=s?Object.values(s.services).filter(e=>e.status==="available").length:0,N=a.useCallback(e=>n(`/resources/${e}`),[n]),v=e=>t.jsx(R,{variant:"inline-icon",iconName:e.favorite?"star-filled":"star",ariaLabel:e.favorite?`Remove ${e.name} from favorites`:`Add ${e.name} to favorites`,onClick:()=>C(e.name)}),S=t.jsx(B,{variant:"h2",counter:s?`(${u.length})`:void 0,actions:t.jsx(J,{selectedId:l,onChange:({detail:e})=>k(e.selectedId),label:"View mode",options:[{id:"grid",text:"Grid"},{id:"list",text:"List"}]}),children:"Services"}),m=t.jsx(K,{filteringText:c,filteringPlaceholder:"Find a service",onChange:({detail:e})=>b(e.filteringText)});return t.jsx(U,{activeHref:"/",children:t.jsx(Q,{header:t.jsx(B,{variant:"h1",description:r?`Connected to ${r}`:i!=null&&i.endpoint_url?`Connected to ${i.endpoint_url}`:"Using the default endpoint",actions:t.jsxs($,{direction:"horizontal",size:"xs",children:[t.jsx(F,{type:j?"success":"in-progress",children:j?"Live":"Polling"}),t.jsx(R,{iconName:"refresh",onClick:()=>p(),loading:g,children:"Refresh"})]}),children:"Dashboard"}),children:t.jsxs($,{size:"l",children:[!s&&y&&t.jsx(E,{type:"error",header:"Could not reach the endpoint",action:t.jsx(R,{onClick:()=>p(),children:"Retry"}),children:y}),t.jsxs(q,{columns:3,variant:"text-grid",children:[t.jsxs("div",{children:[t.jsx(d,{variant:"awsui-key-label",children:"Services available"}),t.jsx(d,{fontSize:"display-l",fontWeight:"bold",children:s?`${T}/${Object.keys(s.services).length}`:"—"})]}),t.jsxs("div",{children:[t.jsx(d,{variant:"awsui-key-label",children:"Total resources"}),t.jsx(d,{fontSize:"display-l",fontWeight:"bold",children:s?s.total_resources:"—"})]}),t.jsxs("div",{children:[t.jsx(d,{variant:"awsui-key-label",children:"Uptime"}),t.jsx(d,{fontSize:"display-l",fontWeight:"bold",children:s?Y(s.uptime_seconds):"—"})]})]}),l==="grid"?t.jsx(G,{items:u,loading:g&&!s,loadingText:"Probing services",trackBy:"name",cardsPerRow:[{cards:1},{minWidth:500,cards:2},{minWidth:900,cards:3}],header:S,filter:m,cardDefinition:{header:e=>t.jsxs("div",{className:"flex items-center justify-between gap-2",children:[z(e,N),v(e)]}),sections:[{id:"status",content:e=>t.jsx(F,{type:e.status==="available"?"success":"error",children:e.status==="available"?"Available":"Unavailable"})},{id:"resources",header:"Resources",content:e=>I(e)}]},empty:t.jsx(d,{textAlign:"center",children:"No services match the filter"})}):t.jsx(X,{items:u,loading:g&&!s,loadingText:"Probing services",trackBy:"name",header:S,filter:m,variant:"container",columnDefinitions:[{id:"favorite",header:"",width:60,cell:e=>v(e)},{id:"service",header:"Service",cell:e=>z(e,N),sortingField:"name"},{id:"status",header:"Status",cell:e=>t.jsx(F,{type:e.status==="available"?"success":"error",children:e.status==="available"?"Available":"Unavailable"})},{id:"resources",header:"Resources",cell:e=>I(e)},{id:"total",header:"Total",width:90,cell:e=>e.total}],empty:t.jsx(d,{textAlign:"center",children:"No services match the filter"})})]})})})}export{ce as default};
@@ -1 +1 @@
1
- import{e2 as S,c as v,r as u,j as e,S as c,A as x,d as a,B as d}from"./index-BFIBfRr-.js";import{C as L}from"./index-u1-TTPf4.js";import{C as b,ab as k,K as w,U as R,H as p,ac as A,M as z}from"./CloudscapeShell-Dd2hVOGq.js";import{C as B}from"./index-Blob5IHY.js";function T(){const{enabled:j,loading:f,trail:s,completed:y,resetTrail:g}=S(),{data:n}=v(),[m,r]=u.useState(!1),[C,h]=u.useState(!1),o=(s==null?void 0:s.lessons.reduce((t,l)=>t+l.steps.length,0))??0,i=Object.values(y).reduce((t,l)=>t+l.length,0);return e.jsxs(b,{activeHref:"/learn",children:[e.jsx(B,{header:e.jsx(p,{variant:"h1",description:"Short hands-on lessons against your own emulator. You do the work in the console or the CLI, and StackPort checks the real resource state, so a step only turns green when the thing genuinely exists.",actions:i>0&&e.jsx(d,{onClick:()=>r(!0),"data-testid":"learn-reset",children:"Reset progress"}),children:"Learn"}),children:e.jsxs(c,{size:"l",children:[(n==null?void 0:n.connection_type)==="aws"&&e.jsx(x,{type:"warning",header:"Lessons need a local emulator",children:"You are connected to real AWS. Lessons create and delete resources, so they stay disabled until you switch to a local endpoint."}),!j&&e.jsxs(x,{type:"info",header:"Learn is turned off",children:["Start StackPort with ",e.jsx(a,{variant:"code",children:"STACKPORT_LEARN=true"})," to use the lessons."]}),f&&!s&&e.jsx(a,{textAlign:"center",padding:"xxl",children:e.jsx(k,{size:"large"})}),s&&e.jsxs(e.Fragment,{children:[e.jsx(w,{header:e.jsx(p,{variant:"h2",children:s.title}),children:e.jsxs(L,{columns:2,variant:"text-grid",children:[e.jsx(a,{variant:"p",color:"text-body-secondary",children:s.description}),e.jsx(R,{value:o>0?i/o*100:0,additionalInfo:`${i} of ${o} steps done`,label:"Your progress"})]})}),e.jsx(c,{size:"l",children:s.lessons.map(t=>e.jsx(A,{lesson:t},t.id))}),e.jsx(a,{variant:"small",color:"text-body-secondary",children:"More lessons are on the way: queues, fan-out, logs and metrics, and a table you query rather than scan."})]})]})}),e.jsx(z,{visible:m,onDismiss:()=>r(!1),header:"Reset your progress?",footer:e.jsx(a,{float:"right",children:e.jsxs(c,{size:"xs",direction:"horizontal",children:[e.jsx(d,{variant:"link",onClick:()=>r(!1),children:"Cancel"}),e.jsx(d,{variant:"primary",loading:C,onClick:async()=>{h(!0);try{await g(),r(!1)}finally{h(!1)}},"data-testid":"learn-reset-confirm",children:"Reset progress"})]})}),children:"Every step goes back to not done, and the lesson picks fresh resource names. Nothing you created in your emulator is deleted."})]})}export{T as default};
1
+ import{e2 as S,c as v,r as u,j as e,S as c,A as x,d as a,B as d}from"./index-CSPxY-pb.js";import{C as L}from"./index-D1zKGwv5.js";import{C as b,ab as k,K as w,U as R,H as p,ac as A,M as z}from"./CloudscapeShell-uZ1fljIL.js";import{C as B}from"./index-CRIgpz3m.js";function T(){const{enabled:j,loading:f,trail:s,completed:y,resetTrail:g}=S(),{data:n}=v(),[m,r]=u.useState(!1),[C,h]=u.useState(!1),o=(s==null?void 0:s.lessons.reduce((t,l)=>t+l.steps.length,0))??0,i=Object.values(y).reduce((t,l)=>t+l.length,0);return e.jsxs(b,{activeHref:"/learn",children:[e.jsx(B,{header:e.jsx(p,{variant:"h1",description:"Short hands-on lessons against your own emulator. You do the work in the console or the CLI, and StackPort checks the real resource state, so a step only turns green when the thing genuinely exists.",actions:i>0&&e.jsx(d,{onClick:()=>r(!0),"data-testid":"learn-reset",children:"Reset progress"}),children:"Learn"}),children:e.jsxs(c,{size:"l",children:[(n==null?void 0:n.connection_type)==="aws"&&e.jsx(x,{type:"warning",header:"Lessons need a local emulator",children:"You are connected to real AWS. Lessons create and delete resources, so they stay disabled until you switch to a local endpoint."}),!j&&e.jsxs(x,{type:"info",header:"Learn is turned off",children:["Start StackPort with ",e.jsx(a,{variant:"code",children:"STACKPORT_LEARN=true"})," to use the lessons."]}),f&&!s&&e.jsx(a,{textAlign:"center",padding:"xxl",children:e.jsx(k,{size:"large"})}),s&&e.jsxs(e.Fragment,{children:[e.jsx(w,{header:e.jsx(p,{variant:"h2",children:s.title}),children:e.jsxs(L,{columns:2,variant:"text-grid",children:[e.jsx(a,{variant:"p",color:"text-body-secondary",children:s.description}),e.jsx(R,{value:o>0?i/o*100:0,additionalInfo:`${i} of ${o} steps done`,label:"Your progress"})]})}),e.jsx(c,{size:"l",children:s.lessons.map(t=>e.jsx(A,{lesson:t},t.id))}),e.jsx(a,{variant:"small",color:"text-body-secondary",children:"More lessons are on the way: queues, fan-out, logs and metrics, and a table you query rather than scan."})]})]})}),e.jsx(z,{visible:m,onDismiss:()=>r(!1),header:"Reset your progress?",footer:e.jsx(a,{float:"right",children:e.jsxs(c,{size:"xs",direction:"horizontal",children:[e.jsx(d,{variant:"link",onClick:()=>r(!1),children:"Cancel"}),e.jsx(d,{variant:"primary",loading:C,onClick:async()=>{h(!0);try{await g(),r(!1)}finally{h(!1)}},"data-testid":"learn-reset-confirm",children:"Reset progress"})]})}),children:"Every step goes back to not done, and the lesson picks fresh resource names. Nothing you created in your emulator is deleted."})]})}export{T as default};