solara 0.2.2 → 0.2.4

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 (27) hide show
  1. checksums.yaml +4 -4
  2. data/bin/solara +2 -2
  3. data/solara/lib/core/aliases/alias_generator.rb +231 -57
  4. data/solara/lib/core/aliases/{solara_terminal_setup.rb → terminal_setup.rb} +69 -34
  5. data/solara/lib/core/brands/brands_manager.rb +15 -0
  6. data/solara/lib/core/dashboard/brand/BrandDetailView.js +1 -0
  7. data/solara/lib/core/dashboard/brand/brand.html +131 -132
  8. data/solara/lib/core/dashboard/brand/source/BrandRemoteSource.js +4 -4
  9. data/solara/lib/core/dashboard/brands/brands.html +79 -79
  10. data/solara/lib/core/dashboard/component/AddFieldSheet.js +105 -142
  11. data/solara/lib/core/dashboard/component/AliasesBottomSheet.js +85 -79
  12. data/solara/lib/core/dashboard/component/BrandOptionsBottomSheet.js +68 -67
  13. data/solara/lib/core/dashboard/component/ConfirmationDialog.js +66 -64
  14. data/solara/lib/core/dashboard/component/MessageBottomSheet.js +48 -48
  15. data/solara/lib/core/dashboard/component/OnboardBrandBottomSheet.js +128 -125
  16. data/solara/lib/core/dashboard/dashboard_server.rb +1 -1
  17. data/solara/lib/core/dashboard/handler/brand_alisases_handler.rb +1 -1
  18. data/solara/lib/core/dashboard/handler/brand_configurations_manager.rb +2 -2
  19. data/solara/lib/core/dashboard/handler/brand_icon_handler.rb +1 -1
  20. data/solara/lib/core/doctor/doctor_manager.rb +15 -1
  21. data/solara/lib/core/scripts/file_path.rb +9 -1
  22. data/solara/lib/core/scripts/solara_status_manager.rb +4 -0
  23. data/solara/lib/core/solara_configurator.rb +1 -1
  24. data/solara/lib/solara/version.rb +1 -1
  25. data/solara/lib/solara.rb +4 -2
  26. metadata +4 -5
  27. data/solara/lib/core/aliases/alias_generator_manager.rb +0 -29
@@ -14,15 +14,16 @@
14
14
  --text-color: #333;
15
15
  --border-color: #E1E4E8;
16
16
  --delete-color: #dc3545;
17
- --field-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
17
+ --field-shadow: 0 1.4px 3.5px rgba(0, 0, 0, 0.1);
18
18
  }
19
19
  body {
20
20
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
21
21
  background-color: var(--background-color);
22
22
  color: var(--text-color);
23
- line-height: 1.6;
23
+ line-height: 1.4;
24
24
  margin: 0;
25
- padding-top: 110px;
25
+ padding-top: 77px;
26
+ font-size: 12.6px;
26
27
  }
27
28
  .container {
28
29
  display: table;
@@ -34,44 +35,45 @@
34
35
  }
35
36
  .column {
36
37
  display: table-cell;
37
- padding: 20px;
38
38
  vertical-align: top;
39
39
  }
40
40
  .left {
41
+ width: 10%;
41
42
  position: fixed;
42
- width: 20%;
43
43
  }
44
44
  .middle {
45
- width: 60%;
46
- background-color: #e0e0e0;
45
+ width: 75%;
47
46
  }
48
47
  .right {
48
+ width: 15%;
49
49
  position: fixed;
50
- width: 20%;
51
- max-height: 600px; /* Set a fixed height */
52
- overflow-y: auto; /* Enable vertical scrolling */
53
- padding: 10px; /* Optional: add padding */
50
+ max-height: 50%;
51
+ overflow-y: auto;
52
+ padding: 7px;
53
+ right: 0;
54
54
  }
