@tylertech/forge 3.6.3 → 3.7.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 (46) hide show
  1. package/custom-elements.json +69 -28
  2. package/dist/expansion-panel/forge-expansion-panel.css +2 -0
  3. package/dist/lib.js +8 -8
  4. package/dist/lib.js.map +3 -3
  5. package/dist/list/forge-list.css +5 -1
  6. package/dist/vscode.css-custom-data.json +16 -0
  7. package/dist/vscode.html-custom-data.json +4 -4
  8. package/esm/core/utils/utils.d.ts +6 -0
  9. package/esm/core/utils/utils.js +18 -0
  10. package/esm/expansion-panel/expansion-panel.js +1 -1
  11. package/esm/field/base/base-field.d.ts +1 -0
  12. package/esm/field/base/base-field.js +1 -0
  13. package/esm/field/field-constants.d.ts +1 -0
  14. package/esm/field/field-constants.js +1 -0
  15. package/esm/field/field.d.ts +1 -0
  16. package/esm/field/field.js +3 -2
  17. package/esm/list/list-item/list-item.js +1 -1
  18. package/esm/list-dropdown/list-dropdown-constants.d.ts +11 -0
  19. package/esm/list-dropdown/list-dropdown-utils.js +18 -0
  20. package/esm/menu/menu-constants.d.ts +0 -1
  21. package/esm/menu/menu-constants.js +1 -2
  22. package/esm/menu/menu-core.js +1 -1
  23. package/esm/menu/menu.js +2 -1
  24. package/esm/popover/popover-adapter.js +2 -2
  25. package/esm/select/core/base-select-adapter.js +2 -1
  26. package/esm/select/option/option-constants.d.ts +1 -0
  27. package/esm/select/option/option-constants.js +1 -0
  28. package/esm/select/option/option-core.d.ts +4 -1
  29. package/esm/select/option/option-core.js +8 -0
  30. package/esm/select/option/option.d.ts +5 -1
  31. package/esm/select/option/option.js +8 -1
  32. package/esm/select/select/select-core.js +1 -3
  33. package/esm/select/select/select.d.ts +1 -0
  34. package/esm/select/select/select.js +1 -0
  35. package/esm/split-view/split-view-panel/split-view-panel.js +1 -1
  36. package/esm/switch/switch.d.ts +1 -1
  37. package/esm/tabs/tab-bar/tab-bar-core.js +3 -0
  38. package/esm/text-field/text-field.d.ts +1 -0
  39. package/esm/text-field/text-field.js +1 -0
  40. package/esm/time-picker/time-picker-adapter.js +0 -1
  41. package/package.json +1 -1
  42. package/sass/expansion-panel/_core.scss +3 -0
  43. package/sass/field/_core.scss +1 -1
  44. package/sass/field/field.scss +1 -1
  45. package/sass/list/list-item/_core.scss +9 -1
  46. package/sass/list/list-item/list-item.scss +4 -0
@@ -14,7 +14,7 @@ import { WithElementInternals } from '../../core/mixins/internals/with-element-i
14
14
  import { WithDefaultAria } from '../../core/mixins/internals/with-default-aria';
15
15
  import { BaseComponent } from '../../core/base/base-component';
16
16
  const template = '<template><div class=\"forge-list-item\" part=\"root\"><slot name=\"start\"><slot name=\"leading\"></slot></slot><div class=\"text-container\" part=\"text-container\"><slot></slot><slot name=\"secondary-text\"></slot><slot name=\"tertiary-text\"></slot></div><slot name=\"end\"><slot name=\"trailing\"></slot></slot></div></template>';
