@ryanhelsing/ry-ui 1.0.3 → 1.0.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.
@@ -17,6 +17,9 @@
17
17
  @property --ry-color-secondary { syntax: "<color>"; inherits: true; initial-value: oklch(0.554 0.041 257.4); }
18
18
  @property --ry-color-secondary-hover { syntax: "<color>"; inherits: true; initial-value: oklch(0.446 0.037 257.3); }
19
19
  @property --ry-color-secondary-active { syntax: "<color>"; inherits: true; initial-value: oklch(0.372 0.039 257.3); }
20
+ @property --ry-color-accent { syntax: "<color>"; inherits: true; initial-value: oklch(0.627 0.213 303.9); }
21
+ @property --ry-color-accent-hover { syntax: "<color>"; inherits: true; initial-value: oklch(0.557 0.213 303.9); }
22
+ @property --ry-color-accent-active { syntax: "<color>"; inherits: true; initial-value: oklch(0.497 0.213 303.9); }
20
23
  @property --ry-color-success { syntax: "<color>"; inherits: true; initial-value: oklch(0.723 0.192 149.6); }
21
24
  @property --ry-color-warning { syntax: "<color>"; inherits: true; initial-value: oklch(0.769 0.165 70.1); }
22
25
  @property --ry-color-danger { syntax: "<color>"; inherits: true; initial-value: oklch(0.637 0.208 25.3); }
@@ -64,6 +67,11 @@
64
67
  --ry-color-secondary-hover: light-dark(oklch(0.446 0.037 257.3), oklch(0.869 0.02 252.9));
65
68
  --ry-color-secondary-active: light-dark(oklch(0.372 0.039 257.3), oklch(0.929 0.013 255.6));
66
69
 
70
+ /* Accent */
71
+ --ry-color-accent: light-dark(oklch(0.627 0.213 303.9), oklch(0.714 0.183 303.9));
72
+ --ry-color-accent-hover: light-dark(oklch(0.557 0.213 303.9), oklch(0.627 0.213 303.9));
73
+ --ry-color-accent-active: light-dark(oklch(0.497 0.213 303.9), oklch(0.557 0.213 303.9));
74
+
67
75
  /* Semantic */
68
76
  --ry-color-success: oklch(0.723 0.192 149.6);
69
77
  --ry-color-warning: oklch(0.769 0.165 70.1);
