@octane-xplat/ui 0.2.1 → 0.4.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 (126) hide show
  1. package/README.md +46 -0
  2. package/dist/native/octane-client-build.json +1 -1
  3. package/dist/native/ui.js +52 -19
  4. package/dist/native/ui10.js +25 -45
  5. package/dist/native/ui11.js +52 -57
  6. package/dist/native/ui12.js +47 -16
  7. package/dist/native/ui13.js +24 -18
  8. package/dist/native/ui14.js +117 -12
  9. package/dist/native/ui15.js +78 -17
  10. package/dist/native/ui16.js +88 -115
  11. package/dist/native/ui17.js +29 -19
  12. package/dist/native/ui18.js +34 -12
  13. package/dist/native/ui19.js +244 -8
  14. package/dist/native/ui2.js +10 -48
  15. package/dist/native/ui20.js +28 -0
  16. package/dist/native/ui21.js +383 -0
  17. package/dist/native/ui22.js +36 -0
  18. package/dist/native/ui23.js +55 -0
  19. package/dist/native/ui24.js +83 -0
  20. package/dist/native/ui25.js +141 -0
  21. package/dist/native/ui26.js +12 -0
  22. package/dist/native/ui27.js +61 -0
  23. package/dist/native/ui28.js +40 -0
  24. package/dist/native/ui29.js +108 -0
  25. package/dist/native/ui3.js +17 -20
  26. package/dist/native/ui30.js +18 -0
  27. package/dist/native/ui31.js +58 -0
  28. package/dist/native/ui32.js +58 -0
  29. package/dist/native/ui33.js +38 -0
  30. package/dist/native/ui34.js +53 -0
  31. package/dist/native/ui35.js +105 -0
  32. package/dist/native/ui36.js +10 -0
  33. package/dist/native/ui37.js +44 -0
  34. package/dist/native/ui38.js +197 -0
  35. package/dist/native/ui39.js +105 -0
  36. package/dist/native/ui4.js +23 -48
  37. package/dist/native/ui40.js +58 -0
  38. package/dist/native/ui41.js +19 -0
  39. package/dist/native/ui42.js +8 -0
  40. package/dist/native/ui43.js +38 -0
  41. package/dist/native/ui44.js +267 -0
  42. package/dist/native/ui45.js +28 -0
  43. package/dist/native/ui46.js +35 -0
  44. package/dist/native/ui47.js +41 -0
  45. package/dist/native/ui48.js +72 -0
  46. package/dist/native/ui49.js +66 -0
  47. package/dist/native/ui5.js +37 -34
  48. package/dist/native/ui50.js +27 -0
  49. package/dist/native/ui51.js +13 -0
  50. package/dist/native/ui52.js +92 -0
  51. package/dist/native/ui53.js +34 -0
  52. package/dist/native/ui54.js +17 -0
  53. package/dist/native/ui55.js +156 -0
  54. package/dist/native/ui56.js +33 -0
  55. package/dist/native/ui57.js +14 -0
  56. package/dist/native/ui58.js +22 -0
  57. package/dist/native/ui59.js +8 -0
  58. package/dist/native/ui6.js +79 -20
  59. package/dist/native/ui60.js +108 -0
  60. package/dist/native/ui61.js +76 -0
  61. package/dist/native/ui7.js +44 -65
  62. package/dist/native/ui8.js +25 -17
  63. package/dist/native/ui9.js +24 -12
  64. package/dist/web/octane-client-build.json +1 -1
  65. package/dist/web/ui.js +51 -19
  66. package/dist/web/ui10.js +33 -30
  67. package/dist/web/ui11.js +40 -55
  68. package/dist/web/ui12.js +36 -15
  69. package/dist/web/ui13.js +212 -20
  70. package/dist/web/ui14.js +84 -14
  71. package/dist/web/ui15.js +425 -46
  72. package/dist/web/ui16.js +12 -93
  73. package/dist/web/ui17.js +246 -28
  74. package/dist/web/ui18.js +238 -15
  75. package/dist/web/ui19.js +36 -8
  76. package/dist/web/ui2.js +15 -103
  77. package/dist/web/ui20.js +85 -0
  78. package/dist/web/ui21.js +111 -0
  79. package/dist/web/ui22.js +108 -0
  80. package/dist/web/ui23.js +96 -0
  81. package/dist/web/ui24.js +32 -0
  82. package/dist/web/ui25.js +108 -0
  83. package/dist/web/ui26.js +45 -0
  84. package/dist/web/ui27.js +16 -0
  85. package/dist/web/ui28.js +11 -0
  86. package/dist/web/ui29.js +58 -0
  87. package/dist/web/ui3.js +30 -27
  88. package/dist/web/ui30.js +34 -0
  89. package/dist/web/ui31.js +123 -0
  90. package/dist/web/ui32.js +44 -0
  91. package/dist/web/ui33.js +159 -0
  92. package/dist/web/ui34.js +70 -0
  93. package/dist/web/ui35.js +57 -0
  94. package/dist/web/ui36.js +22 -0
  95. package/dist/web/ui37.js +7 -0
  96. package/dist/web/ui38.js +38 -0
  97. package/dist/web/ui39.js +154 -0
  98. package/dist/web/ui4.js +46 -24
  99. package/dist/web/ui40.js +43 -0
  100. package/dist/web/ui41.js +42 -0
  101. package/dist/web/ui42.js +76 -0
  102. package/dist/web/ui43.js +42 -0
  103. package/dist/web/ui44.js +62 -0
  104. package/dist/web/ui45.js +9 -0
  105. package/dist/web/ui46.js +45 -0
  106. package/dist/web/ui47.js +13 -0
  107. package/dist/web/ui48.js +63 -0
  108. package/dist/web/ui49.js +47 -0
  109. package/dist/web/ui5.js +158 -52
  110. package/dist/web/ui50.js +17 -0
  111. package/dist/web/ui51.js +149 -0
  112. package/dist/web/ui52.js +42 -0
  113. package/dist/web/ui53.js +17 -0
  114. package/dist/web/ui54.js +9 -0
  115. package/dist/web/ui55.js +22 -0
  116. package/dist/web/ui56.js +8 -0
  117. package/dist/web/ui57.js +44 -0
  118. package/dist/web/ui58.js +46 -0
  119. package/dist/web/ui6.js +85 -22
  120. package/dist/web/ui7.js +46 -41
  121. package/dist/web/ui8.js +28 -11
  122. package/dist/web/ui9.js +32 -13
  123. package/package.json +18 -6
  124. package/src/theme/tokens.css +444 -47
  125. package/types/index.d.ts +180 -29
  126. package/types/props.d.ts +553 -8
