@tylertech/forge 3.9.0 → 3.9.2

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 (82) hide show
  1. package/custom-elements.json +22 -20
  2. package/dist/badge/forge-badge.css +1 -1
  3. package/dist/forge.css +0 -1
  4. package/dist/lib.js +7 -7
  5. package/dist/lib.js.map +3 -3
  6. package/dist/table/forge-table.css +0 -1
  7. package/esm/autocomplete/autocomplete-core.js +9 -12
  8. package/esm/autocomplete/autocomplete-utils.js +3 -2
  9. package/esm/badge/badge.js +1 -1
  10. package/esm/button/base/base-button-adapter.js +6 -5
  11. package/esm/button/base/base-button-constants.d.ts +2 -2
  12. package/esm/button-area/button-area-adapter.d.ts +0 -2
  13. package/esm/button-area/button-area-adapter.js +5 -3
  14. package/esm/button-area/button-area-core.js +0 -1
  15. package/esm/button-area/button-area.js +1 -1
  16. package/esm/button-toggle/button-toggle-group/button-toggle-group-core.js +0 -1
  17. package/esm/calendar/calendar-core.js +6 -4
  18. package/esm/calendar/calendar-dropdown/calendar-dropdown.js +1 -1
  19. package/esm/calendar/calendar-utils.js +1 -3
  20. package/esm/calendar/calendar.js +1 -1
  21. package/esm/color-picker/color-picker-core.js +6 -5
  22. package/esm/color-picker/color-picker-gradient-slider.d.ts +1 -1
  23. package/esm/color-picker/color-picker-gradient-slider.js +19 -30
  24. package/esm/core/configuration/global-configuration.js +0 -1
  25. package/esm/core/mixins/form/with-form-associated.js +6 -2
  26. package/esm/core/utils/a11y-utils.d.ts +2 -2
  27. package/esm/core/utils/date-utils.js +1 -1
  28. package/esm/core/utils/dismissible-stack.js +0 -1
  29. package/esm/core/utils/feature-detection.js +2 -2
  30. package/esm/date-picker/base/base-date-picker-adapter.d.ts +2 -1
  31. package/esm/date-picker/base/base-date-picker-adapter.js +4 -0
  32. package/esm/date-picker/base/base-date-picker-core.js +2 -4
  33. package/esm/date-picker/base/base-date-picker-utils.d.ts +2 -1
  34. package/esm/date-picker/date-picker-adapter.js +1 -1
  35. package/esm/date-picker/date-picker-core.js +2 -1
  36. package/esm/date-range-picker/date-range-picker-adapter.d.ts +2 -1
  37. package/esm/date-range-picker/date-range-picker-adapter.js +1 -1
  38. package/esm/date-range-picker/date-range-picker-core.js +4 -5
  39. package/esm/deprecated/icon-button/deprecated-icon-button-component-delegate.js +2 -1
  40. package/esm/dialog/dialog.js +1 -1
  41. package/esm/expansion-panel/expansion-panel-core.d.ts +4 -0
  42. package/esm/expansion-panel/expansion-panel-core.js +19 -11
  43. package/esm/field/field-core.js +2 -1
  44. package/esm/field/field.js +1 -1
  45. package/esm/file-picker/file-picker-core.js +1 -3
  46. package/esm/floating-action-button/floating-action-button-component-delegate.js +2 -1
  47. package/esm/icon/icon-core.js +1 -1
  48. package/esm/icon/icon-registry.js +1 -1
  49. package/esm/icon-button/icon-button-component-delegate.js +2 -1
  50. package/esm/label/label-aware.js +1 -3
  51. package/esm/list-dropdown/list-dropdown-core.js +4 -2
  52. package/esm/list-dropdown/list-dropdown-utils.js +6 -3
  53. package/esm/menu/menu-core.js +5 -6
  54. package/esm/menu/menu.js +2 -2
  55. package/esm/overlay/overlay-constants.d.ts +1 -1
  56. package/esm/overlay/overlay-constants.js +1 -1
  57. package/esm/overlay/overlay.d.ts +2 -2
  58. package/esm/overlay/overlay.js +2 -2
  59. package/esm/select/core/base-select-adapter.js +0 -1
  60. package/esm/select/core/base-select-core.js +70 -74
  61. package/esm/select/core/select-utils.d.ts +1 -1
  62. package/esm/select/core/select-utils.js +2 -2
  63. package/esm/select/select-dropdown/select-dropdown-adapter.js +1 -3
  64. package/esm/split-view/split-view-panel/split-view-panel.js +1 -1
  65. package/esm/table/table-utils.js +10 -12
  66. package/esm/tabs/tab-bar/tab-bar-core.js +2 -1
  67. package/esm/text-field/text-field-adapter.js +1 -3
  68. package/esm/time-picker/time-picker-core.js +5 -5
  69. package/esm/toast/toast-adapter.js +1 -1
  70. package/esm/toast/toast-core.js +1 -1
  71. package/esm/toast/toast.js +2 -1
  72. package/esm/tooltip/tooltip-adapter.d.ts +7 -0
  73. package/esm/tooltip/tooltip-adapter.js +10 -0
  74. package/esm/tooltip/tooltip-constants.d.ts +1 -0
  75. package/esm/tooltip/tooltip-constants.js +2 -1
  76. package/esm/tooltip/tooltip-core.js +3 -0
  77. package/esm/tooltip/tooltip.js +1 -1
  78. package/esm/view-switcher/view-switcher-core.js +2 -1
  79. package/package.json +1 -1
  80. package/sass/core/styles/tokens/badge/_tokens.scss +1 -1
  81. package/sass/table/forge-table.scss +0 -1
  82. package/sass/utils/_mixins.scss +7 -8
@@ -65,7 +65,6 @@ forge-table {
65
65
  }
66
66
  .forge-table--filter-visible .forge-table-head__row .forge-table-head__cell {
67
67
  border: none;
68
- vertical-align: bottom;
69
68
  }
70
69
  .forge-table-head__row {
71
70
  height: 48px;
@@ -276,7 +276,7 @@ export class AutocompleteCore extends ListDropdownAwareCore {
276
276
  }
277
277
  break;
278
278
  case 'Backspace':
279
- case 'Delete':
279
+ case 'Delete': {
280
280
  const input = evt.target;
281
281
  const value = this._adapter.getInputValue();
282
282
  const isRemovingAllChars = input.value.substring(input.selectionStart, input.selectionEnd) === input.value;
@@ -288,6 +288,7 @@ export class AutocompleteCore extends ListDropdownAwareCore {
288
288
  this._clearValue();
289
289
  }
290
290
  break;
291
+ }
291
292
  }
292
293
  }
