@rogieking/figui3 9.0.5 → 9.0.7

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.
@@ -416,6 +416,21 @@ Handlers below assume `onInput` / `onChange` / `onClick` from [react.md](react.m
416
416
 
417
417
  - Attrs: `position` (`right` | `left` | `middle`), `tooltip`, `tail`
418
418
 
419
+ ### `.fig-overflow-fade`
420
+
421
+ ```tsx
422
+ <div className="fig-overflow-fade" style={{ maxHeight: "12rem" }}>
423
+ {content}
424
+ </div>
425
+ ```
426
+
427
+ - Apply the class directly to a height-constrained vertical scroll container.
428
+ - Add `fig-overflow-fade-horizontal` for a horizontal scroll container.
429
+ - CSS custom property: `--fig-overflow-fade-size` (default: `var(--spacer-5)`).
430
+ - CSS custom property: `--fig-overflow-fade-clear-top` (default: `0px`) keeps a sticky header fully visible.
431
+ - CSS custom property: `--fig-overflow-fade-clear-left` (default: `0px`) reserves a visible area at the start of a horizontal scroller.
432
+ - The direction-aware mask is enabled only when self scroll timelines are supported; other browsers retain normal scrolling without fades.
433
+
419
434
  ## Overlays
420
435
 
421
436
  ### `dialog is="fig-dialog"`
@@ -44,6 +44,14 @@ Public API: `README.md`. React recipes: [components.md](components.md).
44
44
  - `direction="horizontal|vertical"`
45
45
  - `label` or a child `<label>`
46
46
 
47
+ ## `.fig-overflow-fade`
48
+
49
+ - Apply the class to a vertical scroll container and constrain its height; add `fig-overflow-fade-horizontal` for horizontal scrolling.
50
+ - Fade size: `--fig-overflow-fade-size` (default `var(--spacer-5)`).
51
+ - Sticky-header clearance: `--fig-overflow-fade-clear-top` (default `0px`).
52
+ - Horizontal start clearance: `--fig-overflow-fade-clear-left` (default `0px`).
53
+ - Direction-aware fades require self scroll timeline support; unsupported browsers scroll normally without a mask.
54
+
47
55
  ## `fig-popup` vs `fig-dialog`
48
56
 
49
57
  Dialog: `modal`, `drag`, `resizable`, `autoresize`, `handle`, `closedby="any|closerequest|none"`, `position` (viewport: `top left` … `bottom right`).
package/README.md CHANGED
@@ -408,6 +408,7 @@ The `value`, `min`, `max`, and `step` properties mirror their attributes. `aria-
408
408
  |---|---|---|---|
409
409
  | `value` | string | — | Numeric value |
410
410
  | `placeholder` | string | — | Placeholder text |
411
+ | `size` | string | — | Set to `"large"` for a 32px-tall input |
411
412
  | `min` | number | — | Minimum |
412
413
  | `max` | number | — | Maximum |
413
414
  | `step` | number | — | Step increment |
@@ -421,6 +422,7 @@ The `value`, `min`, `max`, and `step` properties mirror their attributes. `aria-
421
422
 
422
423
  ```html
423
424
  <fig-input-number value="100" units="px"></fig-input-number>
425
+ <fig-input-number size="large" value="100" units="px"></fig-input-number>
424
426
  <fig-input-number value="50" units="%" min="0" max="100"></fig-input-number>
425
427
  ```
426
428
 
@@ -1014,6 +1016,42 @@ For `point-point`, both handles support direct drag (with a dynamic directional
1014
1016
 
1015
1017
  ### Layout & Feedback
1016
1018
 
1019
+ #### Overflow Fade
1020
+
1021
+ `.fig-overflow-fade` — [demo](https://rog.ie/figui3/#overflow-fade)
1022
+
1023
+ A progressively enhanced scroll utility that fades its edges when more content
1024
+ is available in that direction. Apply the class to a height-constrained
1025
+ container for vertical scrolling. Add `.fig-overflow-fade-horizontal` for
1026
+ horizontal scrolling.
1027
+
1028
+ | Custom property | Default | Description |
1029
+ |---|---|---|---|
1030
+ | `--fig-overflow-fade-size` | `var(--spacer-5)` | Size of each fade edge |
1031
+ | `--fig-overflow-fade-clear-top` | `0px` | Fully visible area reserved for a sticky header |
1032
+ | `--fig-overflow-fade-clear-left` | `0px` | Fully visible area reserved at the start of a horizontal scroller |
1033
+
1034
+ The mask and animations are applied only when the browser supports self scroll
1035
+ timelines. Unsupported browsers retain ordinary scrolling without a fade.
1036
+
1037
+ ```html
1038
+ <div class="fig-overflow-fade" style="max-height: 12rem;">
1039
+ <fig-content>
1040
+ <!-- Long content -->
1041
+ </fig-content>
1042
+ </div>
1043
+ ```
1044
+
1045
+ ```html
1046
+ <div class="fig-overflow-fade fig-overflow-fade-horizontal">
1047
+ <div style="display: flex; width: max-content;">
1048
+ <!-- Wide content -->
1049
+ </div>
1050
+ </div>
1051
+ ```
1052
+
1053
+ ---
1054
+
1017
1055
  #### Field
1018
1056
 
1019
1057
  `<fig-field>` — [demo](https://rog.ie/figui3/#field)
package/components.css CHANGED
@@ -3812,11 +3812,15 @@ fig-input-number {
3812
3812
  flex: 1;
3813
3813
  width: 100%;
3814
3814
  }
3815
- &:where(fig-input-text)[size="large"] {
3815
+ &[size="large"] {
3816
3816
  & > input,
3817
3817
  & > textarea {
3818
3818
  padding: var(--spacer-2);
3819
3819
  }
3820
+
3821
+ & > [slot="prepend"] {
3822
+ min-width: var(--spacer-5);
3823
+ }
3820
3824
  }
3821
3825
  &[multiline]:not([multiline="false"]) {
3822
3826
  display: flex;
@@ -3856,10 +3860,6 @@ fig-input-number {
3856
3860
  order: 0;
3857
3861
  padding-right: 0;
3858
3862
  margin-right: calc(var(--spacer-2) * -1);
3859
- &[size="large"] {
3860
- height: var(--spacer-6);
3861
- min-width: var(--spacer-6);
3862
- }
3863
3863
  }
3864
3864
 
3865
3865
  & [slot="append"] {
@@ -5027,6 +5027,347 @@ fig-skeleton {
5027
5027
 
5028
5028
  /* Utilities */
5029
5029
 
5030
+ @property --fig-overflow-fade-top {
5031
+ syntax: "<length>";
5032
+ inherits: false;
5033
+ initial-value: 0px;
5034
+ }
5035
+
5036
+ @property --fig-overflow-fade-bottom {
5037
+ syntax: "<length>";
5038
+ inherits: false;
5039
+ initial-value: 0px;
5040
+ }
5041
+
5042
+ @property --fig-overflow-fade-left {
5043
+ syntax: "<length>";
5044
+ inherits: false;
5045
+ initial-value: 0px;
5046
+ }
5047
+
5048
+ @property --fig-overflow-fade-right {
5049
+ syntax: "<length>";
5050
+ inherits: false;
5051
+ initial-value: 0px;
5052
+ }
5053
+
5054
+ .fig-overflow-fade {
5055
+ --fig-overflow-fade-size: var(--spacer-5);
5056
+ --fig-overflow-fade-clear-top: 0px;
5057
+
5058
+ overflow-y: auto;
5059
+ }
5060
+
5061
+ .fig-overflow-fade.fig-overflow-fade-horizontal {
5062
+ --fig-overflow-fade-clear-left: 0px;
5063
+
5064
+ overflow-x: auto;
5065
+ overflow-y: hidden;
5066
+ }
5067
+
5068
+ @supports (animation-timeline: scroll(self block)) {
5069
+ .fig-overflow-fade:not(.fig-overflow-fade-horizontal) {
5070
+ mask-image: linear-gradient(
5071
+ to bottom,
5072
+ black 0,
5073
+ black var(--fig-overflow-fade-clear-top),
5074
+ transparent var(--fig-overflow-fade-clear-top),
5075
+ rgba(0, 0, 0, 0.04)
5076
+ calc(
5077
+ var(--fig-overflow-fade-clear-top) +
5078
+ var(--fig-overflow-fade-top) * 0.125
5079
+ ),
5080
+ rgba(0, 0, 0, 0.16)
5081
+ calc(
5082
+ var(--fig-overflow-fade-clear-top) +
5083
+ var(--fig-overflow-fade-top) * 0.25
5084
+ ),
5085
+ rgba(0, 0, 0, 0.32)
5086
+ calc(
5087
+ var(--fig-overflow-fade-clear-top) +
5088
+ var(--fig-overflow-fade-top) * 0.375
5089
+ ),
5090
+ rgba(0, 0, 0, 0.5)
5091
+ calc(
5092
+ var(--fig-overflow-fade-clear-top) +
5093
+ var(--fig-overflow-fade-top) * 0.5
5094
+ ),
5095
+ rgba(0, 0, 0, 0.68)
5096
+ calc(
5097
+ var(--fig-overflow-fade-clear-top) +
5098
+ var(--fig-overflow-fade-top) * 0.625
5099
+ ),
5100
+ rgba(0, 0, 0, 0.84)
5101
+ calc(
5102
+ var(--fig-overflow-fade-clear-top) +
5103
+ var(--fig-overflow-fade-top) * 0.75
5104
+ ),
5105
+ rgba(0, 0, 0, 0.96)
5106
+ calc(
5107
+ var(--fig-overflow-fade-clear-top) +
5108
+ var(--fig-overflow-fade-top) * 0.875
5109
+ ),
5110
+ black calc(
5111
+ var(--fig-overflow-fade-clear-top) + var(--fig-overflow-fade-top)
5112
+ ),
5113
+ black calc(100% - var(--fig-overflow-fade-bottom)),
5114
+ rgba(0, 0, 0, 0.96)
5115
+ calc(100% - var(--fig-overflow-fade-bottom) * 0.875),
5116
+ rgba(0, 0, 0, 0.84)
5117
+ calc(100% - var(--fig-overflow-fade-bottom) * 0.75),
5118
+ rgba(0, 0, 0, 0.68)
5119
+ calc(100% - var(--fig-overflow-fade-bottom) * 0.625),
5120
+ rgba(0, 0, 0, 0.5)
5121
+ calc(100% - var(--fig-overflow-fade-bottom) * 0.5),
5122
+ rgba(0, 0, 0, 0.32)
5123
+ calc(100% - var(--fig-overflow-fade-bottom) * 0.375),
5124
+ rgba(0, 0, 0, 0.16)
5125
+ calc(100% - var(--fig-overflow-fade-bottom) * 0.25),
5126
+ rgba(0, 0, 0, 0.04)
5127
+ calc(100% - var(--fig-overflow-fade-bottom) * 0.125),
5128
+ transparent 100%
5129
+ );
5130
+ -webkit-mask-image: linear-gradient(
5131
+ to bottom,
5132
+ black 0,
5133
+ black var(--fig-overflow-fade-clear-top),
5134
+ transparent var(--fig-overflow-fade-clear-top),
5135
+ rgba(0, 0, 0, 0.04)
5136
+ calc(
5137
+ var(--fig-overflow-fade-clear-top) +
5138
+ var(--fig-overflow-fade-top) * 0.125
5139
+ ),
5140
+ rgba(0, 0, 0, 0.16)
5141
+ calc(
5142
+ var(--fig-overflow-fade-clear-top) +
5143
+ var(--fig-overflow-fade-top) * 0.25
5144
+ ),
5145
+ rgba(0, 0, 0, 0.32)
5146
+ calc(
5147
+ var(--fig-overflow-fade-clear-top) +
5148
+ var(--fig-overflow-fade-top) * 0.375
5149
+ ),
5150
+ rgba(0, 0, 0, 0.5)
5151
+ calc(
5152
+ var(--fig-overflow-fade-clear-top) +
5153
+ var(--fig-overflow-fade-top) * 0.5
5154
+ ),
5155
+ rgba(0, 0, 0, 0.68)
5156
+ calc(
5157
+ var(--fig-overflow-fade-clear-top) +
5158
+ var(--fig-overflow-fade-top) * 0.625
5159
+ ),
5160
+ rgba(0, 0, 0, 0.84)
5161
+ calc(
5162
+ var(--fig-overflow-fade-clear-top) +
5163
+ var(--fig-overflow-fade-top) * 0.75
5164
+ ),
5165
+ rgba(0, 0, 0, 0.96)
5166
+ calc(
5167
+ var(--fig-overflow-fade-clear-top) +
5168
+ var(--fig-overflow-fade-top) * 0.875
5169
+ ),
5170
+ black calc(
5171
+ var(--fig-overflow-fade-clear-top) + var(--fig-overflow-fade-top)
5172
+ ),
5173
+ black calc(100% - var(--fig-overflow-fade-bottom)),
5174
+ rgba(0, 0, 0, 0.96)
5175
+ calc(100% - var(--fig-overflow-fade-bottom) * 0.875),
5176
+ rgba(0, 0, 0, 0.84)
5177
+ calc(100% - var(--fig-overflow-fade-bottom) * 0.75),
5178
+ rgba(0, 0, 0, 0.68)
5179
+ calc(100% - var(--fig-overflow-fade-bottom) * 0.625),
5180
+ rgba(0, 0, 0, 0.5)
5181
+ calc(100% - var(--fig-overflow-fade-bottom) * 0.5),
5182
+ rgba(0, 0, 0, 0.32)
5183
+ calc(100% - var(--fig-overflow-fade-bottom) * 0.375),
5184
+ rgba(0, 0, 0, 0.16)
5185
+ calc(100% - var(--fig-overflow-fade-bottom) * 0.25),
5186
+ rgba(0, 0, 0, 0.04)
5187
+ calc(100% - var(--fig-overflow-fade-bottom) * 0.125),
5188
+ transparent 100%
5189
+ );
5190
+
5191
+ animation:
5192
+ fig-overflow-fade-in-top 1ms linear both,
5193
+ fig-overflow-fade-out-bottom 1ms linear both;
5194
+ animation-timeline: scroll(self block);
5195
+ animation-range:
5196
+ 0 var(--fig-overflow-fade-size),
5197
+ calc(100% - var(--fig-overflow-fade-size)) 100%;
5198
+ }
5199
+
5200
+ }
5201
+
5202
+ @supports (animation-timeline: scroll(self inline)) {
5203
+ .fig-overflow-fade.fig-overflow-fade-horizontal {
5204
+ mask-image: linear-gradient(
5205
+ to right,
5206
+ black 0,
5207
+ black var(--fig-overflow-fade-clear-left),
5208
+ transparent var(--fig-overflow-fade-clear-left),
5209
+ rgba(0, 0, 0, 0.04)
5210
+ calc(
5211
+ var(--fig-overflow-fade-clear-left) +
5212
+ var(--fig-overflow-fade-left) * 0.125
5213
+ ),
5214
+ rgba(0, 0, 0, 0.16)
5215
+ calc(
5216
+ var(--fig-overflow-fade-clear-left) +
5217
+ var(--fig-overflow-fade-left) * 0.25
5218
+ ),
5219
+ rgba(0, 0, 0, 0.32)
5220
+ calc(
5221
+ var(--fig-overflow-fade-clear-left) +
5222
+ var(--fig-overflow-fade-left) * 0.375
5223
+ ),
5224
+ rgba(0, 0, 0, 0.5)
5225
+ calc(
5226
+ var(--fig-overflow-fade-clear-left) +
5227
+ var(--fig-overflow-fade-left) * 0.5
5228
+ ),
5229
+ rgba(0, 0, 0, 0.68)
5230
+ calc(
5231
+ var(--fig-overflow-fade-clear-left) +
5232
+ var(--fig-overflow-fade-left) * 0.625
5233
+ ),
5234
+ rgba(0, 0, 0, 0.84)
5235
+ calc(
5236
+ var(--fig-overflow-fade-clear-left) +
5237
+ var(--fig-overflow-fade-left) * 0.75
5238
+ ),
5239
+ rgba(0, 0, 0, 0.96)
5240
+ calc(
5241
+ var(--fig-overflow-fade-clear-left) +
5242
+ var(--fig-overflow-fade-left) * 0.875
5243
+ ),
5244
+ black calc(
5245
+ var(--fig-overflow-fade-clear-left) + var(--fig-overflow-fade-left)
5246
+ ),
5247
+ black calc(100% - var(--fig-overflow-fade-right)),
5248
+ rgba(0, 0, 0, 0.96)
5249
+ calc(100% - var(--fig-overflow-fade-right) * 0.875),
5250
+ rgba(0, 0, 0, 0.84)
5251
+ calc(100% - var(--fig-overflow-fade-right) * 0.75),
5252
+ rgba(0, 0, 0, 0.68)
5253
+ calc(100% - var(--fig-overflow-fade-right) * 0.625),
5254
+ rgba(0, 0, 0, 0.5)
5255
+ calc(100% - var(--fig-overflow-fade-right) * 0.5),
5256
+ rgba(0, 0, 0, 0.32)
5257
+ calc(100% - var(--fig-overflow-fade-right) * 0.375),
5258
+ rgba(0, 0, 0, 0.16)
5259
+ calc(100% - var(--fig-overflow-fade-right) * 0.25),
5260
+ rgba(0, 0, 0, 0.04)
5261
+ calc(100% - var(--fig-overflow-fade-right) * 0.125),
5262
+ transparent 100%
5263
+ );
5264
+ -webkit-mask-image: linear-gradient(
5265
+ to right,
5266
+ black 0,
5267
+ black var(--fig-overflow-fade-clear-left),
5268
+ transparent var(--fig-overflow-fade-clear-left),
5269
+ rgba(0, 0, 0, 0.04)
5270
+ calc(
5271
+ var(--fig-overflow-fade-clear-left) +
5272
+ var(--fig-overflow-fade-left) * 0.125
5273
+ ),
5274
+ rgba(0, 0, 0, 0.16)
5275
+ calc(
5276
+ var(--fig-overflow-fade-clear-left) +
5277
+ var(--fig-overflow-fade-left) * 0.25
5278
+ ),
5279
+ rgba(0, 0, 0, 0.32)
5280
+ calc(
5281
+ var(--fig-overflow-fade-clear-left) +
5282
+ var(--fig-overflow-fade-left) * 0.375
5283
+ ),
5284
+ rgba(0, 0, 0, 0.5)
5285
+ calc(
5286
+ var(--fig-overflow-fade-clear-left) +
5287
+ var(--fig-overflow-fade-left) * 0.5
5288
+ ),
5289
+ rgba(0, 0, 0, 0.68)
5290
+ calc(
5291
+ var(--fig-overflow-fade-clear-left) +
5292
+ var(--fig-overflow-fade-left) * 0.625
5293
+ ),
5294
+ rgba(0, 0, 0, 0.84)
5295
+ calc(
5296
+ var(--fig-overflow-fade-clear-left) +
5297
+ var(--fig-overflow-fade-left) * 0.75
5298
+ ),
5299
+ rgba(0, 0, 0, 0.96)
5300
+ calc(
5301
+ var(--fig-overflow-fade-clear-left) +
5302
+ var(--fig-overflow-fade-left) * 0.875
5303
+ ),
5304
+ black calc(
5305
+ var(--fig-overflow-fade-clear-left) + var(--fig-overflow-fade-left)
5306
+ ),
5307
+ black calc(100% - var(--fig-overflow-fade-right)),
5308
+ rgba(0, 0, 0, 0.96)
5309
+ calc(100% - var(--fig-overflow-fade-right) * 0.875),
5310
+ rgba(0, 0, 0, 0.84)
5311
+ calc(100% - var(--fig-overflow-fade-right) * 0.75),
5312
+ rgba(0, 0, 0, 0.68)
5313
+ calc(100% - var(--fig-overflow-fade-right) * 0.625),
5314
+ rgba(0, 0, 0, 0.5)
5315
+ calc(100% - var(--fig-overflow-fade-right) * 0.5),
5316
+ rgba(0, 0, 0, 0.32)
5317
+ calc(100% - var(--fig-overflow-fade-right) * 0.375),
5318
+ rgba(0, 0, 0, 0.16)
5319
+ calc(100% - var(--fig-overflow-fade-right) * 0.25),
5320
+ rgba(0, 0, 0, 0.04)
5321
+ calc(100% - var(--fig-overflow-fade-right) * 0.125),
5322
+ transparent 100%
5323
+ );
5324
+
5325
+ animation:
5326
+ fig-overflow-fade-in-left 1ms linear both,
5327
+ fig-overflow-fade-out-right 1ms linear both;
5328
+ animation-timeline: scroll(self inline);
5329
+ animation-range:
5330
+ 0 var(--fig-overflow-fade-size),
5331
+ calc(100% - var(--fig-overflow-fade-size)) 100%;
5332
+ }
5333
+ }
5334
+
5335
+ @keyframes fig-overflow-fade-in-top {
5336
+ from {
5337
+ --fig-overflow-fade-top: 0px;
5338
+ }
5339
+ to {
5340
+ --fig-overflow-fade-top: var(--fig-overflow-fade-size);
5341
+ }
5342
+ }
5343
+
5344
+ @keyframes fig-overflow-fade-out-bottom {
5345
+ from {
5346
+ --fig-overflow-fade-bottom: var(--fig-overflow-fade-size);
5347
+ }
5348
+ to {
5349
+ --fig-overflow-fade-bottom: 0px;
5350
+ }
5351
+ }
5352
+
5353
+ @keyframes fig-overflow-fade-in-left {
5354
+ from {
5355
+ --fig-overflow-fade-left: 0px;
5356
+ }
5357
+ to {
5358
+ --fig-overflow-fade-left: var(--fig-overflow-fade-size);
5359
+ }
5360
+ }
5361
+
5362
+ @keyframes fig-overflow-fade-out-right {
5363
+ from {
5364
+ --fig-overflow-fade-right: var(--fig-overflow-fade-size);
5365
+ }
5366
+ to {
5367
+ --fig-overflow-fade-right: 0px;
5368
+ }
5369
+ }
5370
+
5030
5371
  .fig-mask-icon,
5031
5372
  fig-icon {
5032
5373
  /* size only — paint containment skips mask-image when `name` / `--icon` updates