17
- const styles = ':host{--_list-item-indent:var(--forge-list-item-indent, var(--forge-spacing-xxlarge, 48px));--_list-item-dense-indent:var(--forge-list-item-dense-indent, var(--forge-spacing-xxlarge, 48px));--_list-item-disabled-cursor:var(--forge-list-item-disabled-cursor, not-allowed)}:host{display:block;outline:0}:host([hidden]){display:none}.forge-list-item{--_list-item-background:var(--forge-list-item-background, transparent);--_list-item-shape:var(--forge-list-item-shape, 0);--_list-item-padding:var(--forge-list-item-padding, 0 var(--forge-spacing-medium, 16px));--_list-item-margin:var(--forge-list-item-margin, 0);--_list-item-height:var(--forge-list-item-height, 48px);--_list-item-dense-height:var(--forge-list-item-dense-height, 32px);--_list-item-cursor:var(--forge-list-item-cursor, pointer);--_list-item-gap:var(--forge-list-item-gap, var(--forge-spacing-large, 24px));--_list-item-text-color:var(--forge-list-item-text-color, var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6)));--_list-item-text-font-size:var(--forge-list-item-text-font-size, var(--forge-typography-body2-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-font-size-scale, 1))));--_list-item-text-font-weight:var(--forge-list-item-text-font-weight, var(--forge-typography-body2-font-weight, 400));--_list-item-text-line-height:var(--forge-list-item-text-line-height, 1.5rem);--_list-item-selected-color:var(--forge-list-item-selected-color, var(--forge-theme-primary, #3f51b5));--_list-item-selected-background:var(--forge-list-item-selected-background, var(--_list-item-selected-color));--_list-item-selected-opacity:var(--forge-list-item-selected-opacity, 0.08);--_list-item-selected-start-color:var(--forge-list-item-selected-start-color, var(--_list-item-selected-color));--_list-item-selected-end-color:var(--forge-list-item-selected-end-color, var(--_list-item-selected-color));--_list-item-selected-text-color:var(--forge-list-item-selected-text-color, var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6)));--_list-item-disabled-opacity:var(--forge-list-item-disabled-opacity, 0.38);--_list-item-one-line-height:var(--forge-list-item-one-line-height, var(--_list-item-height));--_list-item-two-line-height:var(--forge-list-item-two-line-height, var(--forge-list-item-height, 72px));--_list-item-three-line-height:var(--forge-list-item-three-line-height, var(--forge-list-item-height, 88px));--_list-item-dense-one-line-height:var(--forge-list-item-dense-one-line-height, var(--_list-item-dense-height));--_list-item-dense-two-line-height:var(--forge-list-item-dense-two-line-height, var(--forge-list-item-dense-height, 56px));--_list-item-dense-three-line-height:var(--forge-list-item-dense-three-line-height, var(--forge-list-item-dense-height, 72px));--_list-item-dense-font-size:var(--forge-list-item-dense-font-size, 0.875rem);--_list-item-dense-gap:var(--forge-list-item-dense-gap, var(--forge-spacing-xsmall, 8px));--_list-item-start-selected-color:var(--forge-list-item-start-selected-color, var(--_list-item-selected-color));--_list-item-end-selected-color:var(--forge-list-item-end-selected-color, var(--_list-item-selected-color));--_list-item-wrap-padding:var(--forge-list-item-wrap-padding, var(--forge-spacing-xsmall, 8px) var(--forge-spacing-medium, 16px))}.forge-list-item{position:relative;display:flex;gap:var(--_list-item-gap);align-items:center;box-sizing:border-box;outline:0;text-decoration:none;border-radius:var(--_list-item-shape);-webkit-tap-highlight-color:transparent;background-color:var(--_list-item-background);height:var(--_list-item-height);min-height:var(--_list-item-height);padding:var(--_list-item-padding);margin:var(--_list-item-margin)}.forge-list-item.interactive{cursor:var(--_list-item-cursor)}.forge-list-item.disabled{cursor:var(--_list-item-disabled-cursor);opacity:var(--_list-item-disabled-opacity)}.forge-list-item.disabled ::slotted(button){cursor:var(--_list-item-disabled-cursor)}.anchor{position:absolute;inset:0}:host([two-line]) .forge-list-item{height:var(--_list-item-two-line-height);min-height:var(--_list-item-two-line-height)}:host([three-line]) .forge-list-item{height:var(--_list-item-three-line-height);min-height:var(--_list-item-three-line-height)}:host([dense]) .forge-list-item{--_list-item-gap:var(--_list-item-dense-gap);height:var(--_list-item-dense-one-line-height);min-height:var(--_list-item-dense-one-line-height)}:host([dense]) .text-container{font-size:var(--_list-item-dense-font-size)}:host([dense][indented]){margin-inline-start:var(--_list-item-dense-indent)}:host([dense][two-line]) .forge-list-item{height:var(--_list-item-dense-two-line-height);min-height:var(--_list-item-dense-two-line-height)}:host([dense][three-line]) .forge-list-item{height:var(--_list-item-dense-three-line-height);min-height:var(--_list-item-dense-three-line-height)}:host([selected]) .forge-list-item{color:var(--_list-item-selected-color)}:host([selected]) .forge-list-item::before{content:\"\";position:absolute;inset:0;border-radius:inherit;opacity:var(--_list-item-selected-opacity);background-color:var(--_list-item-selected-background);pointer-events:none}:host([selected]) .forge-list-item ::slotted([slot=end]),:host([selected]) .forge-list-item ::slotted([slot=leading]),:host([selected]) .forge-list-item ::slotted([slot=start]),:host([selected]) .forge-list-item ::slotted([slot=trailing]){color:var(--_list-item-selected-color);isolation:isolate}:host([selected]) .forge-list-item ::slotted([slot=leading]),:host([selected]) .forge-list-item ::slotted([slot=start]){color:var(--_list-item-start-selected-color)}:host([selected]) .forge-list-item ::slotted([slot=end]),:host([selected]) .forge-list-item ::slotted([slot=trailing]){color:var(--_list-item-end-selected-color)}:host([selected]) .text-container{color:var(--_list-item-selected-color)}:host([selected]) forge-state-layer{--forge-state-layer-color:var(--_list-item-selected-color)}:host([indented]){margin-inline-start:var(--_list-item-indent)}.text-container{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-body2-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));letter-spacing:var(--forge-typography-body2-letter-spacing, .015625em);text-transform:var(--forge-typography-body2-text-transform,inherit);text-decoration:var(--forge-typography-body2-text-decoration,inherit);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-sizing:border-box;isolation:isolate;font-size:var(--_list-item-text-font-size);font-weight:var(--_list-item-text-font-weight);line-height:var(--_list-item-text-line-height);flex:1;contain:layout}slot[name=secondary-text]::slotted(*),slot[name=tertiary-text]::slotted(*){-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-body1-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));font-size:var(--forge-typography-body1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-font-size-scale, .875)));font-weight:var(--forge-typography-body1-font-weight,400);line-height:var(--forge-typography-body1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-line-height-scale, 1.125)));letter-spacing:var(--forge-typography-body1-letter-spacing, .0357142857em);text-transform:var(--forge-typography-body1-text-transform,inherit);text-decoration:var(--forge-typography-body1-text-decoration,inherit);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--_list-item-text-color);display:block}:host([selected]) slot[name=secondary-text]::slotted(*),:host([selected]) slot[name=tertiary-text]::slotted(*){color:var(--_list-item-selected-text-color)}::slotted(:is(button,[role=button][tabindex],[forge-list-item-button])){appearance:none;cursor:var(--_list-item-cursor);border:none;padding-block:0;padding-inline:0;margin:0;box-sizing:border-box;background:0 0;color:inherit;outline:0;font:inherit;user-select:auto;text-align:inherit;letter-spacing:inherit;word-spacing:inherit;display:inline}::slotted(a){outline:0;color:inherit!important;text-decoration:none!important}::slotted([slot=end]),::slotted([slot=leading]),::slotted([slot=start]),::slotted([slot=trailing]){color:var(--_list-item-text-color);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;fill:currentColor}:host(:not([noninteractive])) ::slotted(:is(forge-checkbox,forge-radio,forge-switch):is([slot=start],[slot=end],[slot=leading],[slot=trailing]):not([forge-ignore])){--forge-focus-indicator-display:none;--forge-state-layer-display:none}:host([selected]) ::slotted([slot=leading]),:host([selected]) ::slotted([slot=start]){color:var(--_list-item-start-selected-color)}:host([selected]) ::slotted([slot=end]),:host([selected]) ::slotted([slot=trailing]){color:var(--_list-item-end-selected-color)}:host([wrap]) .forge-list-item{--_list-item-padding:var(--_list-item-wrap-padding);height:auto}:host([wrap]) .text-container{white-space:normal;overflow:visible;text-overflow:clip;line-height:normal}:host([wrap]) slot[name=secondary-text]::slotted(*),:host([wrap]) slot[name=tertiary-text]::slotted(*){white-space:normal;overflow:visible;text-overflow:clip;line-height:normal}forge-focus-indicator{z-index:1;--forge-focus-indicator-shape:calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1))}forge-state-layer{border-radius:inherit}';
17
+ const styles = ':host{--_list-item-indent:var(--forge-list-item-indent, var(--forge-spacing-xxlarge, 48px));--_list-item-dense-indent:var(--forge-list-item-dense-indent, var(--forge-spacing-xxlarge, 48px));--_list-item-disabled-cursor:var(--forge-list-item-disabled-cursor, not-allowed)}:host{display:block;outline:0}:host([hidden]){display:none}.forge-list-item{--_list-item-background:var(--forge-list-item-background, transparent);--_list-item-shape:var(--forge-list-item-shape, 0);--_list-item-padding:var(--forge-list-item-padding, 0 var(--forge-spacing-medium, 16px));--_list-item-margin:var(--forge-list-item-margin, 0);--_list-item-height:var(--forge-list-item-height, 48px);--_list-item-dense-height:var(--forge-list-item-dense-height, 32px);--_list-item-cursor:var(--forge-list-item-cursor, pointer);--_list-item-gap:var(--forge-list-item-gap, var(--forge-spacing-large, 24px));--_list-item-text-color:var(--forge-list-item-text-color, var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6)));--_list-item-text-font-size:var(--forge-list-item-text-font-size, var(--forge-typography-body2-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-font-size-scale, 1))));--_list-item-text-font-weight:var(--forge-list-item-text-font-weight, var(--forge-typography-body2-font-weight, 400));--_list-item-text-line-height:var(--forge-list-item-text-line-height, 1.5rem);--_list-item-selected-color:var(--forge-list-item-selected-color, var(--forge-theme-primary, #3f51b5));--_list-item-selected-background:var(--forge-list-item-selected-background, var(--_list-item-selected-color));--_list-item-selected-opacity:var(--forge-list-item-selected-opacity, 0.08);--_list-item-selected-start-color:var(--forge-list-item-selected-start-color, var(--_list-item-selected-color));--_list-item-selected-end-color:var(--forge-list-item-selected-end-color, var(--_list-item-selected-color));--_list-item-selected-text-color:var(--forge-list-item-selected-text-color, var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6)));--_list-item-disabled-opacity:var(--forge-list-item-disabled-opacity, 0.38);--_list-item-one-line-height:var(--forge-list-item-one-line-height, var(--_list-item-height));--_list-item-two-line-height:var(--forge-list-item-two-line-height, var(--forge-list-item-height, 72px));--_list-item-three-line-height:var(--forge-list-item-three-line-height, var(--forge-list-item-height, 88px));--_list-item-dense-one-line-height:var(--forge-list-item-dense-one-line-height, var(--_list-item-dense-height));--_list-item-dense-two-line-height:var(--forge-list-item-dense-two-line-height, var(--forge-list-item-dense-height, 56px));--_list-item-dense-three-line-height:var(--forge-list-item-dense-three-line-height, var(--forge-list-item-dense-height, 72px));--_list-item-dense-font-size:var(--forge-list-item-dense-font-size, 0.875rem);--_list-item-dense-gap:var(--forge-list-item-dense-gap, var(--forge-spacing-xsmall, 8px));--_list-item-start-selected-color:var(--forge-list-item-start-selected-color, var(--_list-item-selected-color));--_list-item-end-selected-color:var(--forge-list-item-end-selected-color, var(--_list-item-selected-color));--_list-item-wrap-padding:var(--forge-list-item-wrap-padding, var(--forge-spacing-xsmall, 8px) var(--forge-spacing-medium, 16px))}.forge-list-item{position:relative;display:flex;gap:var(--_list-item-gap);align-items:center;box-sizing:border-box;outline:0;text-decoration:none;border-radius:var(--_list-item-shape);-webkit-tap-highlight-color:transparent;background-color:var(--_list-item-background);height:var(--_list-item-height);min-height:var(--_list-item-height);padding:var(--_list-item-padding);margin:var(--_list-item-margin)}.forge-list-item.interactive{cursor:var(--_list-item-cursor)}.forge-list-item.disabled{cursor:var(--_list-item-disabled-cursor);opacity:var(--_list-item-disabled-opacity)}.forge-list-item.disabled ::slotted(button){cursor:var(--_list-item-disabled-cursor)}.anchor{position:absolute;inset:0}:host([two-line]) .forge-list-item{height:var(--_list-item-two-line-height);min-height:var(--_list-item-two-line-height)}:host([three-line]) .forge-list-item{height:var(--_list-item-three-line-height);min-height:var(--_list-item-three-line-height)}:host([dense]) .forge-list-item{--_list-item-gap:var(--_list-item-dense-gap);height:var(--_list-item-dense-one-line-height);min-height:var(--_list-item-dense-one-line-height)}:host([dense]) .text-container{font-size:var(--_list-item-dense-font-size)}:host([dense][indented]){margin-inline-start:var(--_list-item-dense-indent)}:host([dense][two-line]) .forge-list-item{height:var(--_list-item-dense-two-line-height);min-height:var(--_list-item-dense-two-line-height)}:host([dense][three-line]) .forge-list-item{height:var(--_list-item-dense-three-line-height);min-height:var(--_list-item-dense-three-line-height)}:host([selected]) .forge-list-item{color:var(--_list-item-selected-color)}:host([selected]) .forge-list-item::before{content:\"\";position:absolute;inset:0;border-radius:inherit;opacity:var(--_list-item-selected-opacity);background-color:var(--_list-item-selected-background);pointer-events:none}:host([selected]) .forge-list-item ::slotted([slot=end]),:host([selected]) .forge-list-item ::slotted([slot=leading]),:host([selected]) .forge-list-item ::slotted([slot=start]),:host([selected]) .forge-list-item ::slotted([slot=trailing]){color:var(--_list-item-selected-color);isolation:isolate}:host([selected]) .forge-list-item ::slotted([slot=leading]),:host([selected]) .forge-list-item ::slotted([slot=start]){color:var(--_list-item-start-selected-color)}:host([selected]) .forge-list-item ::slotted([slot=end]),:host([selected]) .forge-list-item ::slotted([slot=trailing]){color:var(--_list-item-end-selected-color)}:host([selected]) .text-container{color:var(--_list-item-selected-color)}:host([selected]) forge-state-layer{--forge-state-layer-color:var(--_list-item-selected-color)}:host([indented]){margin-inline-start:var(--_list-item-indent)}.text-container{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-body2-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));letter-spacing:var(--forge-typography-body2-letter-spacing, .015625em);text-transform:var(--forge-typography-body2-text-transform,inherit);text-decoration:var(--forge-typography-body2-text-decoration,inherit);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-sizing:border-box;isolation:isolate;font-size:var(--_list-item-text-font-size);font-weight:var(--_list-item-text-font-weight);line-height:var(--_list-item-text-line-height);flex:1;contain:layout}slot[name=secondary-text]::slotted(*),slot[name=tertiary-text]::slotted(*){-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-body1-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));font-size:var(--forge-typography-body1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-font-size-scale, .875)));font-weight:var(--forge-typography-body1-font-weight,400);line-height:var(--forge-typography-body1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-line-height-scale, 1.125)));letter-spacing:var(--forge-typography-body1-letter-spacing, .0357142857em);text-transform:var(--forge-typography-body1-text-transform,inherit);text-decoration:var(--forge-typography-body1-text-decoration,inherit);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--_list-item-text-color);display:block}:host([selected]) slot[name=secondary-text]::slotted(*),:host([selected]) slot[name=tertiary-text]::slotted(*){color:var(--_list-item-selected-text-color)}::slotted(:is(button,[role=button][tabindex],[forge-list-item-button])){appearance:none;cursor:var(--_list-item-cursor);border:none;padding-block:0;padding-inline:0;margin:0;box-sizing:border-box;width:100%;background:0 0;color:inherit;outline:0;font:inherit;user-select:auto;text-align:inherit;letter-spacing:inherit;word-spacing:inherit;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block}::slotted(a){outline:0;color:inherit!important;text-decoration:none!important}::slotted([slot=end]),::slotted([slot=leading]),::slotted([slot=start]),::slotted([slot=trailing]){color:var(--_list-item-text-color);display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;fill:currentColor}:host(:not([noninteractive])) ::slotted(:is(forge-checkbox,forge-radio,forge-switch):is([slot=start],[slot=end],[slot=leading],[slot=trailing]):not([forge-ignore])){--forge-focus-indicator-display:none;--forge-state-layer-display:none}:host([selected]) ::slotted([slot=leading]),:host([selected]) ::slotted([slot=start]){color:var(--_list-item-start-selected-color)}:host([selected]) ::slotted([slot=end]),:host([selected]) ::slotted([slot=trailing]){color:var(--_list-item-end-selected-color)}:host([wrap]) .forge-list-item{--_list-item-padding:var(--_list-item-wrap-padding);height:auto}:host([wrap]) .text-container{white-space:normal;overflow:visible;text-overflow:clip;line-height:normal}:host([wrap]) ::slotted(:is(button,[role=button][tabindex],[forge-list-item-button])){white-space:normal}:host([wrap]) slot[name=secondary-text]::slotted(*),:host([wrap]) slot[name=tertiary-text]::slotted(*){white-space:normal;overflow:visible;text-overflow:clip;line-height:normal}forge-focus-indicator{z-index:1;--forge-focus-indicator-shape:calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1))}forge-state-layer{border-radius:inherit}';
18
18
  /**
19
19
  * @tag forge-list-item
20
20
  *
@@ -6,6 +6,7 @@
6
6
  import type { IIconComponent } from '../icon';
7
7
  import type { IOverlayOffset } from '../overlay/overlay-constants';
8
8
  import { PositionPlacement } from '../core/utils/position-utils';
9
+ import { TooltipPlacement, TooltipType } from '../tooltip';
9
10
  export declare const LIST_DROPDOWN_CONSTANTS: {
10
11
  attributes: {
11
12
  POPUP_CLASSES: string;
@@ -45,6 +46,7 @@ export interface IBaseListDropdownOption<T = any> {
45
46
  trailingIconComponentProps?: Partial<IIconComponent>;
46
47
  leadingBuilder?: () => HTMLElement;
47
48
  trailingBuilder?: () => HTMLElement;
49
+ tooltip?: ListDropdownTooltipConfig;
48
50
  }
49
51
  export interface IListDropdownOption<T = any> extends IBaseListDropdownOption<T> {
50
52
  options?: Array<IListDropdownOption | IListDropdownOptionGroup>;
@@ -112,3 +114,12 @@ export declare enum ListDropdownAsyncStyle {
112
114
  Spinner = "spinner",
113
115
  Skeleton = "skeleton"
114
116
  }
117
+ export interface ListDropdownTooltipConfig {
118
+ text: string;
119
+ placement?: TooltipPlacement;
120
+ type?: TooltipType;
121
+ delay?: number;
122
+ offset?: number;
123
+ anchor?: string;
124
+ anchorElement?: HTMLElement;
125
+ }
@@ -196,6 +196,24 @@ export function createListItems(config, listElement, options, startIndex = 0, re
196
196
  }
197
197
  }
198
198
  }
199
+ // Check for a tooltip configuration
200
+ if (option.tooltip) {
201
+ const { text, type = 'presentation', ...restConfig } = option.tooltip;
202
+ const tooltipElement = document.createElement('forge-tooltip');
203
+ tooltipElement.id = `list-dropdown-option-${config.id}-${optionIdIndex++}-tooltip`;
204
+ tooltipElement.textContent = option.tooltip.text;
205
+ // We always anchor to the list item element unless an anchor element is provided
206
+ if (!option.tooltip.anchor && !option.tooltip.anchorElement) {
207
+ tooltipElement.anchorElement = listItemElement;
208
+ }
209
+ // We need to attach the tooltip ARIA attributes to the button element, not the anchor element
210
+ if (type === 'label' || type === 'description') {
211
+ const a11yAttr = type === 'label' ? 'aria-labelledby' : 'aria-describedby';
212
+ buttonElement.setAttribute(a11yAttr, tooltipElement.id);
213
+ }
214
+ Object.assign(tooltipElement, restConfig);
215
+ listItemElement.appendChild(tooltipElement);
216
+ }
199
217
  // Check for secondary (subtitle) text
200
218
  if (option.secondaryLabel) {
201
219
  const secondaryLabelElement = document.createElement('span');
@@ -8,7 +8,6 @@ export declare const MENU_CONSTANTS: {
8
8
  elementName: "forge-menu";
9
9
  classes: {
10
10
  POPUP: string;
11
- MENU: string;
12
11
  };
13
12
  selectors: {
14
13
  TOGGLE: string;
@@ -6,8 +6,7 @@
6
6
  import { COMPONENT_NAME_PREFIX } from '../constants';
7
7
  const elementName = `${COMPONENT_NAME_PREFIX}menu`;
8
8
  const classes = {
9
- POPUP: 'forge-menu__popup',
10
- MENU: 'mdc-menu'
9
+ POPUP: 'forge-menu__popup'
11
10
  };
12
11
  const selectors = {
13
12
  TOGGLE: `.${elementName}__toggle,[${elementName}-toggle],forge-button,forge-icon-button,forge-fab,button,[type=button],[role=button],a,forge-list-item,[tabindex]:not([tabindex^="-"])`,
@@ -240,7 +240,7 @@ export class MenuCore extends CascadingListDropdownAwareCore {
240
240
  popupPlacement: this._placement,
241
241
  popupFallbackPlacements: this._fallbackPlacements,
242
242
  activeStartIndex: fromKeyboard ? 0 : undefined,
243
- popupClasses: [MENU_CONSTANTS.classes.POPUP, MENU_CONSTANTS.classes.MENU, ...this._popupClasses],
243
+ popupClasses: [MENU_CONSTANTS.classes.POPUP, ...this._popupClasses],
244
244
  syncWidth: this._syncPopupWidth,
245
245
  activeChangeCallback: this._activeChangeListener,
246
246
  selectCallback: this._selectListener,
package/esm/menu/menu.js CHANGED
@@ -13,6 +13,7 @@ import { PopoverComponent } from '../popover';
13
13
  import { MenuAdapter } from './menu-adapter';
14
14
  import { MENU_CONSTANTS } from './menu-constants';
15
15
  import { MenuCore } from './menu-core';
16
+ import { TooltipComponent } from '../tooltip';
16
17
  const template = '<template><slot></slot></template>';
17
18
  const styles = ':host{display:inline-flex}:host([hidden]){display:none}';
18
19
  /**
@@ -140,7 +141,7 @@ __decorate([
140
141
  MenuComponent = __decorate([
141
142
  customElement({
142
143
  name: MENU_CONSTANTS.elementName,
143
- dependencies: [PopoverComponent, ListComponent]
144
+ dependencies: [PopoverComponent, ListComponent, TooltipComponent]
144
145
  })
145
146
  ], MenuComponent);
146
147
  export { MenuComponent };
@@ -6,7 +6,7 @@
6
6
  import { getShadowElement } from '@tylertech/forge-core';
7
7
  import { prefersReducedMotion } from '../core/utils/feature-detection';
8
8
  import { VirtualElement } from '../core/utils/position-utils';
9
- import { frame } from '../core/utils/utils';
9
+ import { checkVisibility, frame } from '../core/utils/utils';
10
10
  import { OVERLAY_CONSTANTS } from '../overlay';
11
11
  import { OverlayAwareAdapter } from '../overlay/base/overlay-aware-adapter';
12
12
  import { POPOVER_CONSTANTS } from './popover-constants';
@@ -63,7 +63,7 @@ export class PopoverAdapter extends OverlayAwareAdapter {
63
63
  return Promise.resolve();
64
64
  }
65
65
  await frame();
66
- if (!this._surfaceElement.checkVisibility()) {
66
+ if (!checkVisibility(this._surfaceElement)) {
67
67
  this._overlayElement.open = false;
68
68
  this._updateAnchorExpandedState(false);
69
69
  return Promise.resolve();
@@ -81,7 +81,8 @@ export class BaseSelectAdapter extends BaseAdapter {
81
81
  : o.trailingIconType,
82
82
  trailingIconComponentProps: o.trailingIconComponentProps,
83
83
  leadingBuilder: o.leadingBuilder,
84
- trailingBuilder: o.trailingBuilder
84
+ trailingBuilder: o.trailingBuilder,
85
+ tooltip: o.tooltip
85
86
  };
86
87
  });
87
88
  }
@@ -17,6 +17,7 @@ export declare const OPTION_CONSTANTS: {
17
17
  TRAILING_ICON_CLASS: string;
18
18
  TRAILING_ICON_TYPE: string;
19
19
  TRAILING_ICON: string;
20
+ TOOLTIP: string;
20
21
  VALUE: string;
21
22
  };
22
23
  events: {
@@ -17,6 +17,7 @@ const attributes = {
17
17
  TRAILING_ICON_CLASS: 'trailing-icon-class',
18
18
  TRAILING_ICON_TYPE: 'trailing-icon-type',
19
19
  TRAILING_ICON: 'trailing-icon',
20
+ TOOLTIP: 'tooltip',
20
21
  VALUE: 'value'
21
22
  };
22
23
  const events = {
@@ -4,7 +4,7 @@
4
4
  * License: Apache-2.0
5
5
  */