@@ -3,108 +3,505 @@
3
3
 
4
4
  :root,
5
5
  .ns-root {
6
- --color-primary: #4f46e5;
7
- --color-on-primary: #ffffff;
8
- --color-surface: #ffffff;
9
- --color-text: #111827;
10
- --space-4: 16px;
6
+ --color-primary: #4f46e5;
7
+ --color-on-primary: #ffffff;
8
+ --color-surface: #ffffff;
9
+ --color-text: #111827;
10
+ --space-4: 16px;
11
+ /* Corner scale — rounded-rectangle radii. Smooth (squircle) corners are
12
+ the default corner treatment: every class that consumes a token also
13
+ declares `corner-shape: squircle`. Full-radius circles opt out —
14
+ `corner-shape` would reshape them into squircle disks on iOS/Chromium. */
15
+ --radius-sm: 6px;
16
+ --radius-md: 8px;
17
+ --radius-lg: 12px;
18
+ --radius-xl: 16px;
11
19
  }
12
20
 
13
21
  .ns-dark,
14
22
  .dark {
15
- --color-surface: #0f172a;
16
- --color-text: #f8fafc;
23
+ --color-surface: #0f172a;
24
+ --color-text: #f8fafc;
17
25
  }
18
26
 
19
27
  /* vocabulary base styles */
20
28
 
21
29
  .vx-view,
22
30
  .vx-row {
23
- display: flex;
31
+ display: flex;
24
32
  }
25
33
 
26
34
  .vx-view {
27
- flex-direction: column;
35
+ flex-direction: column;
28
36
  }
29
37
 
