@threadlabs/looma 0.39.2 → 0.39.3

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.
@@ -2262,6 +2262,14 @@ input:focus-visible:where([data-hn-ui-checkbox]) {
2262
2262
  syntax: "*";
2263
2263
  inherits: false;
2264
2264
  }
2265
+ /* Normalize a unitless zero border to a length before the box calculation. */
2266
+ @property --_ui-input-stroke {
2267
+ syntax: "<length>";
2268
+ inherits: false;
2269
+ initial-value: 1px;
2270
+ }
2271
+
2272
+ /* Cap Safari's excess text metrics without changing native date, file, color or range widgets. */
2265
2273
 
2266
2274
  /* Each size reads the hook and then an Input Group's default first, so a group, which draws the frame, can zero it. */
2267
2275
 
@@ -2279,6 +2287,12 @@ input:focus-visible:where([data-hn-ui-checkbox]) {
2279
2287
  /* A component that sets its display still honours the hidden attribute on its root. */
2280
2288
  @scope (.ui-input) to ([data-hn]) {
2281
2289
  :scope {
2290
+ --_ui-input-size: var(--ui-control-size-md);
2291
+ --_ui-input-inset-block: var(--ui-control-inset-block-md, var(--ui-space-2));
2292
+ --_ui-input-stroke: var(
2293
+ --ui-input-border-width,
2294
+ var(--_ui-default-input-border-width, var(--ui-border-width))
2295
+ );
2282
2296
  box-sizing: border-box !important;
2283
2297
  display: inline-block !important;
2284
2298
  inline-size: var(--ui-input-inline-size, 100%);
@@ -2288,7 +2302,7 @@ input:focus-visible:where([data-hn-ui-checkbox]) {
2288
2302
  var(--_ui-default-input-min-block-size, var(--ui-control-size-md))
2289
2303
  );
2290
2304
  margin: 0 !important;
2291
- padding: var(--ui-control-inset-block-md, var(--ui-space-2)) var(--ui-space-3) !important;
2305
+ padding: var(--_ui-input-inset-block) var(--ui-space-3) !important;
2292
2306
  appearance: none;
2293
2307
  padding-inline-start: var(--_ui-default-input-padding-inline-start, var(--ui-space-3))
2294
2308
  !important;
@@ -2318,20 +2332,33 @@ input:focus-visible:where([data-hn-ui-checkbox]) {
2318
2332
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
2319
2333
  background-color var(--ui-motion-fast) var(--ui-motion-ease);
2320
2334
  }
2335
+ :scope:is([type="text"], [type="search"], [type="tel"], [type="url"], [type="email"], [type="password"], [type="number"]) {
2336
+ max-block-size: max(
2337
+ calc(var(--_ui-input-size) - var(--_ui-default-input-frame-width, 0px)),
2338
+ calc(
2339
+ 1em * var(--ui-line-height-tight) + 2 * var(--_ui-input-inset-block) +
2340
+ 2 * var(--_ui-input-stroke)
2341
+ )
2342
+ );
2343
+ }
2321
2344
  :scope[data-ui-input-state~="size=sm"] {
2345
+ --_ui-input-size: var(--ui-control-size-sm);
2346
+ --_ui-input-inset-block: var(--ui-control-inset-block-sm, var(--ui-space-1));
2322
2347
  min-block-size: var(
2323
2348
  --ui-input-min-block-size,
2324
2349
  var(--_ui-default-input-min-block-size, var(--ui-control-size-sm))
2325
2350
  );
2326
- padding: var(--ui-control-inset-block-sm, var(--ui-space-1)) var(--ui-space-2) !important;
2351
+ padding: var(--_ui-input-inset-block) var(--ui-space-2) !important;
2327
2352
  font-size: var(--ui-font-size-sm);
2328
2353
  }
2329
2354
  :scope[data-ui-input-state~="size=lg"] {
2355
+ --_ui-input-size: var(--ui-control-size-lg);
2356
+ --_ui-input-inset-block: var(--ui-control-inset-block-lg, var(--ui-space-3));
2330
2357
  min-block-size: var(
2331
2358
  --ui-input-min-block-size,
2332
2359
  var(--_ui-default-input-min-block-size, var(--ui-control-size-lg))
2333
2360
  );
2334
- padding: var(--ui-control-inset-block-lg, var(--ui-space-3)) var(--ui-space-4) !important;
2361
+ padding: var(--_ui-input-inset-block) var(--ui-space-4) !important;
2335
2362
  font-size: var(--ui-font-size-md);
2336
2363
  }
2337
2364
  @media (pointer: coarse) {
@@ -3020,10 +3047,15 @@ input:where([data-hn-ui-combobox])::selection {
3020
3047
  color: inherit;
3021
3048
  }
3022
3049
  input:where([data-hn-ui-combobox]) {
3050
+ --_ui-combobox-inset-block: var(--ui-control-inset-block-md, var(--ui-space-2));
3023
3051
  appearance: none;
3024
3052
  width: 100%;
3025
3053
  min-inline-size: 0;
3026
3054
  min-block-size: calc(var(--_row) - 2 * var(--ui-border-width));
3055
+ max-block-size: max(
3056
+ calc(var(--_row) - 2 * var(--ui-border-width)),
3057
+ calc(1em * var(--ui-line-height-tight) + 2 * var(--_ui-combobox-inset-block))
3058
+ );
3027
3059
  box-sizing: border-box !important;
3028
3060
  border: 0;
3029
3061
  border-radius: inherit;
@@ -3031,7 +3063,7 @@ input:where([data-hn-ui-combobox]) {
3031
3063
  color: inherit;
3032
3064
  font: inherit;
3033
3065
  line-height: var(--ui-line-height-tight);
3034
- padding: var(--ui-control-inset-block-md, var(--ui-space-2)) var(--ui-space-3) !important;
3066
+ padding: var(--_ui-combobox-inset-block) var(--ui-space-3) !important;
3035
3067
  margin: 0 !important;
3036
3068
  outline: none;
3037
3069
  }
@@ -3039,14 +3071,16 @@ input:where([data-hn-ui-combobox]) {
3039
3071
  --_row: var(--ui-control-size-sm);
3040
3072
  }
3041
3073
  :scope[data-ui-combobox-state~="size=sm"] input:where([data-hn-ui-combobox]) {
3042
- padding: var(--ui-control-inset-block-sm, var(--ui-space-1)) var(--ui-space-2) !important;
3074
+ --_ui-combobox-inset-block: var(--ui-control-inset-block-sm, var(--ui-space-1));
3075
+ padding: var(--_ui-combobox-inset-block) var(--ui-space-2) !important;
3043
3076
  font-size: var(--ui-font-size-sm);
3044
3077
  }
3045
3078
  :scope[data-ui-combobox-state~="size=lg"]:where([data-hn-ui-combobox]) {
3046
3079
  --_row: var(--ui-control-size-lg);
3047
3080
  }
3048
3081
  :scope[data-ui-combobox-state~="size=lg"] input:where([data-hn-ui-combobox]) {
3049
- padding: var(--ui-control-inset-block-lg, var(--ui-space-3)) var(--ui-space-4) !important;
3082
+ --_ui-combobox-inset-block: var(--ui-control-inset-block-lg, var(--ui-space-3));
3083
+ padding: var(--_ui-combobox-inset-block) var(--ui-space-4) !important;
3050
3084
  font-size: var(--ui-font-size-md);
3051
3085
  }
3052
3086
  button:where([data-hn-ui-combobox]) {
@@ -3188,6 +3222,7 @@ input:disabled:where([data-hn-ui-combobox]),button:disabled:where([data-hn-ui-co
3188
3222
  display: none !important;
3189
3223
  }
3190
3224
  :scope[data-ui-combobox-state~="multiple"] input:where([data-hn-ui-combobox]) {
3225
+ max-block-size: none;
3191
3226
  flex: 1 0 var(--_ui-combobox-item-input-min-inline-size, 5rem);
3192
3227
  width: auto;
3193
3228
  min-block-size: 1.75rem;
@@ -3362,10 +3397,15 @@ input:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):
3362
3397
  color: inherit;
3363
3398
  }
3364
3399
  input:where(:scope, :scope *):where([data-hn-ui-combobox]) {
3400
+ --_ui-combobox-inset-block: var(--ui-control-inset-block-md, var(--ui-space-2));
3365
3401
  appearance: none;
3366
3402
  width: 100%;
3367
3403
  min-inline-size: 0;
3368
3404
  min-block-size: calc(var(--_row) - 2 * var(--ui-border-width));
3405
+ max-block-size: max(
3406
+ calc(var(--_row) - 2 * var(--ui-border-width)),
3407
+ calc(1em * var(--ui-line-height-tight) + 2 * var(--_ui-combobox-inset-block))
3408
+ );
3369
3409
  box-sizing: border-box !important;
3370
3410
  border: 0;
3371
3411
  border-radius: inherit;
@@ -3373,7 +3413,7 @@ input:where(:scope, :scope *):where([data-hn-ui-combobox]) {
3373
3413
  color: inherit;
3374
3414
  font: inherit;
3375
3415
  line-height: var(--ui-line-height-tight);
3376
- padding: var(--ui-control-inset-block-md, var(--ui-space-2)) var(--ui-space-3) !important;
3416
+ padding: var(--_ui-combobox-inset-block) var(--ui-space-3) !important;
3377
3417
  margin: 0 !important;
3378
3418
  outline: none;
3379
3419
  }
@@ -3382,7 +3422,8 @@ input:where(:scope, :scope *):where([data-hn-ui-combobox]) {
3382
3422
  }
3383
3423
  :where(.ui-combobox)[data-ui-combobox-state~="size=sm"]
3384
3424
  input:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
3385
- padding: var(--ui-control-inset-block-sm, var(--ui-space-1)) var(--ui-space-2) !important;
3425
+ --_ui-combobox-inset-block: var(--ui-control-inset-block-sm, var(--ui-space-1));
3426
+ padding: var(--_ui-combobox-inset-block) var(--ui-space-2) !important;
3386
3427
  font-size: var(--ui-font-size-sm);
3387
3428
  }
3388
3429
  :where(.ui-combobox)[data-ui-combobox-state~="size=lg"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
@@ -3390,7 +3431,8 @@ input:where(:scope, :scope *):where([data-hn-ui-combobox]) {
3390
3431
  }
3391
3432
  :where(.ui-combobox)[data-ui-combobox-state~="size=lg"]
3392
3433
  input:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
3393
- padding: var(--ui-control-inset-block-lg, var(--ui-space-3)) var(--ui-space-4) !important;
3434
+ --_ui-combobox-inset-block: var(--ui-control-inset-block-lg, var(--ui-space-3));
3435
+ padding: var(--_ui-combobox-inset-block) var(--ui-space-4) !important;
3394
3436
  font-size: var(--ui-font-size-md);
3395
3437
  }
3396
3438
  button:where(:scope, :scope *):where([data-hn-ui-combobox]) {
@@ -3539,6 +3581,7 @@ input:disabled:where(:scope, :scope *):where([data-hn-ui-combobox]),button:disab
3539
3581
  }
3540
3582
  :where(.ui-combobox)[data-ui-combobox-state~="multiple"]
3541
3583
  input:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-combobox"]))):where([data-hn-ui-combobox]) {
3584
+ max-block-size: none;
3542
3585
  flex: 1 0 var(--_ui-combobox-item-input-min-inline-size, 5rem);
3543
3586
  width: auto;
3544
3587
  min-block-size: 1.75rem;
@@ -4647,17 +4690,13 @@ dd:where([data-hn-ui-description-item]) {
4647
4690
  /* Alerts have no close target to add height above the title. */
4648
4691
 
4649
4692
  /* :host-qualified so page heading rules that reach in cannot outrank the dialog chrome. */
4650
-
4651
- /* A CSS-drawn X. */
4652
-
4653
- /* A touch target, like Button on coarse pointers. */
4654
- @keyframes ui-dialog-enter-6cfda64d {
4693
+ @keyframes ui-dialog-enter-45428506 {
4655
4694
  from {
4656
4695
  opacity: 0;
4657
4696
  transform: scale(0.96);
4658
4697
  }
4659
4698
  }
4660
- @keyframes ui-dialog-backdrop-enter-6cfda64d {
4699
+ @keyframes ui-dialog-backdrop-enter-45428506 {
4661
4700
  from {
4662
4701
  background-color: transparent;
4663
4702
  }
@@ -4792,7 +4831,7 @@ from {
4792
4831
  pointer-events: auto;
4793
4832
  opacity: 1;
4794
4833
  transform: scale(1);
4795
- animation: ui-dialog-enter-6cfda64d var(--ui-dialog-duration, var(--ui-motion-base))
4834
+ animation: ui-dialog-enter-45428506 var(--ui-dialog-duration, var(--ui-motion-base))
4796
4835
  var(--ui-motion-ease);
4797
4836
  }
4798
4837
  :scope[data-ui-dialog-state~="size=sm"]:where([data-hn-ui-dialog]) {
@@ -4838,51 +4877,10 @@ header:where([data-hn-ui-dialog]) {
4838
4877
  line-height: var(--ui-line-height-tight);
4839
4878
  }
4840
4879
  .close:where([data-hn-ui-dialog]) {
4841
- display: inline-grid !important;
4842
- place-items: center;
4843
- flex: none;
4880
+ display: flex !important;
4881
+ align-items: center !important;
4882
+ flex: none !important;
4844
4883
  margin-inline-start: auto !important;
4845
- inline-size: var(--ui-control-size-sm);
4846
- block-size: var(--ui-control-size-sm);
4847
- padding: 0 !important;
4848
- border: 0;
4849
- border-radius: var(--ui-radius-round);
4850
- background: transparent;
4851
- color: var(--ui-text-secondary);
4852
- cursor: pointer;
4853
- transition:
4854
- background-color var(--ui-motion-fast) var(--ui-motion-ease),
4855
- color var(--ui-motion-fast) var(--ui-motion-ease);
4856
- }
4857
- .close:where([data-hn-ui-dialog])::before,.close:where([data-hn-ui-dialog])::after {
4858
- content: "";
4859
- grid-area: 1 / 1;
4860
- inline-size: 0.875rem;
4861
- block-size: 1.5px;
4862
- border-radius: 1px;
4863
- background: currentColor;
4864
- transform: rotate(45deg);
4865
- }
4866
- .close:where([data-hn-ui-dialog])::after {
4867
- transform: rotate(-45deg);
4868
- }
4869
- .close:hover:where([data-hn-ui-dialog]) {
4870
- background: var(--ui-surface-muted);
4871
- color: var(--ui-text-primary);
4872
- }
4873
- .close:focus-visible:where([data-hn-ui-dialog]) {
4874
- outline: var(--ui-focus-width) solid var(--ui-focus-ring);
4875
- outline-offset: var(--ui-focus-width);
4876
- }
4877
- @media (pointer: coarse) {
4878
- .close:where([data-hn-ui-dialog]) {
4879
- inline-size: var(--ui-control-min-block-size);
4880
- block-size: var(--ui-control-min-block-size);
4881
- }
4882
- }
4883
- html[data-ui-input-modality="touch"] :scope .close:where([data-hn-ui-dialog]) {
4884
- inline-size: var(--ui-control-min-block-size);
4885
- block-size: var(--ui-control-min-block-size);
4886
4884
  }
4887
4885
  .body:where([data-hn-ui-dialog]) {
4888
4886
  display: flex !important;
@@ -4913,7 +4911,7 @@ footer:empty:where([data-hn-ui-dialog]) {
4913
4911
  }
4914
4912
  :scope[open]:modal:where([data-hn-ui-dialog])::backdrop {
4915
4913
  background-color: var(--ui-overlay-backdrop);
4916
- animation: ui-dialog-backdrop-enter-6cfda64d var(--_ui-dialog-duration, var(--ui-motion-base))
4914
+ animation: ui-dialog-backdrop-enter-45428506 var(--_ui-dialog-duration, var(--ui-motion-base))
4917
4915
  var(--ui-motion-ease);
4918
4916
  }
4919
4917
  :scope[open][data-ui-backdrop-hidden]:where([data-hn-ui-dialog])::backdrop {
@@ -5052,7 +5050,7 @@ footer:empty:where([data-hn-ui-dialog]) {
5052
5050
  pointer-events: auto;
5053
5051
  opacity: 1;
5054
5052
  transform: scale(1);
5055
- animation: ui-dialog-enter-6cfda64d var(--ui-dialog-duration, var(--ui-motion-base))
5053
+ animation: ui-dialog-enter-45428506 var(--ui-dialog-duration, var(--ui-motion-base))
5056
5054
  var(--ui-motion-ease);
5057
5055
  }
5058
5056
  :where(.ui-dialog)[data-ui-dialog-state~="size=sm"]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog]) {
@@ -5101,56 +5099,10 @@ header:where(:scope, :scope *):where([data-hn-ui-dialog]) {
5101
5099
  line-height: var(--ui-line-height-tight);
5102
5100
  }
5103
5101
  .close:where(:scope, :scope *):where([data-hn-ui-dialog]) {
5104
- display: inline-grid !important;
5105
- place-items: center;
5106
- flex: none;
5102
+ display: flex !important;
5103
+ align-items: center !important;
5104
+ flex: none !important;
5107
5105
  margin-inline-start: auto !important;
5108
- inline-size: var(--ui-control-size-sm);
5109
- block-size: var(--ui-control-size-sm);
5110
- padding: 0 !important;
5111
- border: 0;
5112
- border-radius: var(--ui-radius-round);
5113
- background: transparent;
5114
- color: var(--ui-text-secondary);
5115
- cursor: pointer;
5116
- transition:
5117
- background-color var(--ui-motion-fast) var(--ui-motion-ease),
5118
- color var(--ui-motion-fast) var(--ui-motion-ease);
5119
- }
5120
- .close:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where(:scope, :scope
5121
- *):where([data-hn-ui-dialog])::before,.close:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where(:scope, :scope
5122
- *):where([data-hn-ui-dialog])::after {
5123
- content: "";
5124
- grid-area: 1 / 1;
5125
- inline-size: 0.875rem;
5126
- block-size: 1.5px;
5127
- border-radius: 1px;
5128
- background: currentColor;
5129
- transform: rotate(45deg);
5130
- }
5131
- .close:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where(:scope, :scope
5132
- *):where([data-hn-ui-dialog])::after {
5133
- transform: rotate(-45deg);
5134
- }
5135
- .close:hover:where(:scope, :scope *):where([data-hn-ui-dialog]) {
5136
- background: var(--ui-surface-muted);
5137
- color: var(--ui-text-primary);
5138
- }
5139
- .close:focus-visible:where(:scope, :scope *):where([data-hn-ui-dialog]) {
5140
- outline: var(--ui-focus-width) solid var(--ui-focus-ring);
5141
- outline-offset: var(--ui-focus-width);
5142
- }
5143
- @media (pointer: coarse) {
5144
- .close:where(:scope, :scope *):where([data-hn-ui-dialog]) {
5145
- inline-size: var(--ui-control-min-block-size);
5146
- block-size: var(--ui-control-min-block-size);
5147
- }
5148
- }
5149
- html[data-ui-input-modality="touch"]
5150
- :where(.ui-dialog)
5151
- .close:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog]) {
5152
- inline-size: var(--ui-control-min-block-size);
5153
- block-size: var(--ui-control-min-block-size);
5154
5106
  }
5155
5107
  .body:where(:scope, :scope *):where([data-hn-ui-dialog]) {
5156
5108
  display: flex !important;
@@ -5181,7 +5133,7 @@ footer:empty:where(:scope, :scope *):where([data-hn-ui-dialog]) {
5181
5133
  }
5182
5134
  :where(.ui-dialog)[open]:modal:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog])::backdrop {
5183
5135
  background-color: var(--ui-overlay-backdrop);
5184
- animation: ui-dialog-backdrop-enter-6cfda64d var(--_ui-dialog-duration, var(--ui-motion-base))
5136
+ animation: ui-dialog-backdrop-enter-45428506 var(--_ui-dialog-duration, var(--ui-motion-base))
5185
5137
  var(--ui-motion-ease);
5186
5138
  }
5187
5139
  :where(.ui-dialog)[open][data-ui-backdrop-hidden]:where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-dialog"]))):where([data-hn-ui-dialog])::backdrop {
@@ -6228,6 +6180,7 @@ legend.sr-only:where([data-hn-ui-radio-group]) {
6228
6180
  Hooks do not inherit, so these are defaults for the input; its own hooks still win. */
6229
6181
  --_ui-default-input-border-width: 0;
6230
6182
  --_ui-default-input-min-block-size: 0;
6183
+ --_ui-default-input-frame-width: calc(2 * var(--ui-border-width));
6231
6184
  --_ui-default-input-border: transparent;
6232
6185
  --_ui-default-input-border-hover: transparent;
6233
6186
  --_ui-default-input-focus-border: transparent;
@@ -10255,13 +10208,22 @@ dialog:where([data-hn-ui-search-shell]) {
10255
10208
  /* A component that sets its display still honours the hidden attribute on its root. */
10256
10209
  @scope (.ui-select) to ([data-hn]) {
10257
10210
  :scope:where([data-hn-ui-select]) {
10211
+ --_ui-select-size: var(--ui-control-size-md);
10212
+ --_ui-select-inset-block: var(--ui-control-inset-block-md, var(--ui-space-2));
10258
10213
  box-sizing: border-box !important;
10259
10214
  display: inline-block !important;
10260
10215
  inline-size: var(--ui-select-inline-size, 100%);
10261
10216
  min-inline-size: 0;
10217
+ max-block-size: max(
10218
+ var(--_ui-select-size),
10219
+ calc(
10220
+ 1em * var(--ui-line-height-tight) + 2 * var(--_ui-select-inset-block) +
10221
+ 2 * var(--ui-border-width)
10222
+ )
10223
+ );
10262
10224
  min-block-size: var(--ui-control-size-md);
10263
10225
  margin: 0 !important;
10264
- padding: var(--ui-control-inset-block-md, var(--ui-space-2)) var(--ui-space-3) !important;
10226
+ padding: var(--_ui-select-inset-block) var(--ui-space-3) !important;
10265
10227
  border: var(--ui-border-width) solid
10266
10228
  var(--ui-select-border, var(--ui-control-border, var(--ui-border-strong)));
10267
10229
  border-radius: var(--ui-select-radius, var(--ui-field-radius, var(--ui-radius-md)));
@@ -10337,8 +10299,10 @@ dialog:where([data-hn-ui-search-shell]) {
10337
10299
  cursor: not-allowed;
10338
10300
  }
10339
10301
  :scope[data-ui-select-state~="size=sm"]:where([data-hn-ui-select]) {
10302
+ --_ui-select-size: var(--ui-control-size-sm);
10303
+ --_ui-select-inset-block: var(--ui-control-inset-block-sm, var(--ui-space-1));
10340
10304
  min-block-size: var(--ui-control-size-sm);
10341
- padding: var(--ui-control-inset-block-sm, var(--ui-space-1)) var(--ui-space-2) !important;
10305
+ padding: var(--_ui-select-inset-block) var(--ui-space-2) !important;
10342
10306
  padding-inline-end: calc(var(--ui-space-2) + var(--ui-icon-size-sm) + var(--ui-space-1))
10343
10307
  !important;
10344
10308
  background-position: right var(--ui-space-2) center, center;
@@ -10348,8 +10312,10 @@ dialog:where([data-hn-ui-search-shell]) {
10348
10312
  font-size: var(--ui-font-size-sm);
10349
10313
  }
10350
10314
  :scope[data-ui-select-state~="size=lg"]:where([data-hn-ui-select]) {
10315
+ --_ui-select-size: var(--ui-control-size-lg);
10316
+ --_ui-select-inset-block: var(--ui-control-inset-block-lg, var(--ui-space-3));
10351
10317
  min-block-size: var(--ui-control-size-lg);
10352
- padding: var(--ui-control-inset-block-lg, var(--ui-space-3)) var(--ui-space-4) !important;
10318
+ padding: var(--_ui-select-inset-block) var(--ui-space-4) !important;
10353
10319
  padding-inline-end: calc(var(--ui-space-4) + 1.5rem) !important;
10354
10320
  background-position: right var(--ui-space-4) center, center;
10355
10321
  font-size: var(--ui-font-size-md);
@@ -17079,15 +17045,24 @@ html[data-ui-input-modality="touch"]
17079
17045
  syntax: "*";
17080
17046
  inherits: false;
17081
17047
  }
17048
+ /* Normalize a unitless zero border to a length before the box calculation. */
17049
+ @property --_ui-input-stroke {
17050
+ syntax: "<length>";
17051
+ inherits: false;
17052
+ initial-value: 1px;
17053
+ }
17082
17054
 
17083
17055
  :scope:where([data-component~="ui-input"]) {
17056
+ --_ui-input-size: var(--ui-control-size-md);
17057
+ --_ui-input-inset-block: var(--ui-control-inset-block-md, var(--ui-space-2));
17058
+ --_ui-input-stroke: var(--ui-input-border-width, var(--_ui-default-input-border-width, var(--ui-border-width)));
17084
17059
  box-sizing: border-box !important;
17085
17060
  display: inline-block !important;
17086
17061
  inline-size: var(--ui-input-inline-size, 100%);
17087
17062
  min-inline-size: 0;
17088
17063
  min-block-size: var(--ui-input-min-block-size, var(--_ui-default-input-min-block-size, var(--ui-control-size-md)));
17089
17064
  margin: 0 !important;
17090
- padding: var(--ui-control-inset-block-md, var(--ui-space-2)) var(--ui-space-3) !important;
17065
+ padding: var(--_ui-input-inset-block) var(--ui-space-3) !important;
17091
17066
  appearance: none;
17092
17067
  padding-inline-start: var(--_ui-default-input-padding-inline-start, var(--ui-space-3)) !important;
17093
17068
  border: var(--ui-input-border-width, var(--_ui-default-input-border-width, var(--ui-border-width))) solid
@@ -17105,16 +17080,25 @@ html[data-ui-input-modality="touch"]
17105
17080
  background-color var(--ui-motion-fast) var(--ui-motion-ease);
17106
17081
  }
17107
17082
 
17083
+ /* Cap Safari's excess text metrics without changing native date, file, color or range widgets. */
17084
+ :scope:where([data-component~="ui-input"]):is([type="text"], [type="search"], [type="tel"], [type="url"], [type="email"], [type="password"], [type="number"]) {
17085
+ max-block-size: max(calc(var(--_ui-input-size) - var(--_ui-default-input-frame-width, 0px)), calc(1em * var(--ui-line-height-tight) + 2 * var(--_ui-input-inset-block) + 2 * var(--_ui-input-stroke)));
17086
+ }
17087
+
17108
17088
  /* Each size reads the hook and then an Input Group's default first, so a group, which draws the frame, can zero it. */
17109
17089
  :scope:where([data-component~="ui-input"])[data-ui-input-state~="size=sm"] {
17090
+ --_ui-input-size: var(--ui-control-size-sm);
17091
+ --_ui-input-inset-block: var(--ui-control-inset-block-sm, var(--ui-space-1));
17110
17092
  min-block-size: var(--ui-input-min-block-size, var(--_ui-default-input-min-block-size, var(--ui-control-size-sm)));
17111
- padding: var(--ui-control-inset-block-sm, var(--ui-space-1)) var(--ui-space-2) !important;
17093
+ padding: var(--_ui-input-inset-block) var(--ui-space-2) !important;
17112
17094
  font-size: var(--ui-font-size-sm);
17113
17095
  }
17114
17096
 
17115
17097
  :scope:where([data-component~="ui-input"])[data-ui-input-state~="size=lg"] {
17098
+ --_ui-input-size: var(--ui-control-size-lg);
17099
+ --_ui-input-inset-block: var(--ui-control-inset-block-lg, var(--ui-space-3));
17116
17100
  min-block-size: var(--ui-input-min-block-size, var(--_ui-default-input-min-block-size, var(--ui-control-size-lg)));
17117
- padding: var(--ui-control-inset-block-lg, var(--ui-space-3)) var(--ui-space-4) !important;
17101
+ padding: var(--_ui-input-inset-block) var(--ui-space-4) !important;
17118
17102
  font-size: var(--ui-font-size-md);
17119
17103
  }
17120
17104
 
@@ -17195,6 +17179,9 @@ html[data-ui-input-modality="touch"]
17195
17179
  @scope ([data-component~="ui-input"]) to ([data-component]) {
17196
17180
  /* This component's hooks style the element they are set on, and never a nested one. An Input
17197
17181
  Group sets --_ui-default-input-* for the input inside it, below the input's own hooks. */
17182
+ /* Normalize a unitless zero border to a length before the box calculation. */
17183
+
17184
+ /* Cap Safari's excess text metrics without changing native date, file, color or range widgets. */
17198
17185
 
17199
17186
  /* Each size reads the hook and then an Input Group's default first, so a group, which draws the frame, can zero it. */
17200
17187