@aurodesignsystem-dev/auro-formkit 0.0.0-pr1425.0 → 0.0.0-pr1428.0

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 (36) hide show
  1. package/components/checkbox/demo/api.min.js +1 -1
  2. package/components/checkbox/demo/index.min.js +1 -1
  3. package/components/checkbox/dist/index.js +1 -1
  4. package/components/checkbox/dist/registered.js +1 -1
  5. package/components/combobox/demo/api.min.js +276 -165
  6. package/components/combobox/demo/index.min.js +276 -165
  7. package/components/combobox/dist/index.js +276 -165
  8. package/components/combobox/dist/registered.js +276 -165
  9. package/components/counter/demo/api.min.js +275 -164
  10. package/components/counter/demo/index.min.js +275 -164
  11. package/components/counter/dist/index.js +275 -164
  12. package/components/counter/dist/registered.js +275 -164
  13. package/components/datepicker/demo/api.min.js +276 -165
  14. package/components/datepicker/demo/index.min.js +276 -165
  15. package/components/datepicker/dist/index.js +276 -165
  16. package/components/datepicker/dist/registered.js +276 -165
  17. package/components/dropdown/demo/api.min.js +275 -164
  18. package/components/dropdown/demo/index.min.js +275 -164
  19. package/components/dropdown/dist/index.js +275 -164
  20. package/components/dropdown/dist/registered.js +275 -164
  21. package/components/form/demo/api.min.js +1105 -661
  22. package/components/form/demo/index.min.js +1105 -661
  23. package/components/input/demo/api.min.js +1 -1
  24. package/components/input/demo/index.min.js +1 -1
  25. package/components/input/dist/index.js +1 -1
  26. package/components/input/dist/registered.js +1 -1
  27. package/components/radio/demo/api.min.js +1 -1
  28. package/components/radio/demo/index.min.js +1 -1
  29. package/components/radio/dist/index.js +1 -1
  30. package/components/radio/dist/registered.js +1 -1
  31. package/components/select/demo/api.min.js +275 -164
  32. package/components/select/demo/index.min.js +275 -164
  33. package/components/select/dist/index.js +275 -164
  34. package/components/select/dist/registered.js +275 -164
  35. package/custom-elements.json +244 -244
  36. package/package.json +2 -2
