@deepfuture/dui-cdn 0.0.20 → 0.0.21

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.
Files changed (3) hide show
  1. package/dui.js +188 -90
  2. package/dui.min.js +463 -432
  3. package/package.json +1 -1
package/dui.js CHANGED
@@ -658,6 +658,8 @@ var themedBase = i`
658
658
  font-size: inherit;
659
659
  letter-spacing: inherit;
660
660
  font-optical-sizing: auto;
661
+ -webkit-font-smoothing: antialiased;
662
+ -moz-osx-font-smoothing: grayscale;
661
663
  }
662
664
  `;
663
665
 
@@ -1158,19 +1160,6 @@ var badgeStyles = i`
1158
1160
 
1159
1161
  // packages/theme-default/src/components/scroll-area.ts
1160
1162
  var scrollAreaStyles = i`
1161
- .ScrollFade {
1162
- box-shadow: var(--scroll-fade-offset-x, 0) var(--scroll-fade-offset-y, 0)
1163
- var(--scroll-fade-blur-radius, var(--space-3))
1164
- var(--scroll-fade-spread-radius, var(--space-2))
1165
- var(--scroll-fade-color, var(--background));
1166
- opacity: 0;
1167
- transition: opacity var(--duration-fast) ease;
1168
-
1169
- &[data-scrolled] {
1170
- opacity: 1;
1171
- }
1172
- }
1173
-
1174
1163
  .Scrollbar {
1175
1164
  border-radius: var(--radius-sm);
1176
1165
  transition: opacity var(--duration-fast);
@@ -1433,15 +1422,16 @@ var popoverStyles = i``;
1433
1422
  // packages/theme-default/src/components/popover-popup.ts
1434
1423
  var popoverPopupStyles = i`
1435
1424
  .Popup {
1436
- padding: var(--space-1);
1425
+ padding: var(--popover-popup-padding, var(--space-4));
1437
1426
  border-radius: var(--radius-md);
1438
1427
  background: var(--surface-3);
1439
1428
  color: var(--text-1);
1440
1429
  font-family: var(--font-sans);
1441
- font-size: var(--text-sm); line-height: var(--text-sm--line-height);
1430
+ font-size: var(--text-sm);
1431
+ line-height: var(--text-sm--line-height);
1442
1432
  box-shadow: var(--shadow-md);
1443
1433
  border: var(--border-width-thin) solid var(--border);
1444
- transition-duration: var(--duration-fast);
1434
+ transition-duration: var(--duration-faster);
1445
1435
  transition-timing-function: var(--ease-out-3);
1446
1436
  }
1447
1437
 
@@ -1462,7 +1452,7 @@ var tooltipStyles = i``;
1462
1452
  // packages/theme-default/src/components/tooltip-popup.ts
1463
1453
  var tooltipPopupStyles = i`
1464
1454
  .Popup {
1465
- padding: var(--space-0_5) var(--space-1_5);
1455
+ padding: var(--space-2) var(--space-2);
1466
1456
  border-radius: var(--radius-sm);
1467
1457
  background: color-mix(
1468
1458
  in oklch,
@@ -1862,36 +1852,18 @@ var toolbarStyles = i`
1862
1852
  }
1863
1853
 
1864
1854
  :host([inset]) [part="root"] {
1865
- padding-top: var(--space-2);
1866
- padding-bottom: var(--space-2);
1867
- padding-left: var(--space-4);
1868
- padding-right: var(--space-4);
1855
+ padding-top: var(--toolbar-padding-y, var(--space-2));
1856
+ padding-bottom: var(--toolbar-padding-y, var(--space-2));
1857
+ padding-left: var(--toolbar-padding-x, var(--space-4));
1858
+ padding-right: var(--toolbar-padding-x, var(--space-4));
1869
1859
  }
1870
1860
 
1871
1861
  :host([inset][has-button-left]) [part="root"] {
1872
- padding-left: var(--space-2);
1862
+ padding-left: var(--toolbar-padding-x-button, var(--space-2));
1873
1863
  }
1874
1864
 
1875
1865
  :host([inset][has-button-right]) [part="root"] {
1876
- padding-right: var(--space-2);
1877
- }
1878
-
1879
- /* ── Size variants ── */
1880
-
1881
- :host([size="sm"]) [part="root"] {
1882
- height: var(--component-height-sm);
1883
- }
1884
-
1885
- :host([size="md"]) [part="root"] {
1886
- height: var(--component-height-md);
1887
- }
1888
-
1889
- :host([size="lg"]) [part="root"] {
1890
- height: var(--component-height-lg);
1891
- }
1892
-
1893
- :host([size="xl"]) [part="root"] {
1894
- height: var(--component-height-xl);
1866
+ padding-right: var(--toolbar-padding-x-button, var(--space-2));
1895
1867
  }
1896
1868
 
1897
1869
  /* ── Slot containers ── */
@@ -2405,13 +2377,14 @@ var dropzoneStyles = i`
2405
2377
  border-radius: var(--radius-md);
2406
2378
  background: var(--background);
2407
2379
  color: var(--text-1);
2380
+ font-size: var(--text-sm);
2408
2381
  padding: var(--space-4);
2409
2382
  transition-property: border-color, background, color, box-shadow, filter, transform;
2410
2383
  transition-duration: var(--duration-fast);
2411
2384
  }
2412
2385
 
2413
2386
  [part="root"]:hover {
2414
- border-color: var(--accent);
2387
+ border-color: var(--border-strong);
2415
2388
  background: var(--surface-1);
2416
2389
  }
2417
2390
 
@@ -2440,7 +2413,7 @@ var fieldStyles = i`
2440
2413
 
2441
2414
  [part="label"] {
2442
2415
  font-family: var(--font-sans);
2443
- font-size: var(--font-size-sm);
2416
+ font-size: var(--text-sm);
2444
2417
  font-weight: var(--font-weight-medium);
2445
2418
  line-height: var(--line-height-normal);
2446
2419
  color: var(--text-1);
@@ -2452,7 +2425,7 @@ var fieldStyles = i`
2452
2425
 
2453
2426
  [part="description"] {
2454
2427
  font-family: var(--font-sans);
2455
- font-size: var(--font-size-xs);
2428
+ font-size: var(--text-xs);
2456
2429
  line-height: var(--line-height-normal);
2457
2430
  color: var(--text-3);
2458
2431
  margin: 0;
@@ -2460,7 +2433,7 @@ var fieldStyles = i`
2460
2433
 
2461
2434
  [part="error"][data-invalid] {
2462
2435
  font-family: var(--font-sans);
2463
- font-size: var(--font-size-xs);
2436
+ font-size: var(--text-xs);
2464
2437
  line-height: var(--line-height-normal);
2465
2438
  color: var(--destructive);
2466
2439
  margin: 0;
@@ -2481,7 +2454,7 @@ var fieldsetStyles = i`
2481
2454
 
2482
2455
  [part="legend"] {
2483
2456
  font-family: var(--font-sans);
2484
- font-size: var(--font-size-sm);
2457
+ font-size: var(--text-sm);
2485
2458
  font-weight: var(--font-weight-semibold);
2486
2459
  line-height: var(--line-height-normal);
2487
2460
  color: var(--text-1);
@@ -2502,7 +2475,7 @@ var selectStyles = i`
2502
2475
  font-family: var(--font-sans);
2503
2476
  font-size: var(--text-sm); line-height: var(--text-sm--line-height);
2504
2477
  transition-property: border-color, box-shadow, background, filter, transform;
2505
- transition-duration: var(--duration-fast);
2478
+ transition-duration: var(--duration-fastest);
2506
2479
  }
2507
2480
 
2508
2481
  .Trigger:focus {
@@ -2567,6 +2540,19 @@ var selectStyles = i`
2567
2540
  transform: translateY(calc(var(--space-1) * -1));
2568
2541
  }
2569
2542
 
2543
+ /* When inner-aligned (macOS-style), appear/disappear instantly.
2544
+ transition: none — prevents the 200ms onTransitionEnd fallback delay.
2545
+ transform: none — prevents translateY flash and getBoundingClientRect distortion.
2546
+ Structural opacity:0 on starting/ending-style hides the popup immediately on close. */
2547
+ .Popup[data-align-inner] {
2548
+ transition: none;
2549
+ }
2550
+
2551
+ .Popup[data-align-inner][data-starting-style],
2552
+ .Popup[data-align-inner][data-ending-style] {
2553
+ transform: none;
2554
+ }
2555
+
2570
2556
  .Listbox {
2571
2557
  padding: var(--space-1);
2572
2558
  }
@@ -2609,16 +2595,17 @@ var previewCardStyles = i``;
2609
2595
  // packages/theme-default/src/components/preview-card-popup.ts
2610
2596
  var previewCardPopupStyles = i`
2611
2597
  .Popup {
2612
- padding: var(--space-4);
2598
+ padding: var(--preview-card-popup-padding, var(--space-4));
2613
2599
  border-radius: var(--radius-md);
2614
2600
  background: var(--surface-3);
2615
2601
  color: var(--text-1);
2616
2602
  font-family: var(--font-sans);
2617
- font-size: var(--text-sm); line-height: var(--text-sm--line-height);
2603
+ font-size: var(--text-sm);
2604
+ line-height: var(--text-sm--line-height);
2618
2605
  box-shadow: var(--shadow-lg);
2619
2606
  border: var(--border-width-thin) solid var(--border);
2620
2607
  max-width: var(--max-width, var(--space-80));
2621
- transition-duration: var(--duration-fast);
2608
+ transition-duration: var(--duration-faster);
2622
2609
  transition-timing-function: var(--ease-out-3);
2623
2610
  }
2624
2611
 
@@ -3123,6 +3110,10 @@ var sidebarInsetStyles = i``;
3123
3110
 
3124
3111
  // packages/theme-default/src/components/separator.ts
3125
3112
  var separatorStyles = i`
3113
+ :host {
3114
+ --separator-margin: 0;
3115
+ }
3116
+
3126
3117
  [part="root"] {
3127
3118
  border: none;
3128
3119
  }
@@ -3130,12 +3121,16 @@ var separatorStyles = i`
3130
3121
  :host([orientation="horizontal"]) [part="root"] {
3131
3122
  height: 0;
3132
3123
  border-top: var(--border-width-thin) solid var(--border);
3124
+ margin-top: var(--separator-margin);
3125
+ margin-bottom: var(--separator-margin);
3133
3126
  }
3134
3127
 
3135
3128
  :host([orientation="vertical"]) [part="root"] {
3136
3129
  width: 0;
3137
3130
  height: 100%;
3138
3131
  border-left: var(--border-width-thin) solid var(--border);
3132
+ margin-left: var(--separator-margin);
3133
+ margin-right: var(--separator-margin);
3139
3134
  }
3140
3135
  `;
3141
3136
 
@@ -3159,19 +3154,25 @@ var splitButtonStyles = i`
3159
3154
  :host([variant="neutral"]) {
3160
3155
  --_intent-base: var(--foreground);
3161
3156
  --_intent-base-fg: var(--background);
3157
+ --_intent-subtle: oklch(from var(--foreground) l c h / 0.08);
3162
3158
  --_intent-subtle-fg: var(--text-1);
3159
+ --_intent-border: var(--border);
3163
3160
  }
3164
3161
 
3165
3162
  :host([variant="primary"]) {
3166
3163
  --_intent-base: var(--accent);
3167
3164
  --_intent-base-fg: oklch(from var(--accent) 0.98 0.01 h);
3165
+ --_intent-subtle: var(--accent-subtle);
3168
3166
  --_intent-subtle-fg: var(--accent-text);
3167
+ --_intent-border: oklch(from var(--accent) l c h / 0.5);
3169
3168
  }
3170
3169
 
3171
3170
  :host([variant="danger"]) {
3172
3171
  --_intent-base: var(--destructive);
3173
3172
  --_intent-base-fg: oklch(from var(--destructive) 0.98 0.01 h);
3173
+ --_intent-subtle: var(--destructive-subtle);
3174
3174
  --_intent-subtle-fg: var(--destructive-text);
3175
+ --_intent-border: oklch(from var(--destructive) l c h / 0.5);
3175
3176
  }
3176
3177
 
3177
3178
  /* ---------------------------------------------------------------
@@ -3201,6 +3202,13 @@ var splitButtonStyles = i`
3201
3202
  --sb-divider: var(--border);
3202
3203
  }
3203
3204
 
3205
+ :host([appearance="soft"]) {
3206
+ --sb-bg: var(--_intent-subtle);
3207
+ --sb-fg: var(--_intent-subtle-fg);
3208
+ --sb-border: transparent;
3209
+ --sb-divider: oklch(from var(--_intent-base) l c h / 0.15);
3210
+ }
3211
+
3204
3212
  /* ---------------------------------------------------------------
3205
3213
  * Sizes
3206
3214
  * --------------------------------------------------------------- */
@@ -3214,6 +3222,7 @@ var splitButtonStyles = i`
3214
3222
  --sb-radius: var(--radius-md);
3215
3223
  --sb-font-size: var(--text-sm);
3216
3224
  --sb-icon-size: var(--space-4_5);
3225
+ --sb-trigger-icon-size: var(--space-4);
3217
3226
  }
3218
3227
 
3219
3228
  :host([size="xs"]) {
@@ -3224,6 +3233,7 @@ var splitButtonStyles = i`
3224
3233
  --sb-gap: var(--space-1);
3225
3234
  --sb-font-size: var(--text-xs);
3226
3235
  --sb-icon-size: var(--space-3_5);
3236
+ --sb-trigger-icon-size: var(--space-3);
3227
3237
  }
3228
3238
 
3229
3239
  :host([size="sm"]) {
@@ -3234,6 +3244,7 @@ var splitButtonStyles = i`
3234
3244
  --sb-gap: var(--space-1);
3235
3245
  --sb-font-size: var(--text-xs);
3236
3246
  --sb-icon-size: var(--space-4);
3247
+ --sb-trigger-icon-size: var(--space-3_5);
3237
3248
  }
3238
3249
 
3239
3250
  :host([size="lg"]) {
@@ -3244,6 +3255,7 @@ var splitButtonStyles = i`
3244
3255
  --sb-gap: var(--space-1_5);
3245
3256
  --sb-font-size: var(--text-sm);
3246
3257
  --sb-icon-size: var(--space-4_5);
3258
+ --sb-trigger-icon-size: var(--space-4);
3247
3259
  }
3248
3260
 
3249
3261
  /* ---------------------------------------------------------------
@@ -3298,10 +3310,11 @@ var splitButtonStyles = i`
3298
3310
  * --------------------------------------------------------------- */
3299
3311
 
3300
3312
  [part="trigger"] {
3301
- --icon-size: var(--sb-icon-size);
3313
+ --icon-size: var(--sb-trigger-icon-size);
3302
3314
  --icon-color: var(--sb-fg);
3303
3315
  padding: 0 var(--sb-trigger-padding-x);
3304
3316
  height: 100%;
3317
+ background: var(--sb-trigger-bg, var(--sb-bg));
3305
3318
  color: inherit;
3306
3319
  transition-property: background, filter;
3307
3320
  transition-duration: var(--duration-faster);
@@ -3313,29 +3326,29 @@ var splitButtonStyles = i`
3313
3326
  * --------------------------------------------------------------- */
3314
3327
 
3315
3328
  /* Filled hover */
3316
- :host(:not([appearance="outline"]):not([appearance="ghost"]))
3329
+ :host(:not([appearance="outline"]):not([appearance="ghost"]):not([appearance="soft"]))
3317
3330
  [part="action"]:hover:not(:disabled) {
3318
3331
  filter: brightness(0.88);
3319
3332
  }
3320
3333
 
3321
- :host(:not([appearance="outline"]):not([appearance="ghost"]))
3334
+ :host(:not([appearance="outline"]):not([appearance="ghost"]):not([appearance="soft"]))
3322
3335
  [part="trigger"]:hover:not(:disabled) {
3323
3336
  filter: brightness(0.88);
3324
3337
  }
3325
3338
 
3326
3339
  /* Filled active */
3327
- :host(:not([appearance="outline"]):not([appearance="ghost"]))
3340
+ :host(:not([appearance="outline"]):not([appearance="ghost"]):not([appearance="soft"]))
3328
3341
  [part="action"]:active:not(:disabled) {
3329
3342
  filter: brightness(0.80);
3330
3343
  }
3331
3344
 
3332
- :host(:not([appearance="outline"]):not([appearance="ghost"]))
3345
+ :host(:not([appearance="outline"]):not([appearance="ghost"]):not([appearance="soft"]))
3333
3346
  [part="trigger"]:active:not(:disabled) {
3334
3347
  filter: brightness(0.80);
3335
3348
  }
3336
3349
 
3337
3350
  /* Filled trigger open state */
3338
- :host(:not([appearance="outline"]):not([appearance="ghost"]))
3351
+ :host(:not([appearance="outline"]):not([appearance="ghost"]):not([appearance="soft"]))
3339
3352
  [part="trigger"][data-open]:not(:disabled) {
3340
3353
  filter: brightness(0.80);
3341
3354
  }
@@ -3343,29 +3356,52 @@ var splitButtonStyles = i`
3343
3356
  /* Ghost / outline hover */
3344
3357
  :host([appearance="ghost"]) [part="action"]:hover:not(:disabled),
3345
3358
  :host([appearance="outline"]) [part="action"]:hover:not(:disabled) {
3346
- background: oklch(from var(--foreground) l c h / 0.05);
3359
+ background: oklch(from var(--_intent-base) l c h / 0.05);
3347
3360
  }
3348
3361
 
3349
3362
  :host([appearance="ghost"]) [part="trigger"]:hover:not(:disabled),
3350
3363
  :host([appearance="outline"]) [part="trigger"]:hover:not(:disabled) {
3351
- background: oklch(from var(--foreground) l c h / 0.05);
3364
+ background: oklch(from var(--_intent-base) l c h / 0.05);
3352
3365
  }
3353
3366
 
3354
3367
  /* Ghost / outline active */
3355
3368
  :host([appearance="ghost"]) [part="action"]:active:not(:disabled),
3356
3369
  :host([appearance="outline"]) [part="action"]:active:not(:disabled) {
3357
- background: oklch(from var(--foreground) l c h / 0.10);
3370
+ background: oklch(from var(--_intent-base) l c h / 0.10);
3358
3371
  }
3359
3372
 
3360
3373
  :host([appearance="ghost"]) [part="trigger"]:active:not(:disabled),
3361
3374
  :host([appearance="outline"]) [part="trigger"]:active:not(:disabled) {
3362
- background: oklch(from var(--foreground) l c h / 0.10);
3375
+ background: oklch(from var(--_intent-base) l c h / 0.10);
3363
3376
  }
3364
3377
 
3365
3378
  /* Ghost / outline trigger open state */
3366
3379
  :host([appearance="ghost"]) [part="trigger"][data-open]:not(:disabled),
3367
3380
  :host([appearance="outline"]) [part="trigger"][data-open]:not(:disabled) {
3368
- background: oklch(from var(--foreground) l c h / 0.10);
3381
+ background: oklch(from var(--_intent-base) l c h / 0.10);
3382
+ }
3383
+
3384
+ /* Soft hover */
3385
+ :host([appearance="soft"]) [part="action"]:hover:not(:disabled) {
3386
+ background: oklch(from var(--_intent-base) l c h / 0.12);
3387
+ }
3388
+
3389
+ :host([appearance="soft"]) [part="trigger"]:hover:not(:disabled) {
3390
+ background: oklch(from var(--_intent-base) l c h / 0.12);
3391
+ }
3392
+
3393
+ /* Soft active */
3394
+ :host([appearance="soft"]) [part="action"]:active:not(:disabled) {
3395
+ background: oklch(from var(--_intent-base) l c h / 0.18);
3396
+ }
3397
+
3398
+ :host([appearance="soft"]) [part="trigger"]:active:not(:disabled) {
3399
+ background: oklch(from var(--_intent-base) l c h / 0.18);
3400
+ }
3401
+
3402
+ /* Soft trigger open state */
3403
+ :host([appearance="soft"]) [part="trigger"][data-open]:not(:disabled) {
3404
+ background: oklch(from var(--_intent-base) l c h / 0.18);
3369
3405
  }
3370
3406
 
3371
3407
  /* Focus visible */
@@ -3776,6 +3812,7 @@ var numberFieldStyles = i`
3776
3812
  [part="input"] {
3777
3813
  text-align: var(--number-field-value-align);
3778
3814
  padding: 0 var(--space-2);
3815
+ font-weight: var(--font-weight-medium);
3779
3816
  }
3780
3817
 
3781
3818
  :host([disabled]) {
@@ -3812,6 +3849,7 @@ var stepperStyles = i`
3812
3849
  width: var(--space-16);
3813
3850
  font-family: var(--font-sans);
3814
3851
  font-size: var(--text-sm);
3852
+ font-weight: var(--font-weight-medium);
3815
3853
  color: var(--text-1);
3816
3854
  }
3817
3855
 
@@ -4503,9 +4541,8 @@ var properties_default = `/* ===================================================
4503
4541
  * Button
4504
4542
  * ----------------------------------------------------------- */
4505
4543
  @property --button-bg {
4506
- syntax: "<color>";
4544
+ syntax: "*";
4507
4545
  inherits: true;
4508
- initial-value: oklch(0.15 0 0);
4509
4546
  }
4510
4547
 
4511
4548
  @property --button-fg {
@@ -9075,6 +9112,36 @@ var fixedPlatform = {
9075
9112
  ...platform,
9076
9113
  getOffsetParent: () => window
9077
9114
  };
9115
+ var alignInner = (options) => ({
9116
+ name: "alignInner",
9117
+ fn(state4) {
9118
+ const innerEl = options.getElement();
9119
+ if (!innerEl) return {};
9120
+ const padding = options.padding ?? 8;
9121
+ const { rects } = state4;
9122
+ const floatingEl = state4.elements.floating;
9123
+ const floatingRect = floatingEl.getBoundingClientRect();
9124
+ const innerRect = innerEl.getBoundingClientRect();
9125
+ const innerOffsetY = innerRect.top - floatingRect.top + innerRect.height / 2;
9126
+ const refInnerEl = options.getReferenceInner?.();
9127
+ const refCenterY = refInnerEl ? refInnerEl.getBoundingClientRect().top + refInnerEl.getBoundingClientRect().height / 2 : rects.reference.y + rects.reference.height / 2;
9128
+ let y3 = refCenterY - innerOffsetY;
9129
+ const viewportH = globalThis.innerHeight;
9130
+ const floatingH = floatingRect.height;
9131
+ const minY = padding;
9132
+ const maxY = viewportH - floatingH - padding;
9133
+ const clampedY = Math.max(minY, Math.min(y3, maxY));
9134
+ const scrollContainer = floatingEl.shadowRoot?.querySelector(".Popup") ?? floatingEl.querySelector(".Popup");
9135
+ if (scrollContainer && clampedY !== y3) {
9136
+ const scrollDelta = y3 - clampedY;
9137
+ scrollContainer.scrollTop = Math.max(0, scrollContainer.scrollTop - scrollDelta);
9138
+ }
9139
+ y3 = clampedY;
9140
+ const innerLeftOffset = innerRect.left - floatingRect.left;
9141
+ const x2 = refInnerEl ? refInnerEl.getBoundingClientRect().left - innerLeftOffset : rects.reference.x;
9142
+ return { x: x2, y: y3, reset: false };
9143
+ }
9144
+ });
9078
9145
  var computeFixedPosition = (anchor, floating, options = {}) => {
9079
9146
  const {
9080
9147
  placement = "bottom-start",
@@ -9083,11 +9150,8 @@ var computeFixedPosition = (anchor, floating, options = {}) => {
9083
9150
  minMatchWidth = false,
9084
9151
  padding = 8
9085
9152
  } = options;
9086
- const middleware = [
9087
- offset2(offsetPx),
9088
- flip2(),
9089
- shift2({ padding })
9090
- ];
9153
+ const useInnerAlign = options.alignToInner?.getElement() != null;
9154
+ const middleware = useInnerAlign ? [alignInner(options.alignToInner)] : [offset2(offsetPx), flip2(), shift2({ padding })];
9091
9155
  if (matchWidth) {
9092
9156
  middleware.push(
9093
9157
  size2({
@@ -9144,7 +9208,10 @@ var FloatingPortalController = class {
9144
9208
  #renderPopup;
9145
9209
  #contentContainer;
9146
9210
  #contentSelector;
9211
+ #forwardProperties;
9147
9212
  #getOverlayRoot;
9213
+ #alignToInner;
9214
+ #alignToInnerReference;
9148
9215
  #movedNodes = [];
9149
9216
  #positioner = null;
9150
9217
  #cleanupAutoUpdate = null;
@@ -9189,7 +9256,10 @@ var FloatingPortalController = class {
9189
9256
  this.#renderPopup = options.renderPopup;
9190
9257
  this.#contentContainer = options.contentContainer;
9191
9258
  this.#contentSelector = options.contentSelector;
9259
+ this.#forwardProperties = options.forwardProperties ?? [];
9192
9260
  this.#getOverlayRoot = options.getOverlayRoot ?? (() => document.body);
9261
+ this.#alignToInner = options.alignToInner;
9262
+ this.#alignToInnerReference = options.alignToInnerReference;
9193
9263
  host.addController(this);
9194
9264
  }
9195
9265
  hostConnected() {
@@ -9268,6 +9338,7 @@ var FloatingPortalController = class {
9268
9338
  #createPositioner() {
9269
9339
  if (this.#positioner) {
9270
9340
  this.#positioner.style.display = "";
9341
+ this.#applyForwardedProperties(this.#positioner);
9271
9342
  return;
9272
9343
  }
9273
9344
  const overlayRoot = this.#getOverlayRoot();
@@ -9289,9 +9360,21 @@ var FloatingPortalController = class {
9289
9360
  const shadow = positioner.attachShadow({ mode: "open" });
9290
9361
  S(shadow, allStyles);
9291
9362
  }
9363
+ this.#applyForwardedProperties(positioner);
9292
9364
  overlayRoot.appendChild(positioner);
9293
9365
  this.#positioner = positioner;
9294
9366
  }
9367
+ /** Read forwarded CSS custom properties from the host and set them on the positioner. */
9368
+ #applyForwardedProperties(positioner) {
9369
+ if (this.#forwardProperties.length === 0) return;
9370
+ const computed = getComputedStyle(this.#host);
9371
+ for (const prop of this.#forwardProperties) {
9372
+ const value = computed.getPropertyValue(prop).trim();
9373
+ if (value) {
9374
+ positioner.style.setProperty(prop, value);
9375
+ }
9376
+ }
9377
+ }
9295
9378
  #hidePositioner() {
9296
9379
  if (this.#positioner) {
9297
9380
  this.#positioner.style.display = "none";
@@ -9311,7 +9394,11 @@ var FloatingPortalController = class {
9311
9394
  offsetPx: this.#offset,
9312
9395
  matchWidth: this.#matchWidth,
9313
9396
  minMatchWidth: this.#minMatchWidth,
9314
- onPosition: this.#onPosition
9397
+ onPosition: this.#onPosition,
9398
+ alignToInner: this.#alignToInner ? {
9399
+ getElement: this.#alignToInner,
9400
+ getReferenceInner: this.#alignToInnerReference
9401
+ } : void 0
9315
9402
  });
9316
9403
  }
9317
9404
  #stopAutoUpdate() {
@@ -13972,6 +14059,7 @@ var DuiPreviewCardPopup = class extends (_a35 = i4, _showArrow_dec2 = [n4({ type
13972
14059
  offset: 8,
13973
14060
  styles: portalPopupStyles4,
13974
14061
  contentContainer: ".PreviewCardContent",
14062
+ forwardProperties: ["--preview-card-popup-padding"],
13975
14063
  onPosition: ({ placement }) => {
13976
14064
  const actualSide = placement.split("-")[0];
13977
14065
  if (actualSide !== __privateGet(this, _DuiPreviewCardPopup_instances, side_get2)) {
@@ -14407,14 +14495,9 @@ var styles37 = i`
14407
14495
  }