38
+ /* Safe-area values are zero when the viewport has no display cutout. */
39
+ .vx-safe-area {
40
+ padding-top: constant(safe-area-inset-top);
41
+ padding-right: constant(safe-area-inset-right);
42
+ padding-bottom: constant(safe-area-inset-bottom);
43
+ padding-left: constant(safe-area-inset-left);
44
+ }
45
+
46
+ .vx-safe-area {
47
+ padding-top: env(safe-area-inset-top);
48
+ padding-right: env(safe-area-inset-right);
49
+ padding-bottom: env(safe-area-inset-bottom);
50
+ padding-left: env(safe-area-inset-left);
51
+ }
52
+
53
+ .vx-keyboard-avoiding {
54
+ display: flex;
55
+ flex-direction: column;
56
+ }
57
+ /* xplat-web-only:start — the native Drawer leaf is the ui-drawer widget;
58
+ these rules style the web DOM drawer overlay */
59
+ .vx-drawer {
60
+ display: flex;
61
+ flex-direction: row;
62
+ position: relative;
63
+ overflow: hidden;
64
+ }
65
+ .vx-drawer-main {
66
+ display: flex;
67
+ flex: 1;
68
+ min-width: 0;
69
+ }
70
+ .vx-drawer-backdrop {
71
+ position: absolute;
72
+ inset: 0;
73
+ background: rgba(15, 23, 42, 0.35);
74
+ }
75
+ .vx-drawer-panel {
76
+ position: absolute;
77
+ z-index: 1;
78
+ top: 0;
79
+ bottom: 0;
80
+ left: 0;
81
+ width: 280px;
82
+ overflow: auto;
83
+ background: var(--color-surface);
84
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
85
+ }
86
+ /* xplat-web-only:end */
87
+
30
88
  .vx-row {
31
- flex-direction: row;
89
+ flex-direction: row;
90
+ }
91
+
92
+ .vx-grid,
93
+ .vx-stack {
94
+ display: grid;
95
+ }
96
+
97
+ .vx-stack > * {
98
+ grid-area: 1 / 1;
99
+ }
100
+
101
+ /* xplat-web-only:start — Absolute's native leaf is absolutelayout; CSS
102
+ positioning is web-only (children position via left/top props) */
103
+ .vx-absolute {
104
+ position: relative;
105
+ }
106
+
107
+ .vx-absolute > * {
108
+ position: absolute;
109
+ }
110
+ /* xplat-web-only:end */
111
+
112
+ .vx-spacer {
113
+ flex-grow: 1;
32
114
  }
33
115
 
34
116
  .vx-pressable {
35
- user-select: none;
117
+ display: flex;
118
+ flex-direction: column;
119
+ user-select: none;
36
120
  }
37
121
 
38
122
  /* web press feedback */
39
123
  .vx-pressable:active {
40
- opacity: 0.85;
124
+ opacity: 0.85;
125
+ }
126
+ .vx-pressable-no-feedback:active {
127
+ opacity: 1;
41
128
  }
42
129
  /* native press feedback (NS pseudo — dead rule on web, and vice versa) */
