@usevyre/react 1.3.0 → 1.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.
@@ -4118,3 +4118,692 @@
4118
4118
  .vyre-stack[data-h="lg"], .vyre-grid[data-h="lg"], .vyre-box[data-h="lg"] { height: 24rem; }
4119
4119
  .vyre-stack[data-h="xl"], .vyre-grid[data-h="xl"], .vyre-box[data-h="xl"] { height: 32rem; }
4120
4120
  .vyre-stack[data-h="2xl"], .vyre-grid[data-h="2xl"], .vyre-box[data-h="2xl"] { height: 42rem; }
4121
+
4122
+ /* ── Form ───────────────────────────────────────────────────── */
4123
+ /* Vertical stack of fields with token spacing. The wrapped Field */
4124
+ /* handles label / error / hint; Form only owns layout rhythm. */
4125
+ .vyre-form {
4126
+ display: flex;
4127
+ flex-direction: column;
4128
+ gap: var(--vyre-spacing-5);
4129
+ }
4130
+ .vyre-form-field {
4131
+ margin: 0;
4132
+ }
4133
+
4134
+ /* ── NumberInput ────────────────────────────────────────────── */
4135
+ /* Stepper buttons + numeric field. Same token palette as Input. */
4136
+ .vyre-number-input {
4137
+ display: inline-flex;
4138
+ align-items: stretch;
4139
+ background: var(--vyre-color-semantic-surface-raised);
4140
+ border: 1px solid var(--vyre-color-semantic-border);
4141
+ border-radius: var(--vyre-border-radius-md);
4142
+ overflow: hidden;
4143
+ transition: border-color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
4144
+ box-shadow var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
4145
+ }
4146
+ .vyre-number-input:focus-within {
4147
+ border-color: var(--vyre-color-semantic-accent);
4148
+ box-shadow: 0 0 0 3px var(--vyre-color-semantic-accent-subtle);
4149
+ }
4150
+ .vyre-field--error .vyre-number-input {
4151
+ border-color: var(--vyre-color-semantic-danger);
4152
+ }
4153
+ .vyre-field--error .vyre-number-input:focus-within {
4154
+ box-shadow: 0 0 0 3px var(--vyre-color-semantic-danger-subtle);
4155
+ }
4156
+ .vyre-number-input--disabled {
4157
+ opacity: 0.55;
4158
+ cursor: not-allowed;
4159
+ }
4160
+
4161
+ .vyre-number-input__field {
4162
+ flex: 1;
4163
+ min-width: 3rem;
4164
+ border: none;
4165
+ outline: none;
4166
+ background: transparent;
4167
+ text-align: center;
4168
+ color: var(--vyre-color-semantic-text-primary);
4169
+ font-family: var(--vyre-typography-font-family-body);
4170
+ font-variant-numeric: tabular-nums;
4171
+ -moz-appearance: textfield;
4172
+ }
4173
+ .vyre-number-input__field:disabled {
4174
+ cursor: not-allowed;
4175
+ }
4176
+
4177
+ .vyre-number-input__btn {
4178
+ display: flex;
4179
+ align-items: center;
4180
+ justify-content: center;
4181
+ border: none;
4182
+ background: transparent;
4183
+ color: var(--vyre-color-semantic-text-secondary);
4184
+ cursor: pointer;
4185
+ user-select: none;
4186
+ font-size: var(--vyre-typography-font-size-md);
4187
+ line-height: 1;
4188
+ transition: background var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
4189
+ color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
4190
+ }
4191
+ .vyre-number-input__btn:hover:not(:disabled) {
4192
+ background: var(--vyre-color-semantic-surface);
4193
+ color: var(--vyre-color-semantic-text-primary);
4194
+ }
4195
+ .vyre-number-input__btn:active:not(:disabled) {
4196
+ background: var(--vyre-color-semantic-accent-subtle);
4197
+ }
4198
+ .vyre-number-input__btn:disabled {
4199
+ opacity: 0.4;
4200
+ cursor: not-allowed;
4201
+ }
4202
+
4203
+ /* Sizes — mirror Input's scale */
4204
+ .vyre-number-input--sm .vyre-number-input__field { padding: var(--vyre-spacing-2) var(--vyre-spacing-2); font-size: var(--vyre-typography-font-size-xs); }
4205
+ .vyre-number-input--sm .vyre-number-input__btn { width: 1.75rem; }
4206
+ .vyre-number-input--md .vyre-number-input__field { padding: var(--vyre-spacing-3) var(--vyre-spacing-3); font-size: var(--vyre-typography-font-size-sm); }
4207
+ .vyre-number-input--md .vyre-number-input__btn { width: 2.25rem; }
4208
+ .vyre-number-input--lg .vyre-number-input__field { padding: var(--vyre-spacing-4) var(--vyre-spacing-4); font-size: var(--vyre-typography-font-size-md); }
4209
+ .vyre-number-input--lg .vyre-number-input__btn { width: 2.75rem; }
4210
+
4211
+ /* ── ToggleGroup ────────────────────────────────────────────── */
4212
+ /* Segmented control: connected toggle buttons sharing a track. */
4213
+ .vyre-toggle-group {
4214
+ display: inline-flex;
4215
+ align-items: stretch;
4216
+ gap: 2px;
4217
+ padding: 3px;
4218
+ background: var(--vyre-color-semantic-surface);
4219
+ border: 1px solid var(--vyre-color-semantic-border);
4220
+ border-radius: var(--vyre-border-radius-lg);
4221
+ }
4222
+ .vyre-toggle-group[data-orientation="vertical"] {
4223
+ flex-direction: column;
4224
+ }
4225
+ .vyre-toggle-group--disabled {
4226
+ opacity: 0.55;
4227
+ cursor: not-allowed;
4228
+ }
4229
+
4230
+ .vyre-toggle-item {
4231
+ display: inline-flex;
4232
+ align-items: center;
4233
+ justify-content: center;
4234
+ gap: var(--vyre-spacing-2);
4235
+ border: none;
4236
+ background: transparent;
4237
+ color: var(--vyre-color-semantic-text-secondary);
4238
+ font-family: var(--vyre-typography-font-family-body);
4239
+ font-weight: var(--vyre-typography-font-weight-medium);
4240
+ border-radius: var(--vyre-border-radius-md);
4241
+ cursor: pointer;
4242
+ user-select: none;
4243
+ white-space: nowrap;
4244
+ transition: background var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
4245
+ color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
4246
+ }
4247
+ .vyre-toggle-item:hover:not(:disabled):not(.vyre-toggle-item--selected) {
4248
+ background: var(--vyre-color-semantic-surface-raised);
4249
+ color: var(--vyre-color-semantic-text-primary);
4250
+ }
4251
+ .vyre-toggle-item:focus-visible {
4252
+ outline: none;
4253
+ box-shadow: 0 0 0 2px var(--vyre-color-semantic-accent);
4254
+ }
4255
+ .vyre-toggle-item--selected {
4256
+ background: var(--vyre-color-semantic-surface-raised);
4257
+ color: var(--vyre-color-semantic-text-primary);
4258
+ box-shadow: var(--vyre-shadow-sm);
4259
+ }
4260
+ .vyre-toggle-item:disabled {
4261
+ opacity: 0.45;
4262
+ cursor: not-allowed;
4263
+ }
4264
+ .vyre-toggle-item__icon {
4265
+ display: inline-flex;
4266
+ align-items: center;
4267
+ }
4268
+
4269
+ /* Sizes */
4270
+ .vyre-toggle-group--sm .vyre-toggle-item { padding: var(--vyre-spacing-1) var(--vyre-spacing-3); font-size: var(--vyre-typography-font-size-xs); }
4271
+ .vyre-toggle-group--md .vyre-toggle-item { padding: var(--vyre-spacing-2) var(--vyre-spacing-4); font-size: var(--vyre-typography-font-size-sm); }
4272
+ .vyre-toggle-group--lg .vyre-toggle-item { padding: var(--vyre-spacing-3) var(--vyre-spacing-5); font-size: var(--vyre-typography-font-size-md); }
4273
+
4274
+ /* ── Stepper ────────────────────────────────────────────────── */
4275
+ /* Ordered linear flow: numbered/check indicators + connectors. */
4276
+ .vyre-stepper {
4277
+ display: flex;
4278
+ flex-direction: column;
4279
+ gap: var(--vyre-spacing-6);
4280
+ }
4281
+ .vyre-stepper__nav {
4282
+ display: flex;
4283
+ }
4284
+ .vyre-stepper--horizontal .vyre-stepper__nav {
4285
+ flex-direction: row;
4286
+ align-items: flex-start;
4287
+ }
4288
+ .vyre-stepper--vertical .vyre-stepper__nav {
4289
+ flex-direction: column;
4290
+ gap: var(--vyre-spacing-1);
4291
+ }
4292
+
4293
+ .vyre-step {
4294
+ display: flex;
4295
+ align-items: center;
4296
+ gap: var(--vyre-spacing-3);
4297
+ position: relative;
4298
+ }
4299
+ .vyre-stepper--horizontal .vyre-step {
4300
+ flex: 1;
4301
+ }
4302
+ .vyre-stepper--horizontal .vyre-step:last-child {
4303
+ flex: 0;
4304
+ }
4305
+ .vyre-stepper--vertical .vyre-step {
4306
+ align-items: flex-start;
4307
+ padding-bottom: var(--vyre-spacing-5);
4308
+ }
4309
+
4310
+ .vyre-step__indicator {
4311
+ display: flex;
4312
+ align-items: center;
4313
+ justify-content: center;
4314
+ flex-shrink: 0;
4315
+ width: 2rem;
4316
+ height: 2rem;
4317
+ border-radius: var(--vyre-border-radius-full);
4318
+ border: 2px solid var(--vyre-color-semantic-border);
4319
+ background: var(--vyre-color-semantic-surface);
4320
+ color: var(--vyre-color-semantic-text-secondary);
4321
+ font-family: var(--vyre-typography-font-family-body);
4322
+ font-size: var(--vyre-typography-font-size-sm);
4323
+ font-weight: var(--vyre-typography-font-weight-bold);
4324
+ cursor: default;
4325
+ transition: background var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
4326
+ border-color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
4327
+ color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
4328
+ }
4329
+ .vyre-step--current .vyre-step__indicator {
4330
+ border-color: var(--vyre-color-semantic-accent);
4331
+ color: var(--vyre-color-semantic-accent);
4332
+ background: var(--vyre-color-semantic-accent-subtle);
4333
+ }
4334
+ .vyre-step--completed .vyre-step__indicator {
4335
+ border-color: var(--vyre-color-semantic-accent);
4336
+ background: var(--vyre-color-semantic-accent);
4337
+ color: var(--vyre-color-semantic-accent-foreground);
4338
+ }
4339
+ .vyre-step--clickable .vyre-step__indicator {
4340
+ cursor: pointer;
4341
+ }
4342
+ .vyre-step--clickable .vyre-step__indicator:focus-visible {
4343
+ outline: none;
4344
+ box-shadow: 0 0 0 3px var(--vyre-color-semantic-accent-subtle);
4345
+ }
4346
+
4347
+ .vyre-step__text {
4348
+ display: flex;
4349
+ flex-direction: column;
4350
+ gap: 2px;
4351
+ min-width: 0;
4352
+ }
4353
+ .vyre-step__label {
4354
+ font-size: var(--vyre-typography-font-size-sm);
4355
+ font-weight: var(--vyre-typography-font-weight-medium);
4356
+ color: var(--vyre-color-semantic-text-primary);
4357
+ }
4358
+ .vyre-step--upcoming .vyre-step__label {
4359
+ color: var(--vyre-color-semantic-text-secondary);
4360
+ }
4361
+ .vyre-step__description {
4362
+ font-size: var(--vyre-typography-font-size-xs);
4363
+ color: var(--vyre-color-semantic-text-muted);
4364
+ }
4365
+
4366
+ /* Connector line between steps */
4367
+ .vyre-step__connector {
4368
+ background: var(--vyre-color-semantic-border);
4369
+ }
4370
+ .vyre-step--completed .vyre-step__connector {
4371
+ background: var(--vyre-color-semantic-accent);
4372
+ }
4373
+ .vyre-stepper--horizontal .vyre-step__connector {
4374
+ flex: 1;
4375
+ height: 2px;
4376
+ margin: 0 var(--vyre-spacing-2);
4377
+ }
4378
+ .vyre-stepper--horizontal .vyre-step:last-child .vyre-step__connector {
4379
+ display: none;
4380
+ }
4381
+ .vyre-stepper--vertical .vyre-step__connector {
4382
+ position: absolute;
4383
+ left: calc(1rem - 1px);
4384
+ top: 2rem;
4385
+ width: 2px;
4386
+ height: calc(100% - 2rem);
4387
+ }
4388
+ .vyre-stepper--vertical .vyre-step:last-child .vyre-step__connector {
4389
+ display: none;
4390
+ }
4391
+
4392
+ .vyre-step-panel {
4393
+ animation: vyre-step-panel-in var(--vyre-transition-duration-normal) var(--vyre-transition-easing-out);
4394
+ }
4395
+ @keyframes vyre-step-panel-in {
4396
+ from { opacity: 0; transform: translateY(4px); }
4397
+ to { opacity: 1; transform: translateY(0); }
4398
+ }
4399
+
4400
+ /* ── EmptyState ─────────────────────────────────────────────── */
4401
+ /* Centered placeholder: icon + title + description + CTA slot. */
4402
+ .vyre-empty-state {
4403
+ display: flex;
4404
+ flex-direction: column;
4405
+ align-items: center;
4406
+ text-align: center;
4407
+ gap: var(--vyre-spacing-3);
4408
+ padding: var(--vyre-spacing-10) var(--vyre-spacing-6);
4409
+ }
4410
+ .vyre-empty-state__icon {
4411
+ display: flex;
4412
+ align-items: center;
4413
+ justify-content: center;
4414
+ color: var(--vyre-color-semantic-text-muted);
4415
+ }
4416
+ .vyre-empty-state__title {
4417
+ color: var(--vyre-color-semantic-text-primary);
4418
+ font-family: var(--vyre-typography-font-family-body);
4419
+ font-weight: var(--vyre-typography-font-weight-bold);
4420
+ }
4421
+ .vyre-empty-state__description {
4422
+ color: var(--vyre-color-semantic-text-muted);
4423
+ font-size: var(--vyre-typography-font-size-sm);
4424
+ max-width: 32ch;
4425
+ line-height: var(--vyre-typography-line-height-normal);
4426
+ }
4427
+ .vyre-empty-state__action {
4428
+ margin-top: var(--vyre-spacing-2);
4429
+ display: flex;
4430
+ gap: var(--vyre-spacing-2);
4431
+ flex-wrap: wrap;
4432
+ justify-content: center;
4433
+ }
4434
+ .vyre-empty-state[data-variant="error"] .vyre-empty-state__icon {
4435
+ color: var(--vyre-color-semantic-danger);
4436
+ }
4437
+
4438
+ /* Sizes */
4439
+ .vyre-empty-state--sm {
4440
+ padding: var(--vyre-spacing-6) var(--vyre-spacing-4);
4441
+ gap: var(--vyre-spacing-2);
4442
+ }
4443
+ .vyre-empty-state--sm .vyre-empty-state__icon svg { width: 28px; height: 28px; }
4444
+ .vyre-empty-state--sm .vyre-empty-state__title { font-size: var(--vyre-typography-font-size-sm); }
4445
+ .vyre-empty-state--md .vyre-empty-state__title { font-size: var(--vyre-typography-font-size-md); }
4446
+ .vyre-empty-state--lg {
4447
+ padding: var(--vyre-spacing-16) var(--vyre-spacing-8);
4448
+ gap: var(--vyre-spacing-4);
4449
+ }
4450
+ .vyre-empty-state--lg .vyre-empty-state__icon svg { width: 56px; height: 56px; }
4451
+ .vyre-empty-state--lg .vyre-empty-state__title { font-size: var(--vyre-typography-font-size-lg); }
4452
+
4453
+ /* ── Stat ───────────────────────────────────────────────────── */
4454
+ /* Dashboard KPI: label + large value + trend-colored delta. */
4455
+ .vyre-stat {
4456
+ display: flex;
4457
+ align-items: flex-start;
4458
+ gap: var(--vyre-spacing-3);
4459
+ }
4460
+ .vyre-stat__icon {
4461
+ display: flex;
4462
+ align-items: center;
4463
+ justify-content: center;
4464
+ flex-shrink: 0;
4465
+ color: var(--vyre-color-semantic-text-muted);
4466
+ }
4467
+ .vyre-stat__body {
4468
+ display: flex;
4469
+ flex-direction: column;
4470
+ gap: var(--vyre-spacing-1);
4471
+ min-width: 0;
4472
+ }
4473
+ .vyre-stat__label {
4474
+ color: var(--vyre-color-semantic-text-muted);
4475
+ font-family: var(--vyre-typography-font-family-body);
4476
+ font-size: var(--vyre-typography-font-size-sm);
4477
+ }
4478
+ .vyre-stat__value {
4479
+ color: var(--vyre-color-semantic-text-primary);
4480
+ font-family: var(--vyre-typography-font-family-body);
4481
+ font-weight: var(--vyre-typography-font-weight-bold);
4482
+ font-variant-numeric: tabular-nums;
4483
+ line-height: var(--vyre-typography-line-height-tight);
4484
+ }
4485
+ .vyre-stat__delta {
4486
+ display: inline-flex;
4487
+ align-items: center;
4488
+ gap: var(--vyre-spacing-1);
4489
+ font-size: var(--vyre-typography-font-size-xs);
4490
+ color: var(--vyre-color-semantic-text-muted);
4491
+ }
4492
+ .vyre-stat__delta[data-trend="up"] { color: var(--vyre-color-semantic-success); }
4493
+ .vyre-stat__delta[data-trend="down"] { color: var(--vyre-color-semantic-danger); }
4494
+ .vyre-stat__delta-value {
4495
+ font-weight: var(--vyre-typography-font-weight-medium);
4496
+ }
4497
+ .vyre-stat__delta-label {
4498
+ color: var(--vyre-color-semantic-text-muted);
4499
+ font-weight: var(--vyre-typography-font-weight-regular);
4500
+ }
4501
+
4502
+ /* Sizes */
4503
+ .vyre-stat--sm .vyre-stat__value { font-size: var(--vyre-typography-font-size-lg); }
4504
+ .vyre-stat--md .vyre-stat__value { font-size: var(--vyre-typography-font-size-2xl); }
4505
+ .vyre-stat--lg .vyre-stat__value { font-size: var(--vyre-typography-font-size-3xl); }
4506
+
4507
+ /* StatGroup — evenly split row with dividers */
4508
+ .vyre-stat-group {
4509
+ display: flex;
4510
+ flex-wrap: wrap;
4511
+ }
4512
+ .vyre-stat-group > .vyre-stat {
4513
+ flex: 1;
4514
+ min-width: 8rem;
4515
+ padding: 0 var(--vyre-spacing-5);
4516
+ border-left: 1px solid var(--vyre-color-semantic-border-subtle);
4517
+ }
4518
+ .vyre-stat-group > .vyre-stat:first-child {
4519
+ padding-left: 0;
4520
+ border-left: none;
4521
+ }
4522
+
4523
+ /* ── Timeline ───────────────────────────────────────────────── */
4524
+ /* Vertical activity feed: status dot + connector + content. */
4525
+ .vyre-timeline {
4526
+ list-style: none;
4527
+ margin: 0;
4528
+ padding: 0;
4529
+ display: flex;
4530
+ flex-direction: column;
4531
+ }
4532
+ .vyre-timeline-item {
4533
+ display: flex;
4534
+ gap: var(--vyre-spacing-3);
4535
+ }
4536
+ .vyre-timeline-item__marker {
4537
+ display: flex;
4538
+ flex-direction: column;
4539
+ align-items: center;
4540
+ flex-shrink: 0;
4541
+ width: 1.25rem;
4542
+ }
4543
+ .vyre-timeline-item__dot {
4544
+ width: 0.625rem;
4545
+ height: 0.625rem;
4546
+ margin-top: 0.3rem;
4547
+ border-radius: var(--vyre-border-radius-full);
4548
+ background: var(--vyre-color-semantic-border);
4549
+ flex-shrink: 0;
4550
+ }
4551
+ .vyre-timeline-item__icon {
4552
+ display: flex;
4553
+ align-items: center;
4554
+ justify-content: center;
4555
+ margin-top: 0.1rem;
4556
+ color: var(--vyre-color-semantic-text-muted);
4557
+ }
4558
+ .vyre-timeline-item__connector {
4559
+ flex: 1;
4560
+ width: 2px;
4561
+ margin-top: var(--vyre-spacing-1);
4562
+ background: var(--vyre-color-semantic-border-subtle);
4563
+ }
4564
+ .vyre-timeline-item:last-child .vyre-timeline-item__connector {
4565
+ display: none;
4566
+ }
4567
+
4568
+ /* Status dot colors */
4569
+ .vyre-timeline-item[data-status="success"] .vyre-timeline-item__dot,
4570
+ .vyre-timeline-item[data-status="success"] .vyre-timeline-item__icon { color: var(--vyre-color-semantic-success); background: var(--vyre-color-semantic-success); }
4571
+ .vyre-timeline-item[data-status="warning"] .vyre-timeline-item__dot,
4572
+ .vyre-timeline-item[data-status="warning"] .vyre-timeline-item__icon { color: var(--vyre-color-semantic-warning); background: var(--vyre-color-semantic-warning); }
4573
+ .vyre-timeline-item[data-status="danger"] .vyre-timeline-item__dot,
4574
+ .vyre-timeline-item[data-status="danger"] .vyre-timeline-item__icon { color: var(--vyre-color-semantic-danger); background: var(--vyre-color-semantic-danger); }
4575
+ .vyre-timeline-item[data-status="info"] .vyre-timeline-item__dot,
4576
+ .vyre-timeline-item[data-status="info"] .vyre-timeline-item__icon { color: var(--vyre-color-semantic-accent); background: var(--vyre-color-semantic-accent); }
4577
+ /* icon variant should not get a filled background */
4578
+ .vyre-timeline-item__icon { background: transparent !important; }
4579
+
4580
+ .vyre-timeline-item__body {
4581
+ padding-bottom: var(--vyre-spacing-5);
4582
+ min-width: 0;
4583
+ flex: 1;
4584
+ }
4585
+ .vyre-timeline-item:last-child .vyre-timeline-item__body {
4586
+ padding-bottom: 0;
4587
+ }
4588
+ .vyre-timeline-item__head {
4589
+ display: flex;
4590
+ align-items: baseline;
4591
+ justify-content: space-between;
4592
+ gap: var(--vyre-spacing-3);
4593
+ }
4594
+ .vyre-timeline-item__title {
4595
+ color: var(--vyre-color-semantic-text-primary);
4596
+ font-family: var(--vyre-typography-font-family-body);
4597
+ font-size: var(--vyre-typography-font-size-sm);
4598
+ font-weight: var(--vyre-typography-font-weight-medium);
4599
+ }
4600
+ .vyre-timeline-item__time {
4601
+ color: var(--vyre-color-semantic-text-muted);
4602
+ font-size: var(--vyre-typography-font-size-xs);
4603
+ white-space: nowrap;
4604
+ flex-shrink: 0;
4605
+ }
4606
+ .vyre-timeline-item__content {
4607
+ margin-top: var(--vyre-spacing-1);
4608
+ color: var(--vyre-color-semantic-text-secondary);
4609
+ font-size: var(--vyre-typography-font-size-sm);
4610
+ }
4611
+
4612
+ /* ── Tree ───────────────────────────────────────────────────── */
4613
+ /* Hierarchical view: rows with chevron, recursive groups. */
4614
+ .vyre-tree,
4615
+ .vyre-tree__group {
4616
+ list-style: none;
4617
+ margin: 0;
4618
+ padding: 0;
4619
+ }
4620
+ .vyre-tree {
4621
+ font-family: var(--vyre-typography-font-family-body);
4622
+ font-size: var(--vyre-typography-font-size-sm);
4623
+ }
4624
+ .vyre-tree__row {
4625
+ display: flex;
4626
+ align-items: center;
4627
+ gap: var(--vyre-spacing-2);
4628
+ padding: var(--vyre-spacing-1) var(--vyre-spacing-2);
4629
+ border-radius: var(--vyre-border-radius-md);
4630
+ color: var(--vyre-color-semantic-text-secondary);
4631
+ cursor: pointer;
4632
+ user-select: none;
4633
+ outline: none;
4634
+ }
4635
+ .vyre-tree__row:hover {
4636
+ background: var(--vyre-color-semantic-surface-raised);
4637
+ color: var(--vyre-color-semantic-text-primary);
4638
+ }
4639
+ .vyre-tree__row:focus-visible {
4640
+ box-shadow: inset 0 0 0 2px var(--vyre-color-semantic-accent);
4641
+ }
4642
+ .vyre-tree__row[data-selected] {
4643
+ background: var(--vyre-color-semantic-accent-subtle);
4644
+ color: var(--vyre-color-semantic-accent);
4645
+ font-weight: var(--vyre-typography-font-weight-medium);
4646
+ }
4647
+ .vyre-tree__row[aria-disabled="true"] {
4648
+ opacity: 0.45;
4649
+ cursor: not-allowed;
4650
+ }
4651
+ .vyre-tree__chevron-slot {
4652
+ display: inline-flex;
4653
+ align-items: center;
4654
+ justify-content: center;
4655
+ width: 0.75rem;
4656
+ flex-shrink: 0;
4657
+ color: var(--vyre-color-semantic-text-muted);
4658
+ }
4659
+ .vyre-tree__chevron {
4660
+ transition: transform var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
4661
+ }
4662
+ .vyre-tree__chevron[data-open] {
4663
+ transform: rotate(90deg);
4664
+ }
4665
+ .vyre-tree__icon {
4666
+ display: inline-flex;
4667
+ align-items: center;
4668
+ flex-shrink: 0;
4669
+ color: var(--vyre-color-semantic-text-muted);
4670
+ }
4671
+ .vyre-tree__label {
4672
+ overflow: hidden;
4673
+ text-overflow: ellipsis;
4674
+ white-space: nowrap;
4675
+ }
4676
+
4677
+ /* ── OTPInput ───────────────────────────────────────────────── */
4678
+ /* Segmented one-time-code slots. Same token palette as Input. */
4679
+ .vyre-otp {
4680
+ display: inline-flex;
4681
+ gap: var(--vyre-spacing-2);
4682
+ }
4683
+ .vyre-otp__slot {
4684
+ width: 2.75rem;
4685
+ height: 3rem;
4686
+ text-align: center;
4687
+ font-family: var(--vyre-typography-font-family-body);
4688
+ font-size: var(--vyre-typography-font-size-lg);
4689
+ font-weight: var(--vyre-typography-font-weight-medium);
4690
+ font-variant-numeric: tabular-nums;
4691
+ color: var(--vyre-color-semantic-text-primary);
4692
+ background: var(--vyre-color-semantic-surface-raised);
4693
+ border: 1px solid var(--vyre-color-semantic-border);
4694
+ border-radius: var(--vyre-border-radius-md);
4695
+ outline: none;
4696
+ -webkit-appearance: none;
4697
+ transition: border-color var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
4698
+ box-shadow var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
4699
+ }
4700
+ .vyre-otp__slot:focus {
4701
+ border-color: var(--vyre-color-semantic-accent);
4702
+ box-shadow: 0 0 0 3px var(--vyre-color-semantic-accent-subtle);
4703
+ }
4704
+ .vyre-otp__slot:disabled {
4705
+ opacity: 0.55;
4706
+ cursor: not-allowed;
4707
+ }
4708
+ .vyre-field--error .vyre-otp__slot {
4709
+ border-color: var(--vyre-color-semantic-danger);
4710
+ }
4711
+ .vyre-field--error .vyre-otp__slot:focus {
4712
+ box-shadow: 0 0 0 3px var(--vyre-color-semantic-danger-subtle);
4713
+ }
4714
+
4715
+ /* Sizes */
4716
+ .vyre-otp--sm .vyre-otp__slot { width: 2.25rem; height: 2.5rem; font-size: var(--vyre-typography-font-size-md); }
4717
+ .vyre-otp--lg .vyre-otp__slot { width: 3.25rem; height: 3.5rem; font-size: var(--vyre-typography-font-size-xl); }
4718
+
4719
+ /* ── Carousel ───────────────────────────────────────────────── */
4720
+ /* Snap-scrolling slider + arrows + dot indicators. */
4721
+ .vyre-carousel {
4722
+ position: relative;
4723
+ display: flex;
4724
+ flex-direction: column;
4725
+ gap: var(--vyre-spacing-3);
4726
+ }
4727
+ .vyre-carousel__viewport {
4728
+ position: relative;
4729
+ overflow: hidden;
4730
+ border-radius: var(--vyre-border-radius-lg);
4731
+ }
4732
+ .vyre-carousel__track {
4733
+ display: flex;
4734
+ overflow-x: auto;
4735
+ scroll-snap-type: x mandatory;
4736
+ scrollbar-width: none;
4737
+ outline: none;
4738
+ }
4739
+ .vyre-carousel__track::-webkit-scrollbar {
4740
+ display: none;
4741
+ }
4742
+ .vyre-carousel__slide {
4743
+ flex: 0 0 100%;
4744
+ min-width: 0;
4745
+ scroll-snap-align: start;
4746
+ }
4747
+ .vyre-carousel__track:focus-visible {
4748
+ box-shadow: inset 0 0 0 2px var(--vyre-color-semantic-accent);
4749
+ }
4750
+
4751
+ .vyre-carousel__arrow {
4752
+ position: absolute;
4753
+ top: 50%;
4754
+ transform: translateY(-50%);
4755
+ display: flex;
4756
+ align-items: center;
4757
+ justify-content: center;
4758
+ width: 2.25rem;
4759
+ height: 2.25rem;
4760
+ border: none;
4761
+ border-radius: var(--vyre-border-radius-full);
4762
+ background: var(--vyre-color-semantic-surface-raised);
4763
+ color: var(--vyre-color-semantic-text-primary);
4764
+ box-shadow: var(--vyre-shadow-md);
4765
+ cursor: pointer;
4766
+ transition: opacity var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
4767
+ background var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
4768
+ }
4769
+ .vyre-carousel__arrow:hover:not(:disabled) {
4770
+ background: var(--vyre-color-semantic-surface);
4771
+ }
4772
+ .vyre-carousel__arrow:focus-visible {
4773
+ outline: none;
4774
+ box-shadow: 0 0 0 3px var(--vyre-color-semantic-accent-subtle);
4775
+ }
4776
+ .vyre-carousel__arrow:disabled {
4777
+ opacity: 0;
4778
+ pointer-events: none;
4779
+ }
4780
+ .vyre-carousel__arrow--prev { left: var(--vyre-spacing-3); }
4781
+ .vyre-carousel__arrow--next { right: var(--vyre-spacing-3); }
4782
+
4783
+ .vyre-carousel__indicators {
4784
+ display: flex;
4785
+ justify-content: center;
4786
+ gap: var(--vyre-spacing-2);
4787
+ }
4788
+ .vyre-carousel__dot {
4789
+ width: 0.5rem;
4790
+ height: 0.5rem;
4791
+ padding: 0;
4792
+ border: none;
4793
+ border-radius: var(--vyre-border-radius-full);
4794
+ background: var(--vyre-color-semantic-border);
4795
+ cursor: pointer;
4796
+ transition: background var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out),
4797
+ width var(--vyre-transition-duration-fast) var(--vyre-transition-easing-out);
4798
+ }
4799
+ .vyre-carousel__dot:hover {
4800
+ background: var(--vyre-color-semantic-text-muted);
4801
+ }
4802
+ .vyre-carousel__dot[data-active] {
4803
+ width: 1.25rem;
4804
+ background: var(--vyre-color-semantic-accent);
4805
+ }
4806
+ .vyre-carousel__dot:focus-visible {
4807
+ outline: none;
4808
+ box-shadow: 0 0 0 3px var(--vyre-color-semantic-accent-subtle);
4809
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usevyre/react",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "useVyre React components — AI-native, accessible, zero-runtime styling",
5
5
  "keywords": [
6
6
  "design-system",