@limrun/ui 0.13.3-rc.1 → 0.13.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 (54) hide show
  1. package/dist/app-store-relay/index.cjs +4 -4
  2. package/dist/app-store-relay/index.js +175 -119
  3. package/dist/app-store-relay/react.cjs +1 -1
  4. package/dist/app-store-relay/react.js +2 -2
  5. package/dist/{browser-storage-BJ__DGJ6.mjs → browser-storage-Cx9eW-bm.mjs} +48 -45
  6. package/dist/browser-storage-jJaIht4K.js +1 -0
  7. package/dist/{client-CnbCWvCs.js → client-ASLtHFLh.js} +1 -1
  8. package/dist/{client-Bk1N3XIF.mjs → client-CGdh8yoJ.mjs} +33 -27
  9. package/dist/components/remote-control.d.ts +144 -0
  10. package/dist/core/device-install/apple/provisioning.d.ts +4 -4
  11. package/dist/device-build/index.cjs +1 -1
  12. package/dist/device-build/index.js +5 -5
  13. package/dist/device-build/react.cjs +1 -1
  14. package/dist/device-build/react.js +15 -13
  15. package/dist/device-install/demo/demo.d.ts +0 -0
  16. package/dist/device-install/index.cjs +1 -1
  17. package/dist/device-install/index.d.ts +1 -1
  18. package/dist/device-install/index.js +134 -121
  19. package/dist/device-install/react.cjs +1 -1
  20. package/dist/device-install/react.js +55 -50
  21. package/dist/{index-BXg7HdIs.mjs → index-DFdCvi2_.mjs} +3 -7
  22. package/dist/index.cjs +1 -1
  23. package/dist/index.js +1336 -1089
  24. package/dist/limbuild-client-CgEncrgx.js +1 -0
  25. package/dist/{limbuild-client-CFJhYsRx.mjs → limbuild-client-D7U7w342.mjs} +4 -2
  26. package/dist/{provisioning-CdseoMJQ.mjs → provisioning-DKbkBO-p.mjs} +11 -11
  27. package/dist/{provisioning-D2ZZQeyX.js → provisioning-Va0PH4Kk.js} +1 -1
  28. package/package.json +1 -1
  29. package/src/app-store-relay/index.test.ts +1 -5
  30. package/src/app-store-relay/index.ts +109 -42
  31. package/src/app-store-relay/react.ts +6 -2
  32. package/src/components/remote-control.tsx +726 -0
  33. package/src/core/device-install/apple/client.ts +29 -22
  34. package/src/core/device-install/apple/crypto.ts +9 -6
  35. package/src/core/device-install/apple/gsa-srp.ts +3 -7
  36. package/src/core/device-install/apple/provisioning.ts +16 -18
  37. package/src/core/device-install/apple/relay.ts +5 -1
  38. package/src/core/device-install/operations/limbuild-client.ts +8 -1
  39. package/src/core/device-install/operations/operations.ts +3 -1
  40. package/src/core/device-install/operations/relay-client.ts +57 -27
  41. package/src/core/device-install/operations/usbmux.ts +3 -3
  42. package/src/core/device-install/operations/webusb.ts +9 -4
  43. package/src/core/device-install/storage/browser-storage.ts +20 -6
  44. package/src/core/device-install/types.ts +1 -7
  45. package/src/device-build/react.ts +4 -1
  46. package/src/device-install/README.md +423 -0
  47. package/src/device-install/demo/demo.css +493 -0
  48. package/src/device-install/demo/demo.tsx +1069 -0
  49. package/src/device-install/demo/index.html +12 -0
  50. package/src/device-install/index.ts +7 -7
  51. package/src/device-install/react.ts +26 -17
  52. package/src/index.ts +1 -1
  53. package/dist/browser-storage-C1jQLXat.js +0 -1
  54. package/dist/limbuild-client-C_CMNLYV.js +0 -1