43
130
  .vx-pressable:pressed {
44
- opacity: 0.85;
131
+ opacity: 0.85;
132
+ }
133
+
134
+ /* xplat-web-only:start — overlays/toasts/popovers render through RootLayout
135
+ or showModal on native; these portal/positioning rules are web-only */
136
+ .vx-overlay {
137
+ z-index: 1000;
138
+ }
139
+
140
+ .vx-overlay-shade {
141
+ position: absolute;
142
+ inset: 0;
143
+ background-color: rgba(0, 0, 0, 0.45);
144
+ }
145
+
146
+ .vx-overlay-content {
147
+ position: relative;
148
+ z-index: 1;
149
+ }
150
+
151
+ .vx-popover {
152
+ z-index: 1001;
153
+ }
154
+
155
+ .vx-popover-backdrop {
156
+ background-color: transparent;
157
+ }
158
+
159
+ .vx-toast-host {
160
+ position: fixed;
161
+ z-index: 1002;
162
+ left: 0;
163
+ right: 0;
164
+ display: flex;
165
+ justify-content: center;
166
+ pointer-events: none;
167
+ }
168
+
169
+ .vx-toast-top {
170
+ top: 24px;
171
+ }
172
+ .vx-toast-bottom {
173
+ bottom: 24px;
174
+ }
175
+
176
+ .vx-toast {
177
+ pointer-events: auto;
178
+ }
179
+ /* xplat-web-only:end */
180
+
181
+ /* auto-grow owns height — the manual resize handle has no native analog */
182
+ /* xplat-web-only:start */
183
+ .vx-textarea {
184
+ resize: none;
185
+ }
186
+ /* xplat-web-only:end */
187
+
188
+ /* Modal is a real top-layer dialog on web. Presentation variants keep their
189
+ sizing and anchoring in tokens so both the component and openModal share it. */
190
+ /* xplat-web-only:start */
191
+ .vx-modal {
192
+ width: 480px;
193
+ max-width: 90%;
194
+ max-height: 90%;
195
+ padding: 24px;
196
+ border: 0;
197
+ border-radius: var(--radius-xl);
198
+ corner-shape: squircle;
199
+ color: var(--color-text);
200
+ background-color: var(--color-surface);
201
+ }
202
+
203
+ .vx-modal::backdrop {
204
+ background: rgba(15, 23, 42, 0.45);
205
+ }
206
+
207
+ .vx-modal--dialog {
208
+ width: 480px;
209
+ max-width: 90%;
210
+ }
211
+
212
+ .vx-modal--sheet {
213
+ width: 100%;
214
+ max-width: none;
215
+ max-height: 85%;
216
+ position: fixed;
217
+ inset: auto 0 0;
218
+ margin: 0;
219
+ border-top-left-radius: var(--radius-xl);
220
+ border-top-right-radius: var(--radius-xl);
221
+ corner-shape: squircle;
222
+ }
223
+
224
+ .vx-modal--fullscreen {
225
+ width: 100%;
226
+ max-width: none;
227
+ height: 100%;
228
+ max-height: none;
229
+ margin: 0;
230
+ border-radius: 0;
231
+ }
232
+
233
+ /* Modal ROUTES (pushRoute presentation:'modal') — the URL stays underneath,
234
+ so the overlay is a fixed layer over the shell rather than a dialog. */
235
+ .vx-modalroute {
236
+ position: fixed;
237
+ inset: 0;
238
+ z-index: 1000;
239
+ display: flex;
240
+ align-items: stretch;
241
+ justify-content: stretch;
45
242
  }
46
243
 
244
+ .vx-modalroute-shade {
245
+ position: absolute;
246
+ inset: 0;
247
+ border: 0;
248
+ padding: 0;
249
+ background: rgba(15, 23, 42, 0.45);
250
+ cursor: default;
251
+ }
252
+
253
+ .vx-modalroute-body {
254
+ position: relative;
255
+ flex: 1;
256
+ min-width: 0;
257
+ overflow: auto;
258
+ color: var(--color-text);
259
+ background-color: var(--color-surface);
260
+ }
261
+ /* xplat-web-only:end */
262
+
263
+ /* xplat-web-only:start — placeholder pseudos are DOM-only */
264
+ input::placeholder,
265
+ textarea::placeholder {
266
+ color: var(--placeholder-color, currentColor);
267
+ }
268
+ /* xplat-web-only:end */
269
+
270
+ /* xplat-web-only:start — native ActivityIndicator is the NS widget */
271
+ .vx-spinner {
272
+ display: inline-block;
273
+ width: 1em;
274
+ height: 1em;
275
+ box-sizing: border-box;
276
+ border: 2px solid currentColor;
277
+ border-right-color: transparent;
278
+ border-radius: 50%;
279
+ animation: vx-spinner-turn 0.8s linear infinite;
280
+ }
281
+
282
+ @keyframes vx-spinner-turn {
283
+ to {
284
+ transform: rotate(360deg);
285
+ }
286
+ }
287
+ /* xplat-web-only:end */
288
+
289
+ .vx-h1 {
290
+ font-size: 2em;
291
+ font-weight: bold;
292
+ }
293
+ .vx-h2 {
294
+ font-size: 1.5em;
295
+ font-weight: bold;
296
+ }
297
+ .vx-h3 {
298
+ font-size: 1.17em;
299
+ font-weight: bold;
300
+ }
301
+ .vx-h4 {
302
+ font-size: 1em;
303
+ font-weight: bold;
304
+ }
305
+ .vx-h5 {
306
+ font-size: 0.83em;
307
+ font-weight: bold;
308
+ }
309
+ .vx-h6 {
310
+ font-size: 0.67em;
311
+ font-weight: bold;
312
+ }
313
+
314
+ /* xplat-web-only:start — glass material is real on iOS 26+; web approximates
315
+ with backdrop-filter. The class also lands on native elements (inert) so
316
+ apps can style their own fallback — but these rules are DOM-only. */
317
+ .vx-glass {
318
+ background-color: color-mix(in srgb, var(--color-surface) 30%, transparent);
319
+ border: 1px solid rgba(255, 255, 255, 0.25);
320
+ }
321
+
322
+ @supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
323
+ .vx-glass {
324
+ background-color: color-mix(in srgb, var(--color-surface) 20%, transparent);
325
+ -webkit-backdrop-filter: blur(20px) saturate(1.6);
326
+ backdrop-filter: blur(20px) saturate(1.6);
327
+ }
328
+ }
329
+
330
+ .vx-glass--clear {
331
+ background-color: color-mix(in srgb, var(--color-surface) 12%, transparent);
332
+ border-color: rgba(255, 255, 255, 0.15);
333
+ }
334
+
335
+ @supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
336
+ .vx-glass--clear {
337
+ -webkit-backdrop-filter: blur(8px) saturate(1.3);
338
+ backdrop-filter: blur(8px) saturate(1.3);
339
+ }
340
+ }
341
+ /* xplat-web-only:end */
342
+
47
343
  /* utilities (hand-written subset for the harness; Tailwind later) */
