@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
@@ -3228,11 +3228,19 @@ class AuroFloatingUI {
3228
3228
  * This ensures that the bib content has the same dimensions as the sizer element.
3229
3229
  */
3230
3230
  mirrorSize() {
3231
+ const element = this.element;
3232
+ if (!element) {
3233
+ return;
3234
+ }
3235
+
3231
3236
  // mirror the boxsize from bibSizer
3232
- if (this.element.bibSizer && this.element.matchWidth) {
3233
- const sizerStyle = window.getComputedStyle(this.element.bibSizer);
3234
- const bibContent =
3235
- this.element.bib.shadowRoot.querySelector(".container");
3237
+ if (element.bibSizer && element.matchWidth && element.bib?.shadowRoot) {
3238
+ const sizerStyle = window.getComputedStyle(element.bibSizer);
3239
+ const bibContent = element.bib.shadowRoot.querySelector(".container");
3240
+ if (!bibContent) {
3241
+ return;
3242
+ }
3243
+
3236
3244
  if (sizerStyle.width !== "0px") {
3237
3245
  bibContent.style.width = sizerStyle.width;
3238
3246
  }
@@ -3254,9 +3262,14 @@ class AuroFloatingUI {
3254
3262
  * @returns {String} The positioning strategy, one of 'fullscreen', 'floating', 'cover'.
3255
3263
  */
3256
3264
  getPositioningStrategy() {
3265
+ const element = this.element;
3266
+ if (!element) {
3267
+ return "floating";
3268
+ }
3269
+
3257
3270
  const breakpoint =
3258
- this.element.bib.mobileFullscreenBreakpoint ||
3259
- this.element.floaterConfig?.fullscreenBreakpoint;
3271
+ element.bib?.mobileFullscreenBreakpoint ||
3272
+ element.floaterConfig?.fullscreenBreakpoint;
3260
3273
  switch (this.behavior) {
3261
3274
  case "tooltip":
3262
3275
  return "floating";
@@ -3267,9 +3280,9 @@ class AuroFloatingUI {
3267
3280
  `(max-width: ${breakpoint})`,
3268
3281
  ).matches;
3269
3282
 
3270
- this.element.expanded = smallerThanBreakpoint;
3283
+ element.expanded = smallerThanBreakpoint;
3271
3284
  }
3272
- if (this.element.nested) {
3285
+ if (element.nested) {
3273
3286
  return "cover";
3274
3287
  }
3275
3288
  return "fullscreen";
@@ -3299,42 +3312,65 @@ class AuroFloatingUI {
3299
3312
  * and applies the calculated position to the bib's style.
3300
3313
  */
3301
3314
  position() {
3315
+ const element = this.element;
3316
+ if (!element) {
3317
+ return;
3318
+ }
3319
+
3302
3320
  const strategy = this.getPositioningStrategy();
3303
3321
  this.configureBibStrategy(strategy);
3304
3322
 
3305
3323
  if (strategy === "floating") {
3324
+ if (!element.trigger || !element.bib) {
3325
+ return;
3326
+ }
3327
+
3306
3328
  this.mirrorSize();
3307
3329
  // Define the middlware for the floater configuration
3308
3330
  const middleware = [
3309
- offset(this.element.floaterConfig?.offset || 0),
3310
- ...(this.element.floaterConfig?.shift ? [shift()] : []), // Add shift middleware if shift is enabled.
3311
- ...(this.element.floaterConfig?.flip ? [flip()] : []), // Add flip middleware if flip is enabled.
3312
- ...(this.element.floaterConfig?.autoPlacement ? [autoPlacement()] : []), // Add autoPlacement middleware if autoPlacement is enabled.
3331
+ offset(element.floaterConfig?.offset || 0),
3332
+ ...(element.floaterConfig?.shift ? [shift()] : []), // Add shift middleware if shift is enabled.
3333
+ ...(element.floaterConfig?.flip ? [flip()] : []), // Add flip middleware if flip is enabled.
3334
+ ...(element.floaterConfig?.autoPlacement ? [autoPlacement()] : []), // Add autoPlacement middleware if autoPlacement is enabled.
3313
3335
  ];
3314
3336
 
3315
3337
  // Compute the position of the bib
3316
- computePosition(this.element.trigger, this.element.bib, {
3317
- strategy: this.element.floaterConfig?.strategy || "fixed",
3318
- placement: this.element.floaterConfig?.placement,
3338
+ computePosition(element.trigger, element.bib, {
3339
+ strategy: element.floaterConfig?.strategy || "fixed",
3340
+ placement: element.floaterConfig?.placement,
3319
3341
  middleware: middleware || [],
3320
3342
  }).then(({ x, y }) => {
3321
3343
  // eslint-disable-line id-length
3322
- Object.assign(this.element.bib.style, {
3344
+ const currentElement = this.element;
3345
+ if (!currentElement?.bib) {
3346
+ return;
3347
+ }
3348
+
3349
+ Object.assign(currentElement.bib.style, {
3323
3350
  left: `${x}px`,
3324
3351
  top: `${y}px`,
3325
3352
  });
3326
3353
  });
3327
3354
  } else if (strategy === "cover") {
3355
+ if (!element.parentNode || !element.bib) {
3356
+ return;
3357
+ }
3358
+
3328
3359
  // Compute the position of the bib
3329
- computePosition(this.element.parentNode, this.element.bib, {
3360
+ computePosition(element.parentNode, element.bib, {
3330
3361
  placement: "bottom-start",
3331
3362
  }).then(({ x, y }) => {
3332
3363
  // eslint-disable-line id-length
3333
- Object.assign(this.element.bib.style, {
3364
+ const currentElement = this.element;
3365
+ if (!currentElement?.bib || !currentElement.parentNode) {
3366
+ return;
3367
+ }
3368
+
3369
+ Object.assign(currentElement.bib.style, {
3334
3370
  left: `${x}px`,
3335
- top: `${y - this.element.parentNode.offsetHeight}px`,
3336
- width: `${this.element.parentNode.offsetWidth}px`,
3337
- height: `${this.element.parentNode.offsetHeight}px`,
3371
+ top: `${y - currentElement.parentNode.offsetHeight}px`,
3372
+ width: `${currentElement.parentNode.offsetWidth}px`,
3373
+ height: `${currentElement.parentNode.offsetHeight}px`,
3338
3374
  });
3339
3375
  });
3340
3376
  }
@@ -3346,11 +3382,17 @@ class AuroFloatingUI {
3346
3382
  * @param {Boolean} lock - If true, locks the body's scrolling functionlity; otherwise, unlock.
3347
3383
  */
3348
3384
  lockScroll(lock = true) {
3385
+ const element = this.element;
3386
+
3349
3387
  if (lock) {
3388
+ if (!element?.bib) {
3389
+ return;
3390
+ }
3391
+
3350
3392
  document.body.style.overflow = "hidden"; // hide body's scrollbar
3351
3393
 
3352
3394
  // Move `bib` by the amount the viewport is shifted to stay aligned in fullscreen.
3353
- this.element.bib.style.transform = `translateY(${window?.visualViewport?.offsetTop}px)`;
3395
+ element.bib.style.transform = `translateY(${window?.visualViewport?.offsetTop}px)`;
3354
3396
  } else {
3355
3397
  document.body.style.overflow = "";
3356
3398
  }
@@ -3366,20 +3408,24 @@ class AuroFloatingUI {
3366
3408
  * @param {string} strategy - The positioning strategy ('fullscreen' or 'floating').
3367
3409
  */
3368
3410
  configureBibStrategy(value) {
3411
+ const element = this.element;
3412
+ if (!element?.bib) {
3413
+ return;
3414
+ }
3415
+
3369
3416
  if (value === "fullscreen") {
3370
- this.element.isBibFullscreen = true;
3417
+ element.isBibFullscreen = true;
3371
3418
  // reset the prev position
3372
- this.element.bib.setAttribute("isfullscreen", "");
3373
- this.element.bib.style.position = "fixed";
3374
- this.element.bib.style.top = "0px";
3375
- this.element.bib.style.left = "0px";
3376
- this.element.bib.style.width = "";
3377
- this.element.bib.style.height = "";
3378
- this.element.style.contain = "";
3419
+ element.bib.setAttribute("isfullscreen", "");
3420
+ element.bib.style.position = "fixed";
3421
+ element.bib.style.top = "0px";
3422
+ element.bib.style.left = "0px";
3423
+ element.bib.style.width = "";
3424
+ element.bib.style.height = "";
3425
+ element.style.contain = "";
3379
3426
 
3380
3427
  // reset the size that was mirroring `size` css-part
3381
- const bibContent =
3382
- this.element.bib.shadowRoot.querySelector(".container");
3428
+ const bibContent = element.bib.shadowRoot?.querySelector(".container");
3383
3429
  if (bibContent) {
3384
3430
  bibContent.style.width = "";
3385
3431
  bibContent.style.height = "";
@@ -3394,14 +3440,14 @@ class AuroFloatingUI {
3394
3440
  }, 0);
3395
3441
  }
3396
3442
 
3397
- if (this.element.isPopoverVisible) {
3443
+ if (element.isPopoverVisible) {
3398
3444
  this.lockScroll(true);
3399
3445
  }
3400
3446
  } else {
3401
- this.element.bib.style.position = "";
3402
- this.element.bib.removeAttribute("isfullscreen");
3403
- this.element.isBibFullscreen = false;
3404
- this.element.style.contain = "layout";
3447
+ element.bib.style.position = "";
3448
+ element.bib.removeAttribute("isfullscreen");
3449
+ element.isBibFullscreen = false;
3450
+ element.style.contain = "layout";
3405
3451
  }
3406
3452
 
3407
3453
  const isChanged = this.strategy && this.strategy !== value;
@@ -3419,16 +3465,21 @@ class AuroFloatingUI {
3419
3465
  },
3420
3466
  );
3421
3467
 
3422
- this.element.dispatchEvent(event);
3468
+ element.dispatchEvent(event);
3423
3469
  }
3424
3470
  }
3425
3471
 
3426
3472
  updateState() {
3427
- const isVisible = this.element.isPopoverVisible;
3473
+ const element = this.element;
3474
+ if (!element) {
3475
+ return;
3476
+ }
3477
+
3478
+ const isVisible = element.isPopoverVisible;
3428
3479
  if (!isVisible) {
3429
3480
  this.cleanupHideHandlers();
3430
3481
  try {
3431
- this.element.cleanup?.();
3482
+ element.cleanup?.();
3432
3483
  } catch (error) {
3433
3484
  // Do nothing
3434
3485
  }
@@ -3444,28 +3495,30 @@ class AuroFloatingUI {
3444
3495
  * If not, and if the bib isn't in fullscreen mode with focus lost, it hides the bib.
3445
3496
  */
3446
3497
  handleFocusLoss() {
3498
+ const element = this.element;
3499
+ if (!element?.bib) {
3500
+ return;
3501
+ }
3502
+
3447
3503
  // if mouse is being pressed, skip and let click event to handle the action
3448
3504
  if (AuroFloatingUI.isMousePressed) {
3449
3505
  return;
3450
3506
  }
3451
3507
 
3452
3508
  if (
3453
- this.element.noHideOnThisFocusLoss ||
3454
- this.element.hasAttribute("noHideOnThisFocusLoss")
3509
+ element.noHideOnThisFocusLoss ||
3510
+ element.hasAttribute("noHideOnThisFocusLoss")
3455
3511
  ) {
3456
3512
  return;
3457
3513
  }
3458
3514
 
3459
3515
  // if focus is still inside of trigger or bib, do not close
3460
- if (
3461
- this.element.matches(":focus") ||
3462
- this.element.matches(":focus-within")
3463
- ) {
3516
+ if (element.matches(":focus") || element.matches(":focus-within")) {
3464
3517
  return;
3465
3518
  }
3466
3519
 
3467
3520
  // if fullscreen bib is in fullscreen mode, do not close
3468
- if (this.element.bib.hasAttribute("isfullscreen")) {
3521
+ if (element.bib.hasAttribute("isfullscreen")) {
3469
3522
  return;
3470
3523
  }
3471
3524
 
@@ -3473,23 +3526,33 @@ class AuroFloatingUI {
3473
3526
  }
3474
3527
 
3475
3528
  setupHideHandlers() {
3529
+ const element = this.element;
3530
+ if (!element) {
3531
+ return;
3532
+ }
3533
+
3476
3534
  // Define handlers & store references
3477
3535
  this.focusHandler = () => this.handleFocusLoss();
3478
3536
 
3479
3537
  this.clickHandler = (evt) => {
3538
+ const element = this.element;
3539
+ if (!element?.bib) {
3540
+ return;
3541
+ }
3542
+
3480
3543
  // When the bib is fullscreen (modal dialog), don't close on outside
3481
3544
  // clicks. VoiceOver's synthetic click events inside a top-layer modal
3482
3545
  // <dialog> may not include the bib in composedPath(), causing false
3483
3546
  // positives. This mirrors the fullscreen guard in handleFocusLoss().
3484
- if (this.element.bib && this.element.bib.hasAttribute("isfullscreen")) {
3547
+ if (element.bib.hasAttribute("isfullscreen")) {
3485
3548
  return;
3486
3549
  }
3487
3550
 
3488
3551
  if (
3489
- (!evt.composedPath().includes(this.element.trigger) &&
3490
- !evt.composedPath().includes(this.element.bib)) ||
3491
- (this.element.bib.backdrop &&
3492
- evt.composedPath().includes(this.element.bib.backdrop))
3552
+ (!evt.composedPath().includes(element.trigger) &&
3553
+ !evt.composedPath().includes(element.bib)) ||
3554
+ (element.bib.backdrop &&
3555
+ evt.composedPath().includes(element.bib.backdrop))
3493
3556
  ) {
3494
3557
  const existedVisibleFloatingUI =
3495
3558
  document.expandedAuroFormkitDropdown || document.expandedAuroFloater;
@@ -3510,7 +3573,12 @@ class AuroFloatingUI {
3510
3573
 
3511
3574
  // ESC key handler
3512
3575
  this.keyDownHandler = (evt) => {
3513
- if (evt.key === "Escape" && this.element.isPopoverVisible) {
3576
+ const element = this.element;
3577
+ if (!element) {
3578
+ return;
3579
+ }
3580
+
3581
+ if (evt.key === "Escape" && element.isPopoverVisible) {
3514
3582
  const existedVisibleFloatingUI =
3515
3583
  document.expandedAuroFormkitDropdown || document.expandedAuroFloater;
3516
3584
  if (
@@ -3567,6 +3635,10 @@ class AuroFloatingUI {
3567
3635
  }
3568
3636
 
3569
3637
  updateCurrentExpandedDropdown() {
3638
+ if (!this.element) {
3639
+ return;
3640
+ }
3641
+
3570
3642
  // Close any other dropdown that is already open
3571
3643
  const existedVisibleFloatingUI =
3572
3644
  document.expandedAuroFormkitDropdown || document.expandedAuroFloater;
@@ -3583,25 +3655,34 @@ class AuroFloatingUI {
3583
3655
  }
3584
3656
 
3585
3657
  showBib() {
3586
- if (!this.element.disabled && !this.showing) {
3658
+ const element = this.element;
3659
+ if (!element) {
3660
+ return;
3661
+ }
3662
+
3663
+ if (!element.bib || (!element.trigger && !element.parentNode)) {
3664
+ return;
3665
+ }
3666
+
3667
+ if (!element.disabled && !this.showing) {
3587
3668
  this.updateCurrentExpandedDropdown();
3588
- this.element.triggerChevron?.setAttribute("data-expanded", true);
3669
+ element.triggerChevron?.setAttribute("data-expanded", true);
3589
3670
 
3590
3671
  // prevent double showing: isPopovervisible gets first and showBib gets called later
3591
3672
  if (!this.showing) {
3592
- if (!this.element.modal) {
3673
+ if (!element.modal) {
3593
3674
  this.setupHideHandlers();
3594
3675
  }
3595
3676
  this.showing = true;
3596
- this.element.isPopoverVisible = true;
3677
+ element.isPopoverVisible = true;
3597
3678
  this.position();
3598
3679
  this.dispatchEventDropdownToggle();
3599
3680
  }
3600
3681
 
3601
3682
  // Setup auto update to handle resize and scroll
3602
- this.element.cleanup = autoUpdate(
3603
- this.element.trigger || this.element.parentNode,
3604
- this.element.bib,
3683
+ element.cleanup = autoUpdate(
3684
+ element.trigger || element.parentNode,
3685
+ element.bib,
3605
3686
  () => {
3606
3687
  this.position();
3607
3688
  },
@@ -3614,22 +3695,27 @@ class AuroFloatingUI {
3614
3695
  * @param {String} eventType - The event type that triggered the hiding action.
3615
3696
  */
3616
3697
  hideBib(eventType = "unknown") {
3617
- if (this.element.disabled) {
3698
+ const element = this.element;
3699
+ if (!element) {
3700
+ return;
3701
+ }
3702
+
3703
+ if (element.disabled) {
3618
3704
  return;
3619
3705
  }
3620
3706
 
3621
3707
  // noToggle dropdowns should not close when the trigger is clicked (the
3622
3708
  // "toggle" behavior), but they CAN still close via other interactions like
3623
3709
  // Escape key or focus loss.
3624
- if (this.element.noToggle && eventType === "click") {
3710
+ if (element.noToggle && eventType === "click") {
3625
3711
  return;
3626
3712
  }
3627
3713
 
3628
3714
  this.lockScroll(false);
3629
- this.element.triggerChevron?.removeAttribute("data-expanded");
3715
+ element.triggerChevron?.removeAttribute("data-expanded");
3630
3716
 
3631
- if (this.element.isPopoverVisible) {
3632
- this.element.isPopoverVisible = false;
3717
+ if (element.isPopoverVisible) {
3718
+ element.isPopoverVisible = false;
3633
3719
  }
3634
3720
  if (this.showing) {
3635
3721
  this.cleanupHideHandlers();
@@ -3649,6 +3735,11 @@ class AuroFloatingUI {
3649
3735
  * @param {String} eventType - The event type that triggered the toggle action.
3650
3736
  */
3651
3737
  dispatchEventDropdownToggle(eventType) {
3738
+ const element = this.element;
3739
+ if (!element) {
3740
+ return;
3741
+ }
3742
+
3652
3743
  const event = new CustomEvent(
3653
3744
  this.eventPrefix ? `${this.eventPrefix}-toggled` : "toggled",
3654
3745
  {
@@ -3660,11 +3751,16 @@ class AuroFloatingUI {
3660
3751
  },
3661
3752
  );
3662
3753
 
3663
- this.element.dispatchEvent(event);
3754
+ element.dispatchEvent(event);
3664
3755
  }
3665
3756
 
3666
3757
  handleClick() {
3667
- if (this.element.isPopoverVisible) {
3758
+ const element = this.element;
3759
+ if (!element) {
3760
+ return;
3761
+ }
3762
+
3763
+ if (element.isPopoverVisible) {
3668
3764
  this.hideBib("click");
3669
3765
  } else {
3670
3766
  this.showBib();
@@ -3675,63 +3771,66 @@ class AuroFloatingUI {
3675
3771
  {
3676
3772
  composed: true,
3677
3773
  detail: {
3678
- expanded: this.element.isPopoverVisible,
3774
+ expanded: element.isPopoverVisible,
3679
3775
  },
3680
3776
  },
3681
3777
  );
3682
3778
 
3683
- this.element.dispatchEvent(event);
3779
+ element.dispatchEvent(event);
3684
3780
  }
3685
3781
 
3686
3782
  handleEvent(event) {
3687
- if (!this.element.disableEventShow) {
3688
- switch (event.type) {
3689
- case "keydown": {
3690
- // Support both Enter and Space keys for accessibility
3691
- // Space is included as it's expected behavior for interactive elements
3692
-
3693
- const origin = event.composedPath()[0];
3694
- if (
3695
- event.key === "Enter" ||
3696
- (event.key === " " && (!origin || origin.tagName !== "INPUT"))
3697
- ) {
3698
- event.preventDefault();
3699
- this.handleClick();
3700
- }
3701
- break;
3702
- }
3703
- case "mouseenter":
3704
- if (this.element.hoverToggle) {
3705
- this.showBib();
3706
- }
3707
- break;
3708
- case "mouseleave":
3709
- if (this.element.hoverToggle) {
3710
- this.hideBib("mouseleave");
3711
- }
3712
- break;
3713
- case "focus":
3714
- if (this.element.focusShow) {
3715
- /*
3716
- This needs to better handle clicking that gives focus -
3717
- currently it shows and then immediately hides the bib
3718
- */
3719
- this.showBib();
3720
- }
3721
- break;
3722
- case "blur":
3723
- // send this task 100ms later queue to
3724
- // wait a frame in case focus moves within the floating element/bib
3725
- setTimeout(() => this.handleFocusLoss(), 0);
3726
- break;
3727
- case "click":
3728
- if (document.activeElement === document.body) {
3729
- event.currentTarget.focus();
3730
- }
3783
+ const element = this.element;
3784
+ if (!element || element.disableEventShow) {
3785
+ return;
3786
+ }
3787
+
3788
+ switch (event.type) {
3789
+ case "keydown": {
3790
+ // Support both Enter and Space keys for accessibility
3791
+ // Space is included as it's expected behavior for interactive elements
3792
+
3793
+ const origin = event.composedPath()[0];
3794
+ if (
3795
+ event.key === "Enter" ||
3796
+ (event.key === " " && (!origin || origin.tagName !== "INPUT"))
3797
+ ) {
3798
+ event.preventDefault();
3731
3799
  this.handleClick();
3732
- break;
3733
- // Do nothing
3800
+ }
3801
+ break;
3734
3802
  }
3803
+ case "mouseenter":
3804
+ if (element.hoverToggle) {
3805
+ this.showBib();
3806
+ }
3807
+ break;
3808
+ case "mouseleave":
3809
+ if (element.hoverToggle) {
3810
+ this.hideBib("mouseleave");
3811
+ }
3812
+ break;
3813
+ case "focus":
3814
+ if (element.focusShow) {
3815
+ /*
3816
+ This needs to better handle clicking that gives focus -
3817
+ currently it shows and then immediately hides the bib
3818
+ */
3819
+ this.showBib();
3820
+ }
3821
+ break;
3822
+ case "blur":
3823
+ // send this task 100ms later queue to
3824
+ // wait a frame in case focus moves within the floating element/bib
3825
+ setTimeout(() => this.handleFocusLoss(), 0);
3826
+ break;
3827
+ case "click":
3828
+ if (document.activeElement === document.body) {
3829
+ event.currentTarget.focus();
3830
+ }
3831
+ this.handleClick();
3832
+ break;
3833
+ // Do nothing
3735
3834
  }
3736
3835
  }
3737
3836
 
@@ -3742,6 +3841,11 @@ class AuroFloatingUI {
3742
3841
  * This prevents the component itself from being focusable when the trigger element already handles focus.
3743
3842
  */
3744
3843
  handleTriggerTabIndex() {
3844
+ const element = this.element;
3845
+ if (!element) {
3846
+ return;
3847
+ }
3848
+
3745
3849
  const focusableElementSelectors = [
3746
3850
  "a",
3747
3851
  "button",
@@ -3754,7 +3858,7 @@ class AuroFloatingUI {
3754
3858
  "auro-hyperlink",
3755
3859
  ];
3756
3860
 
3757
- const triggerNode = this.element.querySelectorAll('[slot="trigger"]')[0];
3861
+ const triggerNode = element.querySelectorAll('[slot="trigger"]')[0];
3758
3862
  if (!triggerNode) {
3759
3863
  return;
3760
3864
  }
@@ -3763,13 +3867,13 @@ class AuroFloatingUI {
3763
3867
  focusableElementSelectors.forEach((selector) => {
3764
3868
  // Check if the trigger node element is focusable
3765
3869
  if (triggerNodeTagName === selector) {
3766
- this.element.tabIndex = -1;
3870
+ element.tabIndex = -1;
3767
3871
  return;
3768
3872
  }
3769
3873
 
3770
3874
  // Check if any child is focusable
3771
3875
  if (triggerNode.querySelector(selector)) {
3772
- this.element.tabIndex = -1;
3876
+ element.tabIndex = -1;
3773
3877
  }
3774
3878
  });
3775
3879
  }
@@ -3779,13 +3883,18 @@ class AuroFloatingUI {
3779
3883
  * @param {*} eventPrefix
3780
3884
  */
3781
3885
  regenerateBibId() {
3782
- this.id = this.element.getAttribute("id");
3886
+ const element = this.element;
3887
+ if (!element) {
3888
+ return;
3889
+ }
3890
+
3891
+ this.id = element.getAttribute("id");
3783
3892
  if (!this.id) {
3784
3893
  this.id = window.crypto.randomUUID();
3785
- this.element.setAttribute("id", this.id);
3894
+ element.setAttribute("id", this.id);
3786
3895
  }
3787
3896
 
3788
- this.element.bib.setAttribute("id", `${this.id}-floater-bib`);
3897
+ element.bib?.setAttribute("id", `${this.id}-floater-bib`);
3789
3898
  }
3790
3899
 
3791
3900
  configure(elem, eventPrefix, enableKeyboardHandling = true) {
@@ -3797,67 +3906,69 @@ class AuroFloatingUI {
3797
3906
  this.element = elem;
3798
3907
  }
3799
3908
 
3800
- if (this.behavior !== this.element.behavior) {
3801
- this.behavior = this.element.behavior;
3909
+ const element = this.element;
3910
+ if (!element) {
3911
+ return;
3802
3912
  }
3803
3913
 
3804
- if (this.element.trigger) {
3914
+ if (this.behavior !== element.behavior) {
3915
+ this.behavior = element.behavior;
3916
+ }
3917
+
3918
+ if (element.trigger) {
3805
3919
  this.disconnect();
3806
3920
  }
3807
- this.element.trigger =
3808
- this.element.triggerElement ||
3809
- this.element.shadowRoot.querySelector("#trigger") ||
3810
- this.element.trigger;
3811
- this.element.bib =
3812
- this.element.shadowRoot.querySelector("#bib") || this.element.bib;
3813
- this.element.bibSizer = this.element.shadowRoot.querySelector("#bibSizer");
3814
- this.element.triggerChevron =
3815
- this.element.shadowRoot.querySelector("#showStateIcon");
3921
+ element.trigger =
3922
+ element.triggerElement ||
3923
+ element.shadowRoot?.querySelector("#trigger") ||
3924
+ element.trigger;
3925
+ element.bib = element.shadowRoot?.querySelector("#bib") || element.bib;
3926
+ element.bibSizer = element.shadowRoot?.querySelector("#bibSizer");
3927
+ element.triggerChevron =
3928
+ element.shadowRoot?.querySelector("#showStateIcon");
3816
3929
 
3817
- if (this.element.floaterConfig) {
3818
- this.element.hoverToggle = this.element.floaterConfig.hoverToggle;
3930
+ if (element.floaterConfig) {
3931
+ element.hoverToggle = element.floaterConfig.hoverToggle;
3819
3932
  }
3820
3933
 
3821
3934
  this.regenerateBibId();
3822
3935
  this.handleTriggerTabIndex();
3823
3936
 
3824
3937
  this.handleEvent = this.handleEvent.bind(this);
3825
- if (this.element.trigger) {
3938
+ if (element.trigger) {
3826
3939
  if (this.enableKeyboardHandling) {
3827
- this.element.trigger.addEventListener("keydown", this.handleEvent);
3940
+ element.trigger.addEventListener("keydown", this.handleEvent);
3828
3941
  }
3829
- this.element.trigger.addEventListener("click", this.handleEvent);
3830
- this.element.trigger.addEventListener("mouseenter", this.handleEvent);
3831
- this.element.trigger.addEventListener("mouseleave", this.handleEvent);
3832
- this.element.trigger.addEventListener("focus", this.handleEvent);
3833
- this.element.trigger.addEventListener("blur", this.handleEvent);
3942
+ element.trigger.addEventListener("click", this.handleEvent);
3943
+ element.trigger.addEventListener("mouseenter", this.handleEvent);
3944
+ element.trigger.addEventListener("mouseleave", this.handleEvent);
3945
+ element.trigger.addEventListener("focus", this.handleEvent);
3946
+ element.trigger.addEventListener("blur", this.handleEvent);
3834
3947
  }
3835
3948
  }
3836
3949
 
3837
3950
  disconnect() {
3838
3951
  this.cleanupHideHandlers();
3839
- if (this.element) {
3840
- this.element.cleanup?.();
3841
3952
 
3842
- if (this.element.bib) {
3843
- this.element.shadowRoot.append(this.element.bib);
3844
- }
3953
+ const element = this.element;
3954
+ if (!element) {
3955
+ return;
3956
+ }
3845
3957
 
3846
- // Remove event & keyboard listeners
3847
- if (this.element?.trigger) {
3848
- this.element.trigger.removeEventListener("keydown", this.handleEvent);
3849
- this.element.trigger.removeEventListener("click", this.handleEvent);
3850
- this.element.trigger.removeEventListener(
3851
- "mouseenter",
3852
- this.handleEvent,
3853
- );
3854
- this.element.trigger.removeEventListener(
3855
- "mouseleave",
3856
- this.handleEvent,
3857
- );
3858
- this.element.trigger.removeEventListener("focus", this.handleEvent);
3859
- this.element.trigger.removeEventListener("blur", this.handleEvent);
3860
- }
3958
+ element.cleanup?.();
3959
+
3960
+ if (element.bib && element.shadowRoot) {
3961
+ element.shadowRoot.append(element.bib);
3962
+ }
3963
+
3964
+ // Remove event & keyboard listeners
3965
+ if (element.trigger) {
3966
+ element.trigger.removeEventListener("keydown", this.handleEvent);
3967
+ element.trigger.removeEventListener("click", this.handleEvent);
3968
+ element.trigger.removeEventListener("mouseenter", this.handleEvent);
3969
+ element.trigger.removeEventListener("mouseleave", this.handleEvent);
3970
+ element.trigger.removeEventListener("focus", this.handleEvent);
3971
+ element.trigger.removeEventListener("blur", this.handleEvent);
3861
3972
  }
3862
3973
  }
3863
3974
  }
@@ -4985,7 +5096,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
4985
5096
  }
4986
5097
  };
4987
5098
 
4988
- var formkitVersion$1 = '202604072126';
5099
+ var formkitVersion$1 = '202604081417';
4989
5100
 
4990
5101
  class AuroElement extends LitElement {
4991
5102
  static get properties() {
@@ -6738,7 +6849,7 @@ class AuroHelpText extends LitElement {
6738
6849
  }
6739
6850
  }
6740
6851
 
6741
- var formkitVersion = '202604072126';
6852
+ var formkitVersion = '202604081417';
6742
6853
 
6743
6854
  var styleCss = css`.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}`;
6744
6855