55
- ul {
55
+ .index {
56
+ width: 90%;
56
57
  list-style-type: none;
57
58
  padding: 0;
59
+ margin: 0;
60
+ text-align: left;
58
61
  }
59
- li {
60
- margin-bottom: 10px;
61
- }
62
-
63
- .index {
64
- list-style-type: none; /* Remove default list styling */
65
- padding: 0; /* Remove padding */
66
- margin: 40px;
62
+ .index ul {
63
+ list-style-type: none;
64
+ padding: 0;
65
+ margin: 0;
67
66
  }
68
67
  .index li {
69
- padding: 8px; /* Add some padding to list items */
70
- border-bottom: 1px solid #eee; /* Optional: add a bottom border */
68
+ padding: 5.6px;
69
+ border-bottom: 1px solid #eee;
70
+ margin-bottom: 7px;
71
+ text-align: left;
71
72
  }
72
73
 
74
+
73
75
  .index li:last-child {
74
- border-bottom: none; /* Remove the border from the last item */
76
+ border-bottom: none;
75
77
  }
76
78
  .index a {
77
79
  color: #0066cc;
@@ -81,53 +83,52 @@
81
83
  text-decoration: underline;
82
84
  }
83
85
  .index-item {
84
- list-style: none; /* Remove default list styling */
85
- padding: 10px; /* Add some padding */
86
- margin: 5px 0; /* Space between items */
87
- background-color: white; /* Background color for contrast */
88
- border-radius: 5px; /* Rounded corners */
89
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); /* Shadow effect */
90
- transition: box-shadow 0.3s; /* Smooth transition for shadow */
86
+ list-style: none;
87
+ padding: 7px;
88
+ background-color: white;
89
+ border-radius: 3.5px;
90
+ box-shadow: 0 1.4px 3.5px rgba(0, 0, 0, 0.2);
91
+ transition: box-shadow 0.3s;
91
92
  }
92
93
 
93
94
  .index-item:hover {
94
- box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3); /* Darker shadow on hover */
95
+ box-shadow: 0 2.8px 7px rgba(0, 0, 0, 0.3);
95
96
  }
96
97
  .sections {
97
- max-width: 1000px;
98
- margin: 0 auto;
99
- padding: 20px;
98
+ width: 90%;
99
+ padding: 14px;
100
100
  }
101
101
 
102
102
  h1 {
103
103
  margin: 0;
104
- font-size: 2.5em;
104
+ font-size: 1.75em;
105
105
  }
106
106
  .section {
107
107
  background-color: white;
108
- border-radius: 8px;
109
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
110
- margin-bottom: 30px;
111
- padding: 20px;
108
+ border-radius: 5.6px;
109
+ box-shadow: 0 1.4px 7px rgba(0, 0, 0, 0.1);
110
+ margin-bottom: 21px;
111
+ padding: 14px;
112
112
  }
113
113
  h2 {
114
114
  color: var(--primary-color);
115
- border-bottom: 2px solid var(--border-color);
116
- padding-bottom: 10px;
115
+ border-bottom: 1.4px solid var(--border-color);
116
+ padding-bottom: 7px;
117
117
  margin-top: 0;
118
+ font-size: 1.4em;
118
119
  }
119
120
  .input-group {
120
- margin-bottom: 25px;
121
+ margin-bottom: 17.5px;
121
122
  display: flex;
122
123
  align-items: center;
123
124
  background-color: white;
124
- border-radius: 8px;
125
+ border-radius: 5.6px;
125
126
  box-shadow: var(--field-shadow);
126
- padding: 10px;
127
+ padding: 7px;
127
128
  transition: box-shadow 0.3s ease;
128
129
  }
129
130
  .input-group:hover {
130
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
131
+ box-shadow: 0 2.8px 5.6px rgba(0, 0, 0, 0.15);
131
132
  }
132
133
  .input-wrapper {
133
134
  display: flex;
@@ -135,41 +136,41 @@
135
136
  flex-grow: 1;
136
137
  }
137
138
  .input-wrapper input[type="checkbox"] {
138
- margin-right: 10px;
139
+ margin-right: 7px;
139
140
  flex-grow: 0;
140
141
  }
141
142
  .checkbox-label {
142
143
  flex-grow: 1;
143
144
  }
144
145
  .input-wrapper label[for] {
145
- margin-right: 10px;
146
+ margin-right: 7px;
146
147
  }
147
148
  label {
148
149
  display: inline-block;
149
- margin-right: 10px;
150
+ margin-right: 7px;
150
151
  font-weight: bold;
151
- min-width: 250px;
152
+ min-width: 175px;
152
153
  flex-shrink: 0;
153
154
  }
154
155
  input, select {
155
156
  flex-grow: 1;
156
- padding: 10px;
157
- border: 1px solid var(--border-color);
158
- border-radius: 4px;
159
- font-size: 16px;
157
+ padding: 7px;
158
+ border: 0.7px solid var(--border-color);
159
+ border-radius: 2.8px;
160
+ font-size: 11.2px;
160
161
  }
161
162
  input[type="color"] {
162
- height: 50px;
163
- padding: 2px;
163
+ height: 35px;
164
+ padding: 1.4px;
164
165
  }
