@pure-ds/core 0.6.2 → 0.6.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.
@@ -686,12 +686,17 @@ export class Generator {
686
686
  baseBorderWidth = enums.BorderWidths.medium;
687
687
  }
688
688
 
689
- // Generate a scale of border widths based on the enums
689
+ const validBase = Number.isFinite(Number(baseBorderWidth))
690
+ ? Number(baseBorderWidth)
691
+ : enums.BorderWidths.medium;
692
+ const toPx = (value) => `${Math.max(0, Math.round(value * 100) / 100)}px`;
693
+
694
+ // Generate a derived border width scale based on configured base width
690
695
  return {
691
- hairline: `${enums.BorderWidths.hairline}px`,
692
- thin: `${enums.BorderWidths.thin}px`,
693
- medium: `${enums.BorderWidths.medium}px`,
694
- thick: `${enums.BorderWidths.thick}px`,
696
+ hairline: toPx(validBase * 0.25),
697
+ thin: toPx(validBase * 0.5),
698
+ medium: toPx(validBase),
699
+ thick: toPx(validBase * 1.5),
695
700
  };
696
701
  }
697
702
 
@@ -1544,7 +1549,7 @@ html[data-theme="dark"] {
1544
1549
  inset 0 -40px 80px rgba(255,255,255,0.12),
1545
1550
  0 10px 30px rgba(0,0,0,0.10);
1546
1551
  /* Glossy border with slight light and dark edges */
1547
- border: 1px solid color-mix(in oklab, var(--color-primary-500) 22%, transparent);
1552
+ border: var(--border-width-thin) solid color-mix(in oklab, var(--color-primary-500) 22%, transparent);
1548
1553
  outline: 1px solid color-mix(in oklab, #ffffff 18%, transparent);
1549
1554
  outline-offset: -1px;
1550
1555
  }
@@ -1560,7 +1565,7 @@ html[data-theme="dark"] .liquid-glass {
1560
1565
  inset 0 1px 0 rgba(255,255,255,0.12),
1561
1566
  inset 0 -40px 80px rgba(0,0,0,0.55),
1562
1567
  0 18px 38px rgba(0,0,0,0.65);
1563
- border: 1px solid color-mix(in oklab, var(--color-primary-300) 26%, transparent);
1568
+ border: var(--border-width-thin) solid color-mix(in oklab, var(--color-primary-300) 26%, transparent);
1564
1569
  outline: 1px solid color-mix(in oklab, #ffffff 16%, transparent);
1565
1570
  }
1566
1571
 
@@ -1640,7 +1645,7 @@ html[data-theme="dark"] .liquid-glass {
1640
1645
 
1641
1646
  /* Gradient border with different strengths/thickness */
1642
1647
  .border-gradient-soft {
1643
- border: 1px solid transparent;
1648
+ border: var(--border-width-thin) solid transparent;
1644
1649
  background:
1645
1650
  linear-gradient(var(--color-surface-base), var(--color-surface-base)) padding-box,
1646
1651
  linear-gradient(var(--gradient-angle, 135deg),
@@ -1650,7 +1655,7 @@ html[data-theme="dark"] .liquid-glass {
1650
1655
  }
1651
1656
 
1652
1657
  .border-gradient-medium {
1653
- border: 2px solid transparent;
1658
+ border: var(--border-width-medium) solid transparent;
1654
1659
  background:
1655
1660
  linear-gradient(var(--color-surface-base), var(--color-surface-base)) padding-box,
1656
1661
  linear-gradient(var(--gradient-angle, 135deg),
@@ -1660,7 +1665,7 @@ html[data-theme="dark"] .liquid-glass {
1660
1665
  }
1661
1666
 
1662
1667
  .border-gradient-strong {
1663
- border: 3px solid transparent;
1668
+ border: var(--border-width-thick) solid transparent;
1664
1669
  background:
1665
1670
  linear-gradient(var(--color-surface-base), var(--color-surface-base)) padding-box,
1666
1671
  linear-gradient(var(--gradient-angle, 135deg),
@@ -1748,7 +1753,7 @@ html[data-theme="dark"] .liquid-glass {
1748
1753
  :where(blockquote) {
1749
1754
  margin: 0 0 var(--spacing-4) 0;
1750
1755
  padding: var(--spacing-6) var(--spacing-8);
1751
- border-left: 4px solid var(--color-primary-500);
1756
+ border-left: calc(var(--border-width-thick) + var(--border-width-thin)) solid var(--color-primary-500);
1752
1757
  background-color: var(--color-surface-elevated);
1753
1758
  border-radius: var(--radius-none);
1754
1759
  font-size: var(--font-size-lg);
@@ -1771,7 +1776,7 @@ html[data-theme="dark"] .liquid-glass {
1771
1776
  :where(hr) {
1772
1777
  margin: var(--spacing-8) 0;
1773
1778
  border: none;
1774
- border-top: 1px solid var(--color-border);
1779
+ border-top: var(--border-width-thin) solid var(--color-border);
1775
1780
  height: 0;
1776
1781
  }
1777
1782
 
@@ -1860,7 +1865,7 @@ html[data-theme="dark"] .liquid-glass {
1860
1865
  font-size: var(--font-size-sm);
1861
1866
  color: var(--color-text-primary);
1862
1867
  background-color: var(--color-surface-elevated);
1863
- border: 1px solid var(--color-border);
1868
+ border: var(--border-width-thin) solid var(--color-border);
1864
1869
  border-radius: var(--radius-sm);
1865
1870
  box-shadow: 0 2px 0 0 var(--color-border);
1866
1871
  }
@@ -1883,12 +1888,12 @@ html[data-theme="dark"] .liquid-glass {
1883
1888
 
1884
1889
  :where(details):not(.accordion *) {
1885
1890
  margin: 0 0 var(--spacing-2) 0;
1886
- border: 1px solid var(--color-border);
1891
+ border: var(--border-width-thin) solid var(--color-border);
1887
1892
  border-radius: var(--radius-md);
1888
1893
  background-color: var(--color-surface-base);
1889
1894
 
1890
1895
  &[open] :where(summary) {
1891
- border-bottom: 1px solid var(--color-border);
1896
+ border-bottom: var(--border-width-thin) solid var(--color-border);
1892
1897
  background-color: var(--color-surface-subtle);
1893
1898
 
1894
1899
  &::after {
@@ -1939,6 +1944,7 @@ html[data-theme="dark"] .liquid-glass {
1939
1944
 
1940
1945
  #generateFormStyles() {
1941
1946
  const {
1947
+ shape = {},
1942
1948
  gap,
1943
1949
  inputPadding,
1944
1950
  buttonPadding,
@@ -1950,10 +1956,18 @@ html[data-theme="dark"] .liquid-glass {
1950
1956
  inputMinHeight,
1951
1957
  } = this.options.design;
1952
1958
 
1959
+ const shapeBorderWidth =
1960
+ typeof shape.borderWidth === "number"
1961
+ ? shape.borderWidth
1962
+ : typeof shape.borderWidth === "string"
1963
+ ? (enums.BorderWidths[shape.borderWidth] ?? null)
1964
+ : null;
1965
+
1953
1966
  const inputPaddingValue = inputPadding || 0.75;
1954
1967
  const buttonPaddingValue = buttonPadding || 1.0;
1955
1968
  const focusWidth = focusRingWidth || 3;
1956
- const borderWidth = borderWidthThin || 1;
1969
+ const borderWidth =
1970
+ borderWidthThin || shapeBorderWidth || enums.BorderWidths.thin;
1957
1971
  const gapValue = gap || 1.0;
1958
1972
  const sectionSpacingValue = sectionSpacing || 2.0;
1959
1973
  const minButtonHeight = buttonMinHeight || 44;
@@ -2089,7 +2103,7 @@ input, textarea, select {
2089
2103
  width: 100%;
2090
2104
  min-height: ${minInputHeight}px;
2091
2105
  padding: calc(var(--spacing-1) * ${inputPaddingValue}) var(--spacing-4);
2092
- border: ${borderWidth}px solid var(--color-border);
2106
+ border: var(--border-width-medium) solid var(--color-border);
2093
2107
  border-radius: var(--radius-md);
2094
2108
  font-family: var(--font-family-body);
2095
2109
  font-size: var(--font-size-base);
@@ -2159,7 +2173,7 @@ input[type="range"] {
2159
2173
  border-radius: 50%;
2160
2174
  box-shadow: var(--shadow-sm);
2161
2175
  cursor: grab;
2162
- border: 1px solid color-mix(in srgb, var(--color-primary-500) 30%, var(--color-border));
2176
+ border: var(--border-width-thin) solid color-mix(in srgb, var(--color-primary-500) 30%, var(--color-border));
2163
2177
  }
2164
2178
 
2165
2179
  /* Mozilla track */
@@ -2176,7 +2190,7 @@ input[type="range"] {
2176
2190
  background: color-mix(in srgb, var(--color-primary-500) 15%, var(--color-surface-base));
2177
2191
  border-radius: 50%;
2178
2192
  box-shadow: var(--shadow-sm);
2179
- border: 1px solid color-mix(in srgb, var(--color-primary-500) 30%, var(--color-border));
2193
+ border: var(--border-width-thin) solid color-mix(in srgb, var(--color-primary-500) 30%, var(--color-border));
2180
2194
  transform: translateY(calc((var(--range-track-height, 8px) - var(--range-thumb-size, 28px)) / 2));
2181
2195
  }
2182
2196
 
@@ -2264,7 +2278,7 @@ input[type="checkbox"] + label:not(fieldset label):not(label[data-toggle]) {
2264
2278
  padding: calc(var(--spacing-1) * ${
2265
2279
  buttonPaddingValue * 0.6
2266
2280
  }) calc(var(--spacing-4) * 0.85);
2267
- border: ${borderWidth}px solid var(--color-border);
2281
+ border: var(--border-width-medium) solid var(--color-border);
2268
2282
  border-radius: var(--radius-md);
2269
2283
  font-family: var(--font-family-body);
2270
2284
  font-size: var(--font-size-sm);
@@ -2292,7 +2306,7 @@ input[type="checkbox"]:checked + label:not(fieldset label):not(label[data-toggle
2292
2306
  background-color: color-mix(in oklab, var(--color-primary-500) 8%, transparent);
2293
2307
  color: var(--color-primary-700);
2294
2308
  border-color: var(--color-primary-500);
2295
- border-width: 2px;
2309
+ border-width: var(--border-width-medium);
2296
2310
  font-weight: var(--font-weight-semibold);
2297
2311
 
2298
2312
  &:hover {
@@ -2372,7 +2386,7 @@ fieldset[role="group"].buttons {
2372
2386
  padding: calc(var(--spacing-1) * ${
2373
2387
  buttonPaddingValue * 0.6
2374
2388
  }) calc(var(--spacing-4) * 0.85);
2375
- border: 2px solid var(--color-border);
2389
+ border: var(--border-width-medium) solid var(--color-border);
2376
2390
  border-radius: var(--radius-md);
2377
2391
  font-family: var(--font-family-body);
2378
2392
  font-size: var(--font-size-sm);
@@ -2404,7 +2418,7 @@ fieldset[role="group"].buttons {
2404
2418
  label:has(input[type="checkbox"]:checked) {
2405
2419
  background-color: color-mix(in oklab, var(--color-primary-500) 8%, transparent);
2406
2420
  border-color: var(--color-primary-500);
2407
- border-width: 2px;
2421
+ border-width: var(--border-width-medium);
2408
2422
  font-weight: var(--font-weight-semibold);
2409
2423
 
2410
2424
  &:hover {
@@ -2572,7 +2586,7 @@ button, .btn, input[type="submit"], input[type="button"], input[type="reset"] {
2572
2586
  justify-content: center;
2573
2587
  min-height: ${minButtonHeight}px;
2574
2588
  padding: calc(var(--spacing-1) * ${buttonPaddingValue}) var(--spacing-6);
2575
- border: ${borderWidth}px solid transparent;
2589
+ border: var(--border-width-medium) solid transparent;
2576
2590
  border-radius: var(--radius-md);
2577
2591
  font-family: var(--font-family-body);
2578
2592
  font-size: var(--font-size-base);
@@ -2829,7 +2843,7 @@ a.btn-working {
2829
2843
  gap: var(--spacing-3);
2830
2844
  width: 100%;
2831
2845
  background: var(--color-input-bg);
2832
- border: 1px solid var(--color-border);
2846
+ border: var(--border-width-thin) solid var(--color-border);
2833
2847
  border-radius: var(--radius-md);
2834
2848
  min-height: var(--input-min-height, 40px);
2835
2849
  position: relative;
@@ -2874,13 +2888,13 @@ a.btn-working {
2874
2888
  .array-item {
2875
2889
  position: relative;
2876
2890
  padding: var(--spacing-4);
2877
- border: ${borderWidth}px solid var(--color-border);
2891
+ border: var(--border-width-medium) solid var(--color-border);
2878
2892
  border-radius: var(--radius-md);
2879
2893
  background-color: var(--color-surface-base);
2880
2894
 
2881
2895
  .array-controls {
2882
2896
  padding-top: var(--spacing-3);
2883
- border-top: ${borderWidth}px solid var(--color-border);
2897
+ border-top: var(--border-width-medium) solid var(--color-border);
2884
2898
  margin-top: var(--spacing-4);
2885
2899
  }
2886
2900
  }
@@ -2970,13 +2984,13 @@ th {
2970
2984
  text-align: left;
2971
2985
  font-weight: var(--font-weight-semibold);
2972
2986
  color: var(--color-text-primary);
2973
- border-bottom: 2px solid var(--color-border);
2987
+ border-bottom: var(--border-width-medium) solid var(--color-border);
2974
2988
  }
2975
2989
 
2976
2990
  td {
2977
2991
  padding: var(--spacing-3) var(--spacing-4);
2978
2992
  color: var(--color-text-secondary);
2979
- border-bottom: 1px solid var(--color-border);
2993
+ border-bottom: var(--border-width-thin) solid var(--color-border);
2980
2994
  }
2981
2995
 
2982
2996
  tbody {
@@ -3000,10 +3014,10 @@ tbody {
3000
3014
  }
3001
3015
 
3002
3016
  .table-bordered {
3003
- border: 1px solid var(--color-border);
3017
+ border: var(--border-width-thin) solid var(--color-border);
3004
3018
 
3005
3019
  th, td {
3006
- border: 1px solid var(--color-border);
3020
+ border: var(--border-width-thin) solid var(--color-border);
3007
3021
  }
3008
3022
  }
3009
3023
 
@@ -3023,7 +3037,7 @@ tbody {
3023
3037
  padding: var(--spacing-4);
3024
3038
  border-radius: var(--radius-md);
3025
3039
  margin: 0 0 var(--spacing-4) 0;
3026
- border-left: 4px solid;
3040
+ border-left: calc(var(--border-width-thick) + var(--border-width-thin)) solid;
3027
3041
  display: flex;
3028
3042
  align-items: flex-start;
3029
3043
  gap: var(--spacing-3);
@@ -3105,7 +3119,7 @@ tbody {
3105
3119
  return /*css*/ `/* Accordion (details/summary) */
3106
3120
 
3107
3121
  :where(.accordion details) {
3108
- border: 1px solid var(--color-border);
3122
+ border: var(--border-width-thin) solid var(--color-border);
3109
3123
  border-radius: var(--radius-md);
3110
3124
  background: var(--color-surface-base);
3111
3125
  margin: 0 0 var(--spacing-3) 0;
@@ -3227,7 +3241,7 @@ tbody {
3227
3241
 
3228
3242
  .badge-outline {
3229
3243
  background-color: transparent;
3230
- border: 1px solid currentColor;
3244
+ border: var(--border-width-thin) solid currentColor;
3231
3245
  &.badge-primary { color: var(--color-text-primary); }
3232
3246
  &.badge-secondary { color: var(--color-secondary-600); }
3233
3247
  &.badge-success { color: var(--color-success-600); }
@@ -3351,7 +3365,7 @@ dialog {
3351
3365
  justify-content: space-between;
3352
3366
  gap: var(--spacing-4);
3353
3367
  padding: var(--spacing-6);
3354
- border-bottom: 1px solid var(--surface-overlay-border);
3368
+ border-bottom: var(--border-width-thin) solid var(--surface-overlay-border);
3355
3369
  flex-shrink: 0;
3356
3370
 
3357
3371
  h2,
@@ -3408,7 +3422,7 @@ dialog {
3408
3422
  justify-content: flex-end;
3409
3423
  align-items: center;
3410
3424
  padding: var(--spacing-6);
3411
- border-top: 1px solid var(--surface-overlay-border);
3425
+ border-top: var(--border-width-thin) solid var(--surface-overlay-border);
3412
3426
  flex-shrink: 0;
3413
3427
  }
3414
3428
  }
@@ -3460,7 +3474,7 @@ pds-tabstrip {
3460
3474
  & > nav {
3461
3475
  display: flex;
3462
3476
  gap: var(--spacing-1);
3463
- border-bottom: 2px solid var(--color-border);
3477
+ border-bottom: var(--border-width-medium) solid var(--color-border);
3464
3478
  margin-bottom: var(--spacing-6);
3465
3479
  position: relative;
3466
3480
  overflow-x: auto;
@@ -3489,8 +3503,8 @@ pds-tabstrip {
3489
3503
  background: transparent;
3490
3504
  cursor: pointer;
3491
3505
  transition: color var(--transition-fast);
3492
- border-bottom: 2px solid transparent;
3493
- margin-bottom: -2px; /* Overlap the nav border */
3506
+ border-bottom: var(--border-width-medium) solid transparent;
3507
+ margin-bottom: calc(-1 * var(--border-width-medium)); /* Overlap the nav border */
3494
3508
 
3495
3509
  &:hover {
3496
3510
  color: var(--color-text-primary);
@@ -3557,11 +3571,11 @@ pds-tabstrip {
3557
3571
  ::-webkit-scrollbar-thumb {
3558
3572
  background: var(--color-secondary-300);
3559
3573
  border-radius: var(--radius-full);
3560
- border: 3px solid transparent;
3574
+ border: var(--border-width-thick) solid transparent;
3561
3575
  background-clip: padding-box;
3562
3576
  transition: background-color var(--transition-fast);
3563
- &:hover { background: var(--color-secondary-400); border: 2px solid transparent; background-clip: padding-box; }
3564
- &:active { background: var(--color-secondary-500); border: 2px solid transparent; background-clip: padding-box; }
3577
+ &:hover { background: var(--color-secondary-400); border: var(--border-width-medium) solid transparent; background-clip: padding-box; }
3578
+ &:active { background: var(--color-secondary-500); border: var(--border-width-medium) solid transparent; background-clip: padding-box; }
3565
3579
  @media (prefers-color-scheme: dark) {
3566
3580
  background: var(--color-secondary-600);
3567
3581
  &:hover { background: var(--color-secondary-500); }
@@ -3672,7 +3686,7 @@ nav[data-dropdown] {
3672
3686
  padding: var(--spacing-2);
3673
3687
  margin: 0;
3674
3688
  background: var(--color-surface-overlay);
3675
- border: 1px solid var(--color-border);
3689
+ border: var(--border-width-thin) solid var(--color-border);
3676
3690
  border-radius: var(--radius-md);
3677
3691
  box-shadow: var(--shadow-lg);
3678
3692
  top: 100%;
@@ -3724,7 +3738,7 @@ nav[data-dropdown] {
3724
3738
  padding: var(--spacing-1) 0;
3725
3739
 
3726
3740
  & + li {
3727
- border-top: 1px solid var(--color-border);
3741
+ border-top: var(--border-width-thin) solid var(--color-border);
3728
3742
  margin-top: var(--spacing-2);
3729
3743
  }
3730
3744
 
@@ -3741,7 +3755,7 @@ nav[data-dropdown] {
3741
3755
 
3742
3756
  & > hr {
3743
3757
  border: none;
3744
- border-top: 3px solid var(--color-border);
3758
+ border-top: var(--border-width-thick) solid var(--color-border);
3745
3759
  margin: var(--spacing-2) 0;
3746
3760
  }
3747
3761
  }
@@ -4094,7 +4108,7 @@ nav[data-dropdown] {
4094
4108
  }
4095
4109
 
4096
4110
  button, input, textarea, select {
4097
- border-width: 2px;
4111
+ border-width: var(--border-width-medium);
4098
4112
  }
4099
4113
  }
4100
4114
 
@@ -4375,7 +4389,7 @@ nav[data-dropdown] {
4375
4389
  font: inherit;
4376
4390
  color: var(--color-text-primary);
4377
4391
  background: var(--color-input-bg);
4378
- border: 1px solid var(--color-border);
4392
+ border: var(--border-width-thin) solid var(--color-border);
4379
4393
  border-radius: var(--radius-md);
4380
4394
  padding: var(--spacing-2) var(--spacing-3);
4381
4395
  min-height: 40px;
@@ -4470,7 +4484,7 @@ nav[data-dropdown] {
4470
4484
  transform: translateY(-50%);
4471
4485
  width: var(--spacing-5);
4472
4486
  height: var(--spacing-5);
4473
- border: var(--border-width-md) solid var(--color-border);
4487
+ border: var(--border-width-medium) solid var(--color-border);
4474
4488
  border-radius: var(--radius-sm);
4475
4489
  background: var(--color-surface-base);
4476
4490
  transition: all var(--transition-fast);
@@ -4688,7 +4702,7 @@ ${this.#generateTableStyles()}
4688
4702
  .card-outlined,
4689
4703
  .card-basic {
4690
4704
  background: var(--color-surface-base);
4691
- border: 1px solid var(--color-border);
4705
+ border: var(--border-width-thin) solid var(--color-border);
4692
4706
  }
4693
4707
 
4694
4708
  .card-interactive:hover {