@@ -276,7 +284,7 @@ ry {
276
284
  ry-page, ry-header, ry-main, ry-footer, ry-section, ry-aside,
277
285
  ry-grid, ry-stack, ry-cluster, ry-split, ry-center,
278
286
  ry-card, ry-accordion, ry-modal, ry-tabs, ry-dropdown,
279
- ry-button, ry-badge, ry-alert, ry-field, ry-nav, ry-logo, ry-actions,
287
+ ry-button, ry-button-group, ry-badge, ry-alert, ry-field, ry-nav, ry-logo, ry-actions,
280
288
  ry-accordion-item, ry-tab, ry-menu, ry-menu-item, ry-divider,
281
289
  ry-theme-toggle, ry-select, ry-switch, ry-tooltip, ry-drawer, ry-toast,
282
290
  ry-toggle-button, ry-knob, ry-slider, ry-number-select, ry-color-picker, ry-color-input,
@@ -414,6 +422,16 @@ ry-grid[cols="4"] { grid-template-columns: repeat(4, 1fr); }
414
422
  ry-grid[cols="5"] { grid-template-columns: repeat(5, 1fr); }
415
423
  ry-grid[cols="6"] { grid-template-columns: repeat(6, 1fr); }
416
424
 
425
+ /* Auto-fit mode: fluid columns based on min-width */
426
+ ry-grid[cols="auto-fit"] {
427
+ grid-template-columns: repeat(auto-fit, minmax(var(--ry-grid-min, 280px), 1fr));
428
+ }
429
+
430
+ ry-grid[cols="auto-fill"] {
431
+ grid-template-columns: repeat(auto-fill, minmax(var(--ry-grid-min, 280px), 1fr));
432
+ }
433
+
434
+ /* Default responsive behavior */
417
435
  @container (max-width: 640px) {
418
436
  :is(ry-grid[cols="2"], ry-grid[cols="3"], ry-grid[cols="4"],
419
437
  ry-grid[cols="5"], ry-grid[cols="6"]) {
@@ -428,6 +446,28 @@ ry-grid[cols="6"] { grid-template-columns: repeat(6, 1fr); }
428
446
  }
429
447
  }
430
448
 
449
+ /* Per-breakpoint column overrides: cols-sm, cols-md, cols-lg */
450
+ @container (max-width: 640px) {
451
+ ry-grid[cols-sm="1"] { grid-template-columns: 1fr; }
452
+ ry-grid[cols-sm="2"] { grid-template-columns: repeat(2, 1fr); }
453
+ ry-grid[cols-sm="3"] { grid-template-columns: repeat(3, 1fr); }
454
+ }
455
+
456
+ @container (min-width: 641px) and (max-width: 1024px) {
457
+ ry-grid[cols-md="1"] { grid-template-columns: 1fr; }
458
+ ry-grid[cols-md="2"] { grid-template-columns: repeat(2, 1fr); }
459
+ ry-grid[cols-md="3"] { grid-template-columns: repeat(3, 1fr); }
460
+ ry-grid[cols-md="4"] { grid-template-columns: repeat(4, 1fr); }
461
+ }
462
+
463
+ @container (min-width: 1025px) {
464
+ ry-grid[cols-lg="2"] { grid-template-columns: repeat(2, 1fr); }
465
+ ry-grid[cols-lg="3"] { grid-template-columns: repeat(3, 1fr); }
466
+ ry-grid[cols-lg="4"] { grid-template-columns: repeat(4, 1fr); }
467
+ ry-grid[cols-lg="5"] { grid-template-columns: repeat(5, 1fr); }
468
+ ry-grid[cols-lg="6"] { grid-template-columns: repeat(6, 1fr); }
469
+ }
470
+
431
471
  /* ═══════════════════════════════════════════════════════════════
432
472
  STACK (vertical)
433
473
  ═══════════════════════════════════════════════════════════════ */
@@ -473,7 +513,46 @@ ry-split > :first-child {
473
513
 
474
514
  ry-split > :last-child {
475
515
  flex-shrink: 0;
476
- width: 300px;
516
+ width: var(--ry-split-width, 300px);
517
+ min-width: var(--ry-split-min-width, 0);
518
+ }
519
+
520
+ /* Resize handle */
521
+ ry-split [data-ry-target="handle"] {
522
+ flex-shrink: 0;
523
+ width: 8px;
524
+ margin-inline: -4px;
525
+ cursor: col-resize;
526
+ position: relative;
527
+ z-index: 1;
528
+ touch-action: none;
529
+ }
530
+
531
+ /* Larger hit area via pseudo-element */
532
+ ry-split [data-ry-target="handle"]::before {
533
+ content: '';
534
+ position: absolute;
535
+ inset-block: 0;
536
+ inset-inline: -4px;
537
+ }
538
+
539
+ /* Visible drag indicator */
540
+ ry-split [data-ry-target="handle"]::after {
541
+ content: '';
542
+ position: absolute;
543
+ inset-block-start: 50%;
544
+ inset-inline-start: 50%;
545
+ width: 4px;
546
+ height: 32px;
547
+ transform: translate(-50%, -50%);
548
+ border-radius: 2px;
549
+ opacity: 0;
550
+ transition: opacity var(--ry-duration-fast, 100ms);
551
+ }
552
+
553
+ ry-split [data-ry-target="handle"]:hover::after,
554
+ ry-split[data-ry-resizing] [data-ry-target="handle"]::after {
555
+ opacity: 1;
477
556
  }
478
557
 
479
558
  @container (max-width: 768px) {
@@ -483,6 +562,9 @@ ry-split > :last-child {
483
562
  ry-split > :last-child {
484
563
  width: 100%;
485
564
  }
565
+ ry-split [data-ry-target="handle"] {
566
+ display: none;
567
+ }
486
568
  }
487
569
 
488
570
  /* ═══════════════════════════════════════════════════════════════
@@ -578,6 +660,37 @@ ry-button[size="lg"] {
578
660
  padding: var(--ry-space-3, 0.75rem) var(--ry-space-6, 1.5rem);
579
661
  }
580
662
 
663
+ /* Icon-only button */
664
+ ry-button[icon]:empty {
665
+ padding: var(--ry-space-2, 0.5rem);
666
+ }
667
+
668
+ ry-button[icon][size="sm"]:empty {
669
+ padding: var(--ry-space-1, 0.25rem);
670
+ }
671
+
672
+ /* ═══════════════════════════════════════════════════════════════
673
+ BUTTON GROUP
674
+ ═══════════════════════════════════════════════════════════════ */
675
+
676
+ ry-button-group {
677
+ display: inline-flex;
678
+ }
679
+
680
+ ry-button-group > :is(ry-button, ry-toggle-button) {
681
+ border-radius: 0;
682
+ }
683
+
684
+ ry-button-group > :is(ry-button, ry-toggle-button):first-child {
685
+ border-start-start-radius: var(--ry-radius-md, 0.375rem);
686
+ border-end-start-radius: var(--ry-radius-md, 0.375rem);
687
+ }
688
+
689
+ ry-button-group > :is(ry-button, ry-toggle-button):last-child {
690
+ border-start-end-radius: var(--ry-radius-md, 0.375rem);
691
+ border-end-end-radius: var(--ry-radius-md, 0.375rem);
692
+ }
693
+
581
694
  /* ═══════════════════════════════════════════════════════════════
582
695
  TOGGLE BUTTON
583
696
  ═══════════════════════════════════════════════════════════════ */
@@ -1020,6 +1133,19 @@ ry-field {
1020
1133
  margin-block-end: var(--ry-space-4, 1rem);
1021
1134
  }
1022
1135
 
1136
+ ry-field [data-ry-target="error"]:empty,
1137
+ ry-field [data-ry-target="hint"]:empty {
1138
+ display: none;
1139
+ }
1140
+
1141
+ ry-field [data-ry-target="error"]:not(:empty) ~ [data-ry-target="hint"] {
1142
+ display: none;
1143
+ }
1144
+
1145
+ ry-field :is([data-ry-target="error"], [data-ry-target="hint"]) {
1146
+ margin-block-start: var(--ry-space-1, 0.25rem);
1147
+ }
1148
+
1023
1149
  /* ═══════════════════════════════════════════════════════════════
1024
1150
  ACCORDION
1025
1151
  ═══════════════════════════════════════════════════════════════ */
@@ -3045,6 +3171,28 @@ ry-divider {
3045
3171
  background-color: var(--ry-color-border);
3046
3172
  }
3047
3173
 
3174
+ /* ═══════════════════════════════════════════════════════════════
3175
+ SPLIT HANDLE
3176
+ ═══════════════════════════════════════════════════════════════ */
3177
+
3178
+ ry-split [data-ry-target="handle"]::after {
3179
+ background-color: var(--ry-color-border-strong);
3180
+ }
3181
+
3182
+ ry-split[data-ry-resizing] [data-ry-target="handle"]::after {
3183
+ background-color: var(--ry-color-primary);
3184
+ }
3185
+
3186
+ ry-split [data-ry-target="handle"]:focus-visible {
3187
+ outline: none;
3188
+ }
3189
+
3190
+ ry-split [data-ry-target="handle"]:focus-visible::after {
3191
+ opacity: 1;
3192
+ background-color: var(--ry-color-primary);
3193
+ box-shadow: var(--ry-focus-ring);
3194
+ }
3195
+
3048
3196
  /* ═══════════════════════════════════════════════════════════════
3049
3197
  BUTTONS
3050
3198
  ═══════════════════════════════════════════════════════════════ */
@@ -3111,6 +3259,47 @@ ry-divider {
3111
3259
  background-color: var(--ry-color-danger-hover);
3112
3260
  }
3113
3261
 
3262
+ :is(.ry-btn--accent, ry-button[variant="accent"]) {
3263
+ background-color: var(--ry-color-accent);
3264
+ }
3265
+ :is(.ry-btn--accent, ry-button[variant="accent"]):hover {
3266
+ background-color: var(--ry-color-accent-hover);
3267
+ }
3268
+
3269
+ /* Pressed/active toggle state */
3270
+ :is(.ry-btn[aria-pressed="true"], ry-button[pressed]) {
3271
+ background-color: var(--ry-color-primary);
3272
+ color: var(--ry-color-text-inverse);
3273
+ border-color: var(--ry-color-primary);
3274
+ }
3275
+ :is(.ry-btn[aria-pressed="true"], ry-button[pressed]):hover {
3276
+ background-color: var(--ry-color-primary-hover);
3277
+ border-color: var(--ry-color-primary-hover);
3278
+ }
3279
+
3280
+ /* ═══════════════════════════════════════════════════════════════
3281
+ BUTTON GROUP
3282
+ ═══════════════════════════════════════════════════════════════ */
3283
+
3284
+ ry-button-group > :is(ry-button, ry-toggle-button) {
3285
+ border-color: var(--ry-color-border);
3286
+ }
3287
+
3288
+ ry-button-group > :is(ry-button, ry-toggle-button):not(:first-child) {
3289
+ border-inline-start-color: transparent;
3290
+ }
3291
+
3292
+ /* Default children to outline style for segmented look */
3293
+ ry-button-group:not([variant]) > :is(ry-button, ry-toggle-button):not([pressed]) {
3294
+ background-color: var(--ry-color-bg);
3295
+ color: var(--ry-color-text);
3296
+ border-color: var(--ry-color-border);
3297
+ }
3298
+
3299
+ ry-button-group:not([variant]) > :is(ry-button, ry-toggle-button):not([pressed]):hover {
3300
+ background-color: var(--ry-color-bg-muted);
3301
+ }
3302
+
3114
3303
  /* Button sizes (typography only - padding is structural) */
3115
3304
  :is(.ry-btn--sm, ry-button[size="sm"]) {
3116
3305
  font-size: var(--ry-text-xs);
@@ -3587,6 +3776,17 @@ ry-card p {
3587
3776
  color: var(--ry-color-text-inverse);
3588
3777
  }
3589
3778
 
3779
+ :is(.ry-badge--accent, ry-badge[variant="accent"]) {
3780
+ background-color: var(--ry-color-accent);
3781
+ color: var(--ry-color-text-inverse);
3782
+ }
3783
+
3784
+ /* Arbitrary color via style="--ry-badge-color: ..." */
3785
+ ry-badge[style*="--ry-badge-color"] {
3786
+ background-color: var(--ry-badge-color);
3787
+ color: var(--ry-badge-text, var(--ry-color-text-inverse));
3788
+ }
3789
+
3590
3790
  /* ═══════════════════════════════════════════════════════════════
3591
3791
  ALERTS
3592
3792
  ═══════════════════════════════════════════════════════════════ */
@@ -3668,6 +3868,25 @@ ry-card p {
3668
3868
  color: var(--ry-color-text);
3669
3869
  }
3670
3870
 
3871
+ .ry-field__error {
3872
+ font-size: var(--ry-text-sm);
3873
+ color: var(--ry-color-danger);
3874
+ }
3875
+
3876
+ .ry-field__hint {
3877
+ font-size: var(--ry-text-sm);
3878
+ color: var(--ry-color-text-muted);
3879
+ }
3880
+
3881
+ /* Error state on input */
3882
+ ry-field:has([data-ry-target="error"]:not(:empty)) :is(input, textarea, select) {
3883
+ border-color: var(--ry-color-danger);
3884
+ }
3885
+
3886
+ ry-field:has([data-ry-target="error"]:not(:empty)) :is(input, textarea, select):focus {
3887
+ box-shadow: 0 0 0 3px light-dark(oklch(0.637 0.208 25.3 / 0.3), oklch(0.637 0.208 25.3 / 0.3));
3888
+ }
3889
+
3671
3890
  /* ═══════════════════════════════════════════════════════════════
3672
3891
  ACCORDION
3673
3892
  ═══════════════════════════════════════════════════════════════ */
@@ -4836,6 +5055,13 @@ ry-tag[disabled] {
4836
5055
  font-size: var(--ry-text-sm);
4837
5056
  color: var(--ry-color-text);
4838
5057
  background: transparent;
5058
+ border: none;
5059
+ }
5060
+
5061
+ .ry-tag-input__input:focus,
5062
+ .ry-tag-input__input:focus-visible {
5063
+ outline: none;
5064
+ box-shadow: none;
4839
5065
  }
4840
5066
 
4841
5067
  .ry-tag-input__input::placeholder {
@@ -4998,4 +5224,29 @@ ry-pricing-card ul li:last-child {
4998
5224
  background-color: var(--ry-color-primary-hover);
4999
5225
  }
5000
5226
 
5227
+ /* ═══════════════════════════════════════════════════════════════
5228
+ CHECK LIST
5229
+ ═══════════════════════════════════════════════════════════════ */
5230
+
5231
+ .ry-check-list {
5232
+ list-style: none;
5233
+ padding: 0;
5234
+ margin: 0;
5235
+ }
5236
+
5237
+ .ry-check-list li {
5238
+ padding-inline-start: var(--ry-space-6);
5239
+ position: relative;
5240
+ margin-block-end: var(--ry-space-2);
5241
+ color: var(--ry-color-text);
5242
+ }
5243
+
5244
+ .ry-check-list li::before {
5245
+ content: '\2713';
5246
+ position: absolute;
5247
+ inset-inline-start: 0;
5248
+ color: var(--ry-color-success);
5249
+ font-weight: var(--ry-font-bold);
5250
+ }
5251
+
5001
5252
  } /* @layer ry-theme */
package/dist/ry-ui.d.ts CHANGED
@@ -27,6 +27,8 @@ export { RyModal } from './components/ry-modal.js';
27
27
  export { RyTabs } from './components/ry-tabs.js';
28
28
  export { RyDropdown } from './components/ry-dropdown.js';
29
29
  export { RyButton } from './components/ry-button.js';
30
+ export { RyButtonGroup } from './components/ry-button-group.js';
31
+ export { RySplit } from './components/ry-split.js';
30
32
  export { RyThemeToggle } from './components/ry-theme-toggle.js';
31
33
  export { RyAlert } from './components/ry-alert.js';
32
34
  export { RyField } from './components/ry-field.js';
@@ -1 +1 @@
1
- {"version":3,"file":"ry-ui.d.ts","sourceRoot":"","sources":["../src/ts/ry-ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGtE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,iCAAiC,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAClG,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAGzD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGxF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,OAAO,EAAE,OAAO,QAAQ,CAAC;KAC1B;CACF"}
1
+ {"version":3,"file":"ry-ui.d.ts","sourceRoot":"","sources":["../src/ts/ry-ui.ts"],"names":[],"mappings":"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"}