165
166
  button {
166
167
  background-color: var(--secondary-color);
167
168
  color: white;
168
- padding: 12px 20px;
169
+ padding: 8.4px 14px;
169
170
  border: none;
170
- border-radius: 4px;
171
+ border-radius: 2.8px;
171
172
  cursor: pointer;
172
- font-size: 18px;
173
+ font-size: 12.6px;
173
174
  transition: background-color 0.3s ease;
174
175
  }
175
176
  button:hover {
@@ -178,8 +179,8 @@
178
179
 
179
180
  .save-section-btn {
180
181
  background-color: #28a745;
181
- margin-top: 10px;
182
- margin-right: 10px;
182
+ margin-top: 7px;
183
+ margin-right: 7px;
183
184
  }
184
185
  .save-section-btn:hover {
185
186
  background-color: #218838;
@@ -187,17 +188,17 @@
187
188
  .button-group {
188
189
  display: flex;
189
190
  justify-content: flex-start;
190
- margin-top: 20px;
191
+ margin-top: 14px;
191
192
  }
192
193
  .delete-icon {
193
194
  color: var(--delete-color);
194
195
  cursor: pointer;
195
196
  font-weight: bold;
196
- font-size: 20px;
197
+ font-size: 14px;
197
198
  line-height: 1;
198
- padding: 10px 15px;
199
- margin-left: 10px;
200
- border-radius: 4px;
199
+ padding: 7px 10.5px;
200
+ margin-left: 7px;
201
+ border-radius: 2.8px;
201
202
  transition: background-color 0.3s ease;
202
203
  }
203
204
  .delete-icon:hover {
@@ -205,84 +206,83 @@
205
206
  background-color: var(--delete-color);
206
207
  }
207
208
  .section-title-container {
208
- margin-bottom: 1em;
209
+ margin-bottom: 0.7em;
209
210
  }
210
211
  .section-title-container h2 {
211
- margin-bottom: 0.2em;
212
+ margin-bottom: 0.14em;
212
213
  }
213
214
  .section-subtitle {
214
- font-size: 0.9em;
215
+ font-size: 1.0em;
215
216
  color: #666;
216
- margin-bottom: 32px;
217
+ margin-bottom: 22.4px;
217
218
  }
218
219
 
219
220
  @media (max-width: 768px) {
220
221
  .sections {
221
- padding: 10px;
222
+ padding: 7px;
222
223
  }
223
224
  .input-group {
224
225
  flex-direction: column;
225
226
  align-items: flex-start;
226
227
  }
227
228
  label {
228
- margin-bottom: 5px;
229
+ margin-bottom: 3.5px;
229
230
  }
230
231
  .input-wrapper {
231
232
  width: 100%;
232
233
  }
233
234
  }
234
235
 
235
-
236
236
  .array-input-container {
237
237
  display: flex;
238
238
  align-items: center;
239
- margin-bottom: 5px;
239
+ margin-bottom: 3.5px;
240
240
  width: 100%;
241
241
  }
242
242
 
243
243
  .array-input {
244
244
  flex-grow: 1;
245
- margin-right: 8px;
245
+ margin-right: 5.6px;
246
246
  }
247
247
 
248
248
  .add-array-item {
249
249
  background-color: #4CAF50;
250
250
  color: white;
251
251
  border: none;
252
- padding: 5px 10px;
253
- border-radius: 4px;
252
+ padding: 3.5px 7px;
253
+ border-radius: 2.8px;
254
254
  cursor: pointer;
255
255
  }
256
256
 
257
257
  .array-items-container {
258
- margin-top: 5px;
258
+ margin-top: 3.5px;
259
259
  width: 100%;
260
260
  }
261
261
 
262
262
  .array-item {
263
263
  display: flex;
264
264
  align-items: center;
265
- margin-bottom: 5px;
265
+ margin-bottom: 3.5px;
266
266
  }
267
267
 
268
268
  .array-item-input {
269
269
  flex-grow: 1;
270
- margin: 16px;
270
+ margin: 11.2px;
271
271
  }
272
272
 
273
273
  .delete-array-item {
274
274
  background-color: #f44336;
275
275
  color: white;
276
276
  border: none;
277
- padding: 2px 6px;
278
- border-radius: 4px;
277
+ padding: 1.4px 4.2px;
278
+ border-radius: 2.8px;
279
279
  cursor: pointer;
280
280
  }
281
281
  .logo {
282
- width: 75px;
283
- height: 75px;
284
- margin-right: 20px;
285
- filter: drop-shadow(3px 3px 3px rgba(0, 0, 0, 0.3));
282
+ width: 52.5px;
283
+ height: 52.5px;
284
+ margin-right: 14px;
285
+ filter: drop-shadow(2.1px 2.1px 2.1px rgba(0, 0, 0, 0.3));
286
286
  transition: transform 0.3s ease;
287
287
  }
288
288
  .logo:hover {
@@ -311,8 +311,8 @@
311
311
  background-color: var(--primary-color);
312
312
  color: white;
313
313
  text-align: center;
314
- padding: 10px 0;
315
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
314
+ padding: 7px 0;
315
+ box-shadow: 0 1.4px 7px rgba(0, 0, 0, 0.1);
316
316
  display: flex;
317
317
  justify-content: center;
318
318
  align-items: center;
@@ -332,33 +332,33 @@
332
332
 
333
333
  h1 {
334
334
  margin: 0;
335
- font-size: 2.5em;
335
+ font-size: 1.75em;
336
336
  }
337
337
 
338
338
  .action-buttons {
339
- min-width: 250px;
339
+ width: 100%;
340
340
  background-color: var(--primary-color);
341
341
  color: white;
342
- margin: 10px;
343
- font-size: 18px;
342
+ margin: 7px;
343
+ font-size: 12.6px;
344
344
  transition: background-color 0.3s ease, opacity 0.3s ease;
345
345
  }
346
346
 
347
347
  .add-field-btn {
348
- min-width: 150px;
348
+ min-width: 105px;
349
349
  background-color: var(--primary-color);
350
350
  color: white;
351
- margin: 10px;
352
- font-size: 18px;
351
+ margin: 7px;
352
+ font-size: 12.6px;
353
353
  transition: background-color 0.3s ease, opacity 0.3s ease;
354
354
  }
355
355
 
356
356
  .apply-changes-button {
357
- min-width: 250px;
357
+ width: 100%;
358
358
  background-color: #ff4136;
359
359
  color: white;
360
- margin: 10px;
361
- font-size: 18px;
360
+ margin: 7px;
361
+ font-size: 12.6px;
362
362
  transition: background-color 0.3s ease, opacity 0.3s ease;
363
363
  }
364
364
 
@@ -376,19 +376,19 @@
376
376
 
377
377
  #error-button {
378
378
  position: fixed;
379
- bottom: 20px;
380
- right: 20px;
379
+ bottom: 14px;
380
+ right: 14px;
381
381
  background-color: #ff4136;
382
382
  color: white;
383
383
  border: none;
384
384
  border-radius: 50%;
385
- width: 60px;
386
- height: 60px;
387
- font-size: 24px;
385
+ width: 42px;
386
+ height: 42px;
387
+ font-size: 16.8px;
388
388
  cursor: pointer;
389
389
  justify-content: center;
390
390
  align-items: center;
391
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
391
+ box-shadow: 0 1.4px 7px rgba(0, 0, 0, 0.2);
392
392
  transition: transform 0.2s;
393
393
  display: none;
394
394
  z-index: 1000;
@@ -400,14 +400,14 @@
400
400
 
401
401
  .count {
402
402
  position: absolute;
403
- top: -5px;
404
- right: -5px;
403
+ top: -3.5px;
404
+ right: -3.5px;
405
405
  background-color: #ffdc00;
406
406
  color: #111;
407
407
  border-radius: 50%;
408
- width: 24px;
409
- height: 24px;
410
- font-size: 14px;
408
+ width: 16.8px;
409
+ height: 16.8px;
410
+ font-size: 9.8px;
411
411
  font-weight: bold;
412
412
  display: flex;
413
413
  justify-content: center;
@@ -434,14 +434,13 @@
434
434
  transform: translate(-50%, -50%);
435
435
  text-align: center;
436
436
  background-color: white;
437
- padding: 40px;
438
- border-radius: 20px;
439
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
437
+ padding: 28px;
438
+ border-radius: 14px;
439
+ box-shadow: 0 2.8px 14px rgba(0, 0, 0, 0.1);
440
440
  z-index: 999;
441
441
  animation: fadeIn 0.5s ease-out;
442
442
  }
443
443
 
444
-
445
444
  @keyframes fadeIn {
446
445
  from {
447
446
  opacity: 0;
@@ -454,28 +453,28 @@
454
453
  }
455
454
 
456
455
  .add-brand-container img {
457
- width: 150px;
458
- height: 150px;
459
- margin-bottom: 20px;
456
+ width: 105px;
457
+ height: 105px;
458
+ margin-bottom: 14px;
460
459
  }
461
460
 
462
461
  .add-brand-container h2 {
463
- font-size: 18px;
462
+ font-size: 12.6px;
464
463
  color: #333;
465
- margin-bottom: 30px;
464
+ margin-bottom: 21px;
466
465
  animation: slideDown 0.5s ease-out 0.3s both;
467
466
  }
468
467
 
469
468
  .add-brand-container button {
470
469
  display: block;
471
- width: 200px;
472
- margin: 20px auto;
473
- padding: 15px;
474
- font-size: 18px;
470
+ width: 140px;
471
+ margin: 14px auto;
472
+ padding: 10.5px;
473
+ font-size: 12.6px;
475
474
  background-color: var(--primary-color);
476
475
  color: white;
477
476
  border: none;
478
- border-radius: 8px;
477
+ border-radius: 5.6px;
479
478
  cursor: pointer;
480
479
  transition: background-color 0.3s ease, transform 0.2s ease;
481
480
  opacity: 0;
@@ -488,9 +487,9 @@
488
487
  }
489
488
 
490
489
  .button-message {
491
- font-size: 18px;
490
+ font-size: 12.6px;
492
491
  color: #666;
493
- margin-bottom: 5px;
492
+ margin-bottom: 3.5px;
494
493
  opacity: 0;
495
494
  animation: fadeInMessage 0.5s ease-out forwards;
496
495
  }
@@ -498,7 +497,7 @@
498
497
  @keyframes slideDown {
499
498
  from {
500
499
  opacity: 0;
501
- transform: translateY(-20px);
500
+ transform: translateY(-14px);
502
501
  }
503
502
  to {
504
503
  opacity: 1;
@@ -539,18 +538,18 @@
539
538
  }
540
539
 
541
540
  .loading-overlay-logo {
542
- width: 150px;
543
- height: 150px;
544
- margin-right: 20px;
545
- filter: drop-shadow(3px 3px 3px rgba(0, 0, 0, 0.3));
541
+ width: 105px;
542
+ height: 105px;
543
+ margin-right: 14px;
544
+ filter: drop-shadow(2.1px 2.1px 2.1px rgba(0, 0, 0, 0.3));
546
545
  transition: transform 0.3s ease;
547
546
  }
548
547
  </style>
549
548
  </head>
550
549
  <body>
551
550
 
552
- <header id="header" class="header-container">
553
- <div class="header-content">
551
+ <header id="header" class="header-container">
552
+ <div class="header-content">
554
553
  <img class="logo" src="../solara.png" alt="Splash Image">
555
554
  <h1><span id="brandNametitle"></span></h1>
556
555
  </div>
@@ -566,9 +565,9 @@
566
565
 
567
566
  <div class="column left">
568
567
  <div>
568
+ <button id="applyChangesButton" class="apply-changes-button">Apply Changes</button>
569
569
  <button id="allBrandsButton" class="action-buttons">All Brands</button>
570
570
  <button id="switchButton" class="action-buttons">Switch</button>
571
- <button id="applyChangesButton" class="apply-changes-button">Apply Changes</button>
572
571
  <button id="exportBrandBtn" class="action-buttons">Export</button>
573
572
  </div>
574
573
  </div>
@@ -64,7 +64,7 @@ class BrandRemoteSource {
64
64
  },
65
65
  {
66
66
  "key": "android_config.json",
67
- "name": "Android Platform Configuration",
67
+ "name": "Android Configuration",
68
68
  "inputType": "text",
69
69
  "content": {
70
70
  "applicationId": "",
@@ -86,7 +86,7 @@ class BrandRemoteSource {
86
86
  },
87
87
  {
88
88
  "key": "ios_config.json",
89
- "name": "iOS Platform Configuration",
89
+ "name": "iOS Configuration",
90
90
  "inputType": "text",
91
91
  "content": {
92
92
  "PRODUCT_BUNDLE_IDENTIFIER": "",
@@ -185,7 +185,7 @@ class BrandRemoteSource {
185
185
  },
186
186
  {
187
187
  key: 'android_config.json',
188
- name: 'Android Platform Configuration',
188
+ name: 'Android Configuration',
189
189
  input_type: 'text'
190
190
  },
191
191
  {
@@ -195,7 +195,7 @@ class BrandRemoteSource {
195
195
  },
196
196
  {
197
197
  key: 'ios_config.json',
198
- name: 'iOS Platform Configuration',
198
+ name: 'iOS Configuration',
199
199
  input_type: 'text'
200
200
  },
201
201
  {