rails_mini_profiler 0

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 (146) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +20 -0
  3. data/README.md +302 -0
  4. data/app/assets/config/rails_mini_profiler_manifest.js +1 -0
  5. data/app/assets/javascripts/rails_mini_profiler.js +15 -0
  6. data/app/assets/stylesheets/rails_mini_profiler/application.css +16 -0
  7. data/app/controllers/rails_mini_profiler/application_controller.rb +33 -0
  8. data/app/controllers/rails_mini_profiler/flamegraphs_controller.rb +23 -0
  9. data/app/controllers/rails_mini_profiler/profiled_requests_controller.rb +68 -0
  10. data/app/helpers/rails_mini_profiler/application_helper.rb +23 -0
  11. data/app/helpers/rails_mini_profiler/profiled_requests_helper.rb +16 -0
  12. data/app/javascript/images/bookmark.svg +10 -0
  13. data/app/javascript/images/chart.svg +12 -0
  14. data/app/javascript/images/check.svg +3 -0
  15. data/app/javascript/images/chevron.svg +3 -0
  16. data/app/javascript/images/delete.svg +9 -0
  17. data/app/javascript/images/filter.svg +1 -0
  18. data/app/javascript/images/graph.svg +11 -0
  19. data/app/javascript/images/logo.svg +18 -0
  20. data/app/javascript/images/logo_variant.svg +32 -0
  21. data/app/javascript/images/search.svg +9 -0
  22. data/app/javascript/images/setting.svg +10 -0
  23. data/app/javascript/images/show.svg +11 -0
  24. data/app/javascript/js/checklist_controller.js +48 -0
  25. data/app/javascript/js/enable_controller.js +24 -0
  26. data/app/javascript/js/filter_controller.js +44 -0
  27. data/app/javascript/js/search_controller.js +18 -0
  28. data/app/javascript/js/select_controller.js +47 -0
  29. data/app/javascript/packs/rails-mini-profiler.js +88 -0
  30. data/app/javascript/stylesheets/components/page_header/page_header.scss +3 -0
  31. data/app/javascript/stylesheets/components/pagination.scss +55 -0
  32. data/app/javascript/stylesheets/components/profiled_request_table/placeholder.scss +33 -0
  33. data/app/javascript/stylesheets/components/profiled_request_table/profiled_request_table.scss +179 -0
  34. data/app/javascript/stylesheets/flamegraph.scss +10 -0
  35. data/app/javascript/stylesheets/flashes.scss +15 -0
  36. data/app/javascript/stylesheets/navbar.scss +44 -0
  37. data/app/javascript/stylesheets/profiled_requests.scss +89 -0
  38. data/app/javascript/stylesheets/rails-mini-profiler.scss +205 -0
  39. data/app/javascript/stylesheets/traces.scss +82 -0
  40. data/app/models/rails_mini_profiler/application_record.rb +17 -0
  41. data/app/models/rails_mini_profiler/controller_trace.rb +37 -0
  42. data/app/models/rails_mini_profiler/flamegraph.rb +37 -0
  43. data/app/models/rails_mini_profiler/instantiation_trace.rb +37 -0
  44. data/app/models/rails_mini_profiler/profiled_request.rb +65 -0
  45. data/app/models/rails_mini_profiler/render_partial_trace.rb +37 -0
  46. data/app/models/rails_mini_profiler/render_template_trace.rb +37 -0
  47. data/app/models/rails_mini_profiler/rmp_trace.rb +35 -0
  48. data/app/models/rails_mini_profiler/sequel_trace.rb +37 -0
  49. data/app/models/rails_mini_profiler/trace.rb +46 -0
  50. data/app/presenters/rails_mini_profiler/base_presenter.rb +25 -0
  51. data/app/presenters/rails_mini_profiler/controller_trace_presenter.rb +18 -0
  52. data/app/presenters/rails_mini_profiler/instantiation_trace_presenter.rb +14 -0
  53. data/app/presenters/rails_mini_profiler/profiled_request_presenter.rb +38 -0
  54. data/app/presenters/rails_mini_profiler/render_partial_trace_presenter.rb +11 -0
  55. data/app/presenters/rails_mini_profiler/render_template_trace_presenter.rb +15 -0
  56. data/app/presenters/rails_mini_profiler/rmp_trace_presenter.rb +9 -0
  57. data/app/presenters/rails_mini_profiler/sequel_trace_presenter.rb +69 -0
  58. data/app/presenters/rails_mini_profiler/trace_presenter.rb +61 -0
  59. data/app/search/rails_mini_profiler/base_search.rb +67 -0
  60. data/app/search/rails_mini_profiler/profiled_request_search.rb +34 -0
  61. data/app/views/layouts/rails_mini_profiler/application.html.erb +15 -0
  62. data/app/views/layouts/rails_mini_profiler/flamegraph.html.erb +11 -0
  63. data/app/views/models/_flamegraph.json.jb +3 -0
  64. data/app/views/models/_profiled_request.jb +3 -0
  65. data/app/views/models/_trace.jb +3 -0
  66. data/app/views/rails_mini_profiler/badge.html.erb +37 -0
  67. data/app/views/rails_mini_profiler/flamegraphs/show.html.erb +13 -0
  68. data/app/views/rails_mini_profiler/flamegraphs/show.json.jb +3 -0
  69. data/app/views/rails_mini_profiler/profiled_requests/index.html.erb +9 -0
  70. data/app/views/rails_mini_profiler/profiled_requests/index.json.jb +3 -0
  71. data/app/views/rails_mini_profiler/profiled_requests/shared/_trace.html.erb +40 -0
  72. data/app/views/rails_mini_profiler/profiled_requests/shared/header/_header.erb +20 -0
  73. data/app/views/rails_mini_profiler/profiled_requests/shared/table/_placeholder.erb +12 -0
  74. data/app/views/rails_mini_profiler/profiled_requests/shared/table/_table.erb +14 -0
  75. data/app/views/rails_mini_profiler/profiled_requests/shared/table/_table_head.erb +125 -0
  76. data/app/views/rails_mini_profiler/profiled_requests/shared/table/_table_row.erb +21 -0
  77. data/app/views/rails_mini_profiler/profiled_requests/show.html.erb +40 -0
  78. data/app/views/rails_mini_profiler/profiled_requests/show.json.jb +5 -0
  79. data/app/views/rails_mini_profiler/shared/_flashes.html.erb +8 -0
  80. data/app/views/rails_mini_profiler/shared/_head.erb +13 -0
  81. data/app/views/rails_mini_profiler/shared/_navbar.html.erb +15 -0
  82. data/config/routes.rb +11 -0
  83. data/db/migrate/20210621185018_create_rmp.rb +46 -0
  84. data/lib/generators/rails_mini_profiler/USAGE +2 -0
  85. data/lib/generators/rails_mini_profiler/install_generator.rb +40 -0
  86. data/lib/generators/rails_mini_profiler/templates/rails_mini_profiler.js.erb +13 -0
  87. data/lib/generators/rails_mini_profiler/templates/rails_mini_profiler.rb.erb +29 -0
  88. data/lib/rails_mini_profiler/badge.rb +84 -0
  89. data/lib/rails_mini_profiler/configuration/storage.rb +47 -0
  90. data/lib/rails_mini_profiler/configuration/user_interface.rb +48 -0
  91. data/lib/rails_mini_profiler/configuration.rb +65 -0
  92. data/lib/rails_mini_profiler/engine.rb +34 -0
  93. data/lib/rails_mini_profiler/flamegraph_guard.rb +47 -0
  94. data/lib/rails_mini_profiler/guard.rb +57 -0
  95. data/lib/rails_mini_profiler/logger.rb +25 -0
  96. data/lib/rails_mini_profiler/middleware.rb +74 -0
  97. data/lib/rails_mini_profiler/models/base_model.rb +23 -0
  98. data/lib/rails_mini_profiler/redirect.rb +33 -0
  99. data/lib/rails_mini_profiler/request_context.rb +86 -0
  100. data/lib/rails_mini_profiler/request_wrapper.rb +69 -0
  101. data/lib/rails_mini_profiler/response_wrapper.rb +32 -0
  102. data/lib/rails_mini_profiler/tracing/controller_tracer.rb +15 -0
  103. data/lib/rails_mini_profiler/tracing/null_trace.rb +7 -0
  104. data/lib/rails_mini_profiler/tracing/sequel_tracer.rb +37 -0
  105. data/lib/rails_mini_profiler/tracing/sequel_tracker.rb +37 -0
  106. data/lib/rails_mini_profiler/tracing/subscriptions.rb +34 -0
  107. data/lib/rails_mini_profiler/tracing/trace.rb +45 -0
  108. data/lib/rails_mini_profiler/tracing/trace_factory.rb +37 -0
  109. data/lib/rails_mini_profiler/tracing/tracer.rb +31 -0
  110. data/lib/rails_mini_profiler/tracing/view_tracer.rb +12 -0
  111. data/lib/rails_mini_profiler/tracing.rb +11 -0
  112. data/lib/rails_mini_profiler/user.rb +40 -0
  113. data/lib/rails_mini_profiler/version.rb +5 -0
  114. data/lib/rails_mini_profiler.rb +79 -0
  115. data/lib/tasks/rails_mini_profiler_tasks.rake +8 -0
  116. data/public/rails_mini_profiler/speedscope/LICENSE +21 -0
  117. data/public/rails_mini_profiler/speedscope/demangle-cpp.1768f4cc.js +4 -0
  118. data/public/rails_mini_profiler/speedscope/demangle-cpp.1768f4cc.js.map +1 -0
  119. data/public/rails_mini_profiler/speedscope/favicon-16x16.f74b3187.png +0 -0
  120. data/public/rails_mini_profiler/speedscope/favicon-32x32.bc503437.png +0 -0
  121. data/public/rails_mini_profiler/speedscope/file-format-schema.json +324 -0
  122. data/public/rails_mini_profiler/speedscope/import.e3a73ef4.js +117 -0
  123. data/public/rails_mini_profiler/speedscope/import.e3a73ef4.js.map +1 -0
  124. data/public/rails_mini_profiler/speedscope/index.html +2 -0
  125. data/public/rails_mini_profiler/speedscope/release.txt +3 -0
  126. data/public/rails_mini_profiler/speedscope/reset.8c46b7a1.css +2 -0
  127. data/public/rails_mini_profiler/speedscope/reset.8c46b7a1.css.map +1 -0
  128. data/public/rails_mini_profiler/speedscope/source-map.438fa06b.js +24 -0
  129. data/public/rails_mini_profiler/speedscope/source-map.438fa06b.js.map +1 -0
  130. data/public/rails_mini_profiler/speedscope/speedscope.026f36b0.js +200 -0
  131. data/public/rails_mini_profiler/speedscope/speedscope.026f36b0.js.map +1 -0
  132. data/vendor/assets/images/bookmark.svg +10 -0
  133. data/vendor/assets/images/chart.svg +12 -0
  134. data/vendor/assets/images/check.svg +3 -0
  135. data/vendor/assets/images/chevron.svg +3 -0
  136. data/vendor/assets/images/delete.svg +9 -0
  137. data/vendor/assets/images/filter.svg +1 -0
  138. data/vendor/assets/images/graph.svg +11 -0
  139. data/vendor/assets/images/logo.svg +18 -0
  140. data/vendor/assets/images/logo_variant.svg +32 -0
  141. data/vendor/assets/images/search.svg +9 -0
  142. data/vendor/assets/images/setting.svg +10 -0
  143. data/vendor/assets/images/show.svg +11 -0
  144. data/vendor/assets/javascripts/rails-mini-profiler.css +1 -0
  145. data/vendor/assets/javascripts/rails-mini-profiler.js +1 -0
  146. metadata +248 -0