48
344
 
49
- .flex-1 { flex-grow: 1; }
50
- .items-center { align-items: center; }
51
- .justify-center { justify-content: center; }
52
- .gap-4 { gap: 16px; }
345
+ .flex-1 {
346
+ flex-grow: 1;
347
+ }
348
+ /* Flex divergence guards — NS FlexboxLayout diverges from web flexbox on
349
+ * shrinkability: grow children never shrink below intrinsic width, fixed
350
+ * children get crushed, and auto-height rows re-measure grow children at
351
+ * zero height. min-w-0/min-h-0 let a grow child shrink; shrink-0 protects
352
+ * a fixed-size child. All three are plain CSS on web. */
353
+ .min-w-0 {
354
+ min-width: 0;
355
+ }
356
+ .min-h-0 {
357
+ min-height: 0;
358
+ }
359
+ .shrink-0 {
360
+ flex-shrink: 0;
361
+ }
362
+ .grow {
363
+ flex-grow: 1;
364
+ }
365
+ .items-center {
366
+ align-items: center;
367
+ }
368
+ .justify-center {
369
+ justify-content: center;
370
+ }
371
+ .gap-4 {
372
+ gap: 16px;
373
+ }
374
+
375
+ .text-xl {
376
+ font-size: 20px;
377
+ }
378
+ .font-bold {
379
+ font-weight: bold;
380
+ }
53
381
 
54
- .text-xl { font-size: 20px; }
55
- .font-bold { font-weight: bold; }
382
+ /* Corner utilities — consume the --radius-* scale and carry the smooth
383
+ (squircle) corner treatment. Circles stay circular: .rounded-full omits
384
+ corner-shape deliberately (squircle at full radius = a squircle disk,
385
+ not a circle). Opt out per element with `corner-shape: round`. */
386
+ .rounded-sm {
387
+ border-radius: var(--radius-sm);
388
+ corner-shape: squircle;
389
+ }
390
+ .rounded-md {
391
+ border-radius: var(--radius-md);
392
+ corner-shape: squircle;
393
+ }
394
+ .rounded-lg {
395
+ border-radius: var(--radius-lg);
396
+ corner-shape: squircle;
397
+ }
398
+ .rounded-xl {
399
+ border-radius: var(--radius-xl);
400
+ corner-shape: squircle;
401
+ }
402
+ .rounded-full {
403
+ border-radius: 9999px;
404
+ }
56
405
 