6
6
  import type { IIconComponent } from '../../icon/icon';
7
- import { IBaseListDropdownOption, ListDropdownIconType } from '../../list-dropdown/list-dropdown-constants';
7
+ import { IBaseListDropdownOption, ListDropdownIconType, ListDropdownTooltipConfig } from '../../list-dropdown/list-dropdown-constants';
8
8
  import { IOptionAdapter } from './option-adapter';
9
9
  export interface IOptionCore extends Required<IBaseListDropdownOption> {
10
10
  }
@@ -26,6 +26,7 @@ export declare class OptionCore implements IOptionCore {
26
26
  private _trailingIconComponentProps;
27
27
  private _leadingBuilder;
28
28
  private _trailingBuilder;
29
+ private _tooltip;
29
30
  constructor(_adapter: IOptionAdapter);
30
31
  /** Gets/sets the value of this option. */
31
32
  get value(): any;
@@ -75,4 +76,6 @@ export declare class OptionCore implements IOptionCore {
75
76
  /** Gets/sets the trailing builder of this option. */
76
77
  get trailingBuilder(): () => HTMLElement;
77
78
  set trailingBuilder(value: () => HTMLElement);
79
+ get tooltip(): ListDropdownTooltipConfig;
80
+ set tooltip(value: ListDropdownTooltipConfig);
78
81
  }
@@ -174,4 +174,12 @@ export class OptionCore {
174
174
  this._trailingBuilder = value;
175
175
  }
176
176
  }