@@ -3295,11 +3295,19 @@ class AuroFloatingUI {
3295
3295
  * This ensures that the bib content has the same dimensions as the sizer element.
3296
3296
  */
3297
3297
  mirrorSize() {
3298
+ const element = this.element;
3299
+ if (!element) {
3300
+ return;
3301
+ }
3302
+
3298
3303
  // mirror the boxsize from bibSizer
3299
- if (this.element.bibSizer && this.element.matchWidth) {
3300
- const sizerStyle = window.getComputedStyle(this.element.bibSizer);
3301
- const bibContent =
3302
- this.element.bib.shadowRoot.querySelector(".container");
3304
+ if (element.bibSizer && element.matchWidth && element.bib?.shadowRoot) {
3305
+ const sizerStyle = window.getComputedStyle(element.bibSizer);
3306
+ const bibContent = element.bib.shadowRoot.querySelector(".container");
3307
+ if (!bibContent) {
3308
+ return;
3309
+ }
3310
+
3303
3311
  if (sizerStyle.width !== "0px") {
3304
3312
  bibContent.style.width = sizerStyle.width;
3305
3313
  }
@@ -3321,9 +3329,14 @@ class AuroFloatingUI {
3321
3329
  * @returns {String} The positioning strategy, one of 'fullscreen', 'floating', 'cover'.
3322
3330
  */
3323
3331
  getPositioningStrategy() {
3332
+ const element = this.element;
3333
+ if (!element) {
3334
+ return "floating";
3335
+ }
3336
+
3324
3337
  const breakpoint =
3325
- this.element.bib.mobileFullscreenBreakpoint ||
3326
- this.element.floaterConfig?.fullscreenBreakpoint;
3338
+ element.bib?.mobileFullscreenBreakpoint ||
3339
+ element.floaterConfig?.fullscreenBreakpoint;
3327
3340
  switch (this.behavior) {
3328
3341
  case "tooltip":
3329
3342
  return "floating";
@@ -3334,9 +3347,9 @@ class AuroFloatingUI {
3334
3347
  `(max-width: ${breakpoint})`,
3335
3348
  ).matches;
3336
3349
 
3337
- this.element.expanded = smallerThanBreakpoint;
3350
+ element.expanded = smallerThanBreakpoint;
3338
3351
  }
3339
- if (this.element.nested) {
3352
+ if (element.nested) {
3340
3353
  return "cover";
3341
3354
  }
3342
3355
  return "fullscreen";
@@ -3366,42 +3379,65 @@ class AuroFloatingUI {
3366
3379
  * and applies the calculated position to the bib's style.
3367
3380
  */
3368
3381
  position() {
3382
+ const element = this.element;
3383
+ if (!element) {
3384
+ return;
3385
+ }
3386
+
3369
3387
  const strategy = this.getPositioningStrategy();
3370
3388
  this.configureBibStrategy(strategy);
3371
3389
 
3372
3390
  if (strategy === "floating") {
3391
+ if (!element.trigger || !element.bib) {
3392
+ return;
3393
+ }
3394
+
3373
3395
  this.mirrorSize();
3374
3396
  // Define the middlware for the floater configuration
3375
3397
  const middleware = [
3376
- offset(this.element.floaterConfig?.offset || 0),
3377
- ...(this.element.floaterConfig?.shift ? [shift()] : []), // Add shift middleware if shift is enabled.
3378
- ...(this.element.floaterConfig?.flip ? [flip()] : []), // Add flip middleware if flip is enabled.
3379
- ...(this.element.floaterConfig?.autoPlacement ? [autoPlacement()] : []), // Add autoPlacement middleware if autoPlacement is enabled.
3398
+ offset(element.floaterConfig?.offset || 0),
3399
+ ...(element.floaterConfig?.shift ? [shift()] : []), // Add shift middleware if shift is enabled.
3400
+ ...(element.floaterConfig?.flip ? [flip()] : []), // Add flip middleware if flip is enabled.
3401
+ ...(element.floaterConfig?.autoPlacement ? [autoPlacement()] : []), // Add autoPlacement middleware if autoPlacement is enabled.
3380
3402
  ];
3381
3403
 
3382
3404
  // Compute the position of the bib
3383
- computePosition(this.element.trigger, this.element.bib, {
3384
- strategy: this.element.floaterConfig?.strategy || "fixed",
3385
- placement: this.element.floaterConfig?.placement,
3405
+ computePosition(element.trigger, element.bib, {
3406
+ strategy: element.floaterConfig?.strategy || "fixed",
3407
+ placement: element.floaterConfig?.placement,
3386
3408
  middleware: middleware || [],
3387
3409
  }).then(({ x, y }) => {
3388
3410
  // eslint-disable-line id-length
3389
- Object.assign(this.element.bib.style, {
3411
+ const currentElement = this.element;
3412
+ if (!currentElement?.bib) {
3413
+ return;
3414
+ }
3415
+
3416
+ Object.assign(currentElement.bib.style, {
3390
3417
  left: `${x}px`,
3391
3418
  top: `${y}px`,
3392
3419
  });
3393
3420
  });
3394
3421
  } else if (strategy === "cover") {
3422
+ if (!element.parentNode || !element.bib) {
3423
+ return;
3424
+ }
3425
+
3395
3426
  // Compute the position of the bib
3396
- computePosition(this.element.parentNode, this.element.bib, {
3427
+ computePosition(element.parentNode, element.bib, {
3397
3428
  placement: "bottom-start",
3398
3429
  }).then(({ x, y }) => {
3399
3430
  // eslint-disable-line id-length
3400
- Object.assign(this.element.bib.style, {
3431
+ const currentElement = this.element;
3432
+ if (!currentElement?.bib || !currentElement.parentNode) {
3433
+ return;
3434
+ }
3435
+
3436
+ Object.assign(currentElement.bib.style, {
3401
3437
  left: `${x}px`,
3402
- top: `${y - this.element.parentNode.offsetHeight}px`,
3403
- width: `${this.element.parentNode.offsetWidth}px`,
3404
- height: `${this.element.parentNode.offsetHeight}px`,
3438
+ top: `${y - currentElement.parentNode.offsetHeight}px`,
3439
+ width: `${currentElement.parentNode.offsetWidth}px`,
3440
+ height: `${currentElement.parentNode.offsetHeight}px`,
3405
3441
  });
3406
3442
  });
3407
3443
  }
@@ -3413,11 +3449,17 @@ class AuroFloatingUI {
3413
3449
  * @param {Boolean} lock - If true, locks the body's scrolling functionlity; otherwise, unlock.
3414
3450
  */
3415
3451
  lockScroll(lock = true) {
3452
+ const element = this.element;
3453
+
3416
3454
  if (lock) {
3455
+ if (!element?.bib) {
3456
+ return;
3457
+ }
3458
+
3417
3459
  document.body.style.overflow = "hidden"; // hide body's scrollbar
3418
3460
 
3419
3461
  // Move `bib` by the amount the viewport is shifted to stay aligned in fullscreen.
3420
- this.element.bib.style.transform = `translateY(${window?.visualViewport?.offsetTop}px)`;
3462
+ element.bib.style.transform = `translateY(${window?.visualViewport?.offsetTop}px)`;
3421
3463
  } else {
3422
3464
  document.body.style.overflow = "";
3423
3465
  }
@@ -3433,20 +3475,24 @@ class AuroFloatingUI {
3433
3475
  * @param {string} strategy - The positioning strategy ('fullscreen' or 'floating').
3434
3476
  */
3435
3477
  configureBibStrategy(value) {
3478
+ const element = this.element;
3479
+ if (!element?.bib) {
3480
+ return;
3481
+ }
3482
+
3436
3483
  if (value === "fullscreen") {
3437
- this.element.isBibFullscreen = true;
3484
+ element.isBibFullscreen = true;
3438
3485
  // reset the prev position
3439
- this.element.bib.setAttribute("isfullscreen", "");
3440
- this.element.bib.style.position = "fixed";
3441
- this.element.bib.style.top = "0px";
3442
- this.element.bib.style.left = "0px";
3443
- this.element.bib.style.width = "";
3444
- this.element.bib.style.height = "";
3445
- this.element.style.contain = "";
3486
+ element.bib.setAttribute("isfullscreen", "");
3487
+ element.bib.style.position = "fixed";
3488
+ element.bib.style.top = "0px";
3489
+ element.bib.style.left = "0px";
3490
+ element.bib.style.width = "";
3491
+ element.bib.style.height = "";
3492
+ element.style.contain = "";
3446
3493
 
3447
3494
  // reset the size that was mirroring `size` css-part
3448
- const bibContent =
3449
- this.element.bib.shadowRoot.querySelector(".container");
3495
+ const bibContent = element.bib.shadowRoot?.querySelector(".container");
3450
3496
  if (bibContent) {
3451
3497
  bibContent.style.width = "";
3452
3498
  bibContent.style.height = "";
@@ -3461,14 +3507,14 @@ class AuroFloatingUI {
3461
3507
  }, 0);
3462
3508
  }
3463
3509
 
3464
- if (this.element.isPopoverVisible) {
3510
+ if (element.isPopoverVisible) {
3465
3511
  this.lockScroll(true);
3466
3512
  }
3467
3513
  } else {
3468
- this.element.bib.style.position = "";
3469
- this.element.bib.removeAttribute("isfullscreen");
3470
- this.element.isBibFullscreen = false;
3471
- this.element.style.contain = "layout";
3514
+ element.bib.style.position = "";
3515
+ element.bib.removeAttribute("isfullscreen");
3516
+ element.isBibFullscreen = false;
3517
+ element.style.contain = "layout";
3472
3518
  }
3473
3519
 
3474
3520
  const isChanged = this.strategy && this.strategy !== value;
@@ -3486,16 +3532,21 @@ class AuroFloatingUI {
3486
3532
  },
3487
3533
  );
3488
3534
 
3489
- this.element.dispatchEvent(event);
3535
+ element.dispatchEvent(event);
3490
3536
  }
3491
3537
  }
3492
3538
 
3493
3539
  updateState() {
3494
- const isVisible = this.element.isPopoverVisible;
3540
+ const element = this.element;
3541
+ if (!element) {
3542
+ return;
3543
+ }
3544
+
3545
+ const isVisible = element.isPopoverVisible;
3495
3546
  if (!isVisible) {
3496
3547
  this.cleanupHideHandlers();
3497
3548
  try {
3498
- this.element.cleanup?.();
3549
+ element.cleanup?.();
3499
3550
  } catch (error) {
3500
3551
  // Do nothing
3501
3552
  }
@@ -3511,28 +3562,30 @@ class AuroFloatingUI {
3511
3562
  * If not, and if the bib isn't in fullscreen mode with focus lost, it hides the bib.
3512
3563
  */
3513
3564
  handleFocusLoss() {
3565
+ const element = this.element;
3566
+ if (!element?.bib) {
3567
+ return;
3568
+ }
3569
+
3514
3570
  // if mouse is being pressed, skip and let click event to handle the action
3515
3571
  if (AuroFloatingUI.isMousePressed) {
3516
3572
  return;
3517
3573
  }
3518
3574
 
3519
3575
  if (
3520
- this.element.noHideOnThisFocusLoss ||
3521
- this.element.hasAttribute("noHideOnThisFocusLoss")
3576
+ element.noHideOnThisFocusLoss ||
3577
+ element.hasAttribute("noHideOnThisFocusLoss")
3522
3578
  ) {
3523
3579
  return;
3524
3580
  }
3525
3581
 
3526
3582
  // if focus is still inside of trigger or bib, do not close
3527
- if (
3528
- this.element.matches(":focus") ||
3529
- this.element.matches(":focus-within")
3530
- ) {
3583
+ if (element.matches(":focus") || element.matches(":focus-within")) {
3531
3584
  return;
3532
3585
  }
3533
3586
 
3534
3587
  // if fullscreen bib is in fullscreen mode, do not close
3535
- if (this.element.bib.hasAttribute("isfullscreen")) {
3588
+ if (element.bib.hasAttribute("isfullscreen")) {
3536
3589
  return;
3537
3590
  }
3538
3591
 
@@ -3540,23 +3593,33 @@ class AuroFloatingUI {
3540
3593
  }
3541
3594
 
3542
3595
  setupHideHandlers() {
3596
+ const element = this.element;
3597
+ if (!element) {
3598
+ return;
3599
+ }
3600
+
3543
3601
  // Define handlers & store references
3544
3602
  this.focusHandler = () => this.handleFocusLoss();
3545
3603
 
3546
3604
  this.clickHandler = (evt) => {
3605
+ const element = this.element;
3606
+ if (!element?.bib) {
3607
+ return;
3608
+ }
3609
+
3547
3610
  // When the bib is fullscreen (modal dialog), don't close on outside
3548
3611
  // clicks. VoiceOver's synthetic click events inside a top-layer modal
3549
3612
  // <dialog> may not include the bib in composedPath(), causing false
3550
3613
  // positives. This mirrors the fullscreen guard in handleFocusLoss().
3551
- if (this.element.bib && this.element.bib.hasAttribute("isfullscreen")) {
3614
+ if (element.bib.hasAttribute("isfullscreen")) {
3552
3615
  return;
3553
3616
  }
3554
3617
 
3555
3618
  if (
3556
- (!evt.composedPath().includes(this.element.trigger) &&
3557
- !evt.composedPath().includes(this.element.bib)) ||
3558
- (this.element.bib.backdrop &&
3559
- evt.composedPath().includes(this.element.bib.backdrop))
3619
+ (!evt.composedPath().includes(element.trigger) &&
3620
+ !evt.composedPath().includes(element.bib)) ||
3621
+ (element.bib.backdrop &&
3622
+ evt.composedPath().includes(element.bib.backdrop))
3560
3623
  ) {
3561
3624
  const existedVisibleFloatingUI =
3562
3625
  document.expandedAuroFormkitDropdown || document.expandedAuroFloater;
@@ -3577,7 +3640,12 @@ class AuroFloatingUI {
3577
3640
 
3578
3641
  // ESC key handler
3579
3642
  this.keyDownHandler = (evt) => {
3580
- if (evt.key === "Escape" && this.element.isPopoverVisible) {
3643
+ const element = this.element;
3644
+ if (!element) {
3645
+ return;
3646
+ }
3647
+
3648
+ if (evt.key === "Escape" && element.isPopoverVisible) {
3581
3649
  const existedVisibleFloatingUI =
3582
3650
  document.expandedAuroFormkitDropdown || document.expandedAuroFloater;
3583
3651
  if (
@@ -3634,6 +3702,10 @@ class AuroFloatingUI {
3634
3702
  }
3635
3703
 
3636
3704
  updateCurrentExpandedDropdown() {
3705
+ if (!this.element) {
3706
+ return;
3707
+ }
3708
+
3637
3709
  // Close any other dropdown that is already open
3638
3710
  const existedVisibleFloatingUI =
3639
3711
  document.expandedAuroFormkitDropdown || document.expandedAuroFloater;
@@ -3650,25 +3722,34 @@ class AuroFloatingUI {
3650
3722
  }
3651
3723
 
3652
3724
  showBib() {
3653
- if (!this.element.disabled && !this.showing) {
3725
+ const element = this.element;
3726
+ if (!element) {
3727
+ return;
3728
+ }
3729
+
3730
+ if (!element.bib || (!element.trigger && !element.parentNode)) {
3731
+ return;
3732
+ }
3733
+
3734
+ if (!element.disabled && !this.showing) {
3654
3735
  this.updateCurrentExpandedDropdown();
3655
- this.element.triggerChevron?.setAttribute("data-expanded", true);
3736
+ element.triggerChevron?.setAttribute("data-expanded", true);
3656
3737
 
3657
3738
  // prevent double showing: isPopovervisible gets first and showBib gets called later
3658
3739
  if (!this.showing) {
3659
- if (!this.element.modal) {
3740
+ if (!element.modal) {
3660
3741
  this.setupHideHandlers();
3661
3742
  }
3662
3743
  this.showing = true;
3663
- this.element.isPopoverVisible = true;
3744
+ element.isPopoverVisible = true;
3664
3745
  this.position();
3665
3746
  this.dispatchEventDropdownToggle();
3666
3747
  }
3667
3748
 
3668
3749
  // Setup auto update to handle resize and scroll
3669
- this.element.cleanup = autoUpdate(
3670
- this.element.trigger || this.element.parentNode,
3671
- this.element.bib,
3750
+ element.cleanup = autoUpdate(
3751
+ element.trigger || element.parentNode,
3752
+ element.bib,
3672
3753
  () => {
3673
3754
  this.position();
3674
3755
  },
@@ -3681,22 +3762,27 @@ class AuroFloatingUI {
3681
3762
  * @param {String} eventType - The event type that triggered the hiding action.
3682
3763
  */
3683
3764
  hideBib(eventType = "unknown") {
3684
- if (this.element.disabled) {
3765
+ const element = this.element;
3766
+ if (!element) {
3767
+ return;
3768
+ }
3769
+
3770
+ if (element.disabled) {
3685
3771
  return;
3686
3772
  }
3687
3773
 
3688
3774
  // noToggle dropdowns should not close when the trigger is clicked (the
3689
3775
  // "toggle" behavior), but they CAN still close via other interactions like
3690
3776
  // Escape key or focus loss.
3691
- if (this.element.noToggle && eventType === "click") {
3777
+ if (element.noToggle && eventType === "click") {
3692
3778
  return;
3693
3779
  }
3694
3780
 
3695
3781
  this.lockScroll(false);
3696
- this.element.triggerChevron?.removeAttribute("data-expanded");
3782
+ element.triggerChevron?.removeAttribute("data-expanded");
3697
3783
 
3698
- if (this.element.isPopoverVisible) {
3699
- this.element.isPopoverVisible = false;
3784
+ if (element.isPopoverVisible) {
3785
+ element.isPopoverVisible = false;
3700
3786
  }
3701
3787
  if (this.showing) {
3702
3788
  this.cleanupHideHandlers();
@@ -3716,6 +3802,11 @@ class AuroFloatingUI {
3716
3802
  * @param {String} eventType - The event type that triggered the toggle action.
3717
3803
  */
3718
3804
  dispatchEventDropdownToggle(eventType) {
3805
+ const element = this.element;
3806
+ if (!element) {
3807
+ return;
3808
+ }
3809
+
3719
3810
  const event = new CustomEvent(
3720
3811
  this.eventPrefix ? `${this.eventPrefix}-toggled` : "toggled",
3721
3812
  {
@@ -3727,11 +3818,16 @@ class AuroFloatingUI {
3727
3818
  },
3728
3819
  );
3729
3820
 
3730
- this.element.dispatchEvent(event);
3821
+ element.dispatchEvent(event);
3731
3822
  }
3732
3823
 
3733
3824
  handleClick() {
3734
- if (this.element.isPopoverVisible) {
3825
+ const element = this.element;
3826
+ if (!element) {
3827
+ return;
3828
+ }
3829
+
3830
+ if (element.isPopoverVisible) {
3735
3831
  this.hideBib("click");
3736
3832
  } else {
3737
3833
  this.showBib();
@@ -3742,63 +3838,66 @@ class AuroFloatingUI {
3742
3838
  {
3743
3839
  composed: true,
3744
3840
  detail: {
3745
- expanded: this.element.isPopoverVisible,
3841
+ expanded: element.isPopoverVisible,
3746
3842
  },
3747
3843
  },
3748
3844
  );
3749
3845
 
3750
- this.element.dispatchEvent(event);
3846
+ element.dispatchEvent(event);
3751
3847
  }
3752
3848
 
3753
3849
  handleEvent(event) {
3754
- if (!this.element.disableEventShow) {
3755
- switch (event.type) {
3756
- case "keydown": {
3757
- // Support both Enter and Space keys for accessibility
3758
- // Space is included as it's expected behavior for interactive elements
3759
-
3760
- const origin = event.composedPath()[0];
3761
- if (
3762
- event.key === "Enter" ||
3763
- (event.key === " " && (!origin || origin.tagName !== "INPUT"))
3764
- ) {
3765
- event.preventDefault();
3766
- this.handleClick();
3767
- }
3768
- break;
3769
- }
3770
- case "mouseenter":
3771
- if (this.element.hoverToggle) {
3772
- this.showBib();
3773
- }
3774
- break;
3775
- case "mouseleave":
3776
- if (this.element.hoverToggle) {
3777
- this.hideBib("mouseleave");
3778
- }
3779
- break;
3780
- case "focus":
3781
- if (this.element.focusShow) {
3782
- /*
3783
- This needs to better handle clicking that gives focus -
3784
- currently it shows and then immediately hides the bib
3785
- */
3786
- this.showBib();
3787
- }
3788
- break;
3789
- case "blur":
3790
- // send this task 100ms later queue to
3791
- // wait a frame in case focus moves within the floating element/bib
3792
- setTimeout(() => this.handleFocusLoss(), 0);
3793
- break;
3794
- case "click":
3795
- if (document.activeElement === document.body) {
3796
- event.currentTarget.focus();
3797
- }
3850
+ const element = this.element;
3851
+ if (!element || element.disableEventShow) {
3852
+ return;
3853
+ }
3854
+
3855
+ switch (event.type) {
3856
+ case "keydown": {
3857
+ // Support both Enter and Space keys for accessibility
3858
+ // Space is included as it's expected behavior for interactive elements
3859
+
3860
+ const origin = event.composedPath()[0];
3861
+ if (
3862
+ event.key === "Enter" ||
3863
+ (event.key === " " && (!origin || origin.tagName !== "INPUT"))
3864
+ ) {
3865
+ event.preventDefault();
3798
3866
  this.handleClick();
3799
- break;
3800
- // Do nothing
3867
+ }
3868
+ break;
3801
3869
  }
3870
+ case "mouseenter":
3871
+ if (element.hoverToggle) {
3872
+ this.showBib();
3873
+ }
3874
+ break;
3875
+ case "mouseleave":
3876
+ if (element.hoverToggle) {
3877
+ this.hideBib("mouseleave");
3878
+ }
3879
+ break;
3880
+ case "focus":
3881
+ if (element.focusShow) {
3882
+ /*
3883
+ This needs to better handle clicking that gives focus -
3884
+ currently it shows and then immediately hides the bib
3885
+ */
3886
+ this.showBib();
3887
+ }
3888
+ break;
3889
+ case "blur":
3890
+ // send this task 100ms later queue to
3891
+ // wait a frame in case focus moves within the floating element/bib
3892
+ setTimeout(() => this.handleFocusLoss(), 0);
3893
+ break;
3894
+ case "click":
3895
+ if (document.activeElement === document.body) {
3896
+ event.currentTarget.focus();
3897
+ }
3898
+ this.handleClick();
3899
+ break;
3900
+ // Do nothing
3802
3901
  }
3803
3902
  }
3804
3903
 
@@ -3809,6 +3908,11 @@ class AuroFloatingUI {
3809
3908
  * This prevents the component itself from being focusable when the trigger element already handles focus.
3810
3909
  */
3811
3910
  handleTriggerTabIndex() {
3911
+ const element = this.element;
3912
+ if (!element) {
3913
+ return;
3914
+ }
3915
+
3812
3916
  const focusableElementSelectors = [
3813
3917
  "a",
3814
3918
  "button",
@@ -3821,7 +3925,7 @@ class AuroFloatingUI {
3821
3925
  "auro-hyperlink",
3822
3926
  ];
3823
3927
 
3824
- const triggerNode = this.element.querySelectorAll('[slot="trigger"]')[0];
3928
+ const triggerNode = element.querySelectorAll('[slot="trigger"]')[0];
3825
3929
  if (!triggerNode) {
3826
3930
  return;
3827
3931
  }
@@ -3830,13 +3934,13 @@ class AuroFloatingUI {
3830
3934
  focusableElementSelectors.forEach((selector) => {
3831
3935
  // Check if the trigger node element is focusable
3832
3936
  if (triggerNodeTagName === selector) {
3833
- this.element.tabIndex = -1;
3937
+ element.tabIndex = -1;
3834
3938
  return;
3835
3939
  }
3836
3940
 
3837
3941
  // Check if any child is focusable
3838
3942
  if (triggerNode.querySelector(selector)) {
3839
- this.element.tabIndex = -1;
3943
+ element.tabIndex = -1;
3840
3944
  }
3841
3945
  });
3842
3946
  }
@@ -3846,13 +3950,18 @@ class AuroFloatingUI {
3846
3950
  * @param {*} eventPrefix
3847
3951
  */
3848
3952
  regenerateBibId() {
3849
- this.id = this.element.getAttribute("id");
3953
+ const element = this.element;
3954
+ if (!element) {
3955
+ return;
3956
+ }
3957
+
3958
+ this.id = element.getAttribute("id");
3850
3959
  if (!this.id) {
3851
3960
  this.id = window.crypto.randomUUID();
3852
- this.element.setAttribute("id", this.id);
3961
+ element.setAttribute("id", this.id);
3853
3962
  }
3854
3963
 
3855
- this.element.bib.setAttribute("id", `${this.id}-floater-bib`);
3964
+ element.bib?.setAttribute("id", `${this.id}-floater-bib`);
3856
3965
  }
3857
3966
 
3858
3967
  configure(elem, eventPrefix, enableKeyboardHandling = true) {
@@ -3864,67 +3973,69 @@ class AuroFloatingUI {
3864
3973
  this.element = elem;
3865
3974
  }
3866
3975
 
3867
- if (this.behavior !== this.element.behavior) {
3868
- this.behavior = this.element.behavior;
3976
+ const element = this.element;
3977
+ if (!element) {
3978
+ return;
3869
3979
  }
3870
3980
 
3871
- if (this.element.trigger) {
3981
+ if (this.behavior !== element.behavior) {
3982
+ this.behavior = element.behavior;
3983
+ }
3984
+
3985
+ if (element.trigger) {
3872
3986
  this.disconnect();
3873
3987
  }
3874
- this.element.trigger =
3875
- this.element.triggerElement ||
3876
- this.element.shadowRoot.querySelector("#trigger") ||
3877
- this.element.trigger;
3878
- this.element.bib =
3879
- this.element.shadowRoot.querySelector("#bib") || this.element.bib;
3880
- this.element.bibSizer = this.element.shadowRoot.querySelector("#bibSizer");
3881
- this.element.triggerChevron =
3882
- this.element.shadowRoot.querySelector("#showStateIcon");
3988
+ element.trigger =
3989
+ element.triggerElement ||
3990
+ element.shadowRoot?.querySelector("#trigger") ||
3991
+ element.trigger;
3992
+ element.bib = element.shadowRoot?.querySelector("#bib") || element.bib;
3993
+ element.bibSizer = element.shadowRoot?.querySelector("#bibSizer");
3994
+ element.triggerChevron =
3995
+ element.shadowRoot?.querySelector("#showStateIcon");
3883
3996
 
3884
- if (this.element.floaterConfig) {
3885
- this.element.hoverToggle = this.element.floaterConfig.hoverToggle;
3997
+ if (element.floaterConfig) {
3998
+ element.hoverToggle = element.floaterConfig.hoverToggle;
3886
3999
  }
3887
4000
 
3888
4001
  this.regenerateBibId();
3889
4002
  this.handleTriggerTabIndex();
3890
4003
 
3891
4004
  this.handleEvent = this.handleEvent.bind(this);
3892
- if (this.element.trigger) {
4005
+ if (element.trigger) {
3893
4006
  if (this.enableKeyboardHandling) {
3894
- this.element.trigger.addEventListener("keydown", this.handleEvent);
4007
+ element.trigger.addEventListener("keydown", this.handleEvent);
3895
4008
  }
3896
- this.element.trigger.addEventListener("click", this.handleEvent);
3897
- this.element.trigger.addEventListener("mouseenter", this.handleEvent);
3898
- this.element.trigger.addEventListener("mouseleave", this.handleEvent);
3899
- this.element.trigger.addEventListener("focus", this.handleEvent);
3900
- this.element.trigger.addEventListener("blur", this.handleEvent);
4009
+ element.trigger.addEventListener("click", this.handleEvent);
4010
+ element.trigger.addEventListener("mouseenter", this.handleEvent);
4011
+ element.trigger.addEventListener("mouseleave", this.handleEvent);
4012
+ element.trigger.addEventListener("focus", this.handleEvent);
4013
+ element.trigger.addEventListener("blur", this.handleEvent);
3901
4014
  }
3902
4015
  }
3903
4016
 
3904
4017
  disconnect() {
3905
4018
  this.cleanupHideHandlers();
3906
- if (this.element) {
3907
- this.element.cleanup?.();
3908
4019
 
3909
- if (this.element.bib) {
3910
- this.element.shadowRoot.append(this.element.bib);
3911
- }
4020
+ const element = this.element;
4021
+ if (!element) {
4022
+ return;
4023
+ }
3912
4024
 
3913
- // Remove event & keyboard listeners
3914
- if (this.element?.trigger) {
3915
- this.element.trigger.removeEventListener("keydown", this.handleEvent);
3916
- this.element.trigger.removeEventListener("click", this.handleEvent);
3917
- this.element.trigger.removeEventListener(
3918
- "mouseenter",
3919
- this.handleEvent,
3920
- );
3921
- this.element.trigger.removeEventListener(
3922
- "mouseleave",
3923
- this.handleEvent,
3924
- );
3925
- this.element.trigger.removeEventListener("focus", this.handleEvent);
3926
- this.element.trigger.removeEventListener("blur", this.handleEvent);
3927
- }
4025
+ element.cleanup?.();
4026
+
4027
+ if (element.bib && element.shadowRoot) {
4028
+ element.shadowRoot.append(element.bib);
4029
+ }
4030
+
4031
+ // Remove event & keyboard listeners
4032
+ if (element.trigger) {
4033
+ element.trigger.removeEventListener("keydown", this.handleEvent);
4034
+ element.trigger.removeEventListener("click", this.handleEvent);
4035
+ element.trigger.removeEventListener("mouseenter", this.handleEvent);
4036
+ element.trigger.removeEventListener("mouseleave", this.handleEvent);
4037
+ element.trigger.removeEventListener("focus", this.handleEvent);
4038
+ element.trigger.removeEventListener("blur", this.handleEvent);
3928
4039
  }
3929
4040
  }
3930
4041
  }
@@ -5052,7 +5163,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
5052
5163
  }
5053
5164
  };
5054
5165
 
5055
- var formkitVersion$1 = '202604072126';
5166
+ var formkitVersion$1 = '202604081417';
5056
5167
 
5057
5168
  class AuroElement extends i$3 {
5058
5169
  static get properties() {
@@ -6805,7 +6916,7 @@ class AuroHelpText extends i$3 {
6805
6916
  }
6806
6917
  }
6807
6918
 
6808
- var formkitVersion = '202604072126';
6919
+ var formkitVersion = '202604081417';
6809
6920
 
6810
6921
  var styleCss$2 = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}.body-default{font-size:var(--wcss-body-default-font-size, 1rem);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 450);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 450);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}[auro-dropdown]{--ds-auro-dropdown-trigger-border-color: var(--ds-auro-select-border-color);--ds-auro-dropdown-trigger-background-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-container-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-outline-color: var(--ds-auro-select-outline-color)}:host{display:inline-block;text-align:left;vertical-align:top}:host([layout*=emphasized]) [auro-dropdown],:host([layout*=snowflake]) [auro-dropdown]{--ds-auro-select-border-color: transparent}:host([layout*=emphasized]) .mainContent,:host([layout*=snowflake]) .mainContent{text-align:center}.mainContent{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;align-items:center;justify-content:center}.valueContainer [slot=displayValue]{display:none}.accents{display:flex;flex-direction:row;align-items:center;justify-content:center}::slotted([slot=typeIcon]){margin-right:var(--ds-size-100, 0.5rem)}.displayValue{display:block}.displayValue:not(.force){display:none}.displayValue:not(.force).hasContent:is(.withValue):not(.hasFocus){display:block}.triggerContent{display:flex;width:100%;align-items:center;justify-content:center}:host([layout*=emphasized]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-300, 1.5rem)}:host([layout*=snowflake]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-200, 1rem)}:host([layout*=snowflake]) label{padding-block:var(--ds-size-25, 0.125rem)}:host([layout*=classic]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem)}:host([layout*=classic]) .mainContent{align-items:start}:host([layout*=classic]) label{overflow:hidden;cursor:text;text-overflow:ellipsis;white-space:nowrap}:host([layout*=classic]) .value{height:auto}label{color:var(--ds-auro-select-label-text-color)}:host(:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-select-outline-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]:is([validity]:not([validity=valid]))) [auro-dropdown],:host([appearance=inverse]:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-select-outline-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}#slotHolder{display:none}:host([fluid]){width:100%}:host([disabled]){pointer-events:none;user-select:none}:host([disabled]:not([ondark])) [auro-dropdown],:host([disabled]:not([appearance=inverse])) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-border-subtle, #dddddd)}:host(:not([layout*=classic])[disabled][ondark]) [auro-dropdown],:host(:not([layout*=classic])[disabled][appearance=inverse]) [auro-dropdown]{--ds-auro-select-border-color: transparent}`;
6811
6922