57
- .bg-primary { background-color: var(--color-primary); }
58
- .text-onprimary { color: var(--color-on-primary); }
59
- .bg-danger { background-color: #dc2626; }
60
- .shadow-2 { box-shadow: 0 4px 12px rgba(0,0,0,0.25); }
406
+ .bg-primary {
407
+ background-color: var(--color-primary);
408
+ }
409
+ .text-onprimary {
410
+ color: var(--color-on-primary);
411
+ }
412
+ .bg-danger {
413
+ background-color: #dc2626;
414
+ }
415
+ /* xplat-web-only:start — box-shadow is inert on native (elevation is
416
+ Android-only; no shared mapping yet) */
417
+ .shadow-2 {
418
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
419
+ }
420
+ /* xplat-web-only:end */
61
421
 
62
422
  .btn {
63
- padding-top: 12px;
64
- padding-right: 20px;
65
- padding-bottom: 12px;
66
- padding-left: 20px;
67
- border-radius: 8px;
423
+ padding-top: 12px;
424
+ padding-right: 20px;
425
+ padding-bottom: 12px;
426
+ padding-left: 20px;
427
+ border-radius: var(--radius-md);
428
+ corner-shape: squircle;
68
429
  }
69
430
 
70
431
  /* harness experiment styles */
71
432
 
72
433
  .vx-app {
73
- padding: 24px;
74
- background-color: var(--color-surface);
75
- color: var(--color-text);
434
+ padding: 24px;
435
+ background-color: var(--color-surface);
436
+ color: var(--color-text);
76
437
  }
77
438
 
78
439
  .vx-app .text-xl,
79
440
  .vx-app Text,
80
441
  .vx-app label {
81
- color: var(--color-text);
442
+ color: var(--color-text);
82
443
  }
83
444
 
84
445
  .input {
85
- padding: 10px;
86
- border-width: 1px;
87
- border-color: #94a3b8;
88
- border-radius: 6px;
89
- font-size: 16px;
446
+ padding: 10px;
447
+ border-width: 1px;
448
+ border-color: #94a3b8;
449
+ border-radius: var(--radius-sm);
450
+ corner-shape: squircle;
451
+ font-size: 16px;
90
452
  }
91
453
 
92
454
  .chip {
93
- background-color: var(--color-primary);
94
- color: var(--color-on-primary);
95
- padding: 4px 10px;
96
- border-radius: 12px;
97
- font-size: 13px;
455
+ background-color: var(--color-primary);
456
+ color: var(--color-on-primary);
457
+ padding: 4px 10px;
458
+ border-radius: var(--radius-lg);
459
+ corner-shape: squircle;
460
+ font-size: 13px;
98
461
  }
99
462
 
100
463
  .cell {
101
- padding: 12px;
102
- border-bottom-width: 1px;
103
- border-bottom-color: #e2e8f0;
464
+ padding: 12px;
465
+ border-bottom-width: 1px;
466
+ border-bottom-color: #e2e8f0;
104
467
  }
105
468
 
106
469
  .vx-list {
107
- flex-grow: 1;
470
+ flex-grow: 1;
108
471
  }
109
472
 
110
- .gap-2 { gap: 8px; }
473
+ .gap-2 {
474
+ gap: 8px;
475
+ }
476
+
477
+ /* In-window sheet — bottom-anchored panel (matches the native RootLayout
478
+ sheet). Layer is pointer-events:none; backdrop + panel re-enable. */
479
+ .vx-sheet-layer {
480
+ position: fixed;
481
+ inset: 0;
482
+ z-index: 1100;
483
+ pointer-events: none;
484
+ }
485
+
486
+ .vx-sheet-backdrop {
487
+ position: absolute;
488
+ inset: 0;
489
+ background: rgba(15, 23, 42, 0.45);
490
+ pointer-events: auto;
491
+ }
492
+
493
+ .vx-sheet {
494
+ position: absolute;
495
+ left: 0;
496
+ right: 0;
497
+ bottom: 0;
498
+ max-height: 85%;
499
+ padding: 24px;
500
+ overflow: auto;
501
+ border-top-left-radius: var(--radius-xl);
502
+ border-top-right-radius: var(--radius-xl);
503
+ corner-shape: squircle;
504
+ background-color: var(--color-surface);
505
+ color: var(--color-text);
506
+ pointer-events: auto;
507
+ }