@tylertech/forge 3.10.5 → 3.11.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.
- package/custom-elements.json +341 -139
- package/dist/app-bar/forge-app-bar.css +11 -5
- package/dist/button/forge-button.css +12 -6
- package/dist/checkbox/forge-checkbox.css +21 -17
- package/dist/chips/forge-chips.css +10 -4
- package/dist/field/forge-field.css +7 -5
- package/dist/floating-action-button/forge-floating-action-button.css +10 -6
- package/dist/forge.css +6 -1
- package/dist/icon-button/forge-icon-button.css +10 -4
- package/dist/lib.js +22 -22
- package/dist/lib.js.map +4 -4
- package/dist/list/forge-list.css +57 -3
- package/dist/radio/forge-radio.css +20 -12
- package/dist/skip-link/forge-skip-link.css +36 -32
- package/dist/switch/forge-switch.css +7 -5
- package/dist/table/forge-table.css +6 -1
- package/dist/vscode.html-custom-data.json +53 -43
- package/esm/accordion/accordion.d.ts +2 -0
- package/esm/accordion/accordion.js +2 -0
- package/esm/app-bar/app-bar/app-bar-adapter.js +2 -2
- package/esm/app-bar/app-bar/app-bar.d.ts +1 -1
- package/esm/app-bar/app-bar/app-bar.js +1 -1
- package/esm/app-bar/help-button/app-bar-help-button.d.ts +1 -1
- package/esm/app-bar/help-button/app-bar-help-button.js +1 -1
- package/esm/app-bar/menu-button/app-bar-menu-button.d.ts +1 -1
- package/esm/app-bar/menu-button/app-bar-menu-button.js +1 -1
- package/esm/app-bar/notification-button/app-bar-notification-button.d.ts +2 -0
- package/esm/app-bar/notification-button/app-bar-notification-button.js +2 -0
- package/esm/app-bar/profile-button/app-bar-profile-button-adapter.d.ts +2 -1
- package/esm/app-bar/profile-button/app-bar-profile-button-adapter.js +2 -0
- package/esm/app-bar/profile-button/app-bar-profile-button.d.ts +2 -0
- package/esm/app-bar/profile-button/app-bar-profile-button.js +2 -0
- package/esm/app-bar/search/app-bar-search.d.ts +2 -0
- package/esm/app-bar/search/app-bar-search.js +2 -0
- package/esm/autocomplete/autocomplete.d.ts +2 -0
- package/esm/autocomplete/autocomplete.js +2 -0
- package/esm/backdrop/backdrop.d.ts +2 -0
- package/esm/backdrop/backdrop.js +2 -0
- package/esm/badge/badge.d.ts +2 -0
- package/esm/badge/badge.js +2 -0
- package/esm/button/base/base-button-adapter.js +2 -2
- package/esm/button-area/button-area-adapter.js +2 -2
- package/esm/button-toggle/button-toggle/button-toggle-adapter.js +2 -2
- package/esm/button-toggle/button-toggle/button-toggle.d.ts +2 -0
- package/esm/button-toggle/button-toggle/button-toggle.js +2 -0
- package/esm/button-toggle/button-toggle-group/button-toggle-group.d.ts +1 -1
- package/esm/button-toggle/button-toggle-group/button-toggle-group.js +1 -1
- package/esm/calendar/calendar-menu/calendar-menu.js +1 -1
- package/esm/calendar/calendar.d.ts +2 -0
- package/esm/calendar/calendar.js +3 -1
- package/esm/card/card.d.ts +2 -0
- package/esm/card/card.js +2 -0
- package/esm/chip-field/chip-field.d.ts +2 -0
- package/esm/chip-field/chip-field.js +2 -0
- package/esm/chips/chip/chip-adapter.js +2 -2
- package/esm/chips/chip/chip.d.ts +2 -0
- package/esm/chips/chip/chip.js +2 -0
- package/esm/color-picker/color-picker.d.ts +2 -0
- package/esm/color-picker/color-picker.js +3 -1
- package/esm/core/utils/a11y-utils.js +17 -0
- package/esm/core/utils/utils.js +8 -2
- package/esm/date-picker/date-picker.d.ts +2 -0
- package/esm/date-picker/date-picker.js +2 -0
- package/esm/date-range-picker/date-range-picker.d.ts +2 -0
- package/esm/date-range-picker/date-range-picker.js +2 -0
- package/esm/deprecated/button/deprecated-button.js +3 -3
- package/esm/deprecated/icon-button/deprecated-icon-button.js +2 -2
- package/esm/drawer/drawer/drawer.d.ts +2 -0
- package/esm/drawer/drawer/drawer.js +3 -1
- package/esm/drawer/mini-drawer/mini-drawer.d.ts +2 -0
- package/esm/drawer/mini-drawer/mini-drawer.js +3 -1
- package/esm/drawer/modal-drawer/modal-drawer.d.ts +2 -0
- package/esm/drawer/modal-drawer/modal-drawer.js +3 -1
- package/esm/field/field-adapter.js +2 -2
- package/esm/field/field-core.d.ts +3 -3
- package/esm/focus-indicator/focus-indicator-constants.d.ts +1 -11
- package/esm/focus-indicator/focus-indicator-constants.js +2 -17
- package/esm/focus-indicator/focus-indicator.d.ts +52 -25
- package/esm/focus-indicator/focus-indicator.js +137 -61
- package/esm/focus-indicator/index.d.ts +0 -2
- package/esm/focus-indicator/index.js +0 -2
- package/esm/icon-button/icon-button.d.ts +2 -0
- package/esm/icon-button/icon-button.js +2 -0
- package/esm/keyboard-shortcut/keyboard-shortcut.d.ts +2 -0
- package/esm/keyboard-shortcut/keyboard-shortcut.js +2 -0
- package/esm/list/list/list.js +1 -1
- package/esm/list/list-item/list-item-constants.js +1 -1
- package/esm/list/list-item/list-item-core.d.ts +2 -0
- package/esm/list/list-item/list-item-core.js +29 -6
- package/esm/list/list-item/list-item.d.ts +1 -0
- package/esm/list/list-item/list-item.js +2 -1
- package/esm/list-dropdown/list-dropdown-constants.d.ts +6 -0
- package/esm/list-dropdown/list-dropdown-constants.js +6 -1
- package/esm/list-dropdown/list-dropdown-utils.js +28 -1
- package/esm/menu/menu.d.ts +2 -0
- package/esm/menu/menu.js +2 -0
- package/esm/page-state/page-state.d.ts +2 -1
- package/esm/page-state/page-state.js +2 -1
- package/esm/paginator/paginator.d.ts +2 -0
- package/esm/paginator/paginator.js +2 -0
- package/esm/popover/popover.js +1 -1
- package/esm/profile-card/profile-card.d.ts +2 -0
- package/esm/profile-card/profile-card.js +2 -0
- package/esm/select/core/base-select-constants.d.ts +4 -0
- package/esm/select/core/base-select-core.d.ts +22 -2
- package/esm/select/core/base-select-core.js +217 -40
- package/esm/select/option/option.d.ts +2 -0
- package/esm/select/option/option.js +2 -0
- package/esm/select/option-group/option-group.d.ts +2 -0
- package/esm/select/option-group/option-group.js +2 -0
- package/esm/select/select/select-constants.d.ts +5 -0
- package/esm/select/select/select-constants.js +5 -2
- package/esm/select/select/select.d.ts +14 -2
- package/esm/select/select/select.js +22 -1
- package/esm/select/select-dropdown/select-dropdown.d.ts +2 -0
- package/esm/select/select-dropdown/select-dropdown.js +2 -0
- package/esm/split-button/split-button.js +1 -1
- package/esm/split-view/split-view/split-view.d.ts +2 -0
- package/esm/split-view/split-view/split-view.js +2 -0
- package/esm/split-view/split-view-panel/split-view-panel.d.ts +2 -0
- package/esm/split-view/split-view-panel/split-view-panel.js +3 -1
- package/esm/stepper/step/step.d.ts +2 -0
- package/esm/stepper/step/step.js +3 -1
- package/esm/stepper/stepper/stepper.d.ts +2 -0
- package/esm/stepper/stepper/stepper.js +2 -0
- package/esm/table/table-utils.js +3 -0
- package/esm/table/table.d.ts +2 -0
- package/esm/table/table.js +4 -1
- package/esm/tabs/tab/tab-adapter.js +2 -2
- package/esm/tabs/tab/tab.d.ts +2 -0
- package/esm/tabs/tab/tab.js +2 -0
- package/esm/time-picker/time-picker.d.ts +2 -0
- package/esm/time-picker/time-picker.js +2 -0
- package/esm/tooltip/tooltip-adapter.d.ts +6 -0
- package/esm/tooltip/tooltip-adapter.js +9 -0
- package/esm/tooltip/tooltip-constants.d.ts +1 -0
- package/esm/tooltip/tooltip-constants.js +2 -1
- package/esm/tooltip/tooltip-core.d.ts +20 -0
- package/esm/tooltip/tooltip-core.js +96 -2
- package/esm/tooltip/tooltip.js +1 -1
- package/esm/view-switcher/view/view.d.ts +2 -0
- package/esm/view-switcher/view/view.js +2 -0
- package/esm/view-switcher/view-switcher.d.ts +2 -0
- package/esm/view-switcher/view-switcher.js +2 -0
- package/package.json +4 -4
- package/sass/focus-indicator/focus-indicator.scss +1 -1
- package/sass/icon-button/forge-icon-button.scss +3 -3
- package/sass/list/forge-list.scss +6 -6
- package/sass/table/_core.scss +13 -1
- package/sass/tooltip/_core.scss +0 -2
- package/esm/focus-indicator/focus-indicator-adapter.d.ts +0 -29
- package/esm/focus-indicator/focus-indicator-adapter.js +0 -37
- package/esm/focus-indicator/focus-indicator-core.d.ts +0 -48
- package/esm/focus-indicator/focus-indicator-core.js +0 -129
package/esm/menu/menu.d.ts
CHANGED
package/esm/menu/menu.js
CHANGED
|
@@ -19,6 +19,8 @@ const styles = ':host{display:inline-flex}:host([hidden]){display:none}';
|
|
|
19
19
|
/**
|
|
20
20
|
* @tag forge-menu
|
|
21
21
|
*
|
|
22
|
+
* @summary Menus display a list of options or actions that users can select from a dropdown.
|
|
23
|
+
*
|
|
22
24
|
* @dependency forge-popover
|
|
23
25
|
* @dependency forge-list
|
|
24
26
|
*/
|
|
@@ -12,9 +12,10 @@ declare global {
|
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
16
15
|
* @tag forge-page-state
|
|
17
16
|
*
|
|
17
|
+
* @summary Page states display full-page messages for empty states, errors, or loading scenarios.
|
|
18
|
+
*
|
|
18
19
|
* @cssproperty --forge-page-state-width - The width of the page state.
|
|
19
20
|
* @cssproperty --forge-page-state-height - The height of the page state.
|
|
20
21
|
* @cssproperty --forge-page-state-spacing - The spacing of the page state.
|
|
@@ -10,9 +10,10 @@ import { PAGE_STATE_CONSTANTS } from './page-state-constants';
|
|
|
10
10
|
const template = '<template><div class=\"forge-page-state\" part=\"root\"><div class=\"graphic\" part=\"graphic-container\"><slot name=\"graphic\"></slot></div><div class=\"title\" part=\"title-container\"><slot name=\"title\"></slot></div><div class=\"message\" part=\"message-container\"><slot name=\"message\"></slot></div><div class=\"actions\" part=\"actions-container\"><slot name=\"action\"></slot></div></div></template>';
|
|
11
11
|
const styles = ':host{--_page-state-width:var(--forge-page-state-width, 576px);--_page-state-height:var(--forge-page-state-height, auto);--_page-state-spacing:var(--forge-page-state-spacing, var(--forge-spacing-xxxlarge, 56px));--_page-state-mobile-width:var(--forge-page-state-mobile-width, 70%);--_page-state-graphic-height:var(--forge-page-state-graphic-height, 296px);--_page-state-graphic-spacing:var(--forge-page-state-graphic-spacing, var(--forge-spacing-xxxlarge, 56px));--_page-state-mobile-graphic-height:var(--forge-page-state-mobile-graphic-height, auto);--_page-state-title-color:var(--forge-page-state-title-color, var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6)));--_page-state-title-spacing:var(--forge-page-state-title-spacing, var(--forge-spacing-xxxlarge, 56px));--_page-state-title-spacing-mobile:var(--forge-page-state-title-spacing-mobile, var(--forge-spacing-large, 24px));--_page-state-message-color:var(--forge-page-state-message-color, var(--forge-theme-text-high, rgba(0, 0, 0, 0.87)));--_page-state-message-spacing:var(--forge-page-state-message-spacing, var(--forge-spacing-xxxlarge, 56px));--_page-state-message-spacing-mobile:var(--forge-page-state-message-spacing-mobile, var(--forge-spacing-large, 24px));--_page-state-actions-spacing:var(--forge-page-state-actions-spacing, 16px)}:host{display:flex;justify-content:center;align-items:center;width:100%;container-type:inline-size}:host([hidden]){display:none}.forge-page-state{width:var(--_page-state-width);margin-block:var(--_page-state-spacing);text-align:center}.forge-page-state .graphic{display:flex;justify-content:center;align-items:center;height:var(--_page-state-graphic-height);width:100%;margin-block-end:var(--_page-state-graphic-spacing)}.forge-page-state .graphic ::slotted([slot=graphic]){height:100%;width:100%}.forge-page-state .title{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-heading8-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));font-size:var(--forge-typography-heading8-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading8-font-size-scale, 2.25)));font-weight:var(--forge-typography-heading8-font-weight,500);line-height:var(--forge-typography-heading8-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading8-line-height-scale, 2.625)));letter-spacing:var(--forge-typography-heading8-letter-spacing, -.0027777778em);text-transform:var(--forge-typography-heading8-text-transform,inherit);text-decoration:var(--forge-typography-heading8-text-decoration,inherit);--_page-state-title-spacing:var(--_page-state-title-spacing-mobile);color:var(--_page-state-title-color);margin-block:var(--_page-state-title-spacing)}.forge-page-state .message{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-body4-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));font-size:var(--forge-typography-body4-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-font-size-scale, 1.25)));font-weight:var(--forge-typography-body4-font-weight,400);line-height:var(--forge-typography-body4-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-line-height-scale, 1.75)));letter-spacing:var(--forge-typography-body4-letter-spacing, .005em);text-transform:var(--forge-typography-body4-text-transform,inherit);text-decoration:var(--forge-typography-body4-text-decoration,inherit);--_page-state-message-spacing:var(--_page-state-message-spacing-mobile);color:var(--_page-state-message-color);margin-block-end:var(--_page-state-message-spacing)}.forge-page-state .actions{display:grid;justify-content:center;grid-auto-flow:column;gap:var(--_page-state-actions-spacing)}@container (max-width:599px){.forge-page-state{--_page-state-width:var(--_page-state-mobile-width)}.forge-page-state .graphic{--_page-state-graphic-height:var(--_page-state-mobile-graphic-height);--_page-state-graphic-spacing:var(--forge-page-state-graphic-spacing, 0)}.forge-page-state .title{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-heading5-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));font-size:var(--forge-typography-heading5-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading5-font-size-scale, 1.5)));font-weight:var(--forge-typography-heading5-font-weight,500);line-height:var(--forge-typography-heading5-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading5-line-height-scale, 1.75)));letter-spacing:var(--forge-typography-heading5-letter-spacing, 0);text-transform:var(--forge-typography-heading5-text-transform,inherit);text-decoration:var(--forge-typography-heading5-text-decoration,inherit)}.forge-page-state .message{-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));font-size:var(--forge-typography-body2-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-font-size-scale, 1)));font-weight:var(--forge-typography-body2-font-weight,400);line-height:var(--forge-typography-body2-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-line-height-scale, 1.375)));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)}.forge-page-state .actions{grid-auto-flow:row}}';
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
14
13
|
* @tag forge-page-state
|
|
15
14
|
*
|
|
15
|
+
* @summary Page states display full-page messages for empty states, errors, or loading scenarios.
|
|
16
|
+
*
|
|
16
17
|
* @cssproperty --forge-page-state-width - The width of the page state.
|
|
17
18
|
* @cssproperty --forge-page-state-height - The height of the page state.
|
|
18
19
|
* @cssproperty --forge-page-state-spacing - The spacing of the page state.
|
|
@@ -29,6 +29,8 @@ declare global {
|
|
|
29
29
|
/**
|
|
30
30
|
* @tag forge-paginator
|
|
31
31
|
*
|
|
32
|
+
* @summary Paginators provide navigation controls for dividing content across multiple pages.
|
|
33
|
+
*
|
|
32
34
|
* @slot label - Overrides the label text when in the default variant.
|
|
33
35
|
* @slot range-label - Overrides the default range label with a custom label when in the default variant.
|
|
34
36
|
* @slot alternative-range-label - Overrides the default range label with a custom label when in the `alternative` variant.
|
|
@@ -19,6 +19,8 @@ const styles = ':host{display:block}:host([hidden]){display:none}.forge-paginato
|
|
|
19
19
|
/**
|
|
20
20
|
* @tag forge-paginator
|
|
21
21
|
*
|
|
22
|
+
* @summary Paginators provide navigation controls for dividing content across multiple pages.
|
|
23
|
+
*
|
|
22
24
|
* @slot label - Overrides the label text when in the default variant.
|
|
23
25
|
* @slot range-label - Overrides the default range label with a custom label when in the default variant.
|
|
24
26
|
* @slot alternative-range-label - Overrides the default range label with a custom label when in the `alternative` variant.
|
package/esm/popover/popover.js
CHANGED
|
@@ -13,7 +13,7 @@ import { OverlayAware } from '../overlay/base/overlay-aware';
|
|
|
13
13
|
import { coerceStringToArray } from '../core/utils/utils';
|
|
14
14
|
import { tryDismiss } from '../core/utils/dismissible-stack';
|
|
15
15
|
const template = '<template><forge-overlay exportparts=\"root:overlay\"><div class=\"forge-popover\" part=\"surface\"><slot></slot></div></forge-overlay></template>';
|
|
16
|
-
const styles = '@keyframes zoomin{from{transform:scale(.8)}to{transform:scale(1)}}@keyframes zoomout{from{transform:scale(1)}to{transform:scale(.8)}}@keyframes slidein{from{transform:translateX(var(--_popover-slidein-x)) translateY(var(--_popover-slidein-y))}to{transform:translateX(0) translateY(0)}}@keyframes slideout{from{transform:translateX(0) translateY(0)}to{transform:translateX(var(--_popover-slidein-x)) translateY(var(--_popover-slidein-y))}}@keyframes fadein{from{opacity:0}to{opacity:1}}@keyframes fadeout{from{opacity:1}to{opacity:0}}@layer base,animation,preset,reduced-motion; @layer base{:host{display:contents;--forge-theme-surface:var(--forge-theme-surface-bright, #ffffff)}:host([hidden]){display:none}forge-overlay{--_popover-width:var(--forge-popover-width, auto);--_popover-height:var(--forge-popover-height, auto);--_popover-min-width:var(--forge-popover-min-width, none);--_popover-max-width:var(--forge-popover-max-width, none);--_popover-min-height:var(--forge-popover-min-height, none);--_popover-max-height:var(--forge-popover-max-height, none);--_popover-background:var(--forge-popover-background, var(--forge-theme-surface-bright, #ffffff));--_popover-border-radius:var(--forge-popover-border-radius, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));--_popover-box-shadow:var(--forge-popover-box-shadow, var(--forge-theme-surface-bright-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12)));--_popover-border-width:var(--forge-popover-border-width, 0);--_popover-border-style:var(--forge-popover-border-style, solid);--_popover-border-color:var(--forge-popover-border-color, var(--forge-theme-outline, #e0e0e0));--_popover-overflow:var(--forge-popover-overflow, initial);--_popover-arrow-size:var(--forge-popover-arrow-size, 12px);--_popover-arrow-height:var(--forge-popover-arrow-height, var(--_popover-arrow-size));--_popover-arrow-width:var(--forge-popover-arrow-width, var(--_popover-arrow-size));--_popover-arrow-background-color:var(--forge-popover-arrow-background-color, var(--_popover-background));--_popover-arrow-top-rotation:var(--forge-popover-arrow-top-rotation, 135deg);--_popover-arrow-right-rotation:var(--forge-popover-arrow-right-rotation, 225deg);--_popover-arrow-bottom-rotation:var(--forge-popover-arrow-bottom-rotation, 315deg);--_popover-arrow-left-rotation:var(--forge-popover-arrow-left-rotation, 45deg);--_popover-arrow-border-width:var(--forge-popover-arrow-border-width, var(--forge-border-thin, 1px));--_popover-animation-enter-duration:var(--forge-popover-animation-enter-duration, var(--forge-animation-duration-short3, 150ms));--_popover-animation-enter-timing:var(--forge-popover-animation-enter-timing, var(--forge-animation-easing-decelerate, cubic-bezier(0, 0, 0, 1)));--_popover-animation-exit-duration:var(--forge-popover-animation-exit-duration, var(--forge-animation-duration-short2, 100ms));--_popover-animation-exit-timing:var(--forge-popover-animation-exit-timing, var(--forge-animation-easing-accelerate, cubic-bezier(0.3, 0, 1, 1)));--_popover-zoom-enter-duration:var(--forge-popover-zoom-enter-duration, var(--_popover-animation-enter-duration));--_popover-zoom-enter-timing:var(--forge-popover-zoom-enter-timing, var(--_popover-animation-enter-timing));--_popover-zoom-exit-duration:var(--forge-popover-zoom-exit-duration, var(--_popover-animation-exit-duration));--_popover-zoom-exit-timing:var(--forge-popover-zoom-exit-timing, var(--_popover-animation-exit-timing));--_popover-slide-enter-duration:var(--forge-popover-slide-enter-duration, var(--_popover-animation-enter-duration));--_popover-slide-enter-timing:var(--forge-popover-slide-enter-timing, var(--_popover-animation-enter-timing));--_popover-slide-exit-duration:var(--forge-popover-slide-exit-duration, var(--_popover-animation-exit-duration));--_popover-slide-exit-timing:var(--forge-popover-slide-exit-timing, var(--_popover-animation-exit-timing));--_popover-slide-offset:var(--forge-popover-slide-offset, 24px);--_popover-fade-enter-duration:var(--forge-popover-fade-enter-duration, var(--forge-animation-duration-medium2, 300ms));--_popover-fade-enter-timing:var(--forge-popover-fade-enter-timing, var(--_popover-animation-enter-timing));--_popover-fade-exit-duration:var(--forge-popover-fade-exit-duration, var(--_popover-animation-exit-duration));--_popover-fade-exit-timing:var(--forge-popover-fade-exit-timing, var(--_popover-animation-exit-timing));--_popover-position-inline-start:var(--forge-popover-position-inline-start, auto);--_popover-position-inline-end:var(--forge-popover-position-inline-end, auto);--_popover-position-block-start:var(--forge-popover-position-block-start, auto);--_popover-position-block-end:var(--forge-popover-position-block-end, auto);--_popover-preset-dropdown-max-height:var(--forge-popover-preset-dropdown-max-height, 256px);--_popover-preset-dropdown-overflow:var(--forge-popover-preset-dropdown-overflow, auto visible);--_popover-preset-dropdown-padding-block:var(--forge-popover-preset-dropdown-padding-block, var(--forge-spacing-xsmall, 8px));--_popover-preset-list-padding-block:var(--forge-popover-preset-list-padding-block, var(--forge-spacing-xsmall, 8px))}.forge-popover{--_popover-arrow-translate-x:0;--_popover-arrow-translate-y:0;--_popover-arrow-rotation:0;--_popover-slidein-x:0;--_popover-slidein-y:0;--_popover-zoomin-origin:50% 50% 0;--_popover-arrow-clip-path:polygon(calc(var(--_popover-border-width) * -1) calc(var(--_popover-border-width) * -1), calc(100% + var(--_popover-border-width)) calc(var(--_popover-border-width) * -1), calc(100% + var(--_popover-border-width)) calc(100% + var(--_popover-border-width)))}.forge-popover{position:relative;overflow:var(--_popover-overflow);box-sizing:border-box;background:var(--_popover-background);border-radius:var(--_popover-border-radius);box-shadow:var(--_popover-box-shadow);border-width:var(--_popover-border-width);border-style:var(--_popover-border-style);border-color:var(--_popover-border-color);width:var(--_popover-width);height:var(--_popover-height);min-width:var(--_popover-min-width);max-width:var(--_popover-max-width);min-height:var(--_popover-min-height);max-height:var(--_popover-max-height)}.forge-popover::-webkit-scrollbar{height:var(--forge-scrollbar-height,16px);width:var(--forge-scrollbar-width,16px)}.forge-popover::-webkit-scrollbar-track{background-color:var(--forge-scrollbar-track-container,var(--forge-theme-surface-container-low,#ebebeb))}.forge-popover::-webkit-scrollbar-track:hover{background-color:var(--forge-scrollbar-track-container-hover,var(--forge-theme-surface-container-low,#ebebeb))}.forge-popover::-webkit-scrollbar-corner{background-color:var(--forge-scrollbar-track-container,var(--forge-theme-surface-container-low,#ebebeb))}.forge-popover::-webkit-scrollbar-thumb{height:var(--forge-scrollbar-thumb-min-height,32px);width:var(--forge-scrollbar-thumb-min-width,32px);border-radius:var(--forge-scrollbar-border-radius,calc(var(--forge-shape-full,9999px) * var(--forge-shape-factor,1)));border-width:var(--forge-scrollbar-border-width,3px);border-style:solid;border-color:transparent;background-color:var(--forge-scrollbar-thumb-container,var(--forge-theme-surface-container-medium,#c2c2c2));background-clip:content-box}.forge-popover::-webkit-scrollbar-thumb:hover{background-color:var(--forge-scrollbar-thumb-container-hover,var(--forge-theme-surface-container-high,#9e9e9e))}:host([open][no-anchor]) forge-overlay{--forge-overlay-position-inline-start:var(--_popover-position-inline-start);--forge-overlay-position-inline-end:var(--_popover-position-inline-end);--forge-overlay-position-block-start:var(--_popover-position-block-start);--forge-overlay-position-block-end:var(--_popover-position-block-end)}:host([arrow]) .forge-popover{--_popover-border-width:var(--_popover-arrow-border-width)}:host([arrow]) .arrow{position:absolute;background-color:var(--_popover-arrow-background-color);height:var(--_popover-arrow-height);width:var(--_popover-arrow-width);box-shadow:var(--_popover-box-shadow);border-width:var(--_popover-border-width);border-style:var(--_popover-border-style);border-color:var(--_popover-border-color);transform:translate(var(--_popover-arrow-translate-x),var(--_popover-arrow-translate-y)) rotate(var(--_popover-arrow-rotation));clip-path:var(--_popover-arrow-clip-path)}:host([arrow]) forge-overlay[position-placement^=top] .arrow{--_popover-arrow-translate-y:var(--forge-popover-arrow-translate-y, calc(var(--_popover-border-width) * -1));--_popover-arrow-rotation:var(--forge-popover-arrow-rotation, var(--_popover-arrow-top-rotation))}:host([arrow]) forge-overlay[position-placement^=right] .arrow{--_popover-arrow-translate-x:var(--forge-popover-arrow-translate-x, var(--_popover-border-width));--_popover-arrow-rotation:var(--forge-popover-arrow-rotation, var(--_popover-arrow-right-rotation))}:host([arrow]) forge-overlay[position-placement^=bottom] .arrow{--_popover-arrow-translate-y:var(--forge-popover-arrow-translate-y, var(--_popover-border-width));--_popover-arrow-rotation:var(--forge-popover-arrow-rotation, var(--_popover-arrow-bottom-rotation))}:host([arrow]) forge-overlay[position-placement^=left] .arrow{--_popover-arrow-translate-x:var(--forge-popover-arrow-translate-x, calc(var(--_popover-border-width) * -1));--_popover-arrow-rotation:var(--forge-popover-arrow-rotation, var(--_popover-arrow-left-rotation))}}@layer preset{:host([preset=dropdown]) .forge-popover{--_popover-max-height:var(--_popover-preset-dropdown-max-height);--_popover-overflow:var(--_popover-preset-dropdown-overflow);padding-block:var(--_popover-preset-dropdown-padding-block)}:host([preset=list]) .forge-popover{padding-block:var(--_popover-preset-list-padding-block)}:host([constrain-viewport-width]) .forge-popover{--_popover-max-width:var(--forge-popover-max-width, 100vw)}}@layer animation{:host(:not([animation-type])) .forge-popover,:host([animation-type=zoom]) .forge-popover{animation-duration:var(--_popover-zoom-enter-duration);animation-timing-function:var(--_popover-zoom-enter-timing);animation-name:fadein,zoomin;transform-origin:var(--_popover-zoomin-origin)}:host(:not([animation-type])) forge-overlay[open][position-placement^=top]:not([position-placement*=\"-\"]) .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=top]:not([position-placement*=\"-\"]) .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, bottom center)}:host(:not([animation-type])) forge-overlay[open][position-placement^=top][position-placement$=-start] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=top][position-placement$=-start] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, bottom left)}:host(:not([animation-type])) forge-overlay[open][position-placement^=top][position-placement$=-end] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=top][position-placement$=-end] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, bottom right)}:host(:not([animation-type])) forge-overlay[open][position-placement^=right]:not([position-placement*=\"-\"]) .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=right]:not([position-placement*=\"-\"]) .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, left center)}:host(:not([animation-type])) forge-overlay[open][position-placement^=right][position-placement$=-start] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=right][position-placement$=-start] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, left top)}:host(:not([animation-type])) forge-overlay[open][position-placement^=right][position-placement$=-end] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=right][position-placement$=-end] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, left bottom)}:host(:not([animation-type])) forge-overlay[open][position-placement^=bottom]:not([position-placement*=\"-\"]) .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=bottom]:not([position-placement*=\"-\"]) .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, top center)}:host(:not([animation-type])) forge-overlay[open][position-placement^=bottom][position-placement$=-start] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=bottom][position-placement$=-start] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, top left)}:host(:not([animation-type])) forge-overlay[open][position-placement^=bottom][position-placement$=-end] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=bottom][position-placement$=-end] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, top right)}:host(:not([animation-type])) forge-overlay[open][position-placement^=left]:not([position-placement*=\"-\"]) .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=left]:not([position-placement*=\"-\"]) .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, right center)}:host(:not([animation-type])) forge-overlay[open][position-placement^=left][position-placement$=-start] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=left][position-placement$=-start] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, right top)}:host(:not([animation-type])) forge-overlay[open][position-placement^=left][position-placement$=-end] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=left][position-placement$=-end] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, right bottom)}:host(:not([animation-type])) forge-overlay[open] .forge-popover.exiting,:host([animation-type=zoom]) forge-overlay[open] .forge-popover.exiting{animation-duration:var(--_popover-zoom-exit-duration);animation-timing-function:var(--_popover-zoom-exit-timing);animation-name:fadeout,zoomout}:host([animation-type=slide]) .forge-popover{animation-duration:var(--_popover-slide-enter-duration);animation-timing-function:var(--_popover-slide-enter-timing);animation-name:fadein,slidein}:host([animation-type=slide]) forge-overlay[open][position-placement^=top] .forge-popover{--_popover-slidein-y:var(--forge-popover-slidein-y, var(--_popover-slide-offset))}:host([animation-type=slide]) forge-overlay[open][position-placement^=right] .forge-popover{--_popover-slidein-x:var(--forge-popover-slidein-x, calc(var(--_popover-slide-offset) * -1))}:host([animation-type=slide]) forge-overlay[open][position-placement^=bottom] .forge-popover{--_popover-slidein-y:var(--forge-popover-slidein-y, calc(var(--_popover-slide-offset) * -1))}:host([animation-type=slide]) forge-overlay[open][position-placement^=left] .forge-popover{--_popover-slidein-x:var(--forge-popover-slidein-x, var(--_popover-slide-offset))}:host([animation-type=slide]) forge-overlay[open] .forge-popover.exiting{animation-duration:var(--_popover-slide-exit-duration);animation-timing-function:var(--_popover-slide-exit-timing);animation-name:fadeout,slideout}:host([animation-type=fade]) .forge-popover{animation-duration:var(--_popover-fade-enter-duration);animation-timing-function:var(--_popover-fade-enter-timing);animation-name:fadein}:host([animation-type=fade]) .forge-popover.exiting{animation-duration:var(--_popover-fade-exit-duration);animation-timing-function:var(--_popover-fade-exit-timing);animation-name:fadeout}}forge-overlay[clipped-x] .forge-popover{width:auto;min-width:0;max-width:100vw;overflow-x:auto}forge-overlay[clipped-y] .forge-popover{height:auto;min-height:0;overflow-y:auto}@layer reduced-motion{@media (prefers-reduced-motion:reduce){.forge-popover{animation:none}.forge-popover.exiting{animation:none}}}';
|
|
16
|
+
const styles = '@keyframes zoomin{from{transform:scale(.8)}to{transform:scale(1)}}@keyframes zoomout{from{transform:scale(1)}to{transform:scale(.8)}}@keyframes slidein{from{transform:translateX(var(--_popover-slidein-x)) translateY(var(--_popover-slidein-y))}to{transform:translateX(0) translateY(0)}}@keyframes slideout{from{transform:translateX(0) translateY(0)}to{transform:translateX(var(--_popover-slidein-x)) translateY(var(--_popover-slidein-y))}}@keyframes fadein{from{opacity:0}to{opacity:1}}@keyframes fadeout{from{opacity:1}to{opacity:0}}@layer base,animation,preset,reduced-motion; @layer base{:host{display:contents;--forge-theme-surface:var(--forge-theme-surface-bright, #ffffff)}:host([hidden]){display:none}forge-overlay{--_popover-width:var(--forge-popover-width, auto);--_popover-height:var(--forge-popover-height, auto);--_popover-min-width:var(--forge-popover-min-width, none);--_popover-max-width:var(--forge-popover-max-width, none);--_popover-min-height:var(--forge-popover-min-height, none);--_popover-max-height:var(--forge-popover-max-height, none);--_popover-background:var(--forge-popover-background, var(--forge-theme-surface-bright, #ffffff));--_popover-border-radius:var(--forge-popover-border-radius, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));--_popover-box-shadow:var(--forge-popover-box-shadow, var(--forge-theme-surface-bright-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12)));--_popover-border-width:var(--forge-popover-border-width, 0);--_popover-border-style:var(--forge-popover-border-style, solid);--_popover-border-color:var(--forge-popover-border-color, var(--forge-theme-outline, #e0e0e0));--_popover-overflow:var(--forge-popover-overflow, initial);--_popover-arrow-size:var(--forge-popover-arrow-size, 12px);--_popover-arrow-height:var(--forge-popover-arrow-height, var(--_popover-arrow-size));--_popover-arrow-width:var(--forge-popover-arrow-width, var(--_popover-arrow-size));--_popover-arrow-background-color:var(--forge-popover-arrow-background-color, var(--_popover-background));--_popover-arrow-top-rotation:var(--forge-popover-arrow-top-rotation, 135deg);--_popover-arrow-right-rotation:var(--forge-popover-arrow-right-rotation, 225deg);--_popover-arrow-bottom-rotation:var(--forge-popover-arrow-bottom-rotation, 315deg);--_popover-arrow-left-rotation:var(--forge-popover-arrow-left-rotation, 45deg);--_popover-arrow-border-width:var(--forge-popover-arrow-border-width, var(--forge-border-thin, 1px));--_popover-animation-enter-duration:var(--forge-popover-animation-enter-duration, var(--forge-animation-duration-short3, 150ms));--_popover-animation-enter-timing:var(--forge-popover-animation-enter-timing, var(--forge-animation-easing-decelerate, cubic-bezier(0, 0, 0, 1)));--_popover-animation-exit-duration:var(--forge-popover-animation-exit-duration, var(--forge-animation-duration-short2, 100ms));--_popover-animation-exit-timing:var(--forge-popover-animation-exit-timing, var(--forge-animation-easing-accelerate, cubic-bezier(0.3, 0, 1, 1)));--_popover-zoom-enter-duration:var(--forge-popover-zoom-enter-duration, var(--_popover-animation-enter-duration));--_popover-zoom-enter-timing:var(--forge-popover-zoom-enter-timing, var(--_popover-animation-enter-timing));--_popover-zoom-exit-duration:var(--forge-popover-zoom-exit-duration, var(--_popover-animation-exit-duration));--_popover-zoom-exit-timing:var(--forge-popover-zoom-exit-timing, var(--_popover-animation-exit-timing));--_popover-slide-enter-duration:var(--forge-popover-slide-enter-duration, var(--_popover-animation-enter-duration));--_popover-slide-enter-timing:var(--forge-popover-slide-enter-timing, var(--_popover-animation-enter-timing));--_popover-slide-exit-duration:var(--forge-popover-slide-exit-duration, var(--_popover-animation-exit-duration));--_popover-slide-exit-timing:var(--forge-popover-slide-exit-timing, var(--_popover-animation-exit-timing));--_popover-slide-offset:var(--forge-popover-slide-offset, 24px);--_popover-fade-enter-duration:var(--forge-popover-fade-enter-duration, var(--forge-animation-duration-medium2, 300ms));--_popover-fade-enter-timing:var(--forge-popover-fade-enter-timing, var(--_popover-animation-enter-timing));--_popover-fade-exit-duration:var(--forge-popover-fade-exit-duration, var(--_popover-animation-exit-duration));--_popover-fade-exit-timing:var(--forge-popover-fade-exit-timing, var(--_popover-animation-exit-timing));--_popover-position-inline-start:var(--forge-popover-position-inline-start, auto);--_popover-position-inline-end:var(--forge-popover-position-inline-end, auto);--_popover-position-block-start:var(--forge-popover-position-block-start, auto);--_popover-position-block-end:var(--forge-popover-position-block-end, auto);--_popover-preset-dropdown-max-height:var(--forge-popover-preset-dropdown-max-height, 256px);--_popover-preset-dropdown-overflow:var(--forge-popover-preset-dropdown-overflow, auto visible);--_popover-preset-dropdown-padding-block:var(--forge-popover-preset-dropdown-padding-block, var(--forge-spacing-xsmall, 8px));--_popover-preset-list-padding-block:var(--forge-popover-preset-list-padding-block, var(--forge-spacing-xsmall, 8px))}.forge-popover{--_popover-arrow-translate-x:0;--_popover-arrow-translate-y:0;--_popover-arrow-rotation:0;--_popover-slidein-x:0;--_popover-slidein-y:0;--_popover-zoomin-origin:50% 50% 0;--_popover-arrow-clip-path:polygon(calc(var(--_popover-border-width) * -1) calc(var(--_popover-border-width) * -1), calc(100% + var(--_popover-border-width)) calc(var(--_popover-border-width) * -1), calc(100% + var(--_popover-border-width)) calc(100% + var(--_popover-border-width)))}.forge-popover::-webkit-scrollbar{height:var(--forge-scrollbar-height,16px);width:var(--forge-scrollbar-width,16px)}.forge-popover::-webkit-scrollbar-track{background-color:var(--forge-scrollbar-track-container,var(--forge-theme-surface-container-low,#ebebeb))}.forge-popover::-webkit-scrollbar-track:hover{background-color:var(--forge-scrollbar-track-container-hover,var(--forge-theme-surface-container-low,#ebebeb))}.forge-popover::-webkit-scrollbar-corner{background-color:var(--forge-scrollbar-track-container,var(--forge-theme-surface-container-low,#ebebeb))}.forge-popover::-webkit-scrollbar-thumb{height:var(--forge-scrollbar-thumb-min-height,32px);width:var(--forge-scrollbar-thumb-min-width,32px);border-radius:var(--forge-scrollbar-border-radius,calc(var(--forge-shape-full,9999px) * var(--forge-shape-factor,1)));border-width:var(--forge-scrollbar-border-width,3px);border-style:solid;border-color:transparent;background-color:var(--forge-scrollbar-thumb-container,var(--forge-theme-surface-container-medium,#c2c2c2));background-clip:content-box}.forge-popover::-webkit-scrollbar-thumb:hover{background-color:var(--forge-scrollbar-thumb-container-hover,var(--forge-theme-surface-container-high,#9e9e9e))}.forge-popover{position:relative;overflow:var(--_popover-overflow);box-sizing:border-box;background:var(--_popover-background);border-radius:var(--_popover-border-radius);box-shadow:var(--_popover-box-shadow);border-width:var(--_popover-border-width);border-style:var(--_popover-border-style);border-color:var(--_popover-border-color);width:var(--_popover-width);height:var(--_popover-height);min-width:var(--_popover-min-width);max-width:var(--_popover-max-width);min-height:var(--_popover-min-height);max-height:var(--_popover-max-height)}:host([open][no-anchor]) forge-overlay{--forge-overlay-position-inline-start:var(--_popover-position-inline-start);--forge-overlay-position-inline-end:var(--_popover-position-inline-end);--forge-overlay-position-block-start:var(--_popover-position-block-start);--forge-overlay-position-block-end:var(--_popover-position-block-end)}:host([arrow]) .forge-popover{--_popover-border-width:var(--_popover-arrow-border-width)}:host([arrow]) .arrow{position:absolute;background-color:var(--_popover-arrow-background-color);height:var(--_popover-arrow-height);width:var(--_popover-arrow-width);box-shadow:var(--_popover-box-shadow);border-width:var(--_popover-border-width);border-style:var(--_popover-border-style);border-color:var(--_popover-border-color);transform:translate(var(--_popover-arrow-translate-x),var(--_popover-arrow-translate-y)) rotate(var(--_popover-arrow-rotation));clip-path:var(--_popover-arrow-clip-path)}:host([arrow]) forge-overlay[position-placement^=top] .arrow{--_popover-arrow-translate-y:var(--forge-popover-arrow-translate-y, calc(var(--_popover-border-width) * -1));--_popover-arrow-rotation:var(--forge-popover-arrow-rotation, var(--_popover-arrow-top-rotation))}:host([arrow]) forge-overlay[position-placement^=right] .arrow{--_popover-arrow-translate-x:var(--forge-popover-arrow-translate-x, var(--_popover-border-width));--_popover-arrow-rotation:var(--forge-popover-arrow-rotation, var(--_popover-arrow-right-rotation))}:host([arrow]) forge-overlay[position-placement^=bottom] .arrow{--_popover-arrow-translate-y:var(--forge-popover-arrow-translate-y, var(--_popover-border-width));--_popover-arrow-rotation:var(--forge-popover-arrow-rotation, var(--_popover-arrow-bottom-rotation))}:host([arrow]) forge-overlay[position-placement^=left] .arrow{--_popover-arrow-translate-x:var(--forge-popover-arrow-translate-x, calc(var(--_popover-border-width) * -1));--_popover-arrow-rotation:var(--forge-popover-arrow-rotation, var(--_popover-arrow-left-rotation))}}@layer preset{:host([preset=dropdown]) .forge-popover{--_popover-max-height:var(--_popover-preset-dropdown-max-height);--_popover-overflow:var(--_popover-preset-dropdown-overflow);padding-block:var(--_popover-preset-dropdown-padding-block)}:host([preset=list]) .forge-popover{padding-block:var(--_popover-preset-list-padding-block)}:host([constrain-viewport-width]) .forge-popover{--_popover-max-width:var(--forge-popover-max-width, 100vw)}}@layer animation{:host(:not([animation-type])) .forge-popover,:host([animation-type=zoom]) .forge-popover{animation-duration:var(--_popover-zoom-enter-duration);animation-timing-function:var(--_popover-zoom-enter-timing);animation-name:fadein,zoomin;transform-origin:var(--_popover-zoomin-origin)}:host(:not([animation-type])) forge-overlay[open][position-placement^=top]:not([position-placement*=\"-\"]) .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=top]:not([position-placement*=\"-\"]) .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, bottom center)}:host(:not([animation-type])) forge-overlay[open][position-placement^=top][position-placement$=-start] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=top][position-placement$=-start] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, bottom left)}:host(:not([animation-type])) forge-overlay[open][position-placement^=top][position-placement$=-end] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=top][position-placement$=-end] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, bottom right)}:host(:not([animation-type])) forge-overlay[open][position-placement^=right]:not([position-placement*=\"-\"]) .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=right]:not([position-placement*=\"-\"]) .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, left center)}:host(:not([animation-type])) forge-overlay[open][position-placement^=right][position-placement$=-start] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=right][position-placement$=-start] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, left top)}:host(:not([animation-type])) forge-overlay[open][position-placement^=right][position-placement$=-end] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=right][position-placement$=-end] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, left bottom)}:host(:not([animation-type])) forge-overlay[open][position-placement^=bottom]:not([position-placement*=\"-\"]) .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=bottom]:not([position-placement*=\"-\"]) .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, top center)}:host(:not([animation-type])) forge-overlay[open][position-placement^=bottom][position-placement$=-start] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=bottom][position-placement$=-start] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, top left)}:host(:not([animation-type])) forge-overlay[open][position-placement^=bottom][position-placement$=-end] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=bottom][position-placement$=-end] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, top right)}:host(:not([animation-type])) forge-overlay[open][position-placement^=left]:not([position-placement*=\"-\"]) .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=left]:not([position-placement*=\"-\"]) .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, right center)}:host(:not([animation-type])) forge-overlay[open][position-placement^=left][position-placement$=-start] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=left][position-placement$=-start] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, right top)}:host(:not([animation-type])) forge-overlay[open][position-placement^=left][position-placement$=-end] .forge-popover,:host([animation-type=zoom]) forge-overlay[open][position-placement^=left][position-placement$=-end] .forge-popover{--_popover-zoomin-origin:var(--forge-popover-zoomin-origin, right bottom)}:host(:not([animation-type])) forge-overlay[open] .forge-popover.exiting,:host([animation-type=zoom]) forge-overlay[open] .forge-popover.exiting{animation-duration:var(--_popover-zoom-exit-duration);animation-timing-function:var(--_popover-zoom-exit-timing);animation-name:fadeout,zoomout}:host([animation-type=slide]) .forge-popover{animation-duration:var(--_popover-slide-enter-duration);animation-timing-function:var(--_popover-slide-enter-timing);animation-name:fadein,slidein}:host([animation-type=slide]) forge-overlay[open][position-placement^=top] .forge-popover{--_popover-slidein-y:var(--forge-popover-slidein-y, var(--_popover-slide-offset))}:host([animation-type=slide]) forge-overlay[open][position-placement^=right] .forge-popover{--_popover-slidein-x:var(--forge-popover-slidein-x, calc(var(--_popover-slide-offset) * -1))}:host([animation-type=slide]) forge-overlay[open][position-placement^=bottom] .forge-popover{--_popover-slidein-y:var(--forge-popover-slidein-y, calc(var(--_popover-slide-offset) * -1))}:host([animation-type=slide]) forge-overlay[open][position-placement^=left] .forge-popover{--_popover-slidein-x:var(--forge-popover-slidein-x, var(--_popover-slide-offset))}:host([animation-type=slide]) forge-overlay[open] .forge-popover.exiting{animation-duration:var(--_popover-slide-exit-duration);animation-timing-function:var(--_popover-slide-exit-timing);animation-name:fadeout,slideout}:host([animation-type=fade]) .forge-popover{animation-duration:var(--_popover-fade-enter-duration);animation-timing-function:var(--_popover-fade-enter-timing);animation-name:fadein}:host([animation-type=fade]) .forge-popover.exiting{animation-duration:var(--_popover-fade-exit-duration);animation-timing-function:var(--_popover-fade-exit-timing);animation-name:fadeout}}forge-overlay[clipped-x] .forge-popover{width:auto;min-width:0;max-width:100vw;overflow-x:auto}forge-overlay[clipped-y] .forge-popover{height:auto;min-height:0;overflow-y:auto}@layer reduced-motion{@media (prefers-reduced-motion:reduce){.forge-popover{animation:none}.forge-popover.exiting{animation:none}}}';
|
|
17
17
|
/**
|
|
18
18
|
* @tag forge-popover
|
|
19
19
|
*
|
|
@@ -27,6 +27,8 @@ declare global {
|
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* @tag forge-profile-card
|
|
30
|
+
*
|
|
31
|
+
* @summary Profile cards display user information and actions in a structured card format.
|
|
30
32
|
*/
|
|
31
33
|
export declare class ProfileCardComponent extends BaseComponent implements IProfileCardComponent {
|
|
32
34
|
static get observedAttributes(): string[];
|
|
@@ -17,6 +17,8 @@ const template = '<template><div class=\"forge-profile-card\" part=\"root\"><div
|
|
|
17
17
|
const styles = ':host{display:block}:host([hidden]){display:none}.forge-profile-card{--_profile-card-min-width:var(--forge-profile-card-min-width, 360px);--_profile-card-shape:var(--forge-profile-card-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));--_profile-card-avatar-size:var(--forge-profile-card-avatar-size, 56px)}.forge-profile-card{min-width:var(--_profile-card-min-width);border-radius:var(--_profile-card-shape)}@media (max-width:399px){.forge-profile-card{width:100vw;min-width:unset;overflow:auto}}.forge-profile-card .info-container{display:flex;align-items:center;padding-block:var(--forge-spacing-xsmall,8px);padding-inline:var(--forge-spacing-medium,16px)}.forge-profile-card .avatar{display:flex;align-items:center;padding:var(--forge-spacing-xsmall,8px);margin-inline-end:var(--forge-spacing-medium,16px);--forge-avatar-size:var(--_profile-card-avatar-size)}.forge-profile-card .text{display:flex;flex-direction:column}.forge-profile-card .full-name{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-heading2-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));font-size:var(--forge-typography-heading2-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading2-font-size-scale, 1)));font-weight:var(--forge-typography-heading2-font-weight,500);line-height:var(--forge-typography-heading2-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading2-line-height-scale, 1.25)));letter-spacing:var(--forge-typography-heading2-letter-spacing, .0125em);text-transform:var(--forge-typography-heading2-text-transform,inherit);text-decoration:var(--forge-typography-heading2-text-decoration,inherit)}.forge-profile-card .email{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-subheading1-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));font-size:var(--forge-typography-subheading1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-subheading1-font-size-scale, .875)));font-weight:var(--forge-typography-subheading1-font-weight,400);line-height:var(--forge-typography-subheading1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-subheading1-line-height-scale, 1.125)));letter-spacing:var(--forge-typography-subheading1-letter-spacing, normal);text-transform:var(--forge-typography-subheading1-text-transform,inherit);text-decoration:var(--forge-typography-subheading1-text-decoration,inherit);color:var(--forge-theme-text-medium,rgba(0,0,0,.6))}#action-toolbar{--forge-toolbar-padding:8px}#action-toolbar forge-button:not(:last-of-type){margin-inline-end:8px}';
|
|
18
18
|
/**
|
|
19
19
|
* @tag forge-profile-card
|
|
20
|
+
*
|
|
21
|
+
* @summary Profile cards display user information and actions in a structured card format.
|
|
20
22
|
*/
|
|
21
23
|
let ProfileCardComponent = class ProfileCardComponent extends BaseComponent {
|
|
22
24
|
static get observedAttributes() {
|
|
@@ -17,6 +17,7 @@ export interface IBaseSelectCore extends IListDropdownAwareCore {
|
|
|
17
17
|
optionBuilder: SelectOptionBuilder;
|
|
18
18
|
selectedTextBuilder: SelectSelectedTextBuilder;
|
|
19
19
|
beforeValueChange: SelectBeforeValueChangeCallback<any>;
|
|
20
|
+
selectAllLabel: string;
|
|
20
21
|
appendOptions(options: ISelectOption[] | ISelectOptionGroup[]): void;
|
|
21
22
|
selectAll(): void;
|
|
22
23
|
deselectAll(): void;
|
|
@@ -30,6 +31,8 @@ export declare abstract class BaseSelectCore<T extends IBaseSelectAdapter> exten
|
|
|
30
31
|
protected _value: any;
|
|
31
32
|
protected _multiple: boolean;
|
|
32
33
|
protected _open: boolean;
|
|
34
|
+
protected _showSelectAll: boolean;
|
|
35
|
+
protected _selectAllLabel: string;
|
|
33
36
|
protected _optionBuilder: SelectOptionBuilder;
|
|
34
37
|
protected _selectedTextBuilder: SelectSelectedTextBuilder;
|
|
35
38
|
protected _selectedValues: string[];
|
|
@@ -53,6 +56,9 @@ export declare abstract class BaseSelectCore<T extends IBaseSelectAdapter> exten
|
|
|
53
56
|
constructor(_adapter: T);
|
|
54
57
|
protected abstract _onDropdownScrollEnd(): void;
|
|
55
58
|
protected _onFocus(evt: Event): void;
|
|
59
|
+
protected _onSelectAll(): void;
|
|
60
|
+
/** Updates the select all checkbox state based on current selections */
|
|
61
|
+
private _updateSelectAllState;
|
|
56
62
|
initialize(): void;
|
|
57
63
|
initializeTarget(): void;
|
|
58
64
|
destroy(): void;
|
|
@@ -61,6 +67,10 @@ export declare abstract class BaseSelectCore<T extends IBaseSelectAdapter> exten
|
|
|
61
67
|
deselectAll(): void;
|
|
62
68
|
protected get _flatOptions(): ISelectOption[];
|
|
63
69
|
private get _nonDividerOptions();
|
|
70
|
+
/** Adjusts an index from list-dropdown coordinate system to select coordinate system */
|
|
71
|
+
private _adjustIndexFromDropdown;
|
|
72
|
+
/** Adjusts an index from select coordinate system to list-dropdown coordinate system */
|
|
73
|
+
private _adjustIndexToDropdown;
|
|
64
74
|
protected _initializeValue(): void;
|
|
65
75
|
protected _onClick(evt: MouseEvent): void;
|
|
66
76
|
protected _onBlur(evt: FocusEvent): void;
|
|
@@ -87,8 +97,12 @@ export declare abstract class BaseSelectCore<T extends IBaseSelectAdapter> exten
|
|
|
87
97
|
protected _getSelectedText(): string;
|
|
88
98
|
private _onKeydown;
|
|
89
99
|
private _getFirstSelectedOptionIndex;
|
|
90
|
-
|
|
91
|
-
private
|
|
100
|
+
/** Navigation methods that work in dropdown coordinate system (includes select all when enabled) */
|
|
101
|
+
private _getPreviousHighlightableDropdownIndex;
|
|
102
|
+
private _getNextHighlightableDropdownIndex;
|
|
103
|
+
private _getFirstHighlightableDropdownIndex;
|
|
104
|
+
private _getLastHighlightableDropdownIndex;
|
|
105
|
+
private _isDropdownOptionDisabled;
|
|
92
106
|
private _filter;
|
|
93
107
|
private _onOptionsChanged;
|
|
94
108
|
private _onActiveOptionChanged;
|
|
@@ -126,4 +140,10 @@ export declare abstract class BaseSelectCore<T extends IBaseSelectAdapter> exten
|
|
|
126
140
|
/** Sets the callback to be executed when the user selects a value. */
|
|
127
141
|
get beforeValueChange(): SelectBeforeValueChangeCallback<any>;
|
|
128
142
|
set beforeValueChange(value: SelectBeforeValueChangeCallback<any>);
|
|
143
|
+
/** Gets/sets whether to show the select all option when in multiple mode. */
|
|
144
|
+
get showSelectAll(): boolean;
|
|
145
|
+
set showSelectAll(value: boolean);
|
|
146
|
+
/** Gets/sets the label for the select all option. */
|
|
147
|
+
get selectAllLabel(): string;
|
|
148
|
+
set selectAllLabel(value: string);
|
|
129
149
|
}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { isDefined, isDeepEqual, randomChars } from '@tylertech/forge-core';
|
|
7
7
|
import { BASE_SELECT_CONSTANTS } from './base-select-constants';
|
|
8
8
|
import { isSelectOptionType, SelectOptionType } from './select-utils';
|
|
9
|
+
import { LIST_DROPDOWN_CONSTANTS } from '../../list-dropdown/list-dropdown-constants';
|
|
9
10
|
import { ListDropdownAwareCore } from '../../list-dropdown/list-dropdown-aware-core';
|
|
10
11
|
export class BaseSelectCore extends ListDropdownAwareCore {
|
|
11
12
|
constructor(_adapter) {
|
|
@@ -15,6 +16,7 @@ export class BaseSelectCore extends ListDropdownAwareCore {
|
|
|
15
16
|
this._value = [];
|
|
16
17
|
this._multiple = false;
|
|
17
18
|
this._open = false;
|
|
19
|
+
this._showSelectAll = false;
|
|
18
20
|
this._selectedValues = [];
|
|
19
21
|
this._selectedLabels = [];
|
|
20
22
|
this._selectedIndexes = [];
|
|
@@ -30,6 +32,51 @@ export class BaseSelectCore extends ListDropdownAwareCore {
|
|
|
30
32
|
this._identifier = randomChars();
|
|
31
33
|
}
|
|
32
34
|
_onFocus(evt) { }
|
|
35
|
+
_onSelectAll() {
|
|
36
|
+
if (!this._multiple) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const currentlyAllSelected = this._selectedValues.length === this._nonDividerOptions.length;
|
|
40
|
+
const willSelectAll = !currentlyAllSelected;
|
|
41
|
+
// Emit the select all event
|
|
42
|
+
const newValue = willSelectAll ? this._nonDividerOptions.map(o => o.value) : [];
|
|
43
|
+
const cancelled = !this._adapter.emitHostEvent('forge-select-all', {
|
|
44
|
+
value: newValue,
|
|
45
|
+
isAllSelected: willSelectAll
|
|
46
|
+
}, true, true);
|
|
47
|
+
if (!cancelled) {
|
|
48
|
+
if (willSelectAll) {
|
|
49
|
+
this.selectAll();
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this.deselectAll();
|
|
53
|
+
}
|
|
54
|
+
// Emit the standard change event
|
|
55
|
+
const changeData = this._multiple ? [...this._selectedValues] : this._selectedValues[0];
|
|
56
|
+
this._adapter.emitHostEvent(BASE_SELECT_CONSTANTS.events.CHANGE, changeData, true, true);
|
|
57
|
+
// Update the dropdown to reflect the new selection state
|
|
58
|
+
if (this._open) {
|
|
59
|
+
// Preserve the currently active option index before updating selections
|
|
60
|
+
const activeOptionIndex = this._adapter.getActiveOptionIndex();
|
|
61
|
+
this._adapter.patchSelectedValues(this._selectedValues);
|
|
62
|
+
// Update the select all checkbox to reflect its new state
|
|
63
|
+
this._updateSelectAllState();
|
|
64
|
+
// Restore the active option to preserve highlighting
|
|
65
|
+
if (activeOptionIndex >= 0) {
|
|
66
|
+
this._adapter.highlightActiveOption(activeOptionIndex);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Updates the select all checkbox state based on current selections */
|
|
72
|
+
_updateSelectAllState() {
|
|
73
|
+
if (!this._showSelectAll || !this._multiple || !this._open) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const allSelected = this._selectedValues.length === this._nonDividerOptions.length;
|
|
77
|
+
// The select all option is always at dropdown index 0
|
|
78
|
+
this._adapter.toggleOptionMultiple(0, allSelected);
|
|
79
|
+
}
|
|
33
80
|
initialize() {
|
|
34
81
|
if (this._optionListenerDestructor) {
|
|
35
82
|
this._optionListenerDestructor();
|
|
@@ -80,6 +127,23 @@ export class BaseSelectCore extends ListDropdownAwareCore {
|
|
|
80
127
|
get _nonDividerOptions() {
|
|
81
128
|
return this._flatOptions.filter(o => !o.divider);
|
|
82
129
|
}
|
|
130
|
+
/** Adjusts an index from list-dropdown coordinate system to select coordinate system */
|
|
131
|
+
_adjustIndexFromDropdown(dropdownIndex) {
|
|
132
|
+
// If select all is shown and enabled, the first option (index 0) in the dropdown is select all
|
|
133
|
+
// So we need to subtract 1 from the dropdown index to get the actual option index
|
|
134
|
+
if (this._showSelectAll && this._multiple && dropdownIndex > 0) {
|
|
135
|
+
return dropdownIndex - 1;
|
|
136
|
+
}
|
|
137
|
+
return dropdownIndex;
|
|
138
|
+
}
|
|
139
|
+
/** Adjusts an index from select coordinate system to list-dropdown coordinate system */
|
|
140
|
+
_adjustIndexToDropdown(selectIndex) {
|
|
141
|
+
// If select all is shown and enabled, we need to add 1 to account for the select all option
|
|
142
|
+
if (this._showSelectAll && this._multiple) {
|
|
143
|
+
return selectIndex + 1;
|
|
144
|
+
}
|
|
145
|
+
return selectIndex;
|
|
146
|
+
}
|
|
83
147
|
_initializeValue() {
|
|
84
148
|
const options = (this._options.length && this._options) || this._adapter.getOptions();
|
|
85
149
|
if (isDefined(this._value) && options.length) {
|
|
@@ -136,8 +200,15 @@ export class BaseSelectCore extends ListDropdownAwareCore {
|
|
|
136
200
|
optionLimit: this._optionLimit,
|
|
137
201
|
headerBuilder: this._popupHeaderBuilder,
|
|
138
202
|
footerBuilder: this._popupFooterBuilder,
|
|
203
|
+
showSelectAll: this._showSelectAll && this._multiple,
|
|
204
|
+
selectAllLabel: this._selectAllLabel,
|
|
139
205
|
closeCallback: () => this._closeDropdown(),
|
|
140
206
|
selectCallback: (value) => {
|
|
207
|
+
// Handle select all option
|
|
208
|
+
if (value === LIST_DROPDOWN_CONSTANTS.selectAllOption.VALUE) {
|
|
209
|
+
this._onSelectAll();
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
141
212
|
const flatOptions = this._flatOptions;
|
|
142
213
|
const option = flatOptions.find(o => o.value === value);
|
|
143
214
|
if (option) {
|
|
@@ -148,6 +219,8 @@ export class BaseSelectCore extends ListDropdownAwareCore {
|
|
|
148
219
|
};
|
|
149
220
|
this._adapter.open(config);
|
|
150
221
|
this._adapter.setDismissListener(this._dismissListener);
|
|
222
|
+
// Ensure select all state is synchronized after opening dropdown
|
|
223
|
+
this._updateSelectAllState();
|
|
151
224
|
}
|
|
152
225
|
/**
|
|
153
226
|
* Closes the dropdown.
|
|
@@ -208,7 +281,18 @@ export class BaseSelectCore extends ListDropdownAwareCore {
|
|
|
208
281
|
// If we're in multiselect mode, we need to toggle the selected option
|
|
209
282
|
if (this._multiple) {
|
|
210
283
|
const isSelected = this._selectedIndexes.includes(optionIndex);
|
|
211
|
-
this.
|
|
284
|
+
const dropdownIndex = this._adjustIndexToDropdown(optionIndex);
|
|
285
|
+
this._adapter.toggleOptionMultiple(dropdownIndex, isSelected);
|
|
286
|
+
// Update select all checkbox state if it's visible
|
|
287
|
+
if (this._showSelectAll && this._open) {
|
|
288
|
+
// Preserve the currently active option index before updating select all state
|
|
289
|
+
const activeOptionIndex = this._adapter.getActiveOptionIndex();
|
|
290
|
+
this._updateSelectAllState();
|
|
291
|
+
// Restore the active option to preserve highlighting
|
|
292
|
+
if (activeOptionIndex >= 0) {
|
|
293
|
+
this._adapter.highlightActiveOption(activeOptionIndex);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
212
296
|
}
|
|
213
297
|
this._applySelection();
|
|
214
298
|
};
|
|
@@ -240,9 +324,17 @@ export class BaseSelectCore extends ListDropdownAwareCore {
|
|
|
240
324
|
return !cancelled;
|
|
241
325
|
}
|
|
242
326
|
_selectActiveOption() {
|
|
243
|
-
const
|
|
244
|
-
if (
|
|
245
|
-
|
|
327
|
+
const activeDropdownIndex = this._adapter.getActiveOptionIndex();
|
|
328
|
+
if (activeDropdownIndex >= 0) {
|
|
329
|
+
// Check if the active option is the select all option
|
|
330
|
+
if (this._showSelectAll && this._multiple && activeDropdownIndex === 0) {
|
|
331
|
+
this._onSelectAll();
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
const adjustedIndex = this._adjustIndexFromDropdown(activeDropdownIndex);
|
|
335
|
+
if (this._nonDividerOptions[adjustedIndex]) {
|
|
336
|
+
this._onSelect(this._nonDividerOptions[adjustedIndex], adjustedIndex);
|
|
337
|
+
}
|
|
246
338
|
}
|
|
247
339
|
}
|
|
248
340
|
_tryUpdateDropdownPosition() {
|
|
@@ -366,39 +458,49 @@ export class BaseSelectCore extends ListDropdownAwareCore {
|
|
|
366
458
|
if (this._flatOptions.length === 0) {
|
|
367
459
|
return;
|
|
368
460
|
}
|
|
369
|
-
let
|
|
461
|
+
let dropdownIndex = 0;
|
|
370
462
|
if (this._open) {
|
|
371
|
-
|
|
372
|
-
if (
|
|
373
|
-
|
|
463
|
+
dropdownIndex = this._adapter.getActiveOptionIndex();
|
|
464
|
+
if (dropdownIndex === -1) {
|
|
465
|
+
// No option is currently active, so activate the first/last highlightable option based on direction
|
|
466
|
+
if (isArrowUp) {
|
|
467
|
+
dropdownIndex = this._getLastHighlightableDropdownIndex();
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
dropdownIndex = this._getFirstHighlightableDropdownIndex();
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
// An option is already active, move to the previous/next one
|
|
475
|
+
if (isArrowUp) {
|
|
476
|
+
dropdownIndex = this._getPreviousHighlightableDropdownIndex(dropdownIndex);
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
dropdownIndex = this._getNextHighlightableDropdownIndex(dropdownIndex);
|
|
480
|
+
}
|
|
374
481
|
}
|
|
375
482
|
}
|
|
376
483
|
else {
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
if (isArrowUp) {
|
|
380
|
-
optionIndex = this._getPreviousHighlightableOptionIndex(optionIndex, this._nonDividerOptions);
|
|
381
|
-
}
|
|
382
|
-
else {
|
|
383
|
-
optionIndex = this._getNextHighlightableOptionIndex(optionIndex, this._nonDividerOptions);
|
|
484
|
+
const firstSelectedIndex = this._getFirstSelectedOptionIndex();
|
|
485
|
+
dropdownIndex = firstSelectedIndex >= 0 ? this._adjustIndexToDropdown(firstSelectedIndex) : 0;
|
|
384
486
|
}
|
|
385
|
-
this._adapter.highlightActiveOption(
|
|
487
|
+
this._adapter.highlightActiveOption(dropdownIndex);
|
|
386
488
|
}
|
|
387
489
|
else if (isHomeKey) {
|
|
388
490
|
if (this._open) {
|
|
389
491
|
evt.preventDefault();
|
|
390
|
-
this.
|
|
492
|
+
const firstDropdownIndex = this._getFirstHighlightableDropdownIndex();
|
|
493
|
+
if (firstDropdownIndex >= 0) {
|
|
494
|
+
this._adapter.highlightActiveOption(firstDropdownIndex);
|
|
495
|
+
}
|
|
391
496
|
}
|
|
392
497
|
}
|
|
393
498
|
else if (isEndKey) {
|
|
394
499
|
if (this._open) {
|
|
395
500
|
evt.preventDefault();
|
|
396
|
-
const
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
this._adapter.highlightActiveOption(i);
|
|
400
|
-
break;
|
|
401
|
-
}
|
|
501
|
+
const lastDropdownIndex = this._getLastHighlightableDropdownIndex();
|
|
502
|
+
if (lastDropdownIndex >= 0) {
|
|
503
|
+
this._adapter.highlightActiveOption(lastDropdownIndex);
|
|
402
504
|
}
|
|
403
505
|
}
|
|
404
506
|
}
|
|
@@ -409,31 +511,92 @@ export class BaseSelectCore extends ListDropdownAwareCore {
|
|
|
409
511
|
_getFirstSelectedOptionIndex() {
|
|
410
512
|
return this._nonDividerOptions.findIndex(option => this._selectedValues.includes(option.value));
|
|
411
513
|
}
|
|
412
|
-
|
|
514
|
+
/** Navigation methods that work in dropdown coordinate system (includes select all when enabled) */
|
|
515
|
+
_getPreviousHighlightableDropdownIndex(startIndex) {
|
|
516
|
+
if (!this._adapter.popupElement) {
|
|
517
|
+
return startIndex;
|
|
518
|
+
}
|
|
519
|
+
const listItems = this._adapter.popupElement.querySelectorAll('forge-list-item');
|
|
520
|
+
const totalItems = listItems.length;
|
|
521
|
+
if (totalItems === 0) {
|
|
522
|
+
return startIndex;
|
|
523
|
+
}
|
|
413
524
|
let index = startIndex;
|
|
414
|
-
|
|
415
|
-
index
|
|
525
|
+
do {
|
|
526
|
+
if (index <= 0) {
|
|
527
|
+
index = totalItems - 1;
|
|
528
|
+
}
|
|
529
|
+
else {
|
|
530
|
+
index--;
|
|
531
|
+
}
|
|
532
|
+
const listItem = listItems[index];
|
|
533
|
+
if (listItem && !this._isDropdownOptionDisabled(listItem)) {
|
|
534
|
+
return index;
|
|
535
|
+
}
|
|
536
|
+
} while (index !== startIndex);
|
|
537
|
+
return startIndex;
|
|
538
|
+
}
|
|
539
|
+
_getNextHighlightableDropdownIndex(startIndex) {
|
|
540
|
+
if (!this._adapter.popupElement) {
|
|
541
|
+
return startIndex;
|
|
416
542
|
}
|
|
417
|
-
|
|
418
|
-
|
|
543
|
+
const listItems = this._adapter.popupElement.querySelectorAll('forge-list-item');
|
|
544
|
+
const totalItems = listItems.length;
|
|
545
|
+
if (totalItems === 0) {
|
|
546
|
+
return startIndex;
|
|
419
547
|
}
|
|
420
|
-
|
|
421
|
-
|
|
548
|
+
let index = startIndex;
|
|
549
|
+
do {
|
|
550
|
+
if (index === totalItems - 1) {
|
|
551
|
+
index = 0;
|
|
552
|
+
}
|
|
553
|
+
else {
|
|
554
|
+
index++;
|
|
555
|
+
}
|
|
556
|
+
const listItem = listItems[index];
|
|
557
|
+
if (listItem && !this._isDropdownOptionDisabled(listItem)) {
|
|
558
|
+
return index;
|
|
559
|
+
}
|
|
560
|
+
} while (index !== startIndex);
|
|
561
|
+
return startIndex;
|
|
562
|
+
}
|
|
563
|
+
_getFirstHighlightableDropdownIndex() {
|
|
564
|
+
if (!this._adapter.popupElement) {
|
|
565
|
+
return 0;
|
|
566
|
+
}
|
|
567
|
+
const listItems = this._adapter.popupElement.querySelectorAll('forge-list-item');
|
|
568
|
+
for (let i = 0; i < listItems.length; i++) {
|
|
569
|
+
const listItem = listItems[i];
|
|
570
|
+
if (listItem && !this._isDropdownOptionDisabled(listItem)) {
|
|
571
|
+
return i;
|
|
572
|
+
}
|
|
422
573
|
}
|
|
423
|
-
return
|
|
574
|
+
return 0;
|
|
424
575
|
}
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
index = 0;
|
|
576
|
+
_getLastHighlightableDropdownIndex() {
|
|
577
|
+
if (!this._adapter.popupElement) {
|
|
578
|
+
return 0;
|
|
429
579
|
}
|
|
430
|
-
|
|
431
|
-
|
|
580
|
+
const listItems = this._adapter.popupElement.querySelectorAll('forge-list-item');
|
|
581
|
+
for (let i = listItems.length - 1; i >= 0; i--) {
|
|
582
|
+
const listItem = listItems[i];
|
|
583
|
+
if (listItem && !this._isDropdownOptionDisabled(listItem)) {
|
|
584
|
+
return i;
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
return 0;
|
|
588
|
+
}
|
|
589
|
+
_isDropdownOptionDisabled(listItem) {
|
|
590
|
+
// Check if it's a divider (dividers are not selectable)
|
|
591
|
+
if (listItem.querySelector && listItem.querySelector('forge-divider')) {
|
|
592
|
+
return true;
|
|
432
593
|
}
|
|
433
|
-
if
|
|
434
|
-
|
|
594
|
+
// Check if the button inside is disabled
|
|
595
|
+
const button = listItem.querySelector('button');
|
|
596
|
+
if (button && button.disabled) {
|
|
597
|
+
return true;
|
|
435
598
|
}
|
|
436
|
-
return
|
|
599
|
+
return false;
|
|
437
600
|
}
|
|
438
601
|
_filter(key) {
|
|
439
602
|
// This allows for typing numbers and/or characters while the select is focused to auto-select the closest match
|
|
@@ -603,4 +766,18 @@ export class BaseSelectCore extends ListDropdownAwareCore {
|
|
|
603
766
|
set beforeValueChange(value) {
|
|
604
767
|
this._beforeValueChange = value;
|
|
605
768
|
}
|
|
769
|
+
/** Gets/sets whether to show the select all option when in multiple mode. */
|
|
770
|
+
get showSelectAll() {
|
|
771
|
+
return this._showSelectAll;
|
|
772
|
+
}
|
|
773
|
+
set showSelectAll(value) {
|
|
774
|
+
this._showSelectAll = value;
|
|
775
|
+
}
|
|
776
|
+
/** Gets/sets the label for the select all option. */
|
|
777
|
+
get selectAllLabel() {
|
|
778
|
+
return this._selectAllLabel;
|
|
779
|
+
}
|
|
780
|
+
set selectAllLabel(value) {
|
|
781
|
+
this._selectAllLabel = value;
|
|
782
|
+
}
|
|
606
783
|
}
|
|
@@ -15,6 +15,8 @@ declare global {
|
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* @tag forge-option
|
|
18
|
+
*
|
|
19
|
+
* @summary Options represent individual selectable items within select components and menus.
|
|
18
20
|
*/
|
|
19
21
|
export declare class OptionComponent extends BaseComponent implements IOptionComponent {
|
|
20
22
|
static get observedAttributes(): string[];
|
|
@@ -11,6 +11,8 @@ import { OPTION_CONSTANTS } from './option-constants';
|
|
|
11
11
|
import { OptionCore } from './option-core';
|
|
12
12
|
/**
|
|
13
13
|
* @tag forge-option
|
|
14
|
+
*
|
|
15
|
+
* @summary Options represent individual selectable items within select components and menus.
|
|
14
16
|
*/
|
|
15
17
|
let OptionComponent = class OptionComponent extends BaseComponent {
|
|
16
18
|
static get observedAttributes() {
|
|
@@ -16,6 +16,8 @@ declare global {
|
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
18
|
* @tag forge-option-group
|
|
19
|
+
*
|
|
20
|
+
* @summary Groups related options together with an optional label within select components.
|
|
19
21
|
*/
|
|
20
22
|
export declare class OptionGroupComponent extends BaseComponent implements IOptionGroupComponent {
|
|
21
23
|
static get observedAttributes(): string[];
|
|
@@ -9,6 +9,8 @@ import { BaseComponent } from '../../core/base/base-component';
|
|
|
9
9
|
import { OPTION_GROUP_CONSTANTS } from './option-group-constants';
|
|
10
10
|
/**
|
|
11
11
|
* @tag forge-option-group
|
|
12
|
+
*
|
|
13
|
+
* @summary Groups related options together with an optional label within select components.
|
|
12
14
|
*/
|
|
13
15
|
let OptionGroupComponent = class OptionGroupComponent extends BaseComponent {
|
|
14
16
|
static get observedAttributes() {
|