177
+ get tooltip() {
178
+ return this._tooltip;
179
+ }
180
+ set tooltip(value) {
181
+ if (this._tooltip !== value) {
182
+ this._tooltip = value;
183
+ }
184
+ }
177
185
  }
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { IIconComponent } from '../../icon';
7
7
  import { BaseComponent, IBaseComponent } from '../../core/base/base-component';
8
- import { IBaseListDropdownOption, ListDropdownIconType } from '../../list-dropdown/list-dropdown-constants';
8
+ import { IBaseListDropdownOption, ListDropdownIconType, ListDropdownTooltipConfig } from '../../list-dropdown/list-dropdown-constants';
9
9
  export interface IOptionComponent extends IBaseComponent, Required<IBaseListDropdownOption> {
10
10
  }
11
11
  declare global {
@@ -101,4 +101,8 @@ export declare class OptionComponent extends BaseComponent implements IOptionCom
101
101
  * Gets/sets the trailing builder of this option.
102
102
  */
103
103
  trailingBuilder: () => HTMLElement;
104
+ /**
105
+ * Gets/sets the tooltip configuration for this option.
106
+ */
107
+ tooltip: ListDropdownTooltipConfig;
104
108
  }
@@ -26,7 +26,8 @@ let OptionComponent = class OptionComponent extends BaseComponent {
26
26
  OPTION_CONSTANTS.attributes.LEADING_ICON_TYPE,
27
27
  OPTION_CONSTANTS.attributes.TRAILING_ICON,
28
28
  OPTION_CONSTANTS.attributes.TRAILING_ICON_CLASS,
29
- OPTION_CONSTANTS.attributes.TRAILING_ICON_TYPE
29
+ OPTION_CONSTANTS.attributes.TRAILING_ICON_TYPE,
30
+ OPTION_CONSTANTS.attributes.TOOLTIP
30
31
  ];
