@tylertech/forge 3.8.0-dev.3 → 3.8.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 +3948 -3215
- package/dist/app-bar/forge-app-bar.css +20 -11
- package/dist/forge.css +2 -2
- package/dist/lib.js +14 -14
- package/dist/lib.js.map +4 -4
- package/dist/table/forge-table.css +2 -2
- package/dist/vscode.css-custom-data.json +218 -208
- package/dist/vscode.html-custom-data.json +370 -245
- package/esm/app-bar/app-bar/app-bar-constants.d.ts +2 -0
- package/esm/app-bar/app-bar/app-bar-constants.js +2 -1
- package/esm/app-bar/app-bar/app-bar-core.d.ts +5 -1
- package/esm/app-bar/app-bar/app-bar-core.js +10 -0
- package/esm/app-bar/app-bar/app-bar.d.ts +9 -1
- package/esm/app-bar/app-bar/app-bar.js +15 -2
- package/esm/app-bar/help-button/app-bar-help-button.js +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.js +1 -1
- package/esm/app-bar/profile-button/app-bar-profile-button.d.ts +1 -1
- package/esm/app-bar/profile-button/app-bar-profile-button.js +13 -10
- package/esm/app-bar/search/app-bar-search.js +1 -1
- package/esm/autocomplete/autocomplete-core.js +5 -0
- package/esm/avatar/avatar.d.ts +4 -4
- package/esm/avatar/avatar.js +5 -6
- package/esm/badge/badge.d.ts +4 -3
- package/esm/badge/badge.js +5 -4
- package/esm/button/button-constants.d.ts +1 -1
- package/esm/button/button.js +1 -1
- package/esm/card/card.d.ts +4 -3
- package/esm/card/card.js +3 -2
- package/esm/core/base/base-lit-element.d.ts +9 -0
- package/esm/core/base/base-lit-element.js +12 -0
- package/esm/core/utils/lit-utils.d.ts +11 -0
- package/esm/core/utils/lit-utils.js +31 -0
- package/esm/dialog/dialog-adapter.d.ts +0 -1
- package/esm/dialog/dialog-adapter.js +4 -39
- package/esm/dialog/dialog-constants.d.ts +6 -2
- package/esm/dialog/dialog-constants.js +4 -4
- package/esm/dialog/dialog-core.d.ts +3 -3
- package/esm/dialog/dialog-core.js +8 -7
- package/esm/dialog/dialog.d.ts +3 -3
- package/esm/dialog/dialog.js +4 -4
- package/esm/icon-button/icon-button-constants.d.ts +1 -1
- package/esm/icon-button/icon-button.js +1 -1
- package/esm/key/key/key.d.ts +3 -2
- package/esm/key/key/key.js +3 -2
- package/esm/key/key-item/key-item.d.ts +3 -2
- package/esm/key/key-item/key-item.js +3 -2
- package/esm/list-dropdown/list-dropdown-aware-core.d.ts +22 -0
- package/esm/list-dropdown/list-dropdown-aware-core.js +30 -0
- package/esm/list-dropdown/list-dropdown-aware.d.ts +35 -0
- package/esm/list-dropdown/list-dropdown-aware.js +35 -16
- package/esm/list-dropdown/list-dropdown-constants.d.ts +22 -3
- package/esm/list-dropdown/list-dropdown-constants.js +9 -1
- package/esm/list-dropdown/list-dropdown-utils.js +6 -0
- package/esm/menu/menu-core.js +2 -0
- package/esm/menu/menu.js +1 -0
- package/esm/meter/meter/meter.d.ts +4 -2
- package/esm/meter/meter/meter.js +4 -2
- package/esm/meter/meter-group/meter-group.d.ts +3 -2
- package/esm/meter/meter-group/meter-group.js +3 -2
- package/esm/overlay/base/overlay-aware.d.ts +4 -4
- package/esm/overlay/base/overlay-aware.js +3 -3
- package/esm/select/core/base-select-core.js +5 -0
- package/esm/select/select/select.d.ts +25 -1
- package/esm/select/select/select.js +26 -1
- package/esm/split-view/split-view-panel/split-view-panel.js +1 -1
- package/esm/tabs/tab-bar/tab-bar.js +1 -1
- package/package.json +2 -2
- package/sass/app-bar/app-bar/_core.scss +0 -1
- package/sass/app-bar/app-bar/app-bar.scss +57 -23
- package/sass/app-bar/forge-app-bar.scss +41 -11
- package/sass/app-bar/search/app-bar-search.scss +3 -0
- package/sass/button/button.scss +24 -0
- package/sass/core/styles/scrollbar/index.scss +14 -0
- package/sass/core/styles/tokens/app-bar/app-bar/_tokens.scss +2 -8
- package/sass/icon-button/icon-button.scss +8 -9
- package/sass/table/_core.scss +1 -1
- package/sass/tabs/tab-bar/tab-bar.scss +24 -0
|
@@ -14,7 +14,8 @@ import { FieldDensity, FieldLabelPosition } from '../../field';
|
|
|
14
14
|
import { IWithBaseField } from '../../field/base/with-base-field';
|
|
15
15
|
import { BaseSelectComponent, IBaseSelectComponent } from '../core';
|
|
16
16
|
import { SelectCore } from './select-core';
|
|
17
|
-
|
|
17
|
+
import { IListDropdownAware } from '../../list-dropdown/list-dropdown-aware';
|
|
18
|
+
export interface ISelectComponent extends IWithFormAssociation, IWithFocusable, IWithLabelAwareness, IWithElementInternals, IWithDefaultAria, IWithBaseField, IBaseSelectComponent, IListDropdownAware {
|
|
18
19
|
label: string;
|
|
19
20
|
placeholder: string;
|
|
20
21
|
setFormValue(value: FormValue | null, state?: FormValue | null | undefined): void;
|
|
@@ -63,6 +64,20 @@ declare const SelectComponent_base: import("../../constants").AbstractConstructo
|
|
|
63
64
|
* @property {SelectOptionBuilder} optionBuilder - Gets/sets the option builder function.
|
|
64
65
|
* @property {SelectSelectedTextBuilder} selectedTextBuilder - Gets/sets the selected text builder function.
|
|
65
66
|
* @property {SelectBeforeValueChangeCallback<any>} beforeValueChange - Gets/sets the before value change callback.
|
|
67
|
+
* @property {string | string[]; - } popupClasses - Gets/sets the list of classes to apply to the popup element.
|
|
68
|
+
* @property {ListDropdownHeaderBuilder} popupHeaderBuilder - Gets/sets the callback function for generating header content within the popup.
|
|
69
|
+
* @property {ListDropdownFooterBuilder} popupFooterBuilder - Gets/sets the callback function for generating header content within the popup.
|
|
70
|
+
* @property {boolean} [syncPopupWidth=false] - Gets/sets whether the popup width is synchronized with the popup target width.
|
|
71
|
+
* @property {number} optionLimit - Gets/sets the maximum number of options to display in the dropdown.
|
|
72
|
+
* @property {boolean} [observeScroll=false] - Controls the observation of scroll events on the dropdown.
|
|
73
|
+
* @property {number} [observeScrollThreshold=0] - The number of pixels from the bottom to trigger the scroll bottom event. Only applicable if `observeScroll` is true.
|
|
74
|
+
* @property {boolean} [constrainPopupWidth=true] - Gets/sets whether the popup width will be constrained to a max width of the viewport width (default: `100vw`).
|
|
75
|
+
* @property {boolean} [wrapOptionText=false] - Gets/sets whether the options will wrap their text or not. This only applies if `constrainPopupWidth` is `true`, if there is an explicit width set via CSS.
|
|
76
|
+
* @property {OverlayPlacement} [popoverPlacement="bottom"] - Gets/sets the placement of the popover.
|
|
77
|
+
* @property {IOverlayOffset} popoverOffset - Gets/sets the offset of the popover.
|
|
78
|
+
* @property {OverlayFlipState} [popoverFlip="auto"] - Gets/sets the flip state of the popover.
|
|
79
|
+
* @property {OverlayShiftState} [popoverShift="auto"] - Gets/sets whether the popover should shift to fit within the viewport.
|
|
80
|
+
* @property {PositionPlacement | null} popoverFallbackPlacements - Gets/sets the fallback placements of the popover.
|
|
66
81
|
*
|
|
67
82
|
* @attribute {string} label - Controls the label text.
|
|
68
83
|
* @attribute {string} placeholder - Controls the placeholder text.
|
|
@@ -70,6 +85,15 @@ declare const SelectComponent_base: import("../../constants").AbstractConstructo
|
|
|
70
85
|
* @attribute {number | number[]} selected-index - Gets/sets the selected index.
|
|
71
86
|
* @attribute {boolean} multiple - Gets/sets the multiple select state.
|
|
72
87
|
* @attribute {boolean} open - Gets/sets the open state.
|
|
88
|
+
* @attribute {boolean} [sync-popup-width=false] - Gets/sets whether the popup width is synchronized with the popup target width.
|
|
89
|
+
* @attribute {number} option-limit - Gets/sets the maximum number of options to display in the dropdown.
|
|
90
|
+
* @attribute {boolean} [observe-scroll=false] - Controls the observation of scroll events on the dropdown.
|
|
91
|
+
* @attribute {number} [observe-scroll-threshold=0] - The number of pixels from the bottom to trigger the scroll bottom event. Only applicable if `observeScroll` is true.
|
|
92
|
+
* @attribute {boolean} [wrap-option-text=false] - Gets/sets whether the options will wrap their text or not. This only applies if `constrainPopupWidth` is `true`, if there is an explicit width set via CSS.
|
|
93
|
+
* @attribute {OverlayPlacement} [popover-placement="bottom"] - Gets/sets the placement of the popover.
|
|
94
|
+
* @attribute {IOverlayOffset} popover-offset - Gets/sets the offset of the popover.
|
|
95
|
+
* @attribute {OverlayFlipState} [popover-flip="auto"] - Gets/sets the flip state of the popover.
|
|
96
|
+
* @attribute {OverlayShiftState} [popover-shift="auto"] - Gets/sets whether the popover should shift to fit within the viewport.
|
|
73
97
|
*
|
|
74
98
|
* @cssproperty --forge-select-placeholder-color - The color of the placeholder text.
|
|
75
99
|
* @cssproperty --forge-field-background - The background of the field surface.
|
|
@@ -27,7 +27,8 @@ import { OptionGroupComponent } from '../option-group';
|
|
|
27
27
|
import { SelectAdapter } from './select-adapter';
|
|
28
28
|
import { SELECT_CONSTANTS } from './select-constants';
|
|
29
29
|
import { SelectCore } from './select-core';
|
|
30
|
-
|
|
30
|
+
import { ListDropdownAware } from '../../list-dropdown/list-dropdown-aware';
|
|
31
|
+
const template = '<template><forge-field id=\"field\" popover-icon focus-indicator-allow-focus focus-indicator-focus-mode=\"focus\"><span id=\"select-label\" slot=\"label\"></span><slot slot=\"start\" name=\"start\"></slot><div data-forge-field-input class=\"selected-text-container\" part=\"text-container\" aria-live=\"assertive\" aria-atomic=\"true\"><slot name=\"value\"><span id=\"selected-text\" class=\"selected-text\" part=\"text\"></span></slot></div><slot slot=\"end\" name=\"end\"></slot><slot slot=\"accessory\" name=\"accessory\"></slot><slot slot=\"support-text\" name=\"support-text\"></slot><slot slot=\"support-text-end\" name=\"support-text-end\"></slot><slot slot=\"start\" name=\"leading\"></slot><slot slot=\"end\" name=\"trailing\"></slot><slot slot=\"accessory\" name=\"addon-end\"></slot><slot slot=\"support-text\" name=\"helper-text\"></slot></forge-field></template>';
|
|
31
32
|
const styles = ':host{display:block;outline:0}:host([hidden]){display:none}forge-field{--_select-placeholder-color:var(--forge-select-placeholder-color, var(--forge-field-placeholder-color, var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6))))}.selected-text-container{display:grid;align-items:center;cursor:pointer}.selected-text,::slotted([slot=value]){white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.selected-text:empty::before{content:attr(placeholder);color:var(--_select-placeholder-color);font-size:inherit}:host([disabled]) .selected-text-container{cursor:not-allowed}forge-field{display:contents}';
|
|
32
33
|
/**
|
|
33
34
|
* @tag forge-select
|
|
@@ -60,6 +61,20 @@ const styles = ':host{display:block;outline:0}:host([hidden]){display:none}forge
|
|
|
60
61
|
* @property {SelectOptionBuilder} optionBuilder - Gets/sets the option builder function.
|
|
61
62
|
* @property {SelectSelectedTextBuilder} selectedTextBuilder - Gets/sets the selected text builder function.
|
|
62
63
|
* @property {SelectBeforeValueChangeCallback<any>} beforeValueChange - Gets/sets the before value change callback.
|
|
64
|
+
* @property {string | string[]; - } popupClasses - Gets/sets the list of classes to apply to the popup element.
|
|
65
|
+
* @property {ListDropdownHeaderBuilder} popupHeaderBuilder - Gets/sets the callback function for generating header content within the popup.
|
|
66
|
+
* @property {ListDropdownFooterBuilder} popupFooterBuilder - Gets/sets the callback function for generating header content within the popup.
|
|
67
|
+
* @property {boolean} [syncPopupWidth=false] - Gets/sets whether the popup width is synchronized with the popup target width.
|
|
68
|
+
* @property {number} optionLimit - Gets/sets the maximum number of options to display in the dropdown.
|
|
69
|
+
* @property {boolean} [observeScroll=false] - Controls the observation of scroll events on the dropdown.
|
|
70
|
+
* @property {number} [observeScrollThreshold=0] - The number of pixels from the bottom to trigger the scroll bottom event. Only applicable if `observeScroll` is true.
|
|
71
|
+
* @property {boolean} [constrainPopupWidth=true] - Gets/sets whether the popup width will be constrained to a max width of the viewport width (default: `100vw`).
|
|
72
|
+
* @property {boolean} [wrapOptionText=false] - Gets/sets whether the options will wrap their text or not. This only applies if `constrainPopupWidth` is `true`, if there is an explicit width set via CSS.
|
|
73
|
+
* @property {OverlayPlacement} [popoverPlacement="bottom"] - Gets/sets the placement of the popover.
|
|
74
|
+
* @property {IOverlayOffset} popoverOffset - Gets/sets the offset of the popover.
|
|
75
|
+
* @property {OverlayFlipState} [popoverFlip="auto"] - Gets/sets the flip state of the popover.
|
|
76
|
+
* @property {OverlayShiftState} [popoverShift="auto"] - Gets/sets whether the popover should shift to fit within the viewport.
|
|
77
|
+
* @property {PositionPlacement | null} popoverFallbackPlacements - Gets/sets the fallback placements of the popover.
|
|
63
78
|
*
|
|
64
79
|
* @attribute {string} label - Controls the label text.
|
|
65
80
|
* @attribute {string} placeholder - Controls the placeholder text.
|
|
@@ -67,6 +82,15 @@ const styles = ':host{display:block;outline:0}:host([hidden]){display:none}forge
|
|
|
67
82
|
* @attribute {number | number[]} selected-index - Gets/sets the selected index.
|
|
68
83
|
* @attribute {boolean} multiple - Gets/sets the multiple select state.
|
|
69
84
|
* @attribute {boolean} open - Gets/sets the open state.
|
|
85
|
+
* @attribute {boolean} [sync-popup-width=false] - Gets/sets whether the popup width is synchronized with the popup target width.
|
|
86
|
+
* @attribute {number} option-limit - Gets/sets the maximum number of options to display in the dropdown.
|
|
87
|
+
* @attribute {boolean} [observe-scroll=false] - Controls the observation of scroll events on the dropdown.
|
|
88
|
+
* @attribute {number} [observe-scroll-threshold=0] - The number of pixels from the bottom to trigger the scroll bottom event. Only applicable if `observeScroll` is true.
|
|
89
|
+
* @attribute {boolean} [wrap-option-text=false] - Gets/sets whether the options will wrap their text or not. This only applies if `constrainPopupWidth` is `true`, if there is an explicit width set via CSS.
|
|
90
|
+
* @attribute {OverlayPlacement} [popover-placement="bottom"] - Gets/sets the placement of the popover.
|
|
91
|
+
* @attribute {IOverlayOffset} popover-offset - Gets/sets the offset of the popover.
|
|
92
|
+
* @attribute {OverlayFlipState} [popover-flip="auto"] - Gets/sets the flip state of the popover.
|
|
93
|
+
* @attribute {OverlayShiftState} [popover-shift="auto"] - Gets/sets whether the popover should shift to fit within the viewport.
|
|
70
94
|
*
|
|
71
95
|
* @cssproperty --forge-select-placeholder-color - The color of the placeholder text.
|
|
72
96
|
* @cssproperty --forge-field-background - The background of the field surface.
|
|
@@ -135,6 +159,7 @@ const styles = ':host{display:block;outline:0}:host([hidden]){display:none}forge
|
|
|
135
159
|
let SelectComponent = class SelectComponent extends WithFormAssociation(WithLabelAwareness(WithFocusable(WithDefaultAria(WithElementInternals(WithBaseField((BaseSelectComponent))))))) {
|
|
136
160
|
static get observedAttributes() {
|
|
137
161
|
return [
|
|
162
|
+
...ListDropdownAware.observedAttributes,
|
|
138
163
|
...Object.values(BASE_FIELD_CONSTANTS.observedAttributes),
|
|
139
164
|
...Object.values(SELECT_CONSTANTS.observedAttributes),
|
|
140
165
|
...Object.values(BASE_SELECT_CONSTANTS.observedAttributes)
|
|
@@ -13,7 +13,7 @@ import { SplitViewPanelCore } from './split-view-panel-core';
|
|
|
13
13
|
import { SplitViewPanelAdapter } from './split-view-panel-adapter';
|
|
14
14
|
import { IconComponent, IconRegistry } from '../../icon';
|
|
15
15
|
const template = '<template><div class=\"forge-split-view-panel\" id=\"root\" part=\"root\"><div class=\"forge-split-view-panel__handle\" id=\"handle\" part=\"handle\" role=\"separator\" aria-controls=\"content\" aria-grabbed=\"false\" tabindex=\"0\"><forge-icon class=\"forge-split-view-panel__icon\" id=\"icon\" part=\"icon\"></forge-icon><forge-state-layer target=\"handle\" id=\"state-layer\" exportparts=\"surface:state-layer\"></forge-state-layer><forge-focus-indicator inward target=\"handle\" part=\"focus-indicator\"></forge-focus-indicator></div><div class=\"forge-split-view-panel__content\" id=\"content\" part=\"content\" role=\"group\"><slot></slot></div></div></template>';
|
|
16
|
-
const styles = '.forge-split-view-panel{display:flex;width:100%;height:100%;overflow:hidden}.forge-split-view-panel__handle{color:var(--forge-theme-text-medium,rgba(0,0,0,.6));background-color:var(--forge-theme-outline,#e0e0e0);position:relative;display:flex;flex-shrink:0;justify-content:center;align-items:center;outline:0}.forge-split-view-panel__content{flex:1;overflow:hidden}.forge-split-view-panel--closed{display:none}.forge-split-view-panel--disabled #handle{pointer-events:none}.forge-split-view-panel--disabled .forge-split-view-panel__icon{display:none}.forge-split-view-panel[orientation=horizontal]{min-width:var(--forge-split-view-handle-width,8px);width:calc(var(--forge-split-view-panel-size,unset) + var(--forge-split-view-handle-width,8px));flex-direction:row}.forge-split-view-panel[orientation=horizontal] .forge-split-view-panel__handle{width:var(--forge-split-view-handle-width,8px);cursor:var(--forge-split-view-panel-cursor)}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--closing[resizable=end]{position:absolute;top:0;left:0;animation-name:
|
|
16
|
+
const styles = '.forge-split-view-panel{display:flex;width:100%;height:100%;overflow:hidden}.forge-split-view-panel__handle{color:var(--forge-theme-text-medium,rgba(0,0,0,.6));background-color:var(--forge-theme-outline,#e0e0e0);position:relative;display:flex;flex-shrink:0;justify-content:center;align-items:center;outline:0}.forge-split-view-panel__content{flex:1;overflow:hidden}.forge-split-view-panel--closed{display:none}.forge-split-view-panel--disabled #handle{pointer-events:none}.forge-split-view-panel--disabled .forge-split-view-panel__icon{display:none}.forge-split-view-panel[orientation=horizontal]{min-width:var(--forge-split-view-handle-width,8px);width:calc(var(--forge-split-view-panel-size,unset) + var(--forge-split-view-handle-width,8px));flex-direction:row}.forge-split-view-panel[orientation=horizontal] .forge-split-view-panel__handle{width:var(--forge-split-view-handle-width,8px);cursor:var(--forge-split-view-panel-cursor)}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--closing[resizable=end]{position:absolute;top:0;left:0;animation-name:u910hqj;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes u910hqj{from{transform:none}to{transform:translateX(-100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--closing[resizable=start]{position:absolute;top:0;right:0;animation-name:u910hqz;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes u910hqz{from{transform:none}to{transform:translateX(100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--opening[resizable=end]{position:absolute;top:0;left:0;animation-name:u910hrq;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes u910hrq{from{transform:none}to{transform:translateX(-100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--opening[resizable=start]{position:absolute;top:0;right:0;animation-name:u910hrw;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes u910hrw{from{transform:none}to{transform:translateX(100%)}}.forge-split-view-panel[orientation=vertical]{min-height:var(--forge-split-view-handle-width,8px);height:calc(var(--forge-split-view-panel-size,unset) + var(--forge-split-view-handle-width,8px));flex-direction:column}.forge-split-view-panel[orientation=vertical] .forge-split-view-panel__handle{height:var(--forge-split-view-handle-width,8px);cursor:var(--forge-split-view-panel-cursor)}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--closing[resizable=end]{position:absolute;top:0;left:0;animation-name:u910hsf;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes u910hsf{from{transform:none}to{transform:translateY(-100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--closing[resizable=start]{position:absolute;bottom:0;left:0;animation-name:u910ht3;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes u910ht3{from{transform:none}to{transform:translateY(100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--opening[resizable=end]{position:absolute;top:0;left:0;animation-name:u910htz;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes u910htz{from{transform:none}to{transform:translateY(-100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--opening[resizable=start]{position:absolute;bottom:0;left:0;animation-name:u910hul;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes u910hul{from{transform:none}to{transform:translateY(100%)}}:host{z-index:var(--forge-split-view-animating-layer)!important;display:block;position:relative;height:100%;width:100%;flex:0}:host([hidden]){display:none}:host(:not([resizable=start],[resizable=end])){flex:1}:host(:not([resizable=start],[resizable=end])) .forge-split-view-panel{width:100%;height:100%;min-width:0;min-height:0}:host(:not([resizable=start],[resizable=end])) .forge-split-view-panel__handle{display:none}forge-focus-indicator{--forge-focus-indicator-active-width:2px}';
|
|
17
17
|
import { StateLayerComponent } from '../../state-layer';
|
|
18
18
|
import { FocusIndicatorComponent } from '../../focus-indicator';
|
|
19
19
|
/**
|
|
@@ -17,7 +17,7 @@ import { WithElementInternals } from '../../core/mixins/internals/with-element-i
|
|
|
17
17
|
import { WithDefaultAria } from '../../core/mixins/internals/with-default-aria';
|
|
18
18
|
import { setDefaultAria } from '../../constants';
|
|
19
19
|
const template = '<template><div class=\"forge-tab-bar\" part=\"container\"><div class=\"scroll-container\" part=\"scroll-container\"><slot></slot></div></div></template>';
|
|
20
|
-
const styles = ':host{position:relative;display:block}:host([hidden]){display:none}.forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, space-between);--_tab-bar-stretch:var(--forge-tab-bar-stretch, 1);--_tab-bar-divider-color:var(--forge-tab-bar-divider-color, var(--forge-theme-outline, #e0e0e0));--_tab-bar-divider-thickness:var(--forge-tab-bar-divider-thickness, 1px)}.forge-tab-bar{position:relative;display:grid;grid-template-columns:auto 1fr auto;max-width:100%;max-height:100%;align-items:center;border-bottom:var(--_tab-bar-divider-thickness) solid var(--_tab-bar-divider-color)}.scroll-container{position:relative;display:flex;justify-content:var(--_tab-bar-justify);align-items:flex-end;box-sizing:border-box;overflow:auto;scroll-behavior:smooth;scrollbar-width:none;grid-column:2}.scroll-container::-webkit-scrollbar{display:none}::slotted(*){flex:var(--_tab-bar-stretch);align-self:stretch}::slotted([selected]){z-index:1}forge-icon-button{--forge-icon-button-shape-squared:0px}:host([vertical]) .forge-tab-bar{grid-template-columns:none;grid-template-rows:auto 1fr auto;align-items:initial;border-bottom:none;border-right:var(--_tab-bar-divider-thickness) solid var(--_tab-bar-divider-color);height:100%}:host([vertical]) .scroll-container{display:inline-flex;flex-direction:column;align-items:stretch;gap:0;grid-column:auto;grid-row:2}:host([vertical]) .scroll-button{justify-self:center}:host([inverted]:not([vertical])) .forge-tab-bar{border-bottom:none;border-top:variale(divider-thickness) solid var(--_tab-bar-divider-color)}:host([inverted][vertical]) .forge-tab-bar{border-bottom:none;border-top:var(--_tab-bar-divider-thickness) solid var(--_tab-bar-divider-color)}:host([clustered]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, flex-start);--_tab-bar-stretch:var(--forge-tab-bar-stretch, 0)}:host([clustered=start]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, flex-start)}:host([clustered=center]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, center)}:host([clustered=end]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, flex-end)}';
|
|
20
|
+
const styles = ':host{position:relative;display:block}:host([hidden]){display:none}.forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, space-between);--_tab-bar-stretch:var(--forge-tab-bar-stretch, 1);--_tab-bar-divider-color:var(--forge-tab-bar-divider-color, var(--forge-theme-outline, #e0e0e0));--_tab-bar-divider-thickness:var(--forge-tab-bar-divider-thickness, 1px)}.forge-tab-bar{position:relative;display:grid;grid-template-columns:auto 1fr auto;max-width:100%;max-height:100%;align-items:center;border-bottom:var(--_tab-bar-divider-thickness) solid var(--_tab-bar-divider-color)}.scroll-container{position:relative;display:flex;justify-content:var(--_tab-bar-justify);align-items:flex-end;box-sizing:border-box;overflow:auto;scroll-behavior:smooth;scrollbar-width:none;grid-column:2}.scroll-container::-webkit-scrollbar{display:none}::slotted(*){flex:var(--_tab-bar-stretch);align-self:stretch}::slotted([selected]){z-index:1}forge-icon-button{--forge-icon-button-shape-squared:0px}:host([vertical]) .forge-tab-bar{grid-template-columns:none;grid-template-rows:auto 1fr auto;align-items:initial;border-bottom:none;border-right:var(--_tab-bar-divider-thickness) solid var(--_tab-bar-divider-color);height:100%}:host([vertical]) .scroll-container{display:inline-flex;flex-direction:column;align-items:stretch;gap:0;grid-column:auto;grid-row:2}:host([vertical]) .scroll-button{justify-self:center}:host([inverted]:not([vertical])) .forge-tab-bar{border-bottom:none;border-top:variale(divider-thickness) solid var(--_tab-bar-divider-color)}:host([inverted][vertical]) .forge-tab-bar{border-bottom:none;border-top:var(--_tab-bar-divider-thickness) solid var(--_tab-bar-divider-color)}:host([clustered]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, flex-start);--_tab-bar-stretch:var(--forge-tab-bar-stretch, 0)}:host([clustered=start]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, flex-start)}:host([clustered=center]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, center)}:host([clustered=end]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, flex-end)}:host([theme=app-bar]){--forge-tab-active-color:var(--_app-bar-theme-foreground);--forge-tab-inactive-color:var(--_app-bar-theme-foreground-muted)}:host([theme=app-bar]) forge-icon-button{--forge-icon-button-icon-color:var(--_app-bar-theme-foreground)}';
|
|
21
21
|
/**
|
|
22
22
|
* @tag forge-tab-bar
|
|
23
23
|
*
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tylertech/forge",
|
|
3
3
|
"description": "Tyler Forge™ Web Components library",
|
|
4
|
-
"version": "3.8.0
|
|
4
|
+
"version": "3.8.0",
|
|
5
5
|
"author": "Tyler Technologies, Inc.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"repository": {
|
|
@@ -21,4 +21,4 @@
|
|
|
21
21
|
"tslib": "^2.8.1"
|
|
22
22
|
},
|
|
23
23
|
"customElements": "custom-elements.json"
|
|
24
|
-
}
|
|
24
|
+
}
|
|
@@ -17,16 +17,6 @@
|
|
|
17
17
|
//
|
|
18
18
|
|
|
19
19
|
$host-tokens: (background, foreground);
|
|
20
|
-
// $host-theme-tokens: (
|
|
21
|
-
// theme-primary,
|
|
22
|
-
// theme-on-primary,
|
|
23
|
-
// theme-text-high,
|
|
24
|
-
// theme-text-medium,
|
|
25
|
-
// theme-text-low,
|
|
26
|
-
// theme-outline-high,
|
|
27
|
-
// theme-outline-medium,
|
|
28
|
-
// theme-outline-low
|
|
29
|
-
// );
|
|
30
20
|
|
|
31
21
|
:host {
|
|
32
22
|
@include tokens($includes: $host-tokens);
|
|
@@ -44,17 +34,36 @@ $host-tokens: (background, foreground);
|
|
|
44
34
|
// Default theme
|
|
45
35
|
//
|
|
46
36
|
|
|
37
|
+
:host(:not([theme]):not([theme-mode='scoped'])) {
|
|
38
|
+
@include theme.provide(
|
|
39
|
+
(
|
|
40
|
+
primary: #{token(foreground)},
|
|
41
|
+
on-primary: rgba(black, color-emphasis.value(highest)),
|
|
42
|
+
text-high: rgba(white, color-emphasis.value(highest)),
|
|
43
|
+
text-medium: rgba(white, color-emphasis.value(medium)),
|
|
44
|
+
text-low: rgba(white, color-emphasis.value(medium-low)),
|
|
45
|
+
outline-high: rgba(white, color-emphasis.value(highest)),
|
|
46
|
+
outline-medium: rgba(white, color-emphasis.value(medium)),
|
|
47
|
+
outline-low: rgba(white, color-emphasis.value(medium-low))
|
|
48
|
+
)
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
:host([theme-mode='scoped']) {
|
|
53
|
+
.forge-app-bar {
|
|
54
|
+
color: inherit;
|
|
55
|
+
|
|
56
|
+
.logo-title-container {
|
|
57
|
+
color: #{token(foreground)};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
47
62
|
:host {
|
|
48
63
|
@include provide-theme(
|
|
49
64
|
(
|
|
50
|
-
theme-
|
|
51
|
-
theme-
|
|
52
|
-
theme-text-high: #{token(theme-text-high)},
|
|
53
|
-
theme-text-medium: #{token(theme-text-medium)},
|
|
54
|
-
theme-text-low: #{token(theme-text-low)},
|
|
55
|
-
theme-outline-high: #{token(theme-outline-high)},
|
|
56
|
-
theme-outline-medium: #{token(theme-outline-medium)},
|
|
57
|
-
theme-outline-low: #{token(theme-outline-low)}
|
|
65
|
+
theme-foreground: #{token(foreground)},
|
|
66
|
+
theme-foreground-muted: rgba(white, color-emphasis.value(medium))
|
|
58
67
|
)
|
|
59
68
|
);
|
|
60
69
|
}
|
|
@@ -133,6 +142,25 @@ $host-tokens: (background, foreground);
|
|
|
133
142
|
}
|
|
134
143
|
}
|
|
135
144
|
|
|
145
|
+
//
|
|
146
|
+
// Slotted (scoped theme mode)
|
|
147
|
+
//
|
|
148
|
+
// Attempt to auto-theme any specific slotted elements directly
|
|
149
|
+
//
|
|
150
|
+
|
|
151
|
+
:host([theme-mode='scoped']) {
|
|
152
|
+
::slotted(:where(forge-tab-bar, forge-icon-button, forge-button)) {
|
|
153
|
+
color: #{token(theme-foreground)};
|
|
154
|
+
|
|
155
|
+
@include tab.provide-theme(
|
|
156
|
+
(
|
|
157
|
+
active-color: #{token(theme-foreground)},
|
|
158
|
+
inactive-color: #{token(theme-foreground-muted)}
|
|
159
|
+
)
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
136
164
|
//
|
|
137
165
|
// Slotted - Tab bar
|
|
138
166
|
//
|
|
@@ -166,6 +194,17 @@ $host-tokens: (background, foreground);
|
|
|
166
194
|
//
|
|
167
195
|
|
|
168
196
|
:host([theme='white']) {
|
|
197
|
+
@include override(background, white, value);
|
|
198
|
+
@include override(foreground, black, value);
|
|
199
|
+
|
|
200
|
+
@include provide-theme(
|
|
201
|
+
(
|
|
202
|
+
theme-foreground-muted: rgba(black, color-emphasis.value(medium))
|
|
203
|
+
)
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
:host([theme='white']:not([theme-mode='scoped'])) {
|
|
169
208
|
@include theme.provide(
|
|
170
209
|
(
|
|
171
210
|
primary: black,
|
|
@@ -173,9 +212,4 @@ $host-tokens: (background, foreground);
|
|
|
173
212
|
text-medium: rgba(black, color-emphasis.value(medium))
|
|
174
213
|
)
|
|
175
214
|
);
|
|
176
|
-
|
|
177
|
-
.forge-app-bar {
|
|
178
|
-
@include override(background, white, value);
|
|
179
|
-
@include override(foreground, black, value);
|
|
180
|
-
}
|
|
181
215
|
}
|
|
@@ -15,18 +15,28 @@
|
|
|
15
15
|
|
|
16
16
|
.forge-app-bar {
|
|
17
17
|
@include core.tokens;
|
|
18
|
-
|
|
18
|
+
|
|
19
|
+
@include core.provide-theme(
|
|
19
20
|
(
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
text-high: rgba(white, color-emphasis.value(highest)),
|
|
23
|
-
text-medium: rgba(white, color-emphasis.value(medium)),
|
|
24
|
-
text-low: rgba(white, color-emphasis.value(medium-low)),
|
|
25
|
-
outline-high: rgba(white, color-emphasis.value(highest)),
|
|
26
|
-
outline-medium: rgba(white, color-emphasis.value(medium)),
|
|
27
|
-
outline-low: rgba(white, color-emphasis.value(medium-low))
|
|
21
|
+
theme-foreground: #{core.token(foreground)},
|
|
22
|
+
theme-foreground-muted: rgba(white, color-emphasis.value(medium))
|
|
28
23
|
)
|
|
29
24
|
);
|
|
25
|
+
|
|
26
|
+
&:not(.forge-app-bar--scoped) {
|
|
27
|
+
@include theme.provide(
|
|
28
|
+
(
|
|
29
|
+
primary: #{core.token(foreground)},
|
|
30
|
+
on-primary: rgba(black, color-emphasis.value(highest)),
|
|
31
|
+
text-high: rgba(white, color-emphasis.value(highest)),
|
|
32
|
+
text-medium: rgba(white, color-emphasis.value(medium)),
|
|
33
|
+
text-low: rgba(white, color-emphasis.value(medium-low)),
|
|
34
|
+
outline-high: rgba(white, color-emphasis.value(highest)),
|
|
35
|
+
outline-medium: rgba(white, color-emphasis.value(medium)),
|
|
36
|
+
outline-low: rgba(white, color-emphasis.value(medium-low))
|
|
37
|
+
)
|
|
38
|
+
);
|
|
39
|
+
}
|
|
30
40
|
}
|
|
31
41
|
|
|
32
42
|
.forge-app-bar {
|
|
@@ -48,6 +58,16 @@
|
|
|
48
58
|
grid-template-areas: 'start end';
|
|
49
59
|
}
|
|
50
60
|
|
|
61
|
+
&--scoped {
|
|
62
|
+
color: inherit;
|
|
63
|
+
|
|
64
|
+
.forge-app-bar__logo,
|
|
65
|
+
.forge-app-bar__title h1,
|
|
66
|
+
.forge-app-bar__logo-title-container {
|
|
67
|
+
color: #{core.token(foreground)};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
51
71
|
&--raised {
|
|
52
72
|
@include core.elevation-raised;
|
|
53
73
|
}
|
|
@@ -79,7 +99,7 @@
|
|
|
79
99
|
@include focus-indicator.standalone($type: inward);
|
|
80
100
|
@include focus-indicator.provide-theme(
|
|
81
101
|
(
|
|
82
|
-
color:
|
|
102
|
+
color: #{core.token(foreground)},
|
|
83
103
|
offset-block: #{spacing.variable(xxsmall)},
|
|
84
104
|
shape: #{shape.variable(medium)}
|
|
85
105
|
)
|
|
@@ -96,7 +116,7 @@
|
|
|
96
116
|
@include state-layer.standalone;
|
|
97
117
|
@include state-layer.provide-theme(
|
|
98
118
|
(
|
|
99
|
-
color:
|
|
119
|
+
color: #{core.token(foreground)}
|
|
100
120
|
)
|
|
101
121
|
);
|
|
102
122
|
}
|
|
@@ -143,4 +163,14 @@
|
|
|
143
163
|
justify-content: end;
|
|
144
164
|
}
|
|
145
165
|
}
|
|
166
|
+
|
|
167
|
+
.forge-app-bar-theme {
|
|
168
|
+
color: #{core.token(theme-foreground)};
|
|
169
|
+
|
|
170
|
+
@include focus-indicator.provide-theme(
|
|
171
|
+
(
|
|
172
|
+
color: #{core.token(theme-foreground)}
|
|
173
|
+
)
|
|
174
|
+
);
|
|
175
|
+
}
|
|
146
176
|
}
|
package/sass/button/button.scss
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
@use '../state-layer';
|
|
9
9
|
@use '../focus-indicator';
|
|
10
10
|
@use '../circular-progress';
|
|
11
|
+
@use '../app-bar/app-bar';
|
|
11
12
|
@use '../icon';
|
|
12
13
|
|
|
13
14
|
//
|
|
@@ -132,6 +133,29 @@ forge-focus-indicator {
|
|
|
132
133
|
@include theme(warning);
|
|
133
134
|
@include theme(info);
|
|
134
135
|
|
|
136
|
+
//
|
|
137
|
+
// App bar theme
|
|
138
|
+
//
|
|
139
|
+
|
|
140
|
+
:host([theme='app-bar']) {
|
|
141
|
+
@include provide-theme(
|
|
142
|
+
(
|
|
143
|
+
text-color: #{app-bar.token(theme-foreground)},
|
|
144
|
+
outlined-color: #{app-bar.token(theme-foreground)},
|
|
145
|
+
outlined-border-color: #{app-bar.token(theme-foreground)},
|
|
146
|
+
link-color: #{app-bar.token(theme-foreground)}
|
|
147
|
+
)
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
forge-focus-indicator {
|
|
151
|
+
@include focus-indicator.provide-theme(
|
|
152
|
+
(
|
|
153
|
+
color: #{app-bar.token(theme-foreground)}
|
|
154
|
+
)
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
135
159
|
//
|
|
136
160
|
// Variants
|
|
137
161
|
//
|
|
@@ -5,6 +5,20 @@
|
|
|
5
5
|
*/
|
|
6
6
|
@use '../tokens/scrollbar/tokens';
|
|
7
7
|
|
|
8
|
+
///
|
|
9
|
+
/// Gets a CSS custom property declaration for a specific scrollbar token with its token value as the fallback value.
|
|
10
|
+
///
|
|
11
|
+
/// Example:
|
|
12
|
+
/// ```scss
|
|
13
|
+
/// .my-class {
|
|
14
|
+
/// width: #{scrollbar.variable(width)}; // => width: var(--forge-scrollbar-width, 16px);
|
|
15
|
+
/// }
|
|
16
|
+
/// ```
|
|
17
|
+
///
|
|
18
|
+
@function variable($key) {
|
|
19
|
+
@return tokens.get($key);
|
|
20
|
+
}
|
|
21
|
+
|
|
8
22
|
///
|
|
9
23
|
/// Provides scrollbar styles.
|
|
10
24
|
///
|
|
@@ -25,14 +25,8 @@ $tokens: (
|
|
|
25
25
|
transition-duration: utils.module-val(app-bar, transition-duration, animation.variable(duration-short4)),
|
|
26
26
|
transition-timing: utils.module-val(app-bar, transition-timing, animation.variable(easing-standard)),
|
|
27
27
|
// Scoped theming tokens for app bar children to optionally inherit
|
|
28
|
-
theme-
|
|
29
|
-
theme-
|
|
30
|
-
theme-text-high: utils.module-val(app-bar, theme-text-high, rgba(white, theme.emphasis(highest))),
|
|
31
|
-
theme-text-medium: utils.module-val(app-bar, theme-text-medium, rgba(white, theme.emphasis(medium))),
|
|
32
|
-
theme-text-low: utils.module-val(app-bar, theme-text-low, rgba(white, theme.emphasis(medium-low))),
|
|
33
|
-
theme-outline-high: utils.module-val(app-bar, theme-outline-high, rgba(white, theme.emphasis(highest))),
|
|
34
|
-
theme-outline-medium: utils.module-val(app-bar, theme-outline-medium, rgba(white, theme.emphasis(medium))),
|
|
35
|
-
theme-outline-low: utils.module-val(app-bar, theme-outline-low, rgba(white, theme.emphasis(medium-low)))
|
|
28
|
+
theme-foreground: utils.module-ref(app-bar, theme-foreground, foreground),
|
|
29
|
+
theme-foreground-muted: utils.module-val(app-bar, theme-foreground-muted, rgba(white, theme.emphasis(medium)))
|
|
36
30
|
) !default;
|
|
37
31
|
|
|
38
32
|
@function get($key) {
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
@use '../focus-indicator';
|
|
11
11
|
@use '../badge';
|
|
12
12
|
@use '../circular-progress';
|
|
13
|
+
@use '../app-bar/app-bar';
|
|
13
14
|
|
|
14
15
|
//
|
|
15
16
|
// Host
|
|
@@ -379,16 +380,14 @@ forge-state-layer {
|
|
|
379
380
|
@include theme(info);
|
|
380
381
|
|
|
381
382
|
//
|
|
382
|
-
//
|
|
383
|
+
// App Bar Theme
|
|
383
384
|
//
|
|
384
385
|
|
|
385
386
|
:host([theme='app-bar']) {
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
--forge-theme-outline-medium: var(--forge-app-bar-theme-outline-medium);
|
|
393
|
-
--forge-theme-outline-low: var(--forge-app-bar-theme-outline-low);
|
|
387
|
+
@include provide-theme(
|
|
388
|
+
(
|
|
389
|
+
icon-color: #{app-bar.token(theme-foreground)},
|
|
390
|
+
focus-indicator-color: #{app-bar.token(theme-foreground)}
|
|
391
|
+
)
|
|
392
|
+
);
|
|
394
393
|
}
|
package/sass/table/_core.scss
CHANGED
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
* License: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
@use './core' as *;
|
|
7
|
+
@use '../../app-bar/app-bar';
|
|
7
8
|
@use '../../icon-button';
|
|
9
|
+
@use '../tab';
|
|
10
|
+
@use '../../core/styles/theme';
|
|
8
11
|
|
|
9
12
|
//
|
|
10
13
|
// Host
|
|
@@ -112,3 +115,24 @@ forge-icon-button {
|
|
|
112
115
|
@include override(justify, flex-end, value);
|
|
113
116
|
}
|
|
114
117
|
}
|
|
118
|
+
|
|
119
|
+
//
|
|
120
|
+
// App Bar Theme
|
|
121
|
+
//
|
|
122
|
+
|
|
123
|
+
:host([theme='app-bar']) {
|
|
124
|
+
@include tab.provide-theme(
|
|
125
|
+
(
|
|
126
|
+
active-color: #{app-bar.token(theme-foreground)},
|
|
127
|
+
inactive-color: #{app-bar.token(theme-foreground-muted)}
|
|
128
|
+
)
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
forge-icon-button {
|
|
132
|
+
@include icon-button.provide-theme(
|
|
133
|
+
(
|
|
134
|
+
icon-color: #{app-bar.token(theme-foreground)}
|
|
135
|
+
)
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
}
|