14408
14496
  }
14409
14497
 
14410
- .ScrollFade {
14411
- position: absolute;
14412
- top: 0;
14413
- left: 0;
14414
- right: 0;
14415
- height: 0;
14416
- pointer-events: none;
14417
- z-index: 1;
14498
+ :host([fade]) .Viewport[data-scrolled] {
14499
+ -webkit-mask-image: linear-gradient(to bottom, transparent, black var(--scroll-fade-size, 1.5rem));
14500
+ mask-image: linear-gradient(to bottom, transparent, black var(--scroll-fade-size, 1.5rem));
14418
14501
  }
14419
14502
 
14420
14503
  .Scrollbar {
@@ -14695,11 +14778,7 @@ var _DuiScrollArea = class _DuiScrollArea extends (_a39 = i4, _orientation_dec4
14695
14778
  ?data-has-overflow-y="${__privateGet(this, _DuiScrollArea_instances, hasOverflowY_get)}"
14696
14779
  ?data-scrolling="${__privateGet(this, _DuiScrollArea_instances, scrolling_get)}"
14697
14780
  >
14698
- ${this.fade ? b2`<div
14699
- class="ScrollFade"
14700
- ?data-scrolled="${!__privateGet(this, _DuiScrollArea_instances, isAtTop_get)}"
14701
- ></div>` : A}
14702
- <div class="Viewport" part="viewport" @scroll="${__privateGet(this, _onScroll)}">
14781
+ <div class="Viewport" part="viewport" ?data-scrolled="${!__privateGet(this, _DuiScrollArea_instances, isAtTop_get)}" @scroll="${__privateGet(this, _onScroll)}">
14703
14782
  <slot></slot>
14704
14783
  </div>
14705
14784
  ${__privateMethod(this, _DuiScrollArea_instances, renderVerticalScrollbar_fn).call(this)} ${__privateMethod(this, _DuiScrollArea_instances, renderHorizontalScrollbar_fn).call(this)}
@@ -14886,8 +14965,8 @@ var portalPopupStyles5 = [
14886
14965
  }
14887
14966
  `
14888
14967
  ];
14889
- var _highlightedIndex_dec3, _name_dec7, _disabled_dec19, _placeholder_dec4, _value_dec15, _options_dec2, _a40, _internals6, _init40, _options2, _value15, _placeholder4, _disabled19, _name7, _highlightedIndex3, _b29, highlightedIndex_get3, highlightedIndex_set3, _DuiSelect_instances, _triggerId5, _listboxId, _popup3, selectedOption_get, selectedIndex_get, displayValue_get2, _onTriggerClick2, _onTriggerKeyDown, _onListMouseDown2, _onItemClick2, _onItemMouseEnter, selectOption_fn2, nextEnabledIndex_fn, focusTrigger_fn, _renderItem2;
14890
- var DuiSelect = class extends (_a40 = i4, _options_dec2 = [n4({ attribute: false })], _value_dec15 = [n4({ type: String })], _placeholder_dec4 = [n4({ type: String })], _disabled_dec19 = [n4({ type: Boolean, reflect: true })], _name_dec7 = [n4({ type: String })], _highlightedIndex_dec3 = [r5()], _a40) {
14968
+ var _highlightedIndex_dec3, _name_dec7, _alignItemToTrigger_dec, _disabled_dec19, _placeholder_dec4, _value_dec15, _options_dec2, _a40, _internals6, _init40, _options2, _value15, _placeholder4, _disabled19, _alignItemToTrigger, _name7, _highlightedIndex3, _b29, highlightedIndex_get3, highlightedIndex_set3, _DuiSelect_instances, _triggerId5, _listboxId, _popup3, selectedOption_get, selectedIndex_get, displayValue_get2, _onTriggerClick2, _onTriggerKeyDown, _onListMouseDown2, _onItemClick2, _onItemMouseEnter, selectOption_fn2, nextEnabledIndex_fn, focusTrigger_fn, _renderItem2;
14969
+ var DuiSelect = class extends (_a40 = i4, _options_dec2 = [n4({ attribute: false })], _value_dec15 = [n4({ type: String })], _placeholder_dec4 = [n4({ type: String })], _disabled_dec19 = [n4({ type: Boolean, reflect: true })], _alignItemToTrigger_dec = [n4({ type: Boolean, attribute: "align-item-to-trigger", reflect: true })], _name_dec7 = [n4({ type: String })], _highlightedIndex_dec3 = [r5()], _a40) {
14891
14970
  constructor() {
14892
14971
  super();
14893
14972
  __privateAdd(this, _DuiSelect_instances);
@@ -14896,8 +14975,9 @@ var DuiSelect = class extends (_a40 = i4, _options_dec2 = [n4({ attribute: false
14896
14975
  __privateAdd(this, _value15, __runInitializers(_init40, 12, this, "")), __runInitializers(_init40, 15, this);
14897
14976
  __privateAdd(this, _placeholder4, __runInitializers(_init40, 16, this, "Select...")), __runInitializers(_init40, 19, this);
14898
14977
  __privateAdd(this, _disabled19, __runInitializers(_init40, 20, this, false)), __runInitializers(_init40, 23, this);
14899
- __privateAdd(this, _name7, __runInitializers(_init40, 24, this, "")), __runInitializers(_init40, 27, this);
14900
- __privateAdd(this, _highlightedIndex3, __runInitializers(_init40, 28, this, -1)), __runInitializers(_init40, 31, this);
14978
+ __privateAdd(this, _alignItemToTrigger, __runInitializers(_init40, 24, this, true)), __runInitializers(_init40, 27, this);
14979
+ __privateAdd(this, _name7, __runInitializers(_init40, 28, this, "")), __runInitializers(_init40, 31, this);
14980
+ __privateAdd(this, _highlightedIndex3, __runInitializers(_init40, 32, this, -1)), __runInitializers(_init40, 35, this);
14901
14981
  __privateAdd(this, _triggerId5, `select-trigger-${crypto.randomUUID().slice(0, 8)}`);
14902
14982
  __privateAdd(this, _listboxId, `select-listbox-${crypto.randomUUID().slice(0, 8)}`);
14903
14983
  __privateAdd(this, _popup3, new FloatingPortalController(this, {
@@ -14905,6 +14985,16 @@ var DuiSelect = class extends (_a40 = i4, _options_dec2 = [n4({ attribute: false
14905
14985
  matchWidth: false,
14906
14986
  minMatchWidth: true,
14907
14987
  styles: portalPopupStyles5,
14988
+ alignToInner: () => {
14989
+ if (!this.alignItemToTrigger) return null;
14990
+ const root = __privateGet(this, _popup3).renderRoot;
14991
+ const selectedItem = root?.querySelector("[data-selected]");
14992
+ return selectedItem?.querySelector(".ItemText") ?? selectedItem ?? null;
14993
+ },
14994
+ alignToInnerReference: () => {
14995
+ if (!this.alignItemToTrigger) return null;
14996
+ return this.shadowRoot?.querySelector(".Value") ?? null;
14997
+ },
14908
14998
  onOpen: () => {
14909
14999
  __privateSet(this, _DuiSelect_instances, __privateGet(this, _DuiSelect_instances, selectedIndex_get), highlightedIndex_set3);
14910
15000
  },
@@ -14915,6 +15005,7 @@ var DuiSelect = class extends (_a40 = i4, _options_dec2 = [n4({ attribute: false
14915
15005
  return b2`
14916
15006
  <div
14917
15007
  class="Popup"
15008
+ ?data-align-inner="${this.alignItemToTrigger && this.value !== ""}"
14918
15009
  ?data-starting-style="${portal.isStarting}"
14919
15010
  ?data-ending-style="${portal.isEnding}"
14920
15011
  >
@@ -15088,6 +15179,7 @@ _options2 = new WeakMap();
15088
15179
  _value15 = new WeakMap();
15089
15180
  _placeholder4 = new WeakMap();
15090
15181
  _disabled19 = new WeakMap();
15182
+ _alignItemToTrigger = new WeakMap();
15091
15183
  _name7 = new WeakMap();
15092
15184
  _highlightedIndex3 = new WeakMap();
15093
15185
  _DuiSelect_instances = new WeakSet();
@@ -15133,6 +15225,7 @@ __decorateElement(_init40, 4, "options", _options_dec2, DuiSelect, _options2);
15133
15225
  __decorateElement(_init40, 4, "value", _value_dec15, DuiSelect, _value15);
15134
15226
  __decorateElement(_init40, 4, "placeholder", _placeholder_dec4, DuiSelect, _placeholder4);
15135
15227
  __decorateElement(_init40, 4, "disabled", _disabled_dec19, DuiSelect, _disabled19);
15228
+ __decorateElement(_init40, 4, "alignItemToTrigger", _alignItemToTrigger_dec, DuiSelect, _alignItemToTrigger);
15136
15229
  __decorateElement(_init40, 4, "name", _name_dec7, DuiSelect, _name7);
15137
15230
  _b29 = __decorateElement(_init40, 20, "#highlightedIndex", _highlightedIndex_dec3, _DuiSelect_instances, _highlightedIndex3), highlightedIndex_get3 = _b29.get, highlightedIndex_set3 = _b29.set;
15138
15231
  __decoratorMetadata(_init40, DuiSelect);
@@ -15149,6 +15242,7 @@ var styles38 = i`
15149
15242
  :host([orientation="vertical"]) {
15150
15243
  display: inline-block;
15151
15244
  align-self: stretch;
15245
+ height: 100%;
15152
15246
  }
15153
15247
 
15154
15248
  [part="root"] {
@@ -15249,16 +15343,17 @@ var portalPopupStyles6 = [
15249
15343
  }
15250
15344
  `
15251
15345
  ];
15252
- var _highlightedIndex_dec4, _disabled_dec20, _size_dec3, _appearance_dec, _variant_dec, _a42, _init42, _variant, _appearance, _size3, _disabled20, _highlightedIndex4, _b30, highlightedIndex_get4, highlightedIndex_set4, _DuiSplitButton_instances, _menuId2, _popup4, items_get2, _onActionClick, _onActionKeyDown, _onTriggerClick3, _onTriggerKeyDown2, _onItemSlotClick2, _onMenuMouseMove2, focusTrigger_fn2;
15253
- var DuiSplitButton = class extends (_a42 = i4, _variant_dec = [n4({ reflect: true })], _appearance_dec = [n4({ reflect: true })], _size_dec3 = [n4({ reflect: true })], _disabled_dec20 = [n4({ type: Boolean, reflect: true })], _highlightedIndex_dec4 = [r5()], _a42) {
15346
+ var _highlightedIndex_dec4, _disabled_dec20, _popupMinWidth_dec2, _size_dec3, _appearance_dec, _variant_dec, _a42, _init42, _variant, _appearance, _size3, _popupMinWidth2, _disabled20, _highlightedIndex4, _b30, highlightedIndex_get4, highlightedIndex_set4, _DuiSplitButton_instances, _menuId2, _popup4, items_get2, _onActionClick, _onActionKeyDown, _onTriggerClick3, _onTriggerKeyDown2, _onItemSlotClick2, _onMenuMouseMove2, focusTrigger_fn2;
15347
+ var DuiSplitButton = class extends (_a42 = i4, _variant_dec = [n4({ reflect: true })], _appearance_dec = [n4({ reflect: true })], _size_dec3 = [n4({ reflect: true })], _popupMinWidth_dec2 = [n4({ attribute: "popup-min-width" })], _disabled_dec20 = [n4({ type: Boolean, reflect: true })], _highlightedIndex_dec4 = [r5()], _a42) {
15254
15348
  constructor() {
15255
15349
  super(...arguments);
15256
15350
  __privateAdd(this, _DuiSplitButton_instances);
15257
15351
  __privateAdd(this, _variant, __runInitializers(_init42, 8, this, "")), __runInitializers(_init42, 11, this);
15258
15352
  __privateAdd(this, _appearance, __runInitializers(_init42, 12, this, "")), __runInitializers(_init42, 15, this);
15259
15353
  __privateAdd(this, _size3, __runInitializers(_init42, 16, this, "")), __runInitializers(_init42, 19, this);
15260
- __privateAdd(this, _disabled20, __runInitializers(_init42, 20, this, false)), __runInitializers(_init42, 23, this);
15261
- __privateAdd(this, _highlightedIndex4, __runInitializers(_init42, 24, this, -1)), __runInitializers(_init42, 27, this);
15354
+ __privateAdd(this, _popupMinWidth2, __runInitializers(_init42, 20, this, "var(--space-28)")), __runInitializers(_init42, 23, this);
15355
+ __privateAdd(this, _disabled20, __runInitializers(_init42, 24, this, false)), __runInitializers(_init42, 27, this);
15356
+ __privateAdd(this, _highlightedIndex4, __runInitializers(_init42, 28, this, -1)), __runInitializers(_init42, 31, this);
15262
15357
  __privateAdd(this, _menuId2, `split-menu-${crypto.randomUUID().slice(0, 8)}`);
15263
15358
  __privateAdd(this, _popup4, new FloatingPortalController(this, {
15264
15359
  getAnchor: () => this.shadowRoot?.querySelector(".Root"),
@@ -15275,6 +15370,7 @@ var DuiSplitButton = class extends (_a42 = i4, _variant_dec = [n4({ reflect: tru
15275
15370
  renderPopup: (portal) => b2`
15276
15371
  <div
15277
15372
  class="Popup"
15373
+ style="${this.popupMinWidth ? `min-width:${this.popupMinWidth}` : ""}"
15278
15374
  ?data-starting-style="${portal.isStarting}"
15279
15375
  ?data-ending-style="${portal.isEnding}"
15280
15376
  >
@@ -15457,6 +15553,7 @@ _init42 = __decoratorStart(_a42);
15457
15553
  _variant = new WeakMap();
15458
15554
  _appearance = new WeakMap();
15459
15555
  _size3 = new WeakMap();
15556
+ _popupMinWidth2 = new WeakMap();
15460
15557
  _disabled20 = new WeakMap();
15461
15558
  _highlightedIndex4 = new WeakMap();
15462
15559
  _DuiSplitButton_instances = new WeakSet();
@@ -15478,6 +15575,7 @@ focusTrigger_fn2 = function() {
15478
15575
  __decorateElement(_init42, 4, "variant", _variant_dec, DuiSplitButton, _variant);
15479
15576
  __decorateElement(_init42, 4, "appearance", _appearance_dec, DuiSplitButton, _appearance);
15480
15577
  __decorateElement(_init42, 4, "size", _size_dec3, DuiSplitButton, _size3);
15578
+ __decorateElement(_init42, 4, "popupMinWidth", _popupMinWidth_dec2, DuiSplitButton, _popupMinWidth2);
15481
15579
  __decorateElement(_init42, 4, "disabled", _disabled_dec20, DuiSplitButton, _disabled20);
15482
15580
  _b30 = __decorateElement(_init42, 20, "#highlightedIndex", _highlightedIndex_dec4, _DuiSplitButton_instances, _highlightedIndex4), highlightedIndex_get4 = _b30.get, highlightedIndex_set4 = _b30.set;
15483
15581
  __decoratorMetadata(_init42, DuiSplitButton);