293
294
  _executeFilter(sendFilterText = true, sendValue = false) {
@@ -297,14 +298,12 @@ export class AutocompleteCore extends ListDropdownAwareCore {
297
298
  const filter = this._filter;
298
299
  const filterText = sendFilterText ? this._filterText : '';
299
300
  const value = sendValue ? this._getValue() : null;
300
- return new Promise((resolve, reject) => {
301
- return Promise.resolve(filter(filterText, value))
302
- .then(options => {
303
- this._options = options;
304
- resolve(this._options);
305
- })
306
- .catch(e => reject(`An unexpected error occurred while filtering: ${e}`));
307
- });
301
+ return new Promise((resolve, reject) => Promise.resolve(filter(filterText, value))
302
+ .then(options => {
303
+ this._options = options;
304
+ resolve(this._options);
305
+ })
306
+ .catch(e => reject(`An unexpected error occurred while filtering: ${e}`)));
308
307
  }
309
308
  _onFilterComplete() {
310
309
  if (!this._adapter.hasFocus()) {
@@ -342,9 +341,7 @@ export class AutocompleteCore extends ListDropdownAwareCore {
342
341
  let listOptionBuilder;
343
342
  if (this._optionBuilder) {
344
343
  const optionBuilder = this._optionBuilder;
345
- listOptionBuilder = (option, parentElement) => {
346
- return optionBuilder(option, this._filterText, parentElement);
347
- };
344
+ listOptionBuilder = (option, parentElement) => optionBuilder(option, this._filterText, parentElement);
348
345
  }
349
346
  const config = {
350
347
  options: this._options,
@@ -16,8 +16,9 @@ export var OptionType;
16
16
  * @param type The type of option to detect.
17
17
  */
18
18
  export function isOptionType(options, type) {
19
- const isOptionGroups = options.some((o) => isDefined(o) && isObject(o) && o.hasOwnProperty('options') && (o.hasOwnProperty('text') || o.hasOwnProperty('builder')));
20
- const isOptionTypes = options.some((o) => isDefined(o) && isObject(o) && o.hasOwnProperty('label') && o.hasOwnProperty('value'));
19
+ const optionHasProperty = (o, prop) => Object.prototype.hasOwnProperty.call(o, prop);
20
+ const isOptionGroups = options.some((o) => isDefined(o) && isObject(o) && optionHasProperty(o, 'options') && (optionHasProperty(o, 'text') || optionHasProperty(o, 'builder')));
21
+ const isOptionTypes = options.some((o) => isDefined(o) && isObject(o) && optionHasProperty(o, 'label') && optionHasProperty(o, 'value'));
21
22
  return (isOptionGroups && type === OptionType.Group) || (isOptionTypes && type === OptionType.Option);
22
23
  }
23
24
  /** A utility function to find the matching option in the provided options by the value provided. */
@@ -10,7 +10,7 @@ import { customElement, property } from 'lit/decorators.js';
10
10
  import { toggleState } from '../core/utils/utils';
11
11
  import { CUSTOM_ELEMENT_NAME_PROPERTY } from '@tylertech/forge-core';
12
12
  import { BaseLitElement } from '../core/base/base-lit-element';
13
- const styles = ':host{display:flex;box-sizing:border-box}:host([hidden]){display:none}.forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-secondary, #ffc107));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-secondary, #000000));--_badge-shape:var(--forge-badge-shape, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)));--_badge-height:var(--forge-badge-height, 20px);--_badge-min-width:var(--forge-badge-min-width, 0);--_badge-max-width:var(--forge-badge-max-width, auto);--_badge-padding-inline:var(--forge-badge-padding-inline, var(--forge-spacing-xsmall, 8px));--_badge-padding-block:var(--forge-badge-padding-block, 0);--_badge-border-width:var(--forge-badge-border-width, var(--forge-border-thin, 1px));--_badge-border-style:var(--forge-badge-border-style, none);--_badge-border-color:var(--forge-badge-border-color, var(--_badge-color));--_badge-gap:var(--forge-badge-gap, var(--forge-spacing-xsmall, 8px));--_badge-font-weight:var(--forge-badge-font-weight, bold);--_badge-dot-size:var(--forge-badge-dot-size, 8px);--_badge-dot-height:var(--forge-badge-dot-height, var(--_badge-dot-size));--_badge-dot-width:var(--forge-badge-dot-width, var(--_badge-dot-size));--_badge-dot-padding:var(--forge-badge-dot-padding, 0);--_badge-transition-duration:var(--forge-badge-transition-duration, var(--forge-animation-duration-short4, 200ms));--_badge-transition-easing:var(--forge-badge-transition-easing, var(--forge-animation-easing-decelerate, cubic-bezier(0, 0, 0, 1)))}.forge-badge{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-label1-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));font-size:var(--forge-typography-label1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, .75)));font-weight:var(--forge-typography-label1-font-weight,400);line-height:var(--forge-typography-label1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));letter-spacing:var(--forge-typography-label1-letter-spacing, .0357142857em);text-transform:var(--forge-typography-label1-text-transform,inherit);text-decoration:var(--forge-typography-label1-text-decoration,inherit);background:var(--_badge-background);color:var(--_badge-color);height:var(--_badge-height);min-width:var(--_badge-min-width);max-width:var(--_badge-max-width);border-width:var(--_badge-border-width);border-style:var(--_badge-border-style);border-color:var(--_badge-border-color);display:inline-flex;align-items:center;gap:var(--_badge-gap);border-radius:var(--_badge-shape);padding-inline:var(--_badge-padding-inline);padding-block:var(--_badge-padding-block);overflow:hidden;box-sizing:border-box;pointer-events:none;transition:transform var(--_badge-transition-duration) var(--_badge-transition-easing);font-weight:var(--_badge-font-weight);text-overflow:ellipsis;white-space:nowrap}.forge-badge .content{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::slotted(:is([slot=start],[slot=end])){font-size:inherit}:host(:where([hide],:state(hidden))) .forge-badge{transform:scale(0)}:host(:where([dot],:state(dot))) .forge-badge{--_badge-height:var(--_badge-dot-height);--_badge-min-width:var(--forge-badge-min-width, auto);padding:var(--_badge-dot-padding);width:var(--_badge-dot-width)}:host(:where([dot],:state(dot))) .content>slot{display:none}:host([theme=primary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-primary-container, #d1d5ed));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-primary-container, #222c62))}:host(:where([strong],:state(strong))[theme=primary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-primary, #3f51b5));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-primary, #ffffff))}:host([theme=secondary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-secondary-container, #fff0c3));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-secondary-container, #8a6804))}:host(:where([strong],:state(strong))[theme=secondary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-secondary, #ffc107));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-secondary, #000000))}:host([theme=tertiary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-tertiary-container, #d0d7ff));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-tertiary-container, #213189))}:host(:where([strong],:state(strong))[theme=tertiary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-tertiary, #3d5afe));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-tertiary, #ffffff))}:host([theme=success]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-success-container, #cde0ce));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-success-container, #19441b))}:host(:where([strong],:state(strong))[theme=success]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-success, #2e7d32));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-success, #ffffff))}:host([theme=warning]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-warning-container, #f4d3c2));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-warning-container, #712700))}:host(:where([strong],:state(strong))[theme=warning]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-warning, #d14900));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-warning, #ffffff))}:host(:not(:where([strong],:state(strong))):is([theme=error],[theme=danger])) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-error-container-low, #f6e0e4));--_badge-color:var(--forge-badge-color, var(--forge-theme-error, #b00020))}:host(:where([strong],:state(strong)):is([theme=error],[theme=danger])) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-error, #b00020));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-error, #ffffff))}:host(:not(:where([strong],:state(strong))):is([theme=info],[theme=info-primary])) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-info-container, #c7daf0));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-info-container, #0b3768))}:host(:where([strong],:state(strong)):is([theme=info],[theme=info-primary])) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-info, #1565c0));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-info, #ffffff))}:host(:not(:where([strong],:state(strong)))[theme=info-secondary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-surface-container-low, #ebebeb));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-surface-container-low, #000000))}:host(:where([strong],:state(strong))[theme=info-secondary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-surface-inverse, #333333));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-surface-inverse, #ffffff))}';
13
+ const styles = ':host{display:flex;box-sizing:border-box}:host([hidden]){display:none}.forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-secondary, #ffc107));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-secondary, #000000));--_badge-shape:var(--forge-badge-shape, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)));--_badge-height:var(--forge-badge-height, 20px);--_badge-min-width:var(--forge-badge-min-width, 0);--_badge-max-width:var(--forge-badge-max-width, auto);--_badge-padding-inline:var(--forge-badge-padding-inline, var(--forge-spacing-xsmall, 8px));--_badge-padding-block:var(--forge-badge-padding-block, 0);--_badge-border-width:var(--forge-badge-border-width, var(--forge-border-thin, 1px));--_badge-border-style:var(--forge-badge-border-style, none);--_badge-border-color:var(--forge-badge-border-color, var(--_badge-color));--_badge-gap:var(--forge-badge-gap, var(--forge-spacing-xxsmall, 4px));--_badge-font-weight:var(--forge-badge-font-weight, bold);--_badge-dot-size:var(--forge-badge-dot-size, 8px);--_badge-dot-height:var(--forge-badge-dot-height, var(--_badge-dot-size));--_badge-dot-width:var(--forge-badge-dot-width, var(--_badge-dot-size));--_badge-dot-padding:var(--forge-badge-dot-padding, 0);--_badge-transition-duration:var(--forge-badge-transition-duration, var(--forge-animation-duration-short4, 200ms));--_badge-transition-easing:var(--forge-badge-transition-easing, var(--forge-animation-easing-decelerate, cubic-bezier(0, 0, 0, 1)))}.forge-badge{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-label1-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));font-size:var(--forge-typography-label1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, .75)));font-weight:var(--forge-typography-label1-font-weight,400);line-height:var(--forge-typography-label1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));letter-spacing:var(--forge-typography-label1-letter-spacing, .0357142857em);text-transform:var(--forge-typography-label1-text-transform,inherit);text-decoration:var(--forge-typography-label1-text-decoration,inherit);background:var(--_badge-background);color:var(--_badge-color);height:var(--_badge-height);min-width:var(--_badge-min-width);max-width:var(--_badge-max-width);border-width:var(--_badge-border-width);border-style:var(--_badge-border-style);border-color:var(--_badge-border-color);display:inline-flex;align-items:center;gap:var(--_badge-gap);border-radius:var(--_badge-shape);padding-inline:var(--_badge-padding-inline);padding-block:var(--_badge-padding-block);overflow:hidden;box-sizing:border-box;pointer-events:none;transition:transform var(--_badge-transition-duration) var(--_badge-transition-easing);font-weight:var(--_badge-font-weight);text-overflow:ellipsis;white-space:nowrap}.forge-badge .content{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::slotted(:is([slot=start],[slot=end])){font-size:inherit}:host(:where([hide],:state(hidden))) .forge-badge{transform:scale(0)}:host(:where([dot],:state(dot))) .forge-badge{--_badge-height:var(--_badge-dot-height);--_badge-min-width:var(--forge-badge-min-width, auto);padding:var(--_badge-dot-padding);width:var(--_badge-dot-width)}:host(:where([dot],:state(dot))) .content>slot{display:none}:host([theme=primary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-primary-container, #d1d5ed));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-primary-container, #222c62))}:host(:where([strong],:state(strong))[theme=primary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-primary, #3f51b5));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-primary, #ffffff))}:host([theme=secondary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-secondary-container, #fff0c3));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-secondary-container, #8a6804))}:host(:where([strong],:state(strong))[theme=secondary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-secondary, #ffc107));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-secondary, #000000))}:host([theme=tertiary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-tertiary-container, #d0d7ff));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-tertiary-container, #213189))}:host(:where([strong],:state(strong))[theme=tertiary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-tertiary, #3d5afe));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-tertiary, #ffffff))}:host([theme=success]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-success-container, #cde0ce));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-success-container, #19441b))}:host(:where([strong],:state(strong))[theme=success]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-success, #2e7d32));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-success, #ffffff))}:host([theme=warning]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-warning-container, #f4d3c2));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-warning-container, #712700))}:host(:where([strong],:state(strong))[theme=warning]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-warning, #d14900));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-warning, #ffffff))}:host(:not(:where([strong],:state(strong))):is([theme=error],[theme=danger])) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-error-container-low, #f6e0e4));--_badge-color:var(--forge-badge-color, var(--forge-theme-error, #b00020))}:host(:where([strong],:state(strong)):is([theme=error],[theme=danger])) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-error, #b00020));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-error, #ffffff))}:host(:not(:where([strong],:state(strong))):is([theme=info],[theme=info-primary])) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-info-container, #c7daf0));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-info-container, #0b3768))}:host(:where([strong],:state(strong)):is([theme=info],[theme=info-primary])) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-info, #1565c0));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-info, #ffffff))}:host(:not(:where([strong],:state(strong)))[theme=info-secondary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-surface-container-low, #ebebeb));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-surface-container-low, #000000))}:host(:where([strong],:state(strong))[theme=info-secondary]) .forge-badge{--_badge-background:var(--forge-badge-background, var(--forge-theme-surface-inverse, #333333));--_badge-color:var(--forge-badge-color, var(--forge-theme-on-surface-inverse, #ffffff))}';
14
14
  export const BADGE_TAG_NAME = 'forge-badge';
15
15
  /**
16
16
  * @tag forge-badge
@@ -30,19 +30,19 @@ export class BaseButtonAdapter extends BaseAdapter {
30
30
  initialize() {
31
31
  const slottedAnchor = this.getSlottedAnchor;
32
32
  this._component[setDefaultAria]({
33
- role: !!slottedAnchor ? null : 'button'
33
+ role: slottedAnchor ? null : 'button'
34
34
  }, {
35
35
  setAttribute: !this._component.hasAttribute('role') || !!slottedAnchor
36
36
  });
37
37
  this._rootElement.classList.toggle(BASE_BUTTON_CONSTANTS.classes.WITH_ANCHOR, !!slottedAnchor);
38
- if (!!slottedAnchor) {
38
+ if (slottedAnchor) {
39
39
  this._component.removeAttribute('tabindex');
40
40
  }
41
41
  else if (!this._component.disabled && !this._component.hasAttribute('tabindex')) {
42
42
  this._component.setAttribute('tabindex', '0');
43
43
  }
44
- this._focusIndicatorElement.targetElement = !!slottedAnchor ? slottedAnchor : this._component;
45
- this._stateLayerElement.targetElement = !!slottedAnchor ? slottedAnchor : this._component;
44
+ this._focusIndicatorElement.targetElement = slottedAnchor ? slottedAnchor : this._component;
45
+ this._stateLayerElement.targetElement = slottedAnchor ? slottedAnchor : this._component;
46
46
  }
47
47
  setDisabled(value) {
48
48
  if (value) {
@@ -136,7 +136,7 @@ export class BaseButtonAdapter extends BaseAdapter {
136
136
  }
137
137
  return false;
138
138
  case 'toggle':
139
- default:
139
+ default: {
140
140
  const result = popoverElement.togglePopover();
141
141
  // When the popover is open and is using an "auto" popover mode, we need to handle
142
142
  // clicking ourselves again to close without re-opening the popover. We do this by
@@ -158,6 +158,7 @@ export class BaseButtonAdapter extends BaseAdapter {
158
158
  }, { once: true });
159
159
  }
160
160
  return result;
161
+ }
161
162
  }
162
163
  }
163
164
  toggleDefaultPopoverIcon(value) {
@@ -31,6 +31,6 @@ export declare const BASE_BUTTON_CONSTANTS: {
31
31
  };
32
32
  export type ButtonType = 'button' | 'submit' | 'reset';
33
33
  export type ButtonTarget = '_blank' | '_self' | '_parent' | '_top';
34
- export type ButtonClickOptions = {
34
+ export interface ButtonClickOptions {
35
35
  animateStateLayer?: boolean;
36
- };
36
+ }
@@ -6,7 +6,6 @@
6
6
  import { BaseAdapter, IBaseAdapter } from '../core';
7
7
  import { IButtonAreaComponent } from './button-area';
8
8
  export interface IButtonAreaAdapter extends IBaseAdapter {
9
- destroy(): void;
10
9
  setDisabled(value: boolean): void;
11
10
  addListener(type: string, listener: EventListener, capture?: boolean): void;
12
11
  removeListener(type: string, listener: EventListener, capture?: boolean): void;
@@ -30,7 +29,6 @@ export declare class ButtonAreaAdapter extends BaseAdapter<IButtonAreaComponent>
30
29
  private _focusIndicatorElement;
31
30
  private _stateLayerElement;
32
31
  constructor(component: IButtonAreaComponent);
33
- destroy(): void;
34
32
  setDisabled(value: boolean): void;
35
33
  addListener(type: string, listener: EventListener, capture?: boolean): void;
36
34
  removeListener(type: string, listener: EventListener, capture?: boolean): void;
@@ -17,7 +17,6 @@ export class ButtonAreaAdapter extends BaseAdapter {
17
17
  this._focusIndicatorElement = getShadowElement(component, FOCUS_INDICATOR_CONSTANTS.elementName);
18
18
  this._stateLayerElement = getShadowElement(component, STATE_LAYER_CONSTANTS.elementName);
19
19
  }
20
- destroy() { }
21
20
  setDisabled(value) {
22
21
  this._buttonElement?.toggleAttribute(BUTTON_AREA_CONSTANTS.attributes.DISABLED, value);
23
22
  if (value) {
@@ -72,8 +71,11 @@ export class ButtonAreaAdapter extends BaseAdapter {
72
71
  requestDisabledButtonFrame() {
73
72
  if (this._buttonElement) {
74
73
  this._buttonElement.disabled = true;
75
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
76
- requestAnimationFrame(() => (this._buttonElement.disabled = false));
74
+ requestAnimationFrame(() => {
75
+ if (this._buttonElement) {
76
+ this._buttonElement.disabled = false;
77
+ }
78
+ });
77
79
  }
78
80
  }
79
81
  }
@@ -32,7 +32,6 @@ export class ButtonAreaCore {
32
32
  this._adapter.removeContentSlotListener('pointerdown', this._ignoreStateLayerListener.bind(this));
33
33
  this._adapter.removeContentSlotListener('pointerup', this._ignoreStateLayerListener.bind(this));
34
34
  this._adapter.removeButtonSlotListener('slotchange', this._slotListener);
35
- this._adapter.destroy();
36
35
  this._adapter.stopButtonObserver();
37
36
  }
38
37
  _handleClick(event) {
@@ -12,7 +12,7 @@ import { FocusIndicatorComponent } from '../focus-indicator';
12
12
  import { StateLayerComponent } from '../state-layer';
13
13
  import { BaseComponent } from '../core/base/base-component';
14
14
  const template = '<template><div class=\"forge-button-area\" id=\"root\" part=\"root\"><div class=\"button\" id=\"button\" part=\"button\"><slot name=\"button\"></slot></div><slot id=\"content\"></slot><forge-state-layer target=\"root\" exportparts=\"surface:state-layer\"></forge-state-layer><forge-focus-indicator target=\"button\" part=\"focus-indicator\" inward></forge-focus-indicator></div></template>';
15
- const styles = ':host{display:block;position:relative}:host .forge-button-area{cursor:var(--_button-area-cursor)}:host([hidden]){display:none}:host([disabled]) .forge-button-area{cursor:var(--_button-area-disabled-cursor)}.forge-button-area{--_button-area-primary-color:var(--forge-button-area-primary-color, var(--forge-theme-primary, #3f51b5));--_button-area-cursor:var(--forge-button-area-cursor, pointer);--_button-area-disabled-cursor:var(--forge-button-area-disabled-cursor, not-allowed);--_button-area-focus-indicator-color:var(--forge-button-area-focus-indicator-color, var(--forge-theme-primary, #3f51b5));--_button-area-focus-indicator-offset:var(--forge-button-area-focus-indicator-offset, 4px)}.forge-button-area{position:relative;overflow:hidden;block-size:100%;inline-size:100%}.forge-button-area .button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:fixed;width:1px;outline:0;-webkit-appearance:none;-moz-appearance:none}forge-focus-indicator{z-index:1;--forge-focus-indicator-color:var(--_button-area-focus-indicator-color);--forge-focus-indicator-outward-offset:var(--_button-area-focus-indicator-offset)}forge-state-layer{--forge-state-layer-color:var(--_button-area-primary-color);border-radius:inherit}';
15
+ const styles = ':host{display:block;position:relative}:host .forge-button-area{cursor:var(--_button-area-cursor)}:host([hidden]){display:none}:host([disabled]) .forge-button-area{cursor:var(--_button-area-disabled-cursor)}.forge-button-area{--_button-area-primary-color:var(--forge-button-area-primary-color, var(--forge-theme-primary, #3f51b5));--_button-area-cursor:var(--forge-button-area-cursor, pointer);--_button-area-disabled-cursor:var(--forge-button-area-disabled-cursor, not-allowed);--_button-area-focus-indicator-color:var(--forge-button-area-focus-indicator-color, var(--forge-theme-primary, #3f51b5));--_button-area-focus-indicator-offset:var(--forge-button-area-focus-indicator-offset, 4px)}.forge-button-area{position:relative;overflow:hidden;block-size:100%;inline-size:100%}.forge-button-area .button{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0}forge-focus-indicator{z-index:1;--forge-focus-indicator-color:var(--_button-area-focus-indicator-color);--forge-focus-indicator-outward-offset:var(--_button-area-focus-indicator-offset)}forge-state-layer{--forge-state-layer-color:var(--_button-area-primary-color);border-radius:inherit}';
16
16
  /**
17
17
  * @tag forge-button-area
18
18
  *
@@ -96,7 +96,6 @@ export class ButtonToggleGroupCore {
96
96
  // Combine the selected toggle values with our current state to ensure we always return the latest value
97
97
  // even if our state doesn't match a selected toggle.
98
98
  const values = Array.from(new Set(this._adapter.getSelectedValues().concat(this._values)));
99
- // eslint-disable-next-line prettier/prettier
100
99
  return this._multiple ? Array.from(values) : (values[0] ?? null);
101
100
  }
102
101
  set value(value) {
@@ -1265,9 +1265,10 @@ export class CalendarCore {
1265
1265
  switch (this._view) {
1266
1266
  case 'date':
1267
1267
  return !this._min || this._min < new Date(this._year, this._month, 1);
1268
- case 'month':
1268
+ case 'month': {
1269
1269
  const minDateYear = this._min?.getFullYear();
1270
1270
  return this._menuYear != null && (minDateYear == null || minDateYear < this._menuYear);
1271
+ }
1271
1272
  case 'year':
1272
1273
  return !!this._menuYearsInView && this._minYear < this._menuYearsInView.min;
1273
1274
  default:
@@ -1286,9 +1287,10 @@ export class CalendarCore {
1286
1287
  switch (this._view) {
1287
1288
  case 'date':
1288
1289
  return !this._max || this._max > getLastDateOfMonth(this._month, this._year);
1289
- case 'month':
1290
+ case 'month': {
1290
1291
  const maxDateYear = this._max?.getFullYear();
1291
1292
  return this._menuYear != null && (maxDateYear == null || maxDateYear > this._menuYear);
1293
+ }
1292
1294
  case 'year':
1293
1295
  return !!this._menuYearsInView && this._maxYear > this._menuYearsInView.max;
1294
1296
  default:
@@ -1528,7 +1530,6 @@ export class CalendarCore {
1528
1530
  this._adapter.setHostAttribute(CALENDAR_CONSTANTS.attributes.MODE, 'single');
1529
1531
  this._adapter.setMultiple(false);
1530
1532
  if (this._value.length > 1) {
1531
- // eslint-disable-next-line @typescript-eslint/prefer-for-of
1532
1533
  for (let i = this._value.length - 2; i >= 0; i -= 1) {
1533
1534
  this._deselectDate(this._value[i]);
1534
1535
  }
@@ -2097,13 +2098,14 @@ export class CalendarCore {
2097
2098
  case 'multiple':
2098
2099
  dates = value;
2099
2100
  break;
2100
- case 'range':
2101
+ case 'range': {
2101
2102
  const minAndMax = getMinAndMaxDates(value);
2102
2103
  dates.push(minAndMax[0]);
2103
2104
  if (minAndMax.length > 1) {
2104
2105
  dates.push(minAndMax[1]);
2105
2106
  }
2106
2107
  break;
2108
+ }
2107
2109
  }
2108
2110
  }
2109
2111
  else if (isValidDate(new Date(value))) {
@@ -16,7 +16,7 @@ export class CalendarDropdown {
16
16
  return this._popupClasses;
17
17
  }
18
18
  set popupClasses(value) {
19
- this._popupClasses = !!value ? (isArray(value) ? [...value] : [value]) : [];
19
+ this._popupClasses = value ? (isArray(value) ? [...value] : [value]) : [];
20
20
  }
21
21
  get locale() {
22
22
  return this.calendar?.locale;
@@ -125,9 +125,7 @@ export function getDatesInRange(dates, start, end) {
125
125
  if (!start || !end) {
126
126
  return [];
127
127
  }
128
- return dates.filter(d => {
129
- return isInRange(d, start, end);
130
- });
128
+ return dates.filter(d => isInRange(d, start, end));
131
129
  }
132
130
  /** Gets an accessible description of events. */
133
131
  export function getEventDescriptions(events) {
@@ -18,7 +18,7 @@ import { StateLayerComponent } from '../state-layer';
18
18
  import { FocusIndicatorComponent } from '../focus-indicator';
19
19
  import { BaseComponent } from '../core/base/base-component';
20
20
  const template = '<template><div class=\"forge-calendar\" part=\"root\"><div id=\"view\" class=\"forge-calendar__view\" part=\"view\"><div id=\"date-view\" class=\"forge-calendar__date-view\" role=\"grid\" part=\"date-view\"><div role=\"rowgroup\" part=\"date-view-container\"><div id=\"day-row\" class=\"forge-calendar__date-view__row\" role=\"row\" part=\"date-view-row\"></div></div><div id=\"date-grid\" class=\"forge-calendar__date-grid\" role=\"rowgroup\" part=\"date-grid-container\"></div></div><forge-calendar-menu id=\"menu\" part=\"calendar-menu\"></forge-calendar-menu></div></div></template>';
21
- const styles = '.forge-calendar{width:var(--forge-calendar-width,100%);height:fit-content;position:relative}.forge-calendar__header{padding:var(--forge-calendar-controls-padding,0);display:flex;align-items:center;justify-content:space-between}.forge-calendar__footer{padding:var(--forge-calendar-controls-padding,0);display:flex;align-items:center;justify-content:space-between}.forge-calendar__view{position:relative}.forge-calendar__date-view{display:block}.forge-calendar__date-view__row{display:grid;grid-template-columns:repeat(7,1fr)}.forge-calendar__date-grid{display:grid}.forge-calendar__day{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-label2-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));font-size:var(--forge-typography-label2-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, .8125)));font-weight:var(--forge-typography-label2-font-weight,400);line-height:var(--forge-typography-label2-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));letter-spacing:var(--forge-typography-label2-letter-spacing, .0096153846em);text-transform:var(--forge-typography-label2-text-transform,inherit);text-decoration:var(--forge-typography-label2-text-decoration,inherit);display:flex;justify-content:center;align-items:center;min-width:0;padding:0;font-weight:700;user-select:none}.forge-calendar__day::after{float:left;padding-top:100%;content:\"\"}.forge-calendar__date{margin-top:var(--forge-calendar-row-gap,2px);min-width:0;padding:0;border-radius:50%;position:relative;outline:0;cursor:default;user-select:none}.forge-calendar__date::after{float:left;padding-top:100%;content:\"\"}.forge-calendar__date forge-focus-indicator{--forge-focus-indicator-shape:50%}.forge-calendar__date__inner{-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);position:absolute;width:calc(100% - 2px);height:calc(100% - 2px);top:calc(2px / 2);left:calc(2px / 2);display:flex;justify-content:center;align-items:center;border-radius:inherit;box-sizing:border-box}.forge-calendar--show-today .forge-calendar__date--today:not([disabled]){color:var(--forge-theme-primary,#3f51b5);border-color:var(--forge-theme-primary,#3f51b5)}.forge-calendar--show-today .forge-calendar__date--today .forge-calendar__date__inner{border-color:inherit;border-width:1px;border-style:solid;font-weight:700}.forge-calendar--show-today .forge-calendar__date--today.forge-calendar__date--selected{color:var(--forge-theme-on-primary,#fff)}.forge-calendar:not(.forge-calendar--readonly) .forge-calendar__date:not([disabled]){cursor:pointer}.forge-calendar__date--selected:not([disabled]) .forge-calendar__date__inner{background-color:var(--forge-theme-primary,#3f51b5);color:var(--forge-theme-on-primary,#fff)}.forge-calendar__date--selected[disabled] .forge-calendar__date__inner{background-color:var(--forge-theme-primary-container-minimum,#f7f8fc);color:var(--forge-theme-text-low,rgba(0,0,0,.38))}.forge-calendar__date--selected forge-focus-indicator{--forge-focus-indicator-color:var(--forge-theme-primary-container)}.forge-calendar__date[disabled]{color:var(--forge-theme-text-low,rgba(0,0,0,.38))}.forge-calendar__date-spacer{pointer-events:none}.forge-calendar--fixed-height .forge-calendar__date-spacer{margin-top:var(--forge-calendar-row-gap,2px)}.forge-calendar--fixed-height .forge-calendar__date-spacer::after{float:left;padding-top:100%;content:\"\"}.forge-calendar__range:not(.forge-calendar__date-spacer) .forge-calendar__range__target{background-color:var(--forge-theme-primary,#3f51b5);position:absolute;width:100%;height:100%;opacity:.14;border-radius:0}.forge-calendar__range:not(.forge-calendar__date-spacer).forge-calendar__range--start .forge-calendar__range__target{border-top-left-radius:50%;border-bottom-left-radius:50%}.forge-calendar__range:not(.forge-calendar__date-spacer).forge-calendar__range--end .forge-calendar__range__target{border-top-right-radius:50%;border-bottom-right-radius:50%}.forge-calendar__range:not(.forge-calendar__range--start):first-of-type .forge-calendar__range__target{border-top-left-radius:4px;border-bottom-left-radius:4px}.forge-calendar__range:not(.forge-calendar__range--end):last-of-type .forge-calendar__range__target{border-top-right-radius:4px;border-bottom-right-radius:4px}.forge-calendar--allow-single-date-range .forge-calendar__range--start.forge-calendar__range--end .forge-calendar__range__target{transition:transform .2s;transform:scale(1.15);transform-origin:center}.forge-calendar__event{font-size:var(--forge-calendar-event-dot-size, 12px)}.forge-calendar__event[data-event-theme=primary]{color:var(--forge-calendar-theme-event-primary-accent,#3f51b5)}.forge-calendar__event[data-event-theme=secondary]{color:var(--forge-calendar-theme-event-secondary-accent,#ffc107)}.forge-calendar__event[data-event-theme=blue]{color:var(--forge-calendar-theme-event-blue-accent,#2196f3)}.forge-calendar__event[data-event-theme=light-green]{color:var(--forge-calendar-theme-event-light-green-accent,#8bc34a)}.forge-calendar__event[data-event-theme=cyan]{color:var(--forge-calendar-theme-event-cyan-accent,#00bcd4)}.forge-calendar__event[data-event-theme=teal]{color:var(--forge-calendar-theme-event-teal-accent,#009688)}.forge-calendar__event[data-event-theme=orange]{color:var(--forge-calendar-theme-event-orange-accent,#ff9800)}.forge-calendar__event[data-event-theme=blue-grey]{color:var(--forge-calendar-theme-event-blue-grey-accent,#607d8b)}.forge-calendar__event[data-event-theme=grey]{color:var(--forge-calendar-theme-event-grey-accent,#9e9e9e)}.forge-calendar__event[data-event-theme=red]{color:var(--forge-calendar-theme-event-red-accent,#f44336)}.forge-calendar__event[data-event-theme=pink]{color:var(--forge-calendar-theme-event-pink-accent,#e91e63)}.forge-calendar__event[data-event-theme=purple]{color:var(--forge-calendar-theme-event-purple-accent,#9c27b0)}.forge-calendar__event[data-event-theme=light-blue]{color:var(--forge-calendar-theme-event-light-blue-accent,#03a9f4)}.forge-calendar__event[data-event-theme=deep-purple]{color:var(--forge-calendar-theme-event-deep-purple-accent,#673ab7)}.forge-calendar__event[data-event-theme=green]{color:var(--forge-calendar-theme-event-green-accent,#4caf50)}.forge-calendar__event[data-event-theme=lime]{color:var(--forge-calendar-theme-event-lime-accent,#cddc39)}.forge-calendar__event[data-event-theme=yellow]{color:var(--forge-calendar-theme-event-yellow-accent,#ffeb3b)}.forge-calendar__event[data-event-theme=brown]{color:var(--forge-calendar-theme-event-brown-accent,#795548)}.forge-calendar__event[data-event-theme=deep-orange]{color:var(--forge-calendar-theme-event-deep-orange-accent,#ff5722)}.forge-calendar__date[disabled] .forge-calendar__event{opacity:.14}.forge-calendar__event--overflow{background-color:var(--forge-theme-surface,#fff);color:var(--forge-theme-on-surface,#000);border-radius:50%}.forge-calendar__event__wrapper{display:flex;justify-content:center;gap:2px;position:absolute;bottom:0;left:0;width:100%;padding-bottom:2px;pointer-events:none}.forge-calendar__date-spacer .forge-calendar__event__wrapper{display:none}.forge-calendar--rtl .forge-calendar__header forge-icon-button forge-icon{transform:rotate(180deg)}#accessible-header{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:fixed;width:1px;outline:0;-webkit-appearance:none;-moz-appearance:none}#month-button forge-icon{transition:transform .2s}.forge-calendar--month-menu-open #month-button forge-icon{transform:rotate(180deg)}#year-button forge-icon{transition:transform .2s}.forge-calendar--year-menu-open #year-button forge-icon{transform:rotate(180deg)}:host{--forge-calendar-event-stroke-color:var(--forge-theme-surface, #ffffff);display:inline-block}:host([hidden]){display:none}:host([forge-popover-context=true]){--forge-calendar-event-stroke-color:var(--forge-theme-surface-bright, #ffffff)}';
21
+ const styles = '.forge-calendar{width:var(--forge-calendar-width,100%);height:fit-content;position:relative}.forge-calendar__header{padding:var(--forge-calendar-controls-padding,0);display:flex;align-items:center;justify-content:space-between}.forge-calendar__footer{padding:var(--forge-calendar-controls-padding,0);display:flex;align-items:center;justify-content:space-between}.forge-calendar__view{position:relative}.forge-calendar__date-view{display:block}.forge-calendar__date-view__row{display:grid;grid-template-columns:repeat(7,1fr)}.forge-calendar__date-grid{display:grid}.forge-calendar__day{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-label2-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));font-size:var(--forge-typography-label2-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, .8125)));font-weight:var(--forge-typography-label2-font-weight,400);line-height:var(--forge-typography-label2-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));letter-spacing:var(--forge-typography-label2-letter-spacing, .0096153846em);text-transform:var(--forge-typography-label2-text-transform,inherit);text-decoration:var(--forge-typography-label2-text-decoration,inherit);display:flex;justify-content:center;align-items:center;min-width:0;padding:0;font-weight:700;user-select:none}.forge-calendar__day::after{float:left;padding-top:100%;content:\"\"}.forge-calendar__date{margin-top:var(--forge-calendar-row-gap,2px);min-width:0;padding:0;border-radius:50%;position:relative;outline:0;cursor:default;user-select:none}.forge-calendar__date::after{float:left;padding-top:100%;content:\"\"}.forge-calendar__date forge-focus-indicator{--forge-focus-indicator-shape:50%}.forge-calendar__date__inner{-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);position:absolute;width:calc(100% - 2px);height:calc(100% - 2px);top:calc(2px / 2);left:calc(2px / 2);display:flex;justify-content:center;align-items:center;border-radius:inherit;box-sizing:border-box}.forge-calendar--show-today .forge-calendar__date--today:not([disabled]){color:var(--forge-theme-primary,#3f51b5);border-color:var(--forge-theme-primary,#3f51b5)}.forge-calendar--show-today .forge-calendar__date--today .forge-calendar__date__inner{border-color:inherit;border-width:1px;border-style:solid;font-weight:700}.forge-calendar--show-today .forge-calendar__date--today.forge-calendar__date--selected{color:var(--forge-theme-on-primary,#fff)}.forge-calendar:not(.forge-calendar--readonly) .forge-calendar__date:not([disabled]){cursor:pointer}.forge-calendar__date--selected:not([disabled]) .forge-calendar__date__inner{background-color:var(--forge-theme-primary,#3f51b5);color:var(--forge-theme-on-primary,#fff)}.forge-calendar__date--selected[disabled] .forge-calendar__date__inner{background-color:var(--forge-theme-primary-container-minimum,#f7f8fc);color:var(--forge-theme-text-low,rgba(0,0,0,.38))}.forge-calendar__date--selected forge-focus-indicator{--forge-focus-indicator-color:var(--forge-theme-primary-container)}.forge-calendar__date[disabled]{color:var(--forge-theme-text-low,rgba(0,0,0,.38))}.forge-calendar__date-spacer{pointer-events:none}.forge-calendar--fixed-height .forge-calendar__date-spacer{margin-top:var(--forge-calendar-row-gap,2px)}.forge-calendar--fixed-height .forge-calendar__date-spacer::after{float:left;padding-top:100%;content:\"\"}.forge-calendar__range:not(.forge-calendar__date-spacer) .forge-calendar__range__target{background-color:var(--forge-theme-primary,#3f51b5);position:absolute;width:100%;height:100%;opacity:.14;border-radius:0}.forge-calendar__range:not(.forge-calendar__date-spacer).forge-calendar__range--start .forge-calendar__range__target{border-top-left-radius:50%;border-bottom-left-radius:50%}.forge-calendar__range:not(.forge-calendar__date-spacer).forge-calendar__range--end .forge-calendar__range__target{border-top-right-radius:50%;border-bottom-right-radius:50%}.forge-calendar__range:not(.forge-calendar__range--start):first-of-type .forge-calendar__range__target{border-top-left-radius:4px;border-bottom-left-radius:4px}.forge-calendar__range:not(.forge-calendar__range--end):last-of-type .forge-calendar__range__target{border-top-right-radius:4px;border-bottom-right-radius:4px}.forge-calendar--allow-single-date-range .forge-calendar__range--start.forge-calendar__range--end .forge-calendar__range__target{transition:transform .2s;transform:scale(1.15);transform-origin:center}.forge-calendar__event{font-size:var(--forge-calendar-event-dot-size, 12px)}.forge-calendar__event[data-event-theme=primary]{color:var(--forge-calendar-theme-event-primary-accent,#3f51b5)}.forge-calendar__event[data-event-theme=secondary]{color:var(--forge-calendar-theme-event-secondary-accent,#ffc107)}.forge-calendar__event[data-event-theme=blue]{color:var(--forge-calendar-theme-event-blue-accent,#2196f3)}.forge-calendar__event[data-event-theme=light-green]{color:var(--forge-calendar-theme-event-light-green-accent,#8bc34a)}.forge-calendar__event[data-event-theme=cyan]{color:var(--forge-calendar-theme-event-cyan-accent,#00bcd4)}.forge-calendar__event[data-event-theme=teal]{color:var(--forge-calendar-theme-event-teal-accent,#009688)}.forge-calendar__event[data-event-theme=orange]{color:var(--forge-calendar-theme-event-orange-accent,#ff9800)}.forge-calendar__event[data-event-theme=blue-grey]{color:var(--forge-calendar-theme-event-blue-grey-accent,#607d8b)}.forge-calendar__event[data-event-theme=grey]{color:var(--forge-calendar-theme-event-grey-accent,#9e9e9e)}.forge-calendar__event[data-event-theme=red]{color:var(--forge-calendar-theme-event-red-accent,#f44336)}.forge-calendar__event[data-event-theme=pink]{color:var(--forge-calendar-theme-event-pink-accent,#e91e63)}.forge-calendar__event[data-event-theme=purple]{color:var(--forge-calendar-theme-event-purple-accent,#9c27b0)}.forge-calendar__event[data-event-theme=light-blue]{color:var(--forge-calendar-theme-event-light-blue-accent,#03a9f4)}.forge-calendar__event[data-event-theme=deep-purple]{color:var(--forge-calendar-theme-event-deep-purple-accent,#673ab7)}.forge-calendar__event[data-event-theme=green]{color:var(--forge-calendar-theme-event-green-accent,#4caf50)}.forge-calendar__event[data-event-theme=lime]{color:var(--forge-calendar-theme-event-lime-accent,#cddc39)}.forge-calendar__event[data-event-theme=yellow]{color:var(--forge-calendar-theme-event-yellow-accent,#ffeb3b)}.forge-calendar__event[data-event-theme=brown]{color:var(--forge-calendar-theme-event-brown-accent,#795548)}.forge-calendar__event[data-event-theme=deep-orange]{color:var(--forge-calendar-theme-event-deep-orange-accent,#ff5722)}.forge-calendar__date[disabled] .forge-calendar__event{opacity:.14}.forge-calendar__event--overflow{background-color:var(--forge-theme-surface,#fff);color:var(--forge-theme-on-surface,#000);border-radius:50%}.forge-calendar__event__wrapper{display:flex;justify-content:center;gap:2px;position:absolute;bottom:0;left:0;width:100%;padding-bottom:2px;pointer-events:none}.forge-calendar__date-spacer .forge-calendar__event__wrapper{display:none}.forge-calendar--rtl .forge-calendar__header forge-icon-button forge-icon{transform:rotate(180deg)}#accessible-header{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0}#month-button forge-icon{transition:transform .2s}.forge-calendar--month-menu-open #month-button forge-icon{transform:rotate(180deg)}#year-button forge-icon{transition:transform .2s}.forge-calendar--year-menu-open #year-button forge-icon{transform:rotate(180deg)}:host{--forge-calendar-event-stroke-color:var(--forge-theme-surface, #ffffff);display:inline-block}:host([hidden]){display:none}:host([forge-popover-context=true]){--forge-calendar-event-stroke-color:var(--forge-theme-surface-bright, #ffffff)}';
22
22
  /**
23
23
  * @tag forge-calendar
24
24
  *
@@ -142,7 +142,7 @@ export class ColorPickerCore {
142
142
  _render() {
143
143
  this._setGradientColor();
144
144
  this._adapter.setPreviewColor(formatRgba(this._rgba));
145
- this._adapter.setHexInputValue(`#${this._hex}`);
145
+ this._adapter.setHexInputValue(formatHex(this._hex, this._allowOpacity));
146
146
  this._adapter.setRgbaInputValue(this._rgba);
147
147
  this._adapter.setHsvaInputValue(this._hsva);
148
148
  this._adapter.updateA11y(this._hsva.h, Math.round(this._hsva.a * 100));
@@ -165,17 +165,18 @@ export class ColorPickerCore {
165
165
  }
166
166
  set value(value) {
167
167
  if (this._value !== value) {
168
- this._value = value || DEFAULT_COLOR;
168
+ this._value = value ?? DEFAULT_COLOR;
169
169
  if (!isValidHex(this._value)) {
170
170
  throw new Error('Invalid hex value provided.');
171
171
  }
172
- this._hex = this._value.replace(/^#/, '');
172
+ this._value = this._value.replace(/^#/, ''); // Normalize hex value by removing leading hash
173
+ this._hex = this._value;
173
174
  this._setColorFromHex();
174
175
  this._adapter.setHostAttribute(COLOR_PICKER_CONSTANTS.attributes.VALUE, this._value);
175
176
  }
176
177
  }
177
178
  get rgba() {
178
- return !!this._rgba ? { ...this._rgba } : null;
179
+ return this._rgba ? { ...this._rgba } : null;
179
180
  }
180
181
  set rgba(value) {
181
182
  if (value) {
@@ -188,7 +189,7 @@ export class ColorPickerCore {
188
189
  }
189
190
  }
190
191
  get hsva() {
191
- return !!this._hsva ? { ...this._hsva } : null;
192
+ return this._hsva ? { ...this._hsva } : null;
192
193
  }
193
194
  set hsva(value) {
194
195
  if (value) {
@@ -13,7 +13,7 @@ export declare class ColorPickerGradientSlider {
13
13
  private _downListener;
14
14
  private _moveListener;
15
15
  private _upListener;
16
- constructor(_rootElement: HTMLElement, _changeListener: (x: number, y: number) => void);
16
+ constructor(_rootElement: HTMLElement, _changeListener: (saturation: number, value: number) => void);
17
17
  destroy(): void;
18
18
  setValue(saturation: number, value: number): void;
19
19
  private _initialize;
@@ -9,6 +9,8 @@ export class ColorPickerGradientSlider {
9
9
  constructor(_rootElement, _changeListener) {
10
10
  this._rootElement = _rootElement;
11
11
  this._changeListener = _changeListener;
12
+ this._xPercent = 0;
13
+ this._yPercent = 0;
12
14
  this._keydownListener = evt => this._onKeydown(evt);
13
15
  this._downListener = evt => this._onDown(evt);
14
16
  this._moveListener = evt => this._onMove(evt);
@@ -19,12 +21,9 @@ export class ColorPickerGradientSlider {
19
21
  this._unlisten();
20
22
  }
21
23
  setValue(saturation, value) {
22
- window.requestAnimationFrame(() => {
23
- const bounds = this._rootElement.getBoundingClientRect();
24
- this._xPercent = Math.round(bounds.width * (saturation / 100));
25
- this._yPercent = bounds.height - Math.round(bounds.height * (value / 100));
26
- this._setThumbPosition(this._xPercent, this._yPercent);
27
- });
24
+ this._xPercent = Math.max(0, Math.min(100, saturation));
25
+ this._yPercent = Math.max(0, Math.min(100, 100 - value));
26
+ this._setThumbPosition(this._xPercent, this._yPercent);
28
27
  }
29
28
  _initialize() {
30
29
  this._thumbElement = this._rootElement.querySelector(COLOR_PICKER_CONSTANTS.selectors.GRADIENT_THUMB);
@@ -51,42 +50,30 @@ export class ColorPickerGradientSlider {
51
50
  const isArrowUpKey = evt.key === 'ArrowUp' || evt.keyCode === 38;
52
51
  const isArrowRightKey = evt.key === 'ArrowRight' || evt.keyCode === 39;
53
52
  const isArrowDownKey = evt.key === 'ArrowDown' || evt.keyCode === 40;
54
- const bounds = this._rootElement.getBoundingClientRect();
53
+ const stepSize = 1; // 1% steps
55
54
  if (isArrowDownKey) {
56
55
  evt.preventDefault();
57
- this._yPercent++;
56
+ this._yPercent = Math.min(100, this._yPercent + stepSize);
58
57
  }
59
58
  else if (isArrowUpKey) {
60
59
  evt.preventDefault();
61
- this._yPercent--;
60
+ this._yPercent = Math.max(0, this._yPercent - stepSize);
62
61
  }
63
62
  else if (isArrowLeftKey) {
64
63
  evt.preventDefault();
65
- this._xPercent--;
64
+ this._xPercent = Math.max(0, this._xPercent - stepSize);
66
65
  }
67
66
  else if (isArrowRightKey) {
68
67
  evt.preventDefault();
69
- this._xPercent++;
68
+ this._xPercent = Math.min(100, this._xPercent + stepSize);
70
69
  }
71
70
  else if (isEnterKey) {
72
71
  evt.preventDefault();
73
- // TODO(kieran.nichols): Select the current color
72
+ // TODO: Select the current color
74
73
  }
75
74
  else {
76
75
  return;
77
76
  }
78
- if (this._xPercent > bounds.width) {
79
- this._xPercent = bounds.width;
80
- }
81
- else if (this._xPercent < 0) {
82
- this._xPercent = 0;
83
- }
84
- if (this._yPercent > bounds.height) {
85
- this._yPercent = bounds.height;
86
- }
87
- else if (this._yPercent < 0) {
88
- this._yPercent = 0;
89
- }
90
77
  this._setThumbPosition(this._xPercent, this._yPercent);
91
78
  this._notify();
92
79
  }
@@ -115,21 +102,23 @@ export class ColorPickerGradientSlider {
115
102
  const x = isMouseEvent ? evt.clientX : evt.changedTouches[0].clientX;
116
103
  const y = isMouseEvent ? evt.clientY : evt.changedTouches[0].clientY;
117
104
  const coords = this._calculateSliderPercent(x, y);
118
- this._setThumbPosition(coords.x, coords.y);
119
- this._xPercent = parseInt(((coords.x / coords.width) * 100).toString(), 10);
120
- this._yPercent = Math.abs(parseInt(((coords.y / coords.height) * 100).toString(), 10) - 100);
105
+ this._xPercent = Math.max(0, Math.min(100, (coords.x / coords.width) * 100));
106
+ this._yPercent = Math.max(0, Math.min(100, (coords.y / coords.height) * 100));
107
+ this._setThumbPosition(this._xPercent, this._yPercent);
121
108
  this._notify();
122
109
  }
123
110
  _calculateSliderPercent(absX, absY) {
124
111
  return relativeCoords(absX, absY, this._rootElement);
125
112
  }
126
113
  _setThumbPosition(xPercent, yPercent) {
127
- this._thumbElement.style.left = `${xPercent}px`;
128
- this._thumbElement.style.top = `${yPercent}px`;
114
+ this._thumbElement.style.left = `${xPercent}%`;
115
+ this._thumbElement.style.top = `${yPercent}%`;
129
116
  }
130
117
  _notify() {
131
118
  if (typeof this._changeListener === 'function') {
132
- this._changeListener(this._xPercent, this._yPercent);
119
+ const saturation = this._xPercent;
120
+ const value = 100 - this._yPercent;
121
+ this._changeListener(saturation, value);
133
122
  }
134
123
  }
135
124
  }
@@ -4,7 +4,6 @@
4
4
  * License: Apache-2.0
5
5
  */
6
6
  export class GlobalConfiguration {
7
- // eslint-disable-next-line @tylertech-eslint/require-private-modifier
8
7
  constructor() { }
9
8
  /**
10
9
  * Gets an entry from the global configuration for the specified element.
@@ -62,8 +62,12 @@ export function WithFormAssociation(base) {
62
62
  }
63
63
  // Apply validation-affecting props to the input element to get the correct validation
64
64
  // message
65
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
66
- Object.entries(props).forEach(([key, value]) => (this._inputElement[key] = value));
65
+ if (this._inputElement) {
66
+ const entries = Object.entries(props);
67
+ for (const [key, value] of entries) {
68
+ this._inputElement[key] = value;
69
+ }
70
+ }
67
71
  return this._inputElement.validationMessage;
68
72
  }
69
73
  }
@@ -99,9 +99,9 @@ export declare function ariaPropertyToAttribute<K extends ARIAProperty | 'role'>
99
99
  * @returns An ARIA mixin property.
100
100
  */
101
101
  export declare function ariaAttributeToProperty<K extends ARIAAttribute | 'role'>(attribute: K): ARIAProperty;
102
- export type DefaultAriaOptions = {
102
+ export interface DefaultAriaOptions {
103
103
  setAttribute?: boolean;
104
- };
104
+ }
105
105
  /**
106
106
  * Applies default ARIA to an element through ElementInternals if supported. Otherwise, ARIA
107
107
  * attributes are set directly on the element and stored in additional `data-default-*` attributes
@@ -4,7 +4,7 @@
4
4
  * License: Apache-2.0
5
5
  */
6
6
  import { isValidDate } from '@tylertech/forge-core';
7
- export const ISO_8601_REGEX = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/;
7
+ export const ISO_8601_REGEX = /^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([.,]\d+(?!:))?)?(\17[0-5]\d([.,]\d+)?)?([zZ]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/;
8
8
  export const ISO_TIMEZONE_REGEX = /a-z/i;
9
9
  const FUTURE_YEAR_COERCION = 10; // The number of years in the future to coerce two-digit years into current century
10
10
  /**
@@ -18,7 +18,6 @@ export class DismissibleStack {
18
18
  get dismissing() {
19
19
  return this._deferredDismiss?.promise ?? Promise.resolve();
20
20
  }
21
- // eslint-disable-next-line @tylertech-eslint/require-private-modifier
22
21
  constructor() {
23
22
  /**
24
23
  * A set of all elements that are currently eligible for dismissal.
@@ -9,7 +9,7 @@ import { Platform } from '@tylertech/forge-core';
9
9
  * @returns {boolean}
10
10
  */
11
11
  export function supportsPopover() {
12
- return HTMLElement.prototype.hasOwnProperty('popover');
12
+ return Object.prototype.hasOwnProperty.call(HTMLElement.prototype, 'popover');
13
13
  }
14
14
  /**
15
15
  * Detects if the browser supports ARIA properties in Element Internals.
@@ -19,7 +19,7 @@ export function supportsPopover() {
19
19
  * @returns {boolean}
20
20
  */
21
21
  export function supportsElementInternalsAria() {
22
- return ElementInternals.prototype.hasOwnProperty('role');
22
+ return Object.prototype.hasOwnProperty.call(ElementInternals.prototype, 'role');
23
23
  }
24
24
  /**
25
25
  * Detects if the browser supports the hovering elements as the users primary input mechanism.
@@ -7,6 +7,7 @@ import { DateRange, DayOfWeek, ICalendarComponent } from '../../calendar';
7
7
  import { ICalendarDropdown, ICalendarDropdownPopupConfig } from '../../calendar/calendar-dropdown';
8
8
  import { BaseAdapter, IBaseAdapter, IDateInputMaskOptions } from '../../core';
9
9
  import { BaseComponent } from '../../core/base/base-component';
10
+ import { IIconButtonComponent } from '../../icon-button';
10
11
  import { IDatePickerCalendarDropdownText } from './base-date-picker-constants';
11
12
  export interface IBaseDatePickerAdapter extends IBaseAdapter {
12
13
  initialize(): void;
@@ -98,6 +99,6 @@ export declare abstract class BaseDatePickerAdapter<T extends BaseComponent> ext
98
99
  setCalendarText(text: IDatePickerCalendarDropdownText): void;
99
100
  propagateCalendarKey(evt: KeyboardEvent): void;
100
101
  tryCreateToggle(): void;
101
- protected _createToggleElement(): HTMLElement;
102
+ protected _createToggleElement(): IIconButtonComponent;
102
103
  protected _getDefaultTargetElement(): HTMLElement;
103
104
  }
@@ -173,6 +173,10 @@ export class BaseDatePickerAdapter extends BaseAdapter {
173
173
  return;
174
174
  }
175
175
  const iconButtonElement = this._createToggleElement();
176
+ // Inherit the density from the text field in certain cases
177
+ if (textField.density === 'extra-small') {
178
+ iconButtonElement.density = 'small';
179
+ }
176
180
  textField.appendChild(iconButtonElement);
177
181
  this._toggleElement = iconButtonElement;
178
182
  }