@@ -0,0 +1,3 @@
1
+ .page-header {
2
+ padding: 2rem 0 2rem;
3
+ }
@@ -0,0 +1,55 @@
1
+ .pagy-nav {
2
+ display: flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ padding: 1em 0;
6
+ }
7
+
8
+ .pagy-nav > .page.disabled,
9
+ .pagy-nav > .page.active,
10
+ .pagy-nav > .page > a {
11
+ padding: 0.5rem 1rem;
12
+ border: 1px solid var(--border-color);
13
+ border-right: none;
14
+ background: white;
15
+ color: var(--grey-900);
16
+ cursor: pointer;
17
+ text-decoration: none;
18
+ }
19
+
20
+ .pagy-nav > .page.prev a,
21
+ .pagy-nav > .page.prev.disabled {
22
+ border-radius: 5px 0 0 5px;
23
+ }
24
+
25
+ .pagy-nav > .page.next a,
26
+ .pagy-nav > .page.next.disabled {
27
+ border-right: 1px solid var(--border-color);
28
+ border-radius: 0 5px 5px 0;
29
+ }
30
+
31
+ .pagy-nav > .page.active {
32
+ border-color: var(--red-500);
33
+ background: var(--red-500);
34
+ color: white;
35
+ cursor: default;
36
+
37
+ &:hover {
38
+ background: var(--red-500);
39
+ }
40
+ }
41
+
42
+ .pagy-nav > .page.disabled {
43
+ color: var(--grey-500);
44
+ cursor: default;
45
+
46
+ &:hover {
47
+ background: white;
48
+ }
49
+ }
50
+
51
+ .pagy-nav > .page.disabled:hover,
52
+ .pagy-nav > .page.active:hover,
53
+ .pagy-nav > .page > a:hover {
54
+ background: var(--grey-100);
55
+ }
@@ -0,0 +1,33 @@
1
+
2
+ .placeholder {
3
+ display: flex;
4
+ width: 100%;
5
+ flex-direction: column;
6
+ align-items: center;
7
+ justify-content: center;
8
+ padding-bottom: 2rem;
9
+ }
10
+
11
+ .placeholder-image {
12
+ width: 30%;
13
+ height: 30%;
14
+ -webkit-filter: grayscale(1) brightness(2.5);
15
+ }
16
+
17
+ .placeholder-text {
18
+ padding: 1rem 0;
19
+ color: var(--grey-400);
20
+ text-align: center;
21
+ }
22
+
23
+ .placeholder-link {
24
+ color: var(--grey-400);
25
+
26
+ &:visited {
27
+ color: var(--grey-400);
28
+ }
29
+
30
+ &:hover {
31
+ color: var(--grey-900);
32
+ }
33
+ }
@@ -0,0 +1,179 @@
1
+ .table {
2
+ width: 100%;
3
+ border: hidden 1px var(--border-color);
4
+
5
+ /* Hack to get table row borders, see https://stackoverflow.com/a/2586780/2553104 */
6
+ border-collapse: collapse;
7
+ border-radius: 5px;
8
+ box-shadow: 0 0 0 1px var(--border-color);
9
+ table-layout: fixed;
10
+ }
11
+
12
+ .table th,
13
+ .table td {
14
+ padding: 0.5rem 1rem;
15
+ }
16
+
17
+ .table thead tr {
18
+ border: hidden 1px var(--border-color);
19
+ box-shadow: 0 0 0 1px var(--border-color);
20
+ color: var(--grey-400);
21
+ }
22
+
23
+ .table tr:nth-child(even) {
24
+ background: var(--grey-50);
25
+ }
26
+
27
+ .table thead th {
28
+ font-weight: 400;
29
+ }
30
+
31
+ .table-filter-icon {
32
+ width: 14px;
33
+ margin-left: 0.5rem;
34
+ }
35
+
36
+ .table tbody tr:not(.no-row) {
37
+ border: solid 1px var(--border-color);
38
+ color: var(--grey-700);
39
+ cursor: pointer;
40
+ }
41
+
42
+ .table tbody tr:not(.no-row):hover {
43
+ background: var(--grey-100);
44
+ }
45
+
46
+ .request-checkbox {
47
+ z-index: 1;
48
+ width: 1rem;
49
+ height: 1rem;
50
+ }
51
+
52
+ .dropdown-body {
53
+ padding: 0.33rem 0.5rem;
54
+ }
55
+
56
+ .dropdown-search-field {
57
+ padding: 0.5rem 0.5rem;
58
+ border: 1px solid var(--grey-400);
59
+ border-radius: 5px;
60
+ color: var(--grey-700);
61
+ }
62
+
63
+ .dropdown-toggle {
64
+ display: flex;
65
+ align-items: center;
66
+ color: inherit;
67
+
68
+ &:hover {
69
+ color: var(--grey-900);
70
+ }
71
+ }
72
+
73
+ .dropdown-container {
74
+ position: absolute;
75
+ z-index: 1;
76
+ display: flex;
77
+ overflow: hidden;
78
+ min-width: 240px;
79
+ box-sizing: border-box;
80
+ flex-direction: column;
81
+ border: 1px solid var(--grey-200);
82
+ margin-top: 0.3em;
83
+ background: white;
84
+ border-radius: 5px;
85
+ box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12);
86
+ color: var(--grey-400);
87
+ cursor: default;
88
+ }
89
+
90
+ .dropdown-search {
91
+ display: flex;
92
+ flex-direction: column;
93
+ }
94
+
95
+ .dropdown-search button {
96
+ display: flex;
97
+ flex-direction: column;
98
+ }
99
+
100
+ .dropdown-entry {
101
+ display: flex;
102
+ padding: 0.33rem 1rem;
103
+ text-decoration: none;
104
+
105
+ &:hover {
106
+ background: var(--grey-100);
107
+ color: var(--grey-900);
108
+ }
109
+ }
110
+
111
+ .dropdown-entry input {
112
+ margin-right: 0.5em;
113
+ }
114
+
115
+ .dropdown-header {
116
+ display: flex;
117
+ align-items: center;
118
+ justify-content: space-between;
119
+ padding: 0.5rem 1rem;
120
+ border-bottom: 1px solid var(--grey-200);
121
+ background: var(--grey-100);
122
+ font-size: 0.833rem;
123
+ text-align: left;
124
+ }
125
+
126
+ .dropdown-header button {
127
+ padding: 0;
128
+ border: none;
129
+ background: none;
130
+ color: var(--grey-500);
131
+ font-size: 0.833rem;
132
+ outline: none;
133
+ text-decoration: underline;
134
+
135
+ &:hover {
136
+ box-shadow: none;
137
+ color: var(--grey-900);
138
+ }
139
+ }
140
+
141
+ .dropdown-footer {
142
+ width: 100%;
143
+ padding: 0.5rem;
144
+ border: none;
145
+ background: var(--red-500);
146
+ border-radius: 0;
147
+ color: white;
148
+ font-weight: 600;
149
+ outline: none;
150
+
151
+ &:hover {
152
+ background: var(--red-600);
153
+ }
154
+ }
155
+
156
+ .dropdown-search-button {
157
+ display: inline-block;
158
+ padding: 0.5em 0.5em;
159
+ border: none;
160
+ background: var(--red-500);
161
+ border-radius: 5px;
162
+ color: white;
163
+ cursor: pointer;
164
+ font-size: 1rem;
165
+ font-weight: 600;
166
+ text-align: center;
167
+ text-decoration: none;
168
+
169
+ &:hover {
170
+ background: var(--red-600);
171
+ }
172
+ }
173
+
174
+ .request-path {
175
+ overflow: hidden;
176
+ max-width: 280px;
177
+ text-overflow: ellipsis;
178
+ white-space: nowrap;
179
+ }
@@ -0,0 +1,10 @@
1
+ #wrapper {
2
+ width: 100%;
3
+ height: 100vh;
4
+ }
5
+
6
+ #speedscope-iframe {
7
+ width: 100%;
8
+ height: 100%;
9
+ border: none;
10
+ }
@@ -0,0 +1,15 @@
1
+ .flash {
2
+ padding: 1rem 1rem;
3
+ margin-top: 1rem;
4
+ border-radius: 5px;
5
+ }
6
+
7
+ .flash-error {
8
+ background: var(--red-500);
9
+ color: white;
10
+ }
11
+
12
+ .flash-notice {
13
+ background: var(--green-400);
14
+ color: white;
15
+ }
@@ -0,0 +1,44 @@
1
+ .header {
2
+ display: flex;
3
+ justify-content: center;
4
+ padding: 1.5rem 0;
5
+ margin: 0;
6
+ background: var(--primary);
7
+ box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2);
8
+ }
9
+
10
+ .header a {
11
+ color: white;
12
+ text-decoration: none;
13
+ }
14
+
15
+ .nav {
16
+ display: flex;
17
+ width: var(--main-width);
18
+ justify-content: space-between;
19
+ }
20
+
21
+ .home {
22
+ display: flex;
23
+ align-items: center;
24
+ text-decoration: none;
25
+ }
26
+
27
+ .home-logo {
28
+ width: 64px;
29
+ height: 64px;
30
+ }
31
+
32
+ .home-title {
33
+ padding: 0 0 0 1rem;
34
+ margin: 0;
35
+ }
36
+
37
+ .header-links {
38
+ display: flex;
39
+ align-items: center;
40
+ padding: 0;
41
+ margin: 0;
42
+ font-weight: 700;
43
+ list-style: none;
44
+ }
@@ -0,0 +1,89 @@
1
+ @import 'components/profiled_request_table/placeholder';
2
+ @import 'components/profiled_request_table/profiled_request_table';
3
+
4
+ main {
5
+ display: flex;
6
+ width: 100%;
7
+ justify-content: center;
8
+ }
9
+
10
+ .main-section {
11
+ width: var(--main-width);
12
+ }
13
+
14
+ .search-field {
15
+ box-sizing: border-box;
16
+ padding: 0.5rem;
17
+ border: 1px solid var(--grey-400);
18
+ border-radius: 5px;
19
+ }
20
+
21
+ .request-details-data {
22
+ display: flex;
23
+ padding: 1rem 0;
24
+ }
25
+
26
+ .request-details-actions {
27
+ display: flex;
28
+ align-items: center;
29
+ justify-content: space-between;
30
+ padding: 0 0 1rem;
31
+ margin: 0;
32
+ }
33
+
34
+ .data-item {
35
+ display: flex;
36
+ flex-direction: column;
37
+ align-items: flex-start;
38
+ padding: 0;
39
+ margin-right: 3rem;
40
+ list-style: none;
41
+ }
42
+
43
+ .data-item small {
44
+ color: var(--grey-400);
45
+ }
46
+
47
+ .data-item span {
48
+ margin: 0.25rem 0;
49
+ }
50
+
51
+ [class*='request-status-2'],
52
+ [class*='request-method-get'] {
53
+ background: var(--green-400) !important;
54
+ color: white;
55
+ }
56
+
57
+ [class*='request-status-4'],
58
+ [class*='request-method-put'],
59
+ [class*='request-method-patch'] {
60
+ background: var(--yellow-400) !important;
61
+ color: white;
62
+ }
63
+
64
+ [class*='request-status-5'],
65
+ [class*='request-method-delete'] {
66
+ background: var(--red-500) !important;
67
+ color: white;
68
+ }
69
+
70
+ .flamegraph-button button {
71
+ background: var(--grey-200);
72
+ }
73
+
74
+ .clear-action button {
75
+ background: var(--red-500);
76
+ color: white;
77
+ font-weight: 600;
78
+
79
+ &:hover {
80
+ background: var(--red-600);
81
+ }
82
+ }
83
+
84
+ .profiled-requests-header {
85
+ display: flex;
86
+ flex-direction: row;
87
+ align-items: center;
88
+ justify-content: space-between;
89
+ }
@@ -0,0 +1,205 @@
1
+ @import 'flashes';
2
+ @import 'flamegraph';
3
+ @import 'navbar';
4
+ @import 'profiled_requests';
5
+ @import 'traces';
6
+ @import 'components/pagination';
7
+ @import 'components/page_header/page_header';
8
+ @import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700&display=swap');
9
+
10
+ @font-face {
11
+ font-family: 'Open Sans';
12
+ font-style: normal;
13
+ font-weight: 400;
14
+ }
15
+
16
+ @font-face {
17
+ font-family: 'Open Sans';
18
+ font-style: normal;
19
+ font-weight: 600;
20
+ }
21
+
22
+ @font-face {
23
+ font-family: 'Open Sans';
24
+ font-style: normal;
25
+ font-weight: 700;
26
+ }
27
+
28
+ html {
29
+ width: 100%;
30
+ height: 100%;
31
+ padding: 0;
32
+ margin: 0;
33
+ font-family: 'Open Sans', monospace;
34
+
35
+ --grey-50: #f9fafb;
36
+ --grey-100: #f3f4f6;
37
+ --grey-200: #e5e7eb;
38
+ --grey-400: #9ca3af;
39
+ --grey-500: #6b7280;
40
+ --grey-700: #374151;
41
+ --grey-900: #111827;
42
+ --red-400: #f87171;
43
+ --red-500: #ef4444;
44
+ --red-600: #dc2626;
45
+ --yellow-400: #fbbf24;
46
+ --yellow-500: #fbbf24;
47
+ --yellow-600: #d97706;
48
+ --yellow-700: #b45309;
49
+ --green-300: #6ee7b7;
50
+ --green-400: #34d399;
51
+ --green-500: #10b981;
52
+ --blue-400: #60a5fa;
53
+ --blue-500: #3b82f6;
54
+ --main-width: 1056px;
55
+ --primary: var(--red-600);
56
+ --border-color: var(--grey-200);
57
+ --text-color: var(--grey-900);
58
+ }
59
+
60
+ * {
61
+ padding: 0;
62
+ margin: 0;
63
+ }
64
+
65
+ body {
66
+ width: 100%;
67
+ height: 100%;
68
+ padding: 0;
69
+ margin: 0;
70
+ color: var(--text-color);
71
+ }
72
+
73
+ button,
74
+ .button {
75
+ display: inline-block;
76
+ padding: 0.5em 0.5em;
77
+ border: none;
78
+ border-radius: 0.25rem;
79
+ cursor: pointer;
80
+ font-size: 1rem;
81
+ text-align: center;
82
+ text-decoration: none;
83
+
84
+ &:disabled {
85
+ background: var(--grey-200);
86
+ cursor: not-allowed;
87
+ }
88
+ }
89
+
90
+ button:hover {
91
+ box-shadow: 0 0.25rem 0.25rem 0 var(--grey-50);
92
+ }
93
+
94
+ button.none {
95
+ padding: 0;
96
+ border: none;
97
+ background: none;
98
+ outline: none;
99
+
100
+ &:hover {
101
+ box-shadow: none;
102
+ }
103
+ }
104
+
105
+ /* --------------------------------------- */
106
+
107
+ .text-center {
108
+ text-align: center;
109
+ }
110
+
111
+ .text-left {
112
+ text-align: left;
113
+ }
114
+
115
+ .text-right {
116
+ text-align: right;
117
+ }
118
+
119
+ .hidden {
120
+ display: none;
121
+ }
122
+
123
+ .flex-row {
124
+ display: flex;
125
+ flex-direction: row;
126
+ }
127
+
128
+ .flex-column {
129
+ display: flex;
130
+ flex-direction: column;
131
+ }
132
+
133
+ /* --------------------------------------- */
134
+
135
+ .pill {
136
+ padding: 0.1rem 0.4rem;
137
+ margin: 0.2rem 0;
138
+ background: var(--grey-200);
139
+ border-radius: 5px;
140
+ font-size: 0.9rem;
141
+ font-weight: 600;
142
+ letter-spacing: 0.1rem;
143
+ }
144
+
145
+ /* --------------------------------------- */
146
+
147
+ .popover {
148
+ display: flex;
149
+ width: 600px;
150
+ flex-direction: column;
151
+ padding: 1em;
152
+ color: black;
153
+ }
154
+
155
+ .popover-header {
156
+ display: flex;
157
+ flex-direction: row;
158
+ align-items: center;
159
+ justify-content: space-between;
160
+ padding-bottom: 1em;
161
+ }
162
+
163
+ .popover-description {
164
+ padding: 0;
165
+ margin: 0;
166
+ }
167
+
168
+ .popover-close {
169
+ padding: 0;
170
+ background: transparent;
171
+ color: var(--grey-400);
172
+ font-size: 20px;
173
+ font-weight: 700;
174
+ }
175
+
176
+ .popover-body {
177
+ padding: 1em 0;
178
+ }
179
+
180
+ .popover-footer {
181
+ border-top: 1px solid var(--grey-50);
182
+ }
183
+
184
+ .tippy-box[data-theme~='rmp'] {
185
+ background: white;
186
+ border-radius: 5px;
187
+ box-shadow: 8px 0 30px 4px rgba(0, 0, 0, 0.2), 8px 4px 10px 0 rgba(0, 0, 0, 0.05);
188
+ transition: all cubic-bezier(0.19, 1, 0.22, 1) 0.2s;
189
+ }
190
+
191
+ .tippy-box[data-theme~='rmp'][data-placement^='top'] > .tippy-arrow::before {
192
+ border-top-color: white;
193
+ }
194
+
195
+ .tippy-box[data-theme~='rmp'][data-placement^='bottom'] > .tippy-arrow::before {
196
+ border-bottom-color: white;
197
+ }
198
+
199
+ .tippy-box[data-theme~='rmp'][data-placement^='left'] > .tippy-arrow::before {
200
+ border-left-color: white;
201
+ }
202
+
203
+ .tippy-box[data-theme~='rmp'][data-placement^='right'] > .tippy-arrow::before {
204
+ border-right-color: white;
205
+ }