@@ -0,0 +1,493 @@
1
+ * {
2
+ box-sizing: border-box;
3
+ }
4
+
5
+ body {
6
+ margin: 0;
7
+ min-height: 100vh;
8
+ background: #f4f7fb;
9
+ color: #111827;
10
+ font-family:
11
+ Inter,
12
+ ui-sans-serif,
13
+ system-ui,
14
+ -apple-system,
15
+ BlinkMacSystemFont,
16
+ 'Segoe UI',
17
+ sans-serif;
18
+ }
19
+
20
+ button,
21
+ input,
22
+ select {
23
+ font: inherit;
24
+ }
25
+
26
+ button {
27
+ border: 0;
28
+ border-radius: 10px;
29
+ background: #111827;
30
+ color: #fff;
31
+ cursor: pointer;
32
+ font-weight: 700;
33
+ padding: 11px 16px;
34
+ }
35
+
36
+ button:hover:not(:disabled) {
37
+ background: #253044;
38
+ }
39
+
40
+ button:disabled {
41
+ cursor: not-allowed;
42
+ opacity: 0.45;
43
+ }
44
+
45
+ button.secondary {
46
+ background: #e5e7eb;
47
+ color: #111827;
48
+ }
49
+
50
+ button.secondary:hover:not(:disabled) {
51
+ background: #d1d5db;
52
+ }
53
+
54
+ code {
55
+ border-radius: 6px;
56
+ background: #eef2ff;
57
+ color: #3730a3;
58
+ padding: 1px 5px;
59
+ }
60
+
61
+ .page {
62
+ display: grid;
63
+ gap: 18px;
64
+ margin: 0 auto;
65
+ max-width: 1120px;
66
+ padding: 28px 18px 56px;
67
+ }
68
+
69
+ .hero {
70
+ border-radius: 22px;
71
+ background: linear-gradient(135deg, #1f2937 0%, #4338ca 100%);
72
+ box-shadow: 0 18px 45px rgb(15 23 42 / 16%);
73
+ color: #fff;
74
+ padding: 34px;
75
+ }
76
+
77
+ .hero h1 {
78
+ margin: 0;
79
+ max-width: 820px;
80
+ font-size: clamp(2rem, 5vw, 3.6rem);
81
+ letter-spacing: -0.05em;
82
+ line-height: 0.98;
83
+ }
84
+
85
+ .hero p {
86
+ margin: 16px 0 0;
87
+ max-width: 780px;
88
+ color: rgb(255 255 255 / 82%);
89
+ line-height: 1.6;
90
+ }
91
+
92
+ .eyebrow {
93
+ color: #c7d2fe !important;
94
+ font-size: 0.76rem;
95
+ font-weight: 800;
96
+ letter-spacing: 0.18em;
97
+ margin: 0 0 12px !important;
98
+ text-transform: uppercase;
99
+ }
100
+
101
+ .card,
102
+ .error {
103
+ min-width: 0;
104
+ border: 1px solid #e5e7eb;
105
+ border-radius: 18px;
106
+ background: #fff;
107
+ box-shadow: 0 10px 28px rgb(15 23 42 / 7%);
108
+ padding: 22px;
109
+ }
110
+
111
+ .card h2,
112
+ .card p {
113
+ margin: 0;
114
+ }
115
+
116
+ .card h2 {
117
+ font-size: 1.18rem;
118
+ letter-spacing: -0.02em;
119
+ }
120
+
121
+ .card p,
122
+ .hint {
123
+ color: #6b7280;
124
+ line-height: 1.5;
125
+ }
126
+
127
+ .error {
128
+ border-color: #fecaca;
129
+ background: #fff1f2;
130
+ color: #7f1d1d;
131
+ }
132
+
133
+ .error pre {
134
+ margin: 8px 0 0;
135
+ white-space: pre-wrap;
136
+ }
137
+
138
+ .errorToast {
139
+ position: fixed;
140
+ top: 16px;
141
+ left: 50%;
142
+ z-index: 1000;
143
+ display: flex;
144
+ align-items: flex-start;
145
+ gap: 12px;
146
+ width: min(680px, calc(100% - 32px));
147
+ border: 1px solid #fecaca;
148
+ border-radius: 14px;
149
+ background: #fff1f2;
150
+ box-shadow: 0 16px 40px rgb(127 29 29 / 22%);
151
+ color: #7f1d1d;
152
+ padding: 14px 16px;
153
+ transform: translateX(-50%);
154
+ }
155
+
156
+ .errorToastBody {
157
+ min-width: 0;
158
+ flex: 1;
159
+ }
160
+
161
+ .errorToastBody pre {
162
+ max-height: 220px;
163
+ overflow: auto;
164
+ margin: 6px 0 0;
165
+ white-space: pre-wrap;
166
+ word-break: break-word;
167
+ }
168
+
169
+ .errorToastClose {
170
+ flex: 0 0 auto;
171
+ border-radius: 8px;
172
+ background: rgb(127 29 29 / 8%);
173
+ color: #7f1d1d;
174
+ padding: 6px 10px;
175
+ }
176
+
177
+ .errorToastClose:hover:not(:disabled) {
178
+ background: rgb(127 29 29 / 16%);
179
+ }
180
+
181
+ .grid {
182
+ display: grid;
183
+ gap: 14px;
184
+ margin-top: 16px;
185
+ }
186
+
187
+ .grid.two {
188
+ grid-template-columns: repeat(2, minmax(0, 1fr));
189
+ }
190
+
191
+ label {
192
+ display: grid;
193
+ gap: 7px;
194
+ color: #374151;
195
+ font-size: 0.88rem;
196
+ font-weight: 700;
197
+ }
198
+
199
+ input {
200
+ min-width: 0;
201
+ border: 1px solid #d1d5db;
202
+ border-radius: 10px;
203
+ background: #fff;
204
+ color: #111827;
205
+ padding: 11px 12px;
206
+ }
207
+
208
+ select {
209
+ min-width: 0;
210
+ border: 1px solid #d1d5db;
211
+ border-radius: 10px;
212
+ background: #fff;
213
+ color: #111827;
214
+ padding: 11px 12px;
215
+ }
216
+
217
+ input:focus,
218
+ select:focus {
219
+ border-color: #4f46e5;
220
+ box-shadow: 0 0 0 3px rgb(79 70 229 / 15%);
221
+ outline: none;
222
+ }
223
+
224
+ .tabs {
225
+ display: inline-flex;
226
+ gap: 6px;
227
+ border-radius: 12px;
228
+ background: #f3f4f6;
229
+ margin: 4px 0 16px;
230
+ padding: 5px;
231
+ }
232
+
233
+ button.tab {
234
+ border-radius: 9px;
235
+ background: transparent;
236
+ color: #4b5563;
237
+ padding: 9px 13px;
238
+ }
239
+
240
+ button.tab.active {
241
+ background: #fff;
242
+ box-shadow: 0 1px 5px rgb(15 23 42 / 12%);
243
+ color: #111827;
244
+ }
245
+
246
+ .subPanel {
247
+ border: 1px solid #e5e7eb;
248
+ border-radius: 14px;
249
+ background: #fbfdff;
250
+ margin-top: 16px;
251
+ padding: 16px;
252
+ }
253
+
254
+ .sectionHeader.compact {
255
+ margin-bottom: 10px;
256
+ }
257
+
258
+ .sectionHeader h3 {
259
+ margin: 0;
260
+ font-size: 1rem;
261
+ }
262
+
263
+ .inlineForm {
264
+ display: flex;
265
+ gap: 10px;
266
+ margin-top: 12px;
267
+ }
268
+
269
+ .inlineForm input {
270
+ max-width: 220px;
271
+ }
272
+
273
+ .multiSelect {
274
+ min-height: 132px;
275
+ }
276
+
277
+ .sectionHeader {
278
+ display: flex;
279
+ align-items: flex-start;
280
+ justify-content: space-between;
281
+ gap: 18px;
282
+ margin-bottom: 16px;
283
+ }
284
+
285
+ .sectionHeader > div {
286
+ min-width: 0;
287
+ }
288
+
289
+ .actions {
290
+ display: flex;
291
+ flex-wrap: wrap;
292
+ gap: 10px;
293
+ margin-top: 16px;
294
+ }
295
+
296
+ .pill {
297
+ border-radius: 999px;
298
+ flex: 0 0 auto;
299
+ font-size: 0.78rem;
300
+ font-weight: 800;
301
+ padding: 7px 11px;
302
+ text-transform: capitalize;
303
+ }
304
+
305
+ .pill.neutral {
306
+ background: #f3f4f6;
307
+ color: #374151;
308
+ }
309
+
310
+ .pill.active {
311
+ background: #dbeafe;
312
+ color: #1e40af;
313
+ }
314
+
315
+ .pill.success {
316
+ background: #dcfce7;
317
+ color: #166534;
318
+ }
319
+
320
+ .pill.danger {
321
+ background: #fee2e2;
322
+ color: #991b1b;
323
+ }
324
+
325
+ .facts {
326
+ display: grid;
327
+ gap: 10px;
328
+ grid-template-columns: repeat(3, minmax(0, 1fr));
329
+ margin: 18px 0 0;
330
+ }
331
+
332
+ .facts div {
333
+ min-width: 0;
334
+ border-radius: 12px;
335
+ background: #f9fafb;
336
+ padding: 12px;
337
+ }
338
+
339
+ .facts dt {
340
+ color: #6b7280;
341
+ font-size: 0.76rem;
342
+ font-weight: 800;
343
+ letter-spacing: 0.08em;
344
+ text-transform: uppercase;
345
+ }
346
+
347
+ .facts dd {
348
+ overflow-wrap: anywhere;
349
+ margin: 6px 0 0;
350
+ color: #111827;
351
+ font-weight: 700;
352
+ }
353
+
354
+ .logBox {
355
+ max-height: 260px;
356
+ min-height: 120px;
357
+ overflow: auto;
358
+ border-radius: 12px;
359
+ background: #111827;
360
+ color: #d1fae5;
361
+ font-size: 0.82rem;
362
+ line-height: 1.45;
363
+ margin: 16px 0 0;
364
+ padding: 14px;
365
+ white-space: pre-wrap;
366
+ word-break: break-word;
367
+ }
368
+
369
+ .activity {
370
+ display: grid;
371
+ gap: 10px;
372
+ }
373
+
374
+ .activityLine {
375
+ display: grid;
376
+ gap: 3px;
377
+ border-radius: 12px;
378
+ background: #f9fafb;
379
+ padding: 12px;
380
+ }
381
+
382
+ .activityLine span {
383
+ color: #6b7280;
384
+ font-size: 0.78rem;
385
+ font-weight: 700;
386
+ }
387
+
388
+ .activityLine pre {
389
+ margin: 4px 0 0;
390
+ overflow-wrap: anywhere;
391
+ white-space: pre-wrap;
392
+ }
393
+
394
+ .stepper {
395
+ display: grid;
396
+ grid-template-columns: repeat(4, minmax(0, 1fr));
397
+ gap: 12px;
398
+ }
399
+
400
+ .step {
401
+ display: flex;
402
+ align-items: center;
403
+ gap: 11px;
404
+ border: 1px solid #e5e7eb;
405
+ border-left: 4px solid #d1d5db;
406
+ border-radius: 14px;
407
+ background: #fff;
408
+ box-shadow: 0 10px 28px rgb(15 23 42 / 7%);
409
+ padding: 14px 16px;
410
+ }
411
+
412
+ .stepDot {
413
+ display: flex;
414
+ flex: 0 0 auto;
415
+ align-items: center;
416
+ justify-content: center;
417
+ width: 26px;
418
+ height: 26px;
419
+ border-radius: 999px;
420
+ background: #e5e7eb;
421
+ color: #374151;
422
+ font-size: 0.85rem;
423
+ font-weight: 800;
424
+ }
425
+
426
+ .stepText {
427
+ display: grid;
428
+ min-width: 0;
429
+ gap: 2px;
430
+ }
431
+
432
+ .stepTitle {
433
+ font-size: 0.95rem;
434
+ font-weight: 800;
435
+ letter-spacing: -0.01em;
436
+ }
437
+
438
+ .stepLabel {
439
+ overflow: hidden;
440
+ color: #6b7280;
441
+ font-size: 0.8rem;
442
+ text-overflow: ellipsis;
443
+ white-space: nowrap;
444
+ }
445
+
446
+ .step.active {
447
+ border-left-color: #3b82f6;
448
+ }
449
+
450
+ .step.active .stepDot {
451
+ background: #dbeafe;
452
+ color: #1e40af;
453
+ }
454
+
455
+ .step.done {
456
+ border-left-color: #22c55e;
457
+ }
458
+
459
+ .step.done .stepDot {
460
+ background: #16a34a;
461
+ color: #fff;
462
+ }
463
+
464
+ .step.error {
465
+ border-left-color: #ef4444;
466
+ }
467
+
468
+ .step.error .stepDot {
469
+ background: #dc2626;
470
+ color: #fff;
471
+ }
472
+
473
+ @media (max-width: 760px) {
474
+ .stepper {
475
+ grid-template-columns: repeat(2, minmax(0, 1fr));
476
+ }
477
+
478
+ .grid.two,
479
+ .facts {
480
+ grid-template-columns: 1fr;
481
+ }
482
+
483
+ .sectionHeader {
484
+ align-items: stretch;
485
+ flex-direction: column;
486
+ }
487
+
488
+ .hero,
489
+ .card,
490
+ .error {
491
+ padding: 18px;
492
+ }
493
+ }