@aurodesignsystem/auro-formkit 5.9.4 → 5.10.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 (71) hide show
  1. package/CHANGELOG.md +22 -2
  2. package/components/bibtemplate/dist/auro-bibtemplate.d.ts +10 -0
  3. package/components/bibtemplate/dist/buttonVersion.d.ts +1 -1
  4. package/components/bibtemplate/dist/headerVersion.d.ts +1 -1
  5. package/components/bibtemplate/dist/iconVersion.d.ts +1 -1
  6. package/components/bibtemplate/dist/index.js +26 -16
  7. package/components/bibtemplate/dist/registered.js +26 -16
  8. package/components/checkbox/demo/api.md +7 -0
  9. package/components/checkbox/demo/api.min.js +17 -14
  10. package/components/checkbox/demo/index.min.js +17 -14
  11. package/components/checkbox/dist/auro-checkbox-group.d.ts +4 -3
  12. package/components/checkbox/dist/auro-checkbox.d.ts +2 -0
  13. package/components/checkbox/dist/index.js +8 -5
  14. package/components/checkbox/dist/registered.js +8 -5
  15. package/components/combobox/demo/api.js +2 -2
  16. package/components/combobox/demo/api.md +80 -0
  17. package/components/combobox/demo/api.min.js +552 -356
  18. package/components/combobox/demo/index.min.js +533 -351
  19. package/components/combobox/dist/auro-combobox.d.ts +1 -1
  20. package/components/combobox/dist/index.js +421 -240
  21. package/components/combobox/dist/registered.js +421 -240
  22. package/components/counter/demo/api.min.js +434 -258
  23. package/components/counter/demo/index.min.js +434 -258
  24. package/components/counter/dist/auro-counter-button.d.ts +11 -2
  25. package/components/counter/dist/index.js +391 -219
  26. package/components/counter/dist/registered.js +391 -219
  27. package/components/datepicker/demo/api.md +2 -2
  28. package/components/datepicker/demo/api.min.js +576 -399
  29. package/components/datepicker/demo/index.min.js +576 -399
  30. package/components/datepicker/dist/auro-datepicker.d.ts +1 -1
  31. package/components/datepicker/dist/buttonVersion.d.ts +1 -1
  32. package/components/datepicker/dist/iconVersion.d.ts +1 -1
  33. package/components/datepicker/dist/index.js +437 -260
  34. package/components/datepicker/dist/popoverVersion.d.ts +1 -1
  35. package/components/datepicker/dist/registered.js +437 -260
  36. package/components/dropdown/demo/api.md +1 -1
  37. package/components/dropdown/demo/api.min.js +362 -202
  38. package/components/dropdown/demo/index.min.js +362 -202
  39. package/components/dropdown/dist/iconVersion.d.ts +1 -1
  40. package/components/dropdown/dist/index.js +349 -189
  41. package/components/dropdown/dist/registered.js +349 -189
  42. package/components/form/demo/api.min.js +13 -11
  43. package/components/form/demo/index.min.js +13 -11
  44. package/components/form/dist/auro-form.d.ts +8 -0
  45. package/components/form/dist/index.js +8 -6
  46. package/components/form/dist/registered.js +8 -6
  47. package/components/input/demo/api.md +5 -1
  48. package/components/input/demo/api.min.js +87 -80
  49. package/components/input/demo/index.min.js +87 -80
  50. package/components/input/dist/auro-input.d.ts +23 -0
  51. package/components/input/dist/base-input.d.ts +2 -18
  52. package/components/input/dist/buttonVersion.d.ts +1 -1
  53. package/components/input/dist/iconVersion.d.ts +1 -1
  54. package/components/input/dist/index.js +42 -35
  55. package/components/input/dist/registered.js +42 -35
  56. package/components/menu/demo/api.md +3 -3
  57. package/components/menu/demo/api.min.js +18 -17
  58. package/components/menu/demo/index.min.js +18 -17
  59. package/components/menu/dist/auro-menuoption.d.ts +2 -1
  60. package/components/menu/dist/index.js +7 -6
  61. package/components/menu/dist/registered.js +7 -6
  62. package/components/radio/demo/api.min.js +11 -11
  63. package/components/radio/demo/index.min.js +11 -11
  64. package/components/radio/dist/index.js +2 -2
  65. package/components/radio/dist/registered.js +2 -2
  66. package/components/select/demo/api.min.js +406 -235
  67. package/components/select/demo/index.min.js +406 -235
  68. package/components/select/dist/index.js +377 -207
  69. package/components/select/dist/registered.js +377 -207
  70. package/custom-elements.json +18148 -0
  71. package/package.json +42 -10
@@ -131,8 +131,9 @@ function getOppositeAxis(axis) {
131
131
  function getAxisLength(axis) {
132
132
  return axis === 'y' ? 'height' : 'width';
133
133
  }
134
+ const yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);
134
135
  function getSideAxis(placement) {
135
- return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';
136
+ return yAxisSides.has(getSide(placement)) ? 'y' : 'x';
136
137
  }