31
32
  }
32
33
  constructor() {
@@ -71,6 +72,9 @@ let OptionComponent = class OptionComponent extends BaseComponent {
71
72
  case OPTION_CONSTANTS.attributes.TRAILING_ICON_TYPE:
72
73
  this.trailingIconType = newValue;
73
74
  break;
75
+ case OPTION_CONSTANTS.attributes.TOOLTIP:
76
+ this.tooltip = newValue ? { text: newValue } : undefined;
77
+ break;
74
78
  }
75
79
  }
76
80
  };
@@ -122,6 +126,9 @@ __decorate([
122
126
  __decorate([
123
127
  coreProperty()
124
128
  ], OptionComponent.prototype, "trailingBuilder", void 0);
129
+ __decorate([
130
+ coreProperty()
131
+ ], OptionComponent.prototype, "tooltip", void 0);
125
132
  OptionComponent = __decorate([
126
133
  customElement({
127
134
  name: OPTION_CONSTANTS.elementName
@@ -119,9 +119,7 @@ export class SelectCore extends BaseSelectCore {
119
119
  // Update the state of the component based on the existence of a selected value
120
120
  const text = this._getSelectedText();
121
121
  this._adapter.setSelectedText(text);
122
- if (!this._open) {
123
- this._tryFloatLabel();
124
- }
122
+ this._tryFloatLabel();
125
123
  }
126
124
  /** Gets/sets the label text. */
127
125
  get label() {
@@ -125,6 +125,7 @@ declare const SelectComponent_base: import("../../constants").AbstractConstructo
125
125
  * @csspart support-text - The support text element.
126
126
  * @csspart support-text - The element containing the support text slot.
127
127
  * @csspart support-text-end - The element containing the support text end slot.
128
+ * @csspart outline - The element containing the forge-focus-indicator element.
128
129
  * @csspart focus-indicator - The focus indicator element.
129
130
  *
130
131
  * @slot value - The selected text to display
@@ -122,6 +122,7 @@ const styles = ':host{display:block;outline:0}:host([hidden]){display:none}forge
122
122
  * @csspart support-text - The support text element.
123
123
  * @csspart support-text - The element containing the support text slot.
124
124
  * @csspart support-text-end - The element containing the support text end slot.
125
+ * @csspart outline - The element containing the forge-focus-indicator element.
125
126
  * @csspart focus-indicator - The focus indicator element.
126
127
  *
127
128
  * @slot value - The selected text to display
@@ -13,7 +13,7 @@ import { SplitViewPanelCore } from './split-view-panel-core';
13
13
  import { SplitViewPanelAdapter } from './split-view-panel-adapter';
14
14
  import { IconComponent, IconRegistry } from '../../icon';
15
15
  const template = '<template><div class=\"forge-split-view-panel\" id=\"root\" part=\"root\"><div class=\"forge-split-view-panel__handle\" id=\"handle\" part=\"handle\" role=\"separator\" aria-controls=\"content\" aria-grabbed=\"false\" tabindex=\"0\"><forge-icon class=\"forge-split-view-panel__icon\" id=\"icon\" part=\"icon\"></forge-icon><forge-state-layer target=\"handle\" id=\"state-layer\" exportparts=\"surface:state-layer\"></forge-state-layer><forge-focus-indicator inward target=\"handle\" part=\"focus-indicator\"></forge-focus-indicator></div><div class=\"forge-split-view-panel__content\" id=\"content\" part=\"content\" role=\"group\"><slot></slot></div></div></template>';
16
- const styles = '.forge-split-view-panel{display:flex;width:100%;height:100%;overflow:hidden}.forge-split-view-panel__handle{color:var(--forge-theme-text-medium,rgba(0,0,0,.6));background-color:var(--forge-theme-outline,#e0e0e0);position:relative;display:flex;flex-shrink:0;justify-content:center;align-items:center;outline:0}.forge-split-view-panel__content{flex:1;overflow:hidden}.forge-split-view-panel--closed{display:none}.forge-split-view-panel--disabled #handle{pointer-events:none}.forge-split-view-panel--disabled .forge-split-view-panel__icon{display:none}.forge-split-view-panel[orientation=horizontal]{min-width:var(--forge-split-view-handle-width,8px);width:calc(var(--forge-split-view-panel-size,unset) + var(--forge-split-view-handle-width,8px));flex-direction:row}.forge-split-view-panel[orientation=horizontal] .forge-split-view-panel__handle{width:var(--forge-split-view-handle-width,8px);cursor:var(--forge-split-view-panel-cursor)}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--closing[resizable=end]{position:absolute;top:0;left:0;animation-name:uxbrlv3;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes uxbrlv3{from{transform:none}to{transform:translateX(-100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--closing[resizable=start]{position:absolute;top:0;right:0;animation-name:uxbrlvc;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes uxbrlvc{from{transform:none}to{transform:translateX(100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--opening[resizable=end]{position:absolute;top:0;left:0;animation-name:uxbrlw6;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes uxbrlw6{from{transform:none}to{transform:translateX(-100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--opening[resizable=start]{position:absolute;top:0;right:0;animation-name:uxbrlwb;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes uxbrlwb{from{transform:none}to{transform:translateX(100%)}}.forge-split-view-panel[orientation=vertical]{min-height:var(--forge-split-view-handle-width,8px);height:calc(var(--forge-split-view-panel-size,unset) + var(--forge-split-view-handle-width,8px));flex-direction:column}.forge-split-view-panel[orientation=vertical] .forge-split-view-panel__handle{height:var(--forge-split-view-handle-width,8px);cursor:var(--forge-split-view-panel-cursor)}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--closing[resizable=end]{position:absolute;top:0;left:0;animation-name:uxbrlwu;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes uxbrlwu{from{transform:none}to{transform:translateY(-100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--closing[resizable=start]{position:absolute;bottom:0;left:0;animation-name:uxbrlxq;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes uxbrlxq{from{transform:none}to{transform:translateY(100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--opening[resizable=end]{position:absolute;top:0;left:0;animation-name:uxbrlyb;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes uxbrlyb{from{transform:none}to{transform:translateY(-100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--opening[resizable=start]{position:absolute;bottom:0;left:0;animation-name:uxbrlyn;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes uxbrlyn{from{transform:none}to{transform:translateY(100%)}}:host{z-index:var(--forge-split-view-animating-layer)!important;display:block;position:relative;height:100%;width:100%;flex:0}:host([hidden]){display:none}:host(:not([resizable=start],[resizable=end])){flex:1}:host(:not([resizable=start],[resizable=end])) .forge-split-view-panel{width:100%;height:100%;min-width:0;min-height:0}:host(:not([resizable=start],[resizable=end])) .forge-split-view-panel__handle{display:none}forge-focus-indicator{--forge-focus-indicator-active-width:2px}';
16
+ const styles = '.forge-split-view-panel{display:flex;width:100%;height:100%;overflow:hidden}.forge-split-view-panel__handle{color:var(--forge-theme-text-medium,rgba(0,0,0,.6));background-color:var(--forge-theme-outline,#e0e0e0);position:relative;display:flex;flex-shrink:0;justify-content:center;align-items:center;outline:0}.forge-split-view-panel__content{flex:1;overflow:hidden}.forge-split-view-panel--closed{display:none}.forge-split-view-panel--disabled #handle{pointer-events:none}.forge-split-view-panel--disabled .forge-split-view-panel__icon{display:none}.forge-split-view-panel[orientation=horizontal]{min-width:var(--forge-split-view-handle-width,8px);width:calc(var(--forge-split-view-panel-size,unset) + var(--forge-split-view-handle-width,8px));flex-direction:row}.forge-split-view-panel[orientation=horizontal] .forge-split-view-panel__handle{width:var(--forge-split-view-handle-width,8px);cursor:var(--forge-split-view-panel-cursor)}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--closing[resizable=end]{position:absolute;top:0;left:0;animation-name:u58y6y0;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes u58y6y0{from{transform:none}to{transform:translateX(-100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--closing[resizable=start]{position:absolute;top:0;right:0;animation-name:u58y6y5;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes u58y6y5{from{transform:none}to{transform:translateX(100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--opening[resizable=end]{position:absolute;top:0;left:0;animation-name:u58y6yu;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes u58y6yu{from{transform:none}to{transform:translateX(-100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--opening[resizable=start]{position:absolute;top:0;right:0;animation-name:u58y6z1;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes u58y6z1{from{transform:none}to{transform:translateX(100%)}}.forge-split-view-panel[orientation=vertical]{min-height:var(--forge-split-view-handle-width,8px);height:calc(var(--forge-split-view-panel-size,unset) + var(--forge-split-view-handle-width,8px));flex-direction:column}.forge-split-view-panel[orientation=vertical] .forge-split-view-panel__handle{height:var(--forge-split-view-handle-width,8px);cursor:var(--forge-split-view-panel-cursor)}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--closing[resizable=end]{position:absolute;top:0;left:0;animation-name:u58y6zf;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes u58y6zf{from{transform:none}to{transform:translateY(-100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--closing[resizable=start]{position:absolute;bottom:0;left:0;animation-name:u58y706;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes u58y706{from{transform:none}to{transform:translateY(100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--opening[resizable=end]{position:absolute;top:0;left:0;animation-name:u58y713;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes u58y713{from{transform:none}to{transform:translateY(-100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--opening[resizable=start]{position:absolute;bottom:0;left:0;animation-name:u58y722;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes u58y722{from{transform:none}to{transform:translateY(100%)}}:host{z-index:var(--forge-split-view-animating-layer)!important;display:block;position:relative;height:100%;width:100%;flex:0}:host([hidden]){display:none}:host(:not([resizable=start],[resizable=end])){flex:1}:host(:not([resizable=start],[resizable=end])) .forge-split-view-panel{width:100%;height:100%;min-width:0;min-height:0}:host(:not([resizable=start],[resizable=end])) .forge-split-view-panel__handle{display:none}forge-focus-indicator{--forge-focus-indicator-active-width:2px}';
17
17
  import { StateLayerComponent } from '../../state-layer';
18
18
  import { FocusIndicatorComponent } from '../../focus-indicator';
19
19
  /**
@@ -16,7 +16,7 @@ export interface ISwitchComponent extends IWithFormAssociation, IWithFocusable,
16
16
  checked: boolean;
17
17
  /** @deprecated use `checked` instead */
18
18
  on: boolean;
19
- /** @deprecated use `on` instead */
19
+ /** @deprecated use `checked` instead */
20
20
  selected: boolean;
21
21
  defaultChecked: boolean;
22
22
  /** @deprecated use `defaultChecked` instead */
@@ -49,6 +49,9 @@ export class TabBarCore {
49
49
  async _onTabsChanged() {
50
50
  this._tabs = this._adapter.getTabs();
51
51
  this._syncTabState();
52
+ if (this._scrollButtons) {
53
+ this._detectScrollableStatus();
54
+ }
52
55
  this._tryScrollActiveTabIntoView();
53
56
  }
54
57
  _onTabSelected(evt) {
@@ -47,6 +47,7 @@ declare global {
47
47
  * @csspart support-text - The support text element.
48
48
  * @csspart support-text - The element containing the support text slot.
49
49
  * @csspart support-text-end - The element containing the support text end slot.
50
+ * @csspart outline - The element containing the forge-focus-indicator element.
50
51
  * @csspart focus-indicator - The focus indicator element.
51
52
  *
52
53
  * @slot - The default/unnamed slot for the field's input.
@@ -46,6 +46,7 @@ const styles = ':host{display:block}:host([hidden]){display:none}forge-field{dis
46
46
  * @csspart support-text - The support text element.
47
47
  * @csspart support-text - The element containing the support text slot.
48
48
  * @csspart support-text-end - The element containing the support text end slot.
49
+ * @csspart outline - The element containing the forge-focus-indicator element.
49
50
  * @csspart focus-indicator - The focus indicator element.
50
51
  *
51
52
  * @slot - The default/unnamed slot for the field's input.
@@ -85,7 +85,6 @@ export class TimePickerAdapter extends BaseAdapter {
85
85
  iconButtonElement.density = 'medium';
86
86
  iconButtonElement.type = 'button';
87
87
  iconButtonElement.tabIndex = -1;
88
- iconButtonElement.style.marginRight = '4px'; // Override default trailing slot margin in text-field
89
88
  iconButtonElement.setAttribute('aria-label', 'Toggle time dropdown');
90
89
  const iconElement = document.createElement(ICON_CONSTANTS.elementName);
91
90
  iconElement.name = 'clock_outline';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tylertech/forge",
3
3
  "description": "Tyler Forge™ Web Components library",
4
- "version": "3.6.3",
4
+ "version": "3.7.0",
5
5
  "author": "Tyler Technologies, Inc.",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {
@@ -28,6 +28,9 @@
28
28
  min-height: 0;
29
29
 
30
30
  opacity: 0;
31
+
32
+ transform: translate3d(0, 0, 0);
33
+ backface-visibility: hidden;
31
34
  }
32
35
 
33
36
  @mixin inner {
@@ -24,7 +24,7 @@
24
24
 
25
25
  @mixin base {
26
26
  /* Internal custom properties */
27
- @include override(disableable-cursor, unset, value);
27
+ @include override(disableable-cursor, auto, value);
28
28
  @include override(disableable-opacity, 1, value);
29
29
  @include override(inner-border-block-size, 100%, value);
30
30
  @include override(inner-border-color, #{token(outline-color, custom)}, value);
@@ -241,7 +241,7 @@ $variants: (
241
241
  //
242
242
 
243
243
  :host([required]) {
244
- .label::before {
244
+ .has-label .label::before {
245
245
  @include core.label-before;
246
246
  }
247
247
  }
@@ -43,6 +43,7 @@
43
43
  padding-inline: 0;
44
44
  margin: 0;
45
45
  box-sizing: border-box;
46
+ width: 100%;
46
47
 
47
48
  background: transparent;
48
49
  color: inherit;
@@ -53,8 +54,15 @@
53
54
  text-align: inherit;
54
55
  letter-spacing: inherit;
55
56
  word-spacing: inherit;
57
+ white-space: nowrap;
58
+ text-overflow: ellipsis;
59
+ overflow: hidden;
56
60
 
57
- display: inline;
61
+ display: block;
62
+ }
63
+
64
+ @mixin button-wrap {
65
+ white-space: normal;
58
66
  }
59
67
 
60
68
  @mixin anchor {
@@ -216,6 +216,10 @@ slot[name='tertiary-text'] {
216
216
  @include text-container-wrap;
217
217
  }
218
218
 
219
+ ::slotted(:is(button, [role='button'][tabindex], [forge-list-item-button])) {
220
+ @include button-wrap;
221
+ }
222
+
219
223
  slot[name='secondary-text'],
220
224
  slot[name='tertiary-text'] {
221
225
  &::slotted(*) {