137
138
  function getAlignmentAxis(placement) {
138
139
  return getOppositeAxis(getSideAxis(placement));
@@ -157,19 +158,19 @@ function getExpandedPlacements(placement) {
157
158
  function getOppositeAlignmentPlacement(placement) {
158
159
  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);
159
160
  }
161
+ const lrPlacement = ['left', 'right'];
162
+ const rlPlacement = ['right', 'left'];
163
+ const tbPlacement = ['top', 'bottom'];
164
+ const btPlacement = ['bottom', 'top'];
160
165
  function getSideList(side, isStart, rtl) {
161
- const lr = ['left', 'right'];
162
- const rl = ['right', 'left'];
163
- const tb = ['top', 'bottom'];
164
- const bt = ['bottom', 'top'];
165
166
  switch (side) {
166
167
  case 'top':
167
168
  case 'bottom':
168
- if (rtl) return isStart ? rl : lr;
169
- return isStart ? lr : rl;
169
+ if (rtl) return isStart ? rlPlacement : lrPlacement;
170
+ return isStart ? lrPlacement : rlPlacement;
170
171
  case 'left':
171
172
  case 'right':
172
- return isStart ? tb : bt;
173
+ return isStart ? tbPlacement : btPlacement;
173
174
  default:
174
175
  return [];
175
176
  }
@@ -280,6 +281,71 @@ function computeCoordsFromPlacement(_ref, placement, rtl) {
280
281
  return coords;
281
282
  }
282
283
 
284
+ /**
285
+ * Resolves with an object of overflow side offsets that determine how much the
286
+ * element is overflowing a given clipping boundary on each side.
287
+ * - positive = overflowing the boundary by that number of pixels
288
+ * - negative = how many pixels left before it will overflow
289
+ * - 0 = lies flush with the boundary
290
+ * @see https://floating-ui.com/docs/detectOverflow
291
+ */
292
+ async function detectOverflow(state, options) {
293
+ var _await$platform$isEle;
294
+ if (options === void 0) {
295
+ options = {};
296
+ }
297
+ const {
298
+ x,
299
+ y,
300
+ platform,
301
+ rects,
302
+ elements,
303
+ strategy
304
+ } = state;
305
+ const {
306
+ boundary = 'clippingAncestors',
307
+ rootBoundary = 'viewport',
308
+ elementContext = 'floating',
309
+ altBoundary = false,
310
+ padding = 0
311
+ } = evaluate(options, state);
312
+ const paddingObject = getPaddingObject(padding);
313
+ const altContext = elementContext === 'floating' ? 'reference' : 'floating';
314
+ const element = elements[altBoundary ? altContext : elementContext];
315
+ const clippingClientRect = rectToClientRect(await platform.getClippingRect({
316
+ element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),
317
+ boundary,
318
+ rootBoundary,
319
+ strategy
320
+ }));
321
+ const rect = elementContext === 'floating' ? {
322
+ x,
323
+ y,
324
+ width: rects.floating.width,
325
+ height: rects.floating.height
326
+ } : rects.reference;
327
+ const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));
328
+ const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {
329
+ x: 1,
330
+ y: 1
331
+ } : {
332
+ x: 1,
333
+ y: 1
334
+ };
335
+ const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({
336
+ elements,
337
+ rect,
338
+ offsetParent,
339
+ strategy
340
+ }) : rect);
341
+ return {
342
+ top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,
343
+ bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,
344
+ left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,
345
+ right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x
346
+ };
347
+ }
348
+
283
349
  /**
284
350
  * Computes the `x` and `y` coordinates that will place the floating element
285
351
  * next to a given reference element.
@@ -309,6 +375,7 @@ const computePosition$1 = async (reference, floating, config) => {
309
375
  let middlewareData = {};
310
376
  let resetCount = 0;
311
377
  for (let i = 0; i < validMiddleware.length; i++) {
378
+ var _platform$detectOverf;
312
379
  const {
313
380
  name,
314
381
  fn
@@ -326,7 +393,10 @@ const computePosition$1 = async (reference, floating, config) => {
326
393
  strategy,
327
394
  middlewareData,
328
395
  rects,
329
- platform,
396
+ platform: {
397
+ ...platform,
398
+ detectOverflow: (_platform$detectOverf = platform.detectOverflow) != null ? _platform$detectOverf : detectOverflow
399
+ },
330
400
  elements: {
331
401
  reference,
332
402
  floating
@@ -371,71 +441,6 @@ const computePosition$1 = async (reference, floating, config) => {
371
441
  };
372
442
  };
373
443
 
374
- /**
375
- * Resolves with an object of overflow side offsets that determine how much the
376
- * element is overflowing a given clipping boundary on each side.
377
- * - positive = overflowing the boundary by that number of pixels
378
- * - negative = how many pixels left before it will overflow
379
- * - 0 = lies flush with the boundary
380
- * @see https://floating-ui.com/docs/detectOverflow
381
- */
382
- async function detectOverflow(state, options) {
383
- var _await$platform$isEle;
384
- if (options === void 0) {
385
- options = {};
386
- }
387
- const {
388
- x,
389
- y,
390
- platform,
391
- rects,
392
- elements,
393
- strategy
394
- } = state;
395
- const {
396
- boundary = 'clippingAncestors',
397
- rootBoundary = 'viewport',
398
- elementContext = 'floating',
399
- altBoundary = false,
400
- padding = 0
401
- } = evaluate(options, state);
402
- const paddingObject = getPaddingObject(padding);
403
- const altContext = elementContext === 'floating' ? 'reference' : 'floating';
404
- const element = elements[altBoundary ? altContext : elementContext];
405
- const clippingClientRect = rectToClientRect(await platform.getClippingRect({
406
- element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),
407
- boundary,
408
- rootBoundary,
409
- strategy
410
- }));
411
- const rect = elementContext === 'floating' ? {
412
- x,
413
- y,
414
- width: rects.floating.width,
415
- height: rects.floating.height
416
- } : rects.reference;
417
- const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));
418
- const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {
419
- x: 1,
420
- y: 1
421
- } : {
422
- x: 1,
423
- y: 1
424
- };
425
- const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({
426
- elements,
427
- rect,
428
- offsetParent,
429
- strategy
430
- }) : rect);
431
- return {
432
- top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,
433
- bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,
434
- left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,
435
- right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x
436
- };
437
- }
438
-
439
444
  function getPlacementList(alignment, autoAlignment, allowedPlacements) {
440
445
  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);
441
446
  return allowedPlacementsSortedByAlignment.filter(placement => {
@@ -475,7 +480,7 @@ const autoPlacement$1 = function (options) {
475
480
  ...detectOverflowOptions
476
481
  } = evaluate(options, state);
477
482
  const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;
478
- const overflow = await detectOverflow(state, detectOverflowOptions);
483
+ const overflow = await platform.detectOverflow(state, detectOverflowOptions);
479
484
  const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;
480
485
  const currentPlacement = placements$1[currentIndex];
481
486
  if (currentPlacement == null) {
@@ -589,7 +594,7 @@ const flip$1 = function (options) {
589
594
  fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));
590
595
  }
591
596
  const placements = [initialPlacement, ...fallbackPlacements];
592
- const overflow = await detectOverflow(state, detectOverflowOptions);
597
+ const overflow = await platform.detectOverflow(state, detectOverflowOptions);
593
598
  const overflows = [];
594
599
  let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];
595
600
  if (checkMainAxis) {
@@ -610,16 +615,22 @@ const flip$1 = function (options) {
610
615
  const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
611
616
  const nextPlacement = placements[nextIndex];
612
617
  if (nextPlacement) {
613
- // Try next placement and re-run the lifecycle.
614
- return {
615
- data: {
616
- index: nextIndex,
617
- overflows: overflowsData
618
- },
619
- reset: {
620
- placement: nextPlacement
621
- }
622
- };
618
+ const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;
619
+ if (!ignoreCrossAxisOverflow ||
620
+ // We leave the current main axis only if every placement on that axis
621
+ // overflows the main axis.
622
+ overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {
623
+ // Try next placement and re-run the lifecycle.
624
+ return {
625
+ data: {
626
+ index: nextIndex,
627
+ overflows: overflowsData
628
+ },
629
+ reset: {
630
+ placement: nextPlacement
631
+ }
632
+ };
633
+ }
623
634
  }
624
635
 
625
636
  // First, find the candidates that fit on the mainAxis side of overflow,
@@ -665,6 +676,8 @@ const flip$1 = function (options) {
665
676
  };
666
677
  };
667
678
 
679
+ const originSides = /*#__PURE__*/new Set(['left', 'top']);
680
+
668
681
  // For type backwards-compatibility, the `OffsetOptions` type was also
669
682
  // Derivable.
670
683
 
@@ -678,7 +691,7 @@ async function convertValueToCoords(state, options) {
678
691
  const side = getSide(placement);
679
692
  const alignment = getAlignment(placement);
680
693
  const isVertical = getSideAxis(placement) === 'y';
681
- const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;
694
+ const mainAxisMulti = originSides.has(side) ? -1 : 1;
682
695
  const crossAxisMulti = rtl && isVertical ? -1 : 1;
683
696
  const rawValue = evaluate(options, state);
684
697
 
@@ -765,7 +778,8 @@ const shift$1 = function (options) {
765
778
  const {
766
779
  x,
767
780
  y,
768
- placement
781
+ placement,
782
+ platform
769
783
  } = state;
770
784
  const {
771
785
  mainAxis: checkMainAxis = true,
@@ -788,7 +802,7 @@ const shift$1 = function (options) {
788
802
  x,
789
803
  y
790
804
  };
791
- const overflow = await detectOverflow(state, detectOverflowOptions);
805
+ const overflow = await platform.detectOverflow(state, detectOverflowOptions);
792
806
  const crossAxis = getSideAxis(getSide(placement));
793
807
  const mainAxis = getOppositeAxis(crossAxis);
794
808
  let mainAxisCoord = coords[mainAxis];
@@ -871,6 +885,7 @@ function isShadowRoot(value) {
871
885
  }
872
886
  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
873
887
  }
888
+ const invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);
874
889
  function isOverflowElement(element) {
875
890
  const {
876
891
  overflow,
@@ -878,27 +893,32 @@ function isOverflowElement(element) {
878
893
  overflowY,
879
894
  display
880
895
  } = getComputedStyle$1(element);
881
- return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);
896
+ return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);
882
897
  }
898
+ const tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);
883
899
  function isTableElement(element) {
884
- return ['table', 'td', 'th'].includes(getNodeName(element));
900
+ return tableElements.has(getNodeName(element));
885
901
  }
902
+ const topLayerSelectors = [':popover-open', ':modal'];
886
903
  function isTopLayer(element) {
887
- return [':popover-open', ':modal'].some(selector => {
904
+ return topLayerSelectors.some(selector => {
888
905
  try {
889
906
  return element.matches(selector);
890
- } catch (e) {
907
+ } catch (_e) {
891
908
  return false;
892
909
  }
893
910
  });
894
911
  }
912
+ const transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];
913
+ const willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];
914
+ const containValues = ['paint', 'layout', 'strict', 'content'];
895
915
  function isContainingBlock(elementOrCss) {
896
916
  const webkit = isWebKit();
897
917
  const css = isElement(elementOrCss) ? getComputedStyle$1(elementOrCss) : elementOrCss;
898
918
 
899
919
  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
900
920
  // https://drafts.csswg.org/css-transforms-2/#individual-transforms
901
- return ['transform', 'translate', 'scale', 'rotate', 'perspective'].some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));
921
+ return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));
902
922
  }
903
923
  function getContainingBlock(element) {
904
924
  let currentNode = getParentNode(element);
@@ -916,8 +936,9 @@ function isWebKit() {
916
936
  if (typeof CSS === 'undefined' || !CSS.supports) return false;
917
937
  return CSS.supports('-webkit-backdrop-filter', 'none');
918
938
  }
939
+ const lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);
919
940
  function isLastTraversableNode(node) {
920
- return ['html', 'body', '#document'].includes(getNodeName(node));
941
+ return lastTraversableNodeNames.has(getNodeName(node));
921
942
  }
922
943
  function getComputedStyle$1(element) {
923
944
  return getWindow(element).getComputedStyle(element);
@@ -1117,14 +1138,9 @@ function getWindowScrollBarX(element, rect) {
1117
1138
  return rect.left + leftScroll;
1118
1139
  }
1119
1140
 
1120
- function getHTMLOffset(documentElement, scroll, ignoreScrollbarX) {
1121
- if (ignoreScrollbarX === void 0) {
1122
- ignoreScrollbarX = false;
1123
- }
1141
+ function getHTMLOffset(documentElement, scroll) {
1124
1142
  const htmlRect = documentElement.getBoundingClientRect();
1125
- const x = htmlRect.left + scroll.scrollLeft - (ignoreScrollbarX ? 0 :
1126
- // RTL <body> scrollbar.
1127
- getWindowScrollBarX(documentElement, htmlRect));
1143
+ const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);
1128
1144
  const y = htmlRect.top + scroll.scrollTop;
1129
1145
  return {
1130
1146
  x,
@@ -1163,7 +1179,7 @@ function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
1163
1179
  offsets.y = offsetRect.y + offsetParent.clientTop;
1164
1180
  }
1165
1181
  }
1166
- const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll, true) : createCoords(0);
1182
+ const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
1167
1183
  return {
1168
1184
  width: rect.width * scale.x,
1169
1185
  height: rect.height * scale.y,
@@ -1197,6 +1213,10 @@ function getDocumentRect(element) {
1197
1213
  };
1198
1214
  }
1199
1215
 
1216
+ // Safety check: ensure the scrollbar space is reasonable in case this
1217
+ // calculation is affected by unusual styles.
1218
+ // Most scrollbars leave 15-18px of space.
1219
+ const SCROLLBAR_MAX = 25;
1200
1220
  function getViewportRect(element, strategy) {
1201
1221
  const win = getWindow(element);
1202
1222
  const html = getDocumentElement(element);
@@ -1214,6 +1234,24 @@ function getViewportRect(element, strategy) {
1214
1234
  y = visualViewport.offsetTop;
1215
1235
  }
1216
1236
  }
1237
+ const windowScrollbarX = getWindowScrollBarX(html);
1238
+ // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the
1239
+ // visual width of the <html> but this is not considered in the size
1240
+ // of `html.clientWidth`.
1241
+ if (windowScrollbarX <= 0) {
1242
+ const doc = html.ownerDocument;
1243
+ const body = doc.body;
1244
+ const bodyStyles = getComputedStyle(body);
1245
+ const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
1246
+ const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
1247
+ if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {
1248
+ width -= clippingStableScrollbarWidth;
1249
+ }
1250
+ } else if (windowScrollbarX <= SCROLLBAR_MAX) {
1251
+ // If the <body> scrollbar is on the left, the width needs to be extended
1252
+ // by the scrollbar amount so there isn't extra space on the right.
1253
+ width += windowScrollbarX;
1254
+ }
1217
1255
  return {
1218
1256
  width,
1219
1257
  height,
@@ -1222,6 +1260,7 @@ function getViewportRect(element, strategy) {
1222
1260
  };
1223
1261
  }
1224
1262
 
1263
+ const absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);
1225
1264
  // Returns the inner client rect, subtracting scrollbars if present.
1226
1265
  function getInnerBoundingClientRect(element, strategy) {
1227
1266
  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');
@@ -1286,7 +1325,7 @@ function getClippingElementAncestors(element, cache) {
1286
1325
  if (!currentNodeIsContaining && computedStyle.position === 'fixed') {
1287
1326
  currentContainingBlockComputedStyle = null;
1288
1327
  }
1289
- const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
1328
+ const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
1290
1329
  if (shouldDropCurrentNode) {
1291
1330
  // Drop non-containing blocks.
1292
1331
  result = result.filter(ancestor => ancestor !== currentNode);
@@ -1349,6 +1388,12 @@ function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
1349
1388
  scrollTop: 0
1350
1389
  };
1351
1390
  const offsets = createCoords(0);
1391
+
1392
+ // If the <body> scrollbar appears on the left (e.g. RTL systems). Use
1393
+ // Firefox with layout.scrollbar.side = 3 in about:config to test this.
1394
+ function setLeftRTLScrollbarOffset() {
1395
+ offsets.x = getWindowScrollBarX(documentElement);
1396
+ }
1352
1397
  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
1353
1398
  if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
1354
1399
  scroll = getNodeScroll(offsetParent);
@@ -1358,11 +1403,12 @@ function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
1358
1403
  offsets.x = offsetRect.x + offsetParent.clientLeft;
1359
1404
  offsets.y = offsetRect.y + offsetParent.clientTop;
1360
1405
  } else if (documentElement) {
1361
- // If the <body> scrollbar appears on the left (e.g. RTL systems). Use
1362
- // Firefox with layout.scrollbar.side = 3 in about:config to test this.
1363
- offsets.x = getWindowScrollBarX(documentElement);
1406
+ setLeftRTLScrollbarOffset();
1364
1407
  }
1365
1408
  }
1409
+ if (isFixed && !isOffsetParentAnElement && documentElement) {
1410
+ setLeftRTLScrollbarOffset();
1411
+ }
1366
1412
  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
1367
1413
  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;
1368
1414
  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;
@@ -1539,7 +1585,7 @@ function observeMove(element, onMove) {
1539
1585
  // Handle <iframe>s
1540
1586
  root: root.ownerDocument
1541
1587
  });
1542
- } catch (e) {
1588
+ } catch (_e) {
1543
1589
  io = new IntersectionObserver(handleObserve, options);
1544
1590
  }
1545
1591
  io.observe(element);
@@ -2330,32 +2376,32 @@ class AuroFloatingUI {
2330
2376
 
2331
2377
  // Selectors for focusable elements
2332
2378
  const FOCUSABLE_SELECTORS = [
2333
- 'a[href]',
2334
- 'button:not([disabled])',
2335
- 'textarea:not([disabled])',
2336
- 'input:not([disabled])',
2337
- 'select:not([disabled])',
2379
+ "a[href]",
2380
+ "button:not([disabled])",
2381
+ "textarea:not([disabled])",
2382
+ "input:not([disabled])",
2383
+ "select:not([disabled])",
2338
2384
  '[role="tab"]:not([disabled])',
2339
2385
  '[role="link"]:not([disabled])',
2340
2386
  '[role="button"]:not([disabled])',
2341
2387
  '[tabindex]:not([tabindex="-1"])',
2342
- '[contenteditable]:not([contenteditable="false"])'
2388
+ '[contenteditable]:not([contenteditable="false"])',
2343
2389
  ];
2344
2390
 
2345
2391
  // List of custom components that are known to be focusable
2346
2392
  const FOCUSABLE_COMPONENTS = [
2347
- 'auro-checkbox',
2348
- 'auro-radio',
2349
- 'auro-dropdown',
2350
- 'auro-button',
2351
- 'auro-combobox',
2352
- 'auro-input',
2353
- 'auro-counter',
2354
- 'auro-menu',
2355
- 'auro-select',
2356
- 'auro-datepicker',
2357
- 'auro-hyperlink',
2358
- 'auro-accordion',
2393
+ "auro-checkbox",
2394
+ "auro-radio",
2395
+ "auro-dropdown",
2396
+ "auro-button",
2397
+ "auro-combobox",
2398
+ "auro-input",
2399
+ "auro-counter",
2400
+ // 'auro-menu', // Auro menu is not focusable by default, it uses a different interaction model
2401
+ "auro-select",
2402
+ "auro-datepicker",
2403
+ "auro-hyperlink",
2404
+ "auro-accordion",
2359
2405
  ];
2360
2406
 
2361
2407
  /**
@@ -2369,21 +2415,43 @@ function isFocusableComponent(element) {
2369
2415
  const componentName = element.tagName.toLowerCase();
2370
2416
 
2371
2417
  // Guard Clause: Element is a focusable component
2372
- if (!FOCUSABLE_COMPONENTS.some((name) => element.hasAttribute(name) || componentName === name)) return false;
2418
+ if (
2419
+ !FOCUSABLE_COMPONENTS.some(
2420
+ (name) => element.hasAttribute(name) || componentName === name,
2421
+ )
2422
+ )
2423
+ return false;
2373
2424
 
2374
2425
  // Guard Clause: Element is not disabled
2375
- if (element.hasAttribute('disabled')) return false;
2426
+ if (element.hasAttribute("disabled")) return false;
2376
2427
 
2377
2428
  // Guard Clause: The element is a hyperlink and has no href attribute
2378
- if (componentName.match("hyperlink") && !element.hasAttribute('href')) return false;
2429
+ if (componentName.match("hyperlink") && !element.hasAttribute("href"))
2430
+ return false;
2379
2431
 
2380
2432
  // If all guard clauses pass, the element is a focusable component
2381
2433
  return true;
2382
2434
  }
2383
2435
 
2436
+ /**
2437
+ * Safely get a numeric tabindex for an element.
2438
+ * Returns a number if the tabindex is a valid integer, otherwise null.
2439
+ *
2440
+ * @param {HTMLElement} element The element whose tabindex to read.
2441
+ * @returns {?number} The numeric tabindex or null if missing/invalid.
2442
+ */
2443
+ function getNumericTabIndex(element) {
2444
+ const raw = element.getAttribute("tabindex");
2445
+ if (raw == null) return null;
2446
+
2447
+ const value = Number.parseInt(raw, 10);
2448
+ return Number.isNaN(value) ? null : value;
2449
+ }
2450
+
2384
2451
  /**
2385
2452
  * Retrieves all focusable elements within the container in DOM order, including those in shadow DOM and slots.
2386
2453
  * Returns a unique, ordered array of elements that can receive focus.
2454
+ * Also sorts elements with tabindex first, preserving their order.
2387
2455
  *
2388
2456
  * @param {HTMLElement} container The container to search within
2389
2457
  * @returns {Array<HTMLElement>} An array of focusable elements within the container.
@@ -2417,14 +2485,14 @@ function getFocusableElements(container) {
2417
2485
  if (root.shadowRoot) {
2418
2486
  // Process shadow DOM children in order
2419
2487
  if (root.shadowRoot.children) {
2420
- Array.from(root.shadowRoot.children).forEach(child => {
2488
+ Array.from(root.shadowRoot.children).forEach((child) => {
2421
2489
  collectFocusableElements(child);
2422
2490
  });
2423
2491
  }
2424
2492
  }
2425
2493
 
2426
2494
  // Process slots and their assigned nodes in order
2427
- if (root.tagName === 'SLOT') {
2495
+ if (root.tagName === "SLOT") {
2428
2496
  const assignedNodes = root.assignedNodes({ flatten: true });
2429
2497
  for (const node of assignedNodes) {
2430
2498
  collectFocusableElements(node);
@@ -2432,7 +2500,7 @@ function getFocusableElements(container) {
2432
2500
  } else {
2433
2501
  // Process light DOM children in order
2434
2502
  if (root.children) {
2435
- Array.from(root.children).forEach(child => {
2503
+ Array.from(root.children).forEach((child) => {
2436
2504
  collectFocusableElements(child);
2437
2505
  });
2438
2506
  }
@@ -2455,7 +2523,37 @@ function getFocusableElements(container) {
2455
2523
  }
2456
2524
  }
2457
2525
 
2458
- return uniqueElements;
2526
+ // Move tab-indexed elements to the front while preserving their order
2527
+ // This ensures that elements with tabindex are prioritized in the focus order
2528
+
2529
+ // First extract elements with valid positive tabindex
2530
+ const elementsWithTabindex = uniqueElements.filter((el) => {
2531
+ const tabindex = getNumericTabIndex(el);
2532
+ return tabindex !== null && tabindex > 0;
2533
+ });
2534
+
2535
+ // Sort these elements by their tabindex value
2536
+ elementsWithTabindex.sort((a, b) => {
2537
+ const aIndex = getNumericTabIndex(a) ?? 0;
2538
+ const bIndex = getNumericTabIndex(b) ?? 0;
2539
+ return aIndex - bIndex;
2540
+ });
2541
+
2542
+ // Elements without tabindex (preserving their original order)
2543
+ const elementsWithoutTabindex = uniqueElements.filter((el) => {
2544
+ const tabindex = getNumericTabIndex(el);
2545
+
2546
+ // Elements without tabindex or with tabindex of 0 stay in DOM order
2547
+ return tabindex === null || tabindex === 0;
2548
+ });
2549
+
2550
+ // Combine both arrays with tabindex elements first
2551
+ const tabIndexedUniqueElements = [
2552
+ ...elementsWithTabindex,
2553
+ ...elementsWithoutTabindex,
2554
+ ];
2555
+
2556
+ return tabIndexedUniqueElements;
2459
2557
  }
2460
2558
 
2461
2559
  /**
@@ -2468,15 +2566,17 @@ class FocusTrap {
2468
2566
  * Initializes event listeners and prepares the container for focus management.
2469
2567
  *
2470
2568
  * @param {HTMLElement} container The DOM element to trap focus within.
2569
+ * @param {boolean} [controlTabOrder=false] If true enables manual control of the tab order by the FocusTrap.
2471
2570
  * @throws {Error} If the provided container is not a valid HTMLElement.
2472
2571
  */
2473
- constructor(container) {
2572
+ constructor(container, controlTabOrder = false) {
2474
2573
  if (!container || !(container instanceof HTMLElement)) {
2475
2574
  throw new Error("FocusTrap requires a valid HTMLElement.");
2476
2575
  }
2477
2576
 
2478
2577
  this.container = container;
2479
- this.tabDirection = 'forward'; // or 'backward'
2578
+ this.tabDirection = "forward"; // or 'backward';
2579
+ this.controlTabOrder = controlTabOrder;
2480
2580
 
2481
2581
  this._init();
2482
2582
  }
@@ -2488,58 +2588,119 @@ class FocusTrap {
2488
2588
  * @private
2489
2589
  */
2490
2590
  _init() {
2491
-
2492
2591
  // Add inert attribute to prevent focusing programmatically as well (if supported)
2493
- if ('inert' in HTMLElement.prototype) {
2592
+ if ("inert" in HTMLElement.prototype) {
2494
2593
  this.container.inert = false; // Ensure the container isn't inert
2495
- this.container.setAttribute('data-focus-trap-container', true); // Mark for identification
2594
+ this.container.setAttribute("data-focus-trap-container", true); // Mark for identification
2496
2595
  }
2497
2596
 
2498
2597
  // Track tab direction
2499
- this.container.addEventListener('keydown', this._onKeydown);
2598
+ this.container.addEventListener("keydown", this._onKeydown);
2500
2599
  }
2501
2600
 
2502
2601
  /**
2503
- * Handles keydown events to manage tab navigation within the container.
2504
- * Ensures that focus wraps around when reaching the first or last focusable element.
2505
- *
2506
- * @param {KeyboardEvent} e The keyboard event triggered by user interaction.
2602
+ * Gets an array of currently active (focused) elements in the document and shadow DOM.
2603
+ * @returns {Array<HTMLElement>} An array of focusable elements within the container.
2507
2604
  * @private
2508
2605
  */
2509
- _onKeydown = (e) => {
2510
-
2511
- if (e.key === 'Tab') {
2512
-
2513
- // Set the tab direction based on the key pressed
2514
- this.tabDirection = e.shiftKey ? 'backward' : 'forward';
2515
-
2516
- // Get the active element(s) in the document and shadow root
2517
- // This will include the active element in the shadow DOM if it exists
2518
- // Active element may be inside the shadow DOM depending on delegatesFocus, so we need to check both
2519
- let activeElement = document.activeElement;
2520
- const actives = [activeElement];
2521
- while (activeElement?.shadowRoot?.activeElement) {
2522
- actives.push(activeElement.shadowRoot.activeElement);
2523
- activeElement = activeElement.shadowRoot.activeElement;
2524
- }
2606
+ _getActiveElements() {
2607
+ // Get the active element(s) in the document and shadow root
2608
+ // This will include the active element in the shadow DOM if it exists
2609
+ // Active element may be inside the shadow DOM depending on delegatesFocus, so we need to check both
2610
+ let { activeElement } = document;
2611
+ const actives = [activeElement];
2612
+ while (activeElement?.shadowRoot?.activeElement) {
2613
+ actives.push(activeElement.shadowRoot.activeElement);
2614
+ activeElement = activeElement.shadowRoot.activeElement;
2615
+ }
2616
+ return actives;
2617
+ }
2525
2618
 
2526
- // Update the focusable elements
2527
- const focusables = this._getFocusableElements();
2528
-
2529
- // If we're at either end of the focusable elements, wrap around to the other end
2530
- const focusIndex =
2531
- (actives.includes(focusables[0]) || actives.includes(this.container)) && this.tabDirection === 'backward'
2532
- ? focusables.length - 1
2533
- : actives.includes(focusables[focusables.length - 1]) && this.tabDirection === 'forward'
2534
- ? 0
2535
- : null;
2536
-
2537
- if (focusIndex !== null) {
2538
- focusables[focusIndex].focus();
2539
- e.preventDefault(); // Prevent default tab behavior
2540
- e.stopPropagation(); // Stop the event from bubbling up
2541
- }
2619
+ /**
2620
+ * Gets the next focus index based on the current index and focusable elements.
2621
+ * @param {number} currentIndex The current index of the focused element.
2622
+ * @param {Array<HTMLElement>} focusables The array of focusable elements.
2623
+ * @returns {number|null} The next focus index or null if not determined.
2624
+ */
2625
+ _getNextFocusIndex(currentIndex, focusables, actives) {
2626
+ if (this.controlTabOrder) {
2627
+ // Calculate the new index based on the current index and tab direction
2628
+ let newFocusIndex =
2629
+ currentIndex + (this.tabDirection === "forward" ? 1 : -1);
2630
+
2631
+ // Wrap-around logic
2632
+ if (newFocusIndex < 0) newFocusIndex = focusables.length - 1;
2633
+ if (newFocusIndex >= focusables.length) newFocusIndex = 0;
2634
+
2635
+ // Early return with the new index
2636
+ return newFocusIndex;
2542
2637
  }
2638
+
2639
+ // Determine if we need to wrap
2640
+ const atFirst =
2641
+ actives.includes(focusables[0]) || actives.includes(this.container);
2642
+ const atLast = actives.includes(focusables[focusables.length - 1]);
2643
+
2644
+ // Only wrap if at the ends
2645
+ if (this.tabDirection === "backward" && atFirst) {
2646
+ return focusables.length - 1;
2647
+ }
2648
+
2649
+ if (this.tabDirection === "forward" && atLast) {
2650
+ return 0;
2651
+ }
2652
+
2653
+ // No wrap, so don't change focus, return early
2654
+ return null;
2655
+ }
2656
+
2657
+ /**
2658
+ * Handles the Tab key press event to manage focus within the container.
2659
+ * @param {KeyboardEvent} e The keyboard event triggered by the user.
2660
+ * @returns {void}
2661
+ */
2662
+ _handleTabKey(e) {
2663
+ // Update the focusable elements
2664
+ const focusables = this._getFocusableElements();
2665
+
2666
+ // If there are no focusable elements, exit
2667
+ if (!focusables.length) return;
2668
+
2669
+ // Set the tab direction based on the key pressed
2670
+ this.tabDirection = e.shiftKey ? "backward" : "forward";
2671
+
2672
+ // Get the active elements that are currently focused
2673
+ const actives = this._getActiveElements();
2674
+
2675
+ // If we're at either end of the focusable elements, wrap around to the other end
2676
+ let focusIndex = focusables.findIndex((el) => actives.includes(el));
2677
+
2678
+ // Fallback if we have no focused element
2679
+ if (focusIndex === -1) focusIndex = 0;
2680
+
2681
+ // Get the next focus index based on the current focus index, tab direction, and controlTabOrder setting
2682
+ // Is null if no new focus index is determined
2683
+ const newFocusIndex = this._getNextFocusIndex(
2684
+ focusIndex,
2685
+ focusables,
2686
+ actives,
2687
+ );
2688
+
2689
+ // If we have a new focus index, set focus to that element
2690
+ if (newFocusIndex !== null) {
2691
+ e.preventDefault();
2692
+ focusables[newFocusIndex].focus();
2693
+ }
2694
+ }
2695
+
2696
+ /**
2697
+ * Catches the keydown event
2698
+ * @param {KeyboardEvent} e The keyboard event triggered by user interaction.
2699
+ * @private
2700
+ */
2701
+ _onKeydown = (e) => {
2702
+ // Handle tab
2703
+ if (e.key === "Tab") this._handleTabKey(e);
2543
2704
  };
2544
2705
 
2545
2706
  /**
@@ -2552,8 +2713,8 @@ class FocusTrap {
2552
2713
  _getFocusableElements() {
2553
2714
  // Use the imported utility function to get focusable elements
2554
2715
  const elements = getFocusableElements(this.container);
2555
-
2556
- // Filter out any elements with the 'focus-bookend' class
2716
+
2717
+ // Return the elements found
2557
2718
  return elements;
2558
2719
  }
2559
2720
 
@@ -2580,12 +2741,11 @@ class FocusTrap {
2580
2741
  * Call this method to clean up when the focus trap is no longer needed.
2581
2742
  */
2582
2743
  disconnect() {
2583
-
2584
- if (this.container.hasAttribute('data-focus-trap-container')) {
2585
- this.container.removeAttribute('data-focus-trap-container');
2744
+ if (this.container.hasAttribute("data-focus-trap-container")) {
2745
+ this.container.removeAttribute("data-focus-trap-container");
2586
2746
  }
2587
2747
 
2588
- this.container.removeEventListener('keydown', this._onKeydown);
2748
+ this.container.removeEventListener("keydown", this._onKeydown);
2589
2749
  }
2590
2750
  }
2591
2751
 
@@ -2629,11 +2789,11 @@ class AuroDependencyVersioning {
2629
2789
  }
2630
2790
  }
2631
2791
 
2632
- class p{registerComponent(t,a){customElements.get(t)||customElements.define(t,class extends a{});}closestElement(t,a=this,e=(a,s=a&&a.closest(t))=>a&&a!==document&&a!==window?s||e(a.getRootNode().host):null){return e(a)}handleComponentTagRename(t,a){const e=a.toLowerCase();t.tagName.toLowerCase()!==e&&t.setAttribute(e,true);}elementMatch(t,a){const e=a.toLowerCase();return t.tagName.toLowerCase()===e||t.hasAttribute(e)}}var u='<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-labelledby="error__desc" class="ico_squareLarge" data-deprecated="true" role="img" style="min-width:var(--auro-size-lg, var(--ds-size-300, 1.5rem));height:var(--auro-size-lg, var(--ds-size-300, 1.5rem));fill:currentColor" viewBox="0 0 24 24" part="svg"><title/><desc id="error__desc">Error alert indicator.</desc><path d="m13.047 5.599 6.786 11.586A1.207 1.207 0 0 1 18.786 19H5.214a1.207 1.207 0 0 1-1.047-1.815l6.786-11.586a1.214 1.214 0 0 1 2.094 0m-1.165.87a.23.23 0 0 0-.085.085L5.419 17.442a.232.232 0 0 0 .203.35h12.756a.234.234 0 0 0 .203-.35L12.203 6.554a.236.236 0 0 0-.321-.084M12 15.5a.75.75 0 1 1 0 1.5.75.75 0 0 1 0-1.5m-.024-6.22c.325 0 .589.261.589.583v4.434a.586.586 0 0 1-.589.583.586.586 0 0 1-.588-.583V9.863c0-.322.264-.583.588-.583"/></svg>';class m extends LitElement{static get properties(){return {hidden:{type:Boolean,reflect:true},hiddenVisually:{type:Boolean,reflect:true},hiddenAudible:{type:Boolean,reflect:true}}}hideAudible(t){return t?"true":"false"}}const g=new Map,f=(t,a={})=>{const e=a.responseParser||(t=>t.text());return g.has(t)||g.set(t,fetch(t).then(e)),g.get(t)};var w=css`:focus:not(:focus-visible){outline:3px solid transparent}.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock,:host{display:block}.util_displayFlex{display:flex}.util_displayHidden,:host([hidden]:not(:focus):not(:active)){display:none}.util_displayHiddenVisually,:host([hiddenVisually]:not(:focus):not(:active)){position:absolute;overflow:hidden;clip:rect(1px,1px,1px,1px);width:1px;height:1px;padding:0;border:0}.ico_squareLarge{fill:currentColor;height:var(--auro-size-lg, var(--ds-size-300, 1.5rem))}.ico_squareSmall{fill:currentColor;height:.6rem}.ico_squareMed{fill:currentColor;height:var(--auro-size-md, var(--ds-size-200, 1rem))}.ico_squareSml{fill:currentColor;height:var(--auro-size-sm, var(--ds-size-150, .75rem))}:host{color:currentColor;vertical-align:middle;display:inline-block}svg{min-width:var(--ds-auro-icon-size, 1.5rem)!important;width:var(--ds-auro-icon-size, 1.5rem)!important;height:var(--ds-auro-icon-size, 1.5rem)!important}.componentWrapper{display:flex;line-height:var(--ds-auro-icon-size)}.svgWrapper{height:var(--ds-auro-icon-size);width:var(--ds-auro-icon-size)}.svgWrapper [part=svg]{display:flex}.labelWrapper{margin-left:var(--ds-size-50, .25rem)}.labelWrapper ::slotted(*){line-height:inherit!important}
2633
- `;class z extends m{constructor(){super(),this.onDark=false,this.appearance="default";}static get properties(){return {...m.properties,onDark:{type:Boolean,reflect:true},appearance:{type:String,reflect:true},svg:{attribute:false,reflect:true}}}static get styles(){return w}async fetchIcon(t,a){let e="";e="logos"===t?await f(`${this.uri}/${t}/${a}.svg`):await f(`${this.uri}/icons/${t}/${a}.svg`);return (new DOMParser).parseFromString(e,"text/html").body.querySelector("svg")}async firstUpdated(){try{if(!this.customSvg){const t=await this.fetchIcon(this.category,this.name);if(t)this.svg=t;else if(!t){const t=(new DOMParser).parseFromString(u,"text/html");this.svg=t.body.firstChild;}}}catch(t){this.svg=void 0;}}}css`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock,:host{display:block}.util_displayFlex{display:flex}.util_displayHidden,:host([hidden]:not(:focus):not(:active)){display:none}.util_displayHiddenVisually,:host([hiddenVisually]:not(:focus):not(:active)){position:absolute;overflow:hidden;clip:rect(1px,1px,1px,1px);width:1px;height:1px;padding:0;border:0}:host{display:inline-block;--ds-auro-icon-size: 100%;width:100%;height:100%}:host .logo{color:var(--ds-auro-alaska-color)}:host([onDark]),:host([appearance=inverse]){--ds-auro-alaska-color: #FFF}
2792
+ class p{registerComponent(t,a){customElements.get(t)||customElements.define(t,class extends a{});}closestElement(t,a=this,e=(a,s=a&&a.closest(t))=>a&&a!==document&&a!==window?s||e(a.getRootNode().host):null){return e(a)}handleComponentTagRename(t,a){const e=a.toLowerCase();t.tagName.toLowerCase()!==e&&t.setAttribute(e,true);}elementMatch(t,a){const e=a.toLowerCase();return t.tagName.toLowerCase()===e||t.hasAttribute(e)}getSlotText(t,a){const e=t.shadowRoot?.querySelector(`slot[name="${a}"]`);return (e?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim()||null}}var u='<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-labelledby="error__desc" class="ico_squareLarge" data-deprecated="true" role="img" style="min-width:var(--auro-size-lg, var(--ds-size-300, 1.5rem));height:var(--auro-size-lg, var(--ds-size-300, 1.5rem));fill:currentColor" viewBox="0 0 24 24" part="svg"><title/><desc id="error__desc">Error alert indicator.</desc><path d="m13.047 5.599 6.786 11.586A1.207 1.207 0 0 1 18.786 19H5.214a1.207 1.207 0 0 1-1.047-1.815l6.786-11.586a1.214 1.214 0 0 1 2.094 0m-1.165.87a.23.23 0 0 0-.085.085L5.419 17.442a.232.232 0 0 0 .203.35h12.756a.234.234 0 0 0 .203-.35L12.203 6.554a.236.236 0 0 0-.321-.084M12 15.5a.75.75 0 1 1 0 1.5.75.75 0 0 1 0-1.5m-.024-6.22c.325 0 .589.261.589.583v4.434a.586.586 0 0 1-.589.583.586.586 0 0 1-.588-.583V9.863c0-.322.264-.583.588-.583"/></svg>';class m extends LitElement{static get properties(){return {hidden:{type:Boolean,reflect:true},hiddenVisually:{type:Boolean,reflect:true},hiddenAudible:{type:Boolean,reflect:true}}}hideAudible(t){return t?"true":"false"}}const g=new Map,f=(t,a={})=>{const e=a.responseParser||(t=>t.text());return g.has(t)||g.set(t,fetch(t).then(e)),g.get(t)};var w=css`:focus:not(:focus-visible){outline:3px solid transparent}.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock,:host{display:block}.util_displayFlex{display:flex}.util_displayHidden,:host([hidden]:not(:focus):not(:active)){display:none}.util_displayHiddenVisually,:host([hiddenVisually]:not(:focus):not(:active)){position:absolute;overflow:hidden;clip:rect(1px,1px,1px,1px);width:1px;height:1px;padding:0;border:0}.ico_squareLarge{fill:currentColor;height:var(--auro-size-lg, var(--ds-size-300, 1.5rem))}.ico_squareSmall{fill:currentColor;height:.6rem}.ico_squareMed{fill:currentColor;height:var(--auro-size-md, var(--ds-size-200, 1rem))}.ico_squareSml{fill:currentColor;height:var(--auro-size-sm, var(--ds-size-150, .75rem))}:host{color:currentColor;vertical-align:middle;display:inline-block}svg{min-width:var(--ds-auro-icon-size, 1.5rem)!important;width:var(--ds-auro-icon-size, 1.5rem)!important;height:var(--ds-auro-icon-size, 1.5rem)!important}.componentWrapper{display:flex;line-height:var(--ds-auro-icon-size)}.svgWrapper{height:var(--ds-auro-icon-size);width:var(--ds-auro-icon-size)}.svgWrapper [part=svg]{display:flex}.labelWrapper{margin-left:var(--ds-size-50, .25rem)}.labelWrapper ::slotted(*){line-height:inherit!important}
2793
+ `;class z extends m{constructor(){super(),this._initializeDefaults();}_initializeDefaults(){this.onDark=false,this.appearance="default";}static get properties(){return {...m.properties,onDark:{type:Boolean,reflect:true},appearance:{type:String,reflect:true},svg:{attribute:false,reflect:true}}}static get styles(){return w}async fetchIcon(t,a){let e="";e="logos"===t?await f(`${this.uri}/${t}/${a}.svg`):await f(`${this.uri}/icons/${t}/${a}.svg`);return (new DOMParser).parseFromString(e,"text/html").body.querySelector("svg")}async firstUpdated(){try{if(!this.customSvg){const t=await this.fetchIcon(this.category,this.name);if(t)this.svg=t;else if(!t){const t=(new DOMParser).parseFromString(u,"text/html");this.svg=t.body.firstChild;}}}catch(t){this.svg=void 0;}}}css`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock,:host{display:block}.util_displayFlex{display:flex}.util_displayHidden,:host([hidden]:not(:focus):not(:active)){display:none}.util_displayHiddenVisually,:host([hiddenVisually]:not(:focus):not(:active)){position:absolute;overflow:hidden;clip:rect(1px,1px,1px,1px);width:1px;height:1px;padding:0;border:0}:host{display:inline-block;--ds-auro-icon-size: 100%;width:100%;height:100%}:host .logo{color:var(--ds-auro-alaska-color)}:host([onDark]),:host([appearance=inverse]){--ds-auro-alaska-color: #FFF}
2634
2794
  `;var y=css`:host{--ds-auro-icon-color: var(--ds-basic-color-texticon-default, #2a2a2a);--ds-auro-alaska-color: #02426D;--ds-auro-icon-size: var(--ds-size-300, 1.5rem)}
2635
- `;var k=css`:host{color:var(--ds-auro-icon-color)}:host([customColor]){color:inherit}:host(:not([onDark])[variant=accent1]),:host(:not([appearance=inverse])[variant=accent1]){--ds-auro-icon-color: var(--ds-basic-color-texticon-accent1, #265688)}:host(:not([onDark])[variant=disabled]),:host(:not([appearance=inverse])[variant=disabled]){--ds-auro-icon-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host(:not([onDark])[variant=muted]),:host(:not([appearance=inverse])[variant=muted]){--ds-auro-icon-color: var(--ds-basic-color-texticon-muted, #676767)}:host(:not([onDark])[variant=statusDefault]),:host(:not([appearance=inverse])[variant=statusDefault]){--ds-auro-icon-color: var(--ds-basic-color-status-default, #afb9c6)}:host(:not([onDark])[variant=statusInfo]),:host(:not([appearance=inverse])[variant=statusInfo]){--ds-auro-icon-color: var(--ds-basic-color-status-info, #01426a)}:host(:not([onDark])[variant=statusSuccess]),:host(:not([appearance=inverse])[variant=statusSuccess]){--ds-auro-icon-color: var(--ds-basic-color-status-success, #447a1f)}:host(:not([onDark])[variant=statusWarning]),:host(:not([appearance=inverse])[variant=statusWarning]){--ds-auro-icon-color: var(--ds-basic-color-status-warning, #fac200)}:host(:not([onDark])[variant=statusError]),:host(:not([appearance=inverse])[variant=statusError]){--ds-auro-icon-color: var(--ds-basic-color-status-error, #e31f26)}:host(:not([onDark])[variant=statusInfoSubtle]),:host(:not([appearance=inverse])[variant=statusInfoSubtle]){--ds-auro-icon-color: var(--ds-basic-color-status-info-subtle, #ebf3f9)}:host(:not([onDark])[variant=statusSuccessSubtle]),:host(:not([appearance=inverse])[variant=statusSuccessSubtle]){--ds-auro-icon-color: var(--ds-basic-color-status-success-subtle, #d6eac7)}:host(:not([onDark])[variant=statusWarningSubtle]),:host(:not([appearance=inverse])[variant=statusWarningSubtle]){--ds-auro-icon-color: var(--ds-basic-color-status-warning-subtle, #fff0b2)}:host(:not([onDark])[variant=statusErrorSubtle]),:host(:not([appearance=inverse])[variant=statusErrorSubtle]){--ds-auro-icon-color: var(--ds-basic-color-status-error-subtle, #fbc6c6)}:host(:not([onDark])[variant=fareBasicEconomy]),:host(:not([appearance=inverse])[variant=fareBasicEconomy]){--ds-auro-icon-color: var(--ds-basic-color-fare-basiceconomy, #97eaf8)}:host(:not([onDark])[variant=fareBusiness]),:host(:not([appearance=inverse])[variant=fareBusiness]){--ds-auro-icon-color: var(--ds-basic-color-fare-business, #01426a)}:host(:not([onDark])[variant=fareEconomy]),:host(:not([appearance=inverse])[variant=fareEconomy]){--ds-auro-icon-color: var(--ds-basic-color-fare-economy, #0074ca)}:host(:not([onDark])[variant=fareFirst]),:host(:not([appearance=inverse])[variant=fareFirst]){--ds-auro-icon-color: var(--ds-basic-color-fare-first, #00274a)}:host(:not([onDark])[variant=farePremiumEconomy]),:host(:not([appearance=inverse])[variant=farePremiumEconomy]){--ds-auro-icon-color: var(--ds-basic-color-fare-premiumeconomy, #005154)}:host(:not([onDark])[variant=tierOneWorldEmerald]),:host(:not([appearance=inverse])[variant=tierOneWorldEmerald]){--ds-auro-icon-color: var(--ds-basic-color-tier-program-oneworld-emerald, #139142)}:host(:not([onDark])[variant=tierOneWorldSapphire]),:host(:not([appearance=inverse])[variant=tierOneWorldSapphire]){--ds-auro-icon-color: var(--ds-basic-color-tier-program-oneworld-sapphire, #015daa)}:host(:not([onDark])[variant=tierOneWorldRuby]),:host(:not([appearance=inverse])[variant=tierOneWorldRuby]){--ds-auro-icon-color: var(--ds-basic-color-tier-program-oneworld-ruby, #a41d4a)}:host([onDark]),:host([appearance=inverse]){--ds-auro-icon-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([onDark][variant=disabled]),:host([appearance=inverse][variant=disabled]){--ds-auro-icon-color: var(--ds-basic-color-texticon-inverse-disabled, #7e8894)}:host([onDark][variant=muted]),:host([appearance=inverse][variant=muted]){--ds-auro-icon-color: var(--ds-basic-color-texticon-inverse-muted, #ccd2db)}:host([onDark][variant=statusError]),:host([appearance=inverse][variant=statusError]){--ds-auro-icon-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8)}
2636
- `;class x extends z{constructor(){super(),this.variant=void 0,this.privateDefaults();}privateDefaults(){this.uri="https://cdn.jsdelivr.net/npm/@alaskaairux/icons@latest/dist",this.runtimeUtils=new p;}static get properties(){return {...z.properties,ariaHidden:{type:String,reflect:true},category:{type:String,reflect:true},customColor:{type:Boolean,reflect:true},customSvg:{type:Boolean},label:{type:Boolean,reflect:true},name:{type:String,reflect:true},variant:{type:String,reflect:true}}}static get styles(){return [z.styles,y,w,k]}static register(t="auro-icon"){p.prototype.registerComponent(t,x);}connectedCallback(){super.connectedCallback(),this.runtimeUtils.handleComponentTagRename(this,"auro-icon");}exposeCssParts(){this.setAttribute("exportparts","svg:iconSvg");}async firstUpdated(){if(await super.firstUpdated(),this.hasAttribute("ariaHidden")&&this.svg){const t=this.svg.querySelector("desc");t&&(t.remove(),this.svg.removeAttribute("aria-labelledby"));}}render(){const t={labelWrapper:true,util_displayHiddenVisually:!this.label};return html`
2795
+ `;var x=css`:host{color:var(--ds-auro-icon-color)}:host([customColor]){color:inherit}:host(:not([onDark])[variant=accent1]),:host(:not([appearance=inverse])[variant=accent1]){--ds-auro-icon-color: var(--ds-basic-color-texticon-accent1, #265688)}:host(:not([onDark])[variant=disabled]),:host(:not([appearance=inverse])[variant=disabled]){--ds-auro-icon-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host(:not([onDark])[variant=muted]),:host(:not([appearance=inverse])[variant=muted]){--ds-auro-icon-color: var(--ds-basic-color-texticon-muted, #676767)}:host(:not([onDark])[variant=statusDefault]),:host(:not([appearance=inverse])[variant=statusDefault]){--ds-auro-icon-color: var(--ds-basic-color-status-default, #afb9c6)}:host(:not([onDark])[variant=statusInfo]),:host(:not([appearance=inverse])[variant=statusInfo]){--ds-auro-icon-color: var(--ds-basic-color-status-info, #01426a)}:host(:not([onDark])[variant=statusSuccess]),:host(:not([appearance=inverse])[variant=statusSuccess]){--ds-auro-icon-color: var(--ds-basic-color-status-success, #447a1f)}:host(:not([onDark])[variant=statusWarning]),:host(:not([appearance=inverse])[variant=statusWarning]){--ds-auro-icon-color: var(--ds-basic-color-status-warning, #fac200)}:host(:not([onDark])[variant=statusError]),:host(:not([appearance=inverse])[variant=statusError]){--ds-auro-icon-color: var(--ds-basic-color-status-error, #e31f26)}:host(:not([onDark])[variant=statusInfoSubtle]),:host(:not([appearance=inverse])[variant=statusInfoSubtle]){--ds-auro-icon-color: var(--ds-basic-color-status-info-subtle, #ebf3f9)}:host(:not([onDark])[variant=statusSuccessSubtle]),:host(:not([appearance=inverse])[variant=statusSuccessSubtle]){--ds-auro-icon-color: var(--ds-basic-color-status-success-subtle, #d6eac7)}:host(:not([onDark])[variant=statusWarningSubtle]),:host(:not([appearance=inverse])[variant=statusWarningSubtle]){--ds-auro-icon-color: var(--ds-basic-color-status-warning-subtle, #fff0b2)}:host(:not([onDark])[variant=statusErrorSubtle]),:host(:not([appearance=inverse])[variant=statusErrorSubtle]){--ds-auro-icon-color: var(--ds-basic-color-status-error-subtle, #fbc6c6)}:host(:not([onDark])[variant=fareBasicEconomy]),:host(:not([appearance=inverse])[variant=fareBasicEconomy]){--ds-auro-icon-color: var(--ds-basic-color-fare-basiceconomy, #97eaf8)}:host(:not([onDark])[variant=fareBusiness]),:host(:not([appearance=inverse])[variant=fareBusiness]){--ds-auro-icon-color: var(--ds-basic-color-fare-business, #01426a)}:host(:not([onDark])[variant=fareEconomy]),:host(:not([appearance=inverse])[variant=fareEconomy]){--ds-auro-icon-color: var(--ds-basic-color-fare-economy, #0074ca)}:host(:not([onDark])[variant=fareFirst]),:host(:not([appearance=inverse])[variant=fareFirst]){--ds-auro-icon-color: var(--ds-basic-color-fare-first, #00274a)}:host(:not([onDark])[variant=farePremiumEconomy]),:host(:not([appearance=inverse])[variant=farePremiumEconomy]){--ds-auro-icon-color: var(--ds-basic-color-fare-premiumeconomy, #005154)}:host(:not([onDark])[variant=tierOneWorldEmerald]),:host(:not([appearance=inverse])[variant=tierOneWorldEmerald]){--ds-auro-icon-color: var(--ds-basic-color-tier-program-oneworld-emerald, #139142)}:host(:not([onDark])[variant=tierOneWorldSapphire]),:host(:not([appearance=inverse])[variant=tierOneWorldSapphire]){--ds-auro-icon-color: var(--ds-basic-color-tier-program-oneworld-sapphire, #015daa)}:host(:not([onDark])[variant=tierOneWorldRuby]),:host(:not([appearance=inverse])[variant=tierOneWorldRuby]){--ds-auro-icon-color: var(--ds-basic-color-tier-program-oneworld-ruby, #a41d4a)}:host([onDark]),:host([appearance=inverse]){--ds-auro-icon-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([onDark][variant=disabled]),:host([appearance=inverse][variant=disabled]){--ds-auro-icon-color: var(--ds-basic-color-texticon-inverse-disabled, #7e8894)}:host([onDark][variant=muted]),:host([appearance=inverse][variant=muted]){--ds-auro-icon-color: var(--ds-basic-color-texticon-inverse-muted, #ccd2db)}:host([onDark][variant=statusError]),:host([appearance=inverse][variant=statusError]){--ds-auro-icon-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8)}
2796
+ `;class _ extends z{constructor(){super(),this._initializeDefaults();}_initializeDefaults(){this.variant=void 0,this.uri="https://cdn.jsdelivr.net/npm/@alaskaairux/icons@latest/dist",this.runtimeUtils=new p;}static get properties(){return {...z.properties,ariaHidden:{type:String,reflect:true},category:{type:String,reflect:true},customColor:{type:Boolean,reflect:true},customSvg:{type:Boolean},label:{type:Boolean,reflect:true},name:{type:String,reflect:true},variant:{type:String,reflect:true}}}static get styles(){return [z.styles,y,w,x]}static register(t="auro-icon"){p.prototype.registerComponent(t,_);}connectedCallback(){super.connectedCallback(),this.runtimeUtils.handleComponentTagRename(this,"auro-icon");}exposeCssParts(){this.setAttribute("exportparts","svg:iconSvg");}async firstUpdated(){if(await super.firstUpdated(),this.hasAttribute("ariaHidden")&&this.svg){const t=this.svg.querySelector("desc");t&&(t.remove(),this.svg.removeAttribute("aria-labelledby"));}}render(){const t={labelWrapper:true,util_displayHiddenVisually:!this.label};return html`
2637
2797
  <div class="componentWrapper">
2638
2798
  <div
2639
2799
  class="${classMap({svgWrapper:true})}"
@@ -2653,7 +2813,7 @@ class p{registerComponent(t,a){customElements.get(t)||customElements.define(t,cl
2653
2813
  </div>
2654
2814
  `}}
2655
2815
 
2656
- var iconVersion = '9.1.1';
2816
+ var iconVersion = '9.1.2';
2657
2817
 
2658
2818
  var styleCss$2 = css`:host{position:fixed;z-index:var(--depth-tooltip, 400);display:none;isolation:isolate}:host(:not([matchWidth])) .container{min-width:fit-content}:host([isfullscreen]){position:fixed;top:0;left:0}:host([isfullscreen]) .container{width:100dvw;max-width:none;height:100dvh;max-height:none;border-radius:unset;margin-top:0;box-shadow:unset;overscroll-behavior:contain}:host([data-show]){display:flex}:host([common]:not([isfullscreen])) .container,:host([rounded]:not([isfullscreen])) .container{border-radius:var(--ds-border-radius, 0.375rem)}:host([common][isfullscreen]) .container,:host([rounded][isfullscreen]) .container{border-radius:unset;box-shadow:unset}:host(:not([isfullscreen])) .container.shape-box{border-radius:unset}:host(:not([isfullscreen])) .container[class*=shape-pill],:host(:not([isfullscreen])) .container[class*=shape-snowflake]{border-radius:30px}:host(:not([isfullscreen])) .container[class*=shape-rounded]{border-radius:16px}.container{display:inline-block;overflow:auto;box-sizing:border-box;border-radius:var(--ds-border-radius, 0.375rem);margin:var(--ds-size-50, 0.25rem) 0}`;
2659
2819
 
@@ -3094,7 +3254,7 @@ class AuroHelpText extends LitElement {
3094
3254
  }
3095
3255
  }
3096
3256
 
3097
- var formkitVersion = '202602060041';
3257
+ var formkitVersion = '202602140013';
3098
3258
 
3099
3259
  class AuroElement extends LitElement {
3100
3260
  static get properties() {
@@ -3322,7 +3482,7 @@ class AuroDropdown extends AuroElement {
3322
3482
  /**
3323
3483
  * @private
3324
3484
  */
3325
- this.iconTag = versioning.generateTag('auro-formkit-dropdown-icon', iconVersion, x);
3485
+ this.iconTag = versioning.generateTag('auro-formkit-dropdown-icon', iconVersion, _);
3326
3486
 
3327
3487
  /**
3328
3488
  * @private
@@ -3389,7 +3549,7 @@ class AuroDropdown extends AuroElement {
3389
3549
  * The value for the role attribute of the trigger element.
3390
3550
  */
3391
3551
  a11yRole: {
3392
- type: String || undefined,
3552
+ type: String,
3393
3553
  attribute: false,
3394
3554
  reflect: false
3395
3555
  },