@vonage/vivid 5.17.0 → 5.18.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/accordion/definition.cjs +6 -6
- package/accordion/definition.js +1 -1
- package/accordion/index.cjs +1 -1
- package/accordion/index.js +2 -2
- package/accordion-item/definition.cjs +5 -5
- package/accordion-item/definition.js +1 -1
- package/accordion-item/index.cjs +1 -1
- package/accordion-item/index.js +2 -2
- package/alert/definition.cjs +5 -5
- package/alert/definition.js +1 -1
- package/alert/index.cjs +2 -2
- package/alert/index.js +6 -5
- package/audio-player/definition.cjs +5 -5
- package/audio-player/definition.js +1 -1
- package/audio-player/index.cjs +1 -1
- package/audio-player/index.js +2 -1
- package/avatar/definition.cjs +5 -5
- package/avatar/definition.js +1 -1
- package/avatar/index.cjs +3 -3
- package/avatar/index.js +6 -5
- package/badge/definition.cjs +5 -5
- package/badge/definition.js +1 -1
- package/badge/index.cjs +1 -4
- package/badge/index.js +4 -20
- package/banner/definition.cjs +5 -5
- package/banner/definition.js +1 -1
- package/banner/index.cjs +2 -2
- package/banner/index.js +5 -4
- package/breadcrumb-item/definition.cjs +4 -4
- package/breadcrumb-item/definition.js +1 -1
- package/breadcrumb-item/index.cjs +1 -1
- package/breadcrumb-item/index.js +1 -0
- package/bundled/affix.cjs +1 -1
- package/bundled/affix.js +5 -5
- package/bundled/definition11.cjs +2 -2
- package/bundled/definition11.js +5 -5
- package/bundled/definition12.cjs +3 -3
- package/bundled/definition12.js +5 -5
- package/bundled/definition13.cjs +2 -2
- package/bundled/definition13.js +4 -4
- package/bundled/definition15.cjs +3 -3
- package/bundled/definition15.js +7 -7
- package/bundled/definition17.cjs +3 -3
- package/bundled/definition17.js +8 -8
- package/bundled/definition18.cjs +2 -2
- package/bundled/definition18.js +6 -6
- package/bundled/definition2.cjs +3 -14
- package/bundled/definition2.js +15 -48
- package/bundled/definition20.cjs +5 -5
- package/bundled/definition20.js +8 -8
- package/bundled/definition22.cjs +4 -39
- package/bundled/definition22.js +18 -70
- package/bundled/definition23.cjs +12 -0
- package/bundled/definition23.js +37 -0
- package/bundled/definition24.cjs +39 -0
- package/bundled/definition24.js +72 -0
- package/bundled/definition3.cjs +1 -1
- package/bundled/definition3.js +9 -6
- package/bundled/definition4.cjs +2 -2
- package/bundled/definition4.js +5 -5
- package/bundled/definition6.cjs +11 -11
- package/bundled/definition6.js +45 -29
- package/bundled/localized.cjs +1 -1
- package/bundled/localized.js +1 -0
- package/bundled/mixins.cjs +4 -4
- package/bundled/mixins.js +7 -7
- package/bundled/numberConverter.cjs +12 -0
- package/bundled/numberConverter.js +38 -0
- package/bundled/picker-field.template.cjs +2 -1
- package/bundled/picker-field.template.js +2 -1
- package/bundled/utils.cjs +1 -0
- package/bundled/utils.js +1420 -0
- package/bundled/vivid-element.cjs +1 -1
- package/bundled/vivid-element.js +1 -1
- package/button/definition.cjs +5 -5
- package/button/definition.js +1 -1
- package/button/index.cjs +1 -1
- package/button/index.js +1 -1
- package/card/definition.cjs +5 -5
- package/card/definition.js +1 -1
- package/card/index.cjs +4 -4
- package/card/index.js +7 -6
- package/checkbox/definition.cjs +5 -5
- package/checkbox/definition.js +1 -1
- package/checkbox/index.cjs +1 -1
- package/checkbox/index.js +1 -1
- package/color-picker/definition.cjs +5 -5
- package/color-picker/definition.js +1 -1
- package/color-picker/index.cjs +7 -7
- package/color-picker/index.js +55 -54
- package/combobox/definition.cjs +5 -5
- package/combobox/definition.js +1 -1
- package/combobox/index.cjs +2 -2
- package/combobox/index.js +8 -7
- package/contextual-help/definition.cjs +5 -5
- package/contextual-help/definition.js +1 -1
- package/contextual-help/index.cjs +1 -1
- package/contextual-help/index.js +1 -1
- package/country/definition.cjs +5 -5
- package/country/definition.js +1 -1
- package/country/index.cjs +1 -12
- package/country/index.js +4 -1216
- package/country-group/definition.cjs +6 -0
- package/country-group/definition.js +3 -0
- package/country-group/index.cjs +43 -0
- package/country-group/index.js +166 -0
- package/custom-elements.json +1112 -450
- package/data-grid/definition.cjs +9 -9
- package/data-grid/definition.js +2 -2
- package/data-grid/index.cjs +4 -4
- package/data-grid/index.js +47 -46
- package/date-picker/definition.cjs +5 -5
- package/date-picker/definition.js +2 -2
- package/date-picker/index.cjs +1 -1
- package/date-picker/index.js +1 -1
- package/date-range-picker/definition.cjs +5 -5
- package/date-range-picker/definition.js +2 -2
- package/date-range-picker/index.cjs +1 -1
- package/date-range-picker/index.js +1 -1
- package/date-time-picker/definition.cjs +5 -5
- package/date-time-picker/definition.js +2 -2
- package/date-time-picker/index.cjs +1 -1
- package/date-time-picker/index.js +1 -1
- package/dial-pad/definition.cjs +5 -5
- package/dial-pad/definition.js +2 -2
- package/dial-pad/index.cjs +4 -4
- package/dial-pad/index.js +9 -8
- package/dialog/definition.cjs +5 -5
- package/dialog/definition.js +2 -2
- package/dialog/index.cjs +4 -4
- package/dialog/index.js +12 -11
- package/divider/definition.cjs +1 -1
- package/divider/definition.js +1 -1
- package/empty-state/definition.cjs +5 -5
- package/empty-state/definition.js +2 -2
- package/empty-state/index.cjs +2 -2
- package/empty-state/index.js +6 -5
- package/fab/definition.cjs +5 -5
- package/fab/definition.js +2 -2
- package/fab/index.cjs +2 -2
- package/fab/index.js +5 -4
- package/file-picker/definition.cjs +5 -5
- package/file-picker/definition.js +2 -2
- package/file-picker/index.cjs +6 -6
- package/file-picker/index.js +9 -8
- package/flag/definition.cjs +6 -0
- package/flag/definition.js +3 -0
- package/flag/index.cjs +10 -0
- package/flag/index.js +61 -0
- package/header/definition.cjs +1 -1
- package/header/definition.js +1 -1
- package/icon/definition.cjs +1 -0
- package/icon/definition.js +1 -0
- package/icon/index.cjs +1 -1
- package/icon/index.js +1 -0
- package/index.cjs +183 -174
- package/index.js +48 -45
- package/layout/definition.cjs +1 -1
- package/layout/definition.js +1 -1
- package/lib/button/button.d.ts +1 -0
- package/lib/components.d.ts +2 -0
- package/lib/country/countries-data.d.ts +1 -0
- package/lib/country/{country-code-to-flag-icon.d.ts → utils.d.ts} +0 -3
- package/lib/country-group/country-group.d.ts +829 -0
- package/lib/country-group/country-group.template.d.ts +3 -0
- package/lib/country-group/definition.d.ts +3 -0
- package/lib/country-group/index.d.ts +1 -0
- package/lib/country-group/locale.d.ts +3 -0
- package/lib/date-picker/date-picker.d.ts +4 -0
- package/lib/date-range-picker/date-range-picker.d.ts +2 -0
- package/lib/date-time-picker/date-time-picker.d.ts +4 -0
- package/lib/flag/definition.d.ts +3 -0
- package/lib/flag/flag.d.ts +8 -0
- package/lib/flag/flag.template.d.ts +3 -0
- package/lib/flag/index.d.ts +1 -0
- package/lib/icon/icon.d.ts +1 -2
- package/lib/searchable-select/option-tag.d.ts +3 -1
- package/lib/searchable-select/searchable-select.d.ts +3 -1
- package/lib/tag-name-map.d.ts +2 -1
- package/lib/time-picker/time-picker.d.ts +2 -0
- package/locales/de-DE.cjs +1 -0
- package/locales/de-DE.js +1 -0
- package/locales/en-GB.cjs +1 -0
- package/locales/en-GB.js +1 -0
- package/locales/en-US.cjs +1 -0
- package/locales/en-US.js +1 -0
- package/locales/ja-JP.cjs +1 -0
- package/locales/ja-JP.js +1 -0
- package/locales/zh-CN.cjs +1 -0
- package/locales/zh-CN.js +1 -0
- package/menu/definition.cjs +5 -5
- package/menu/definition.js +1 -1
- package/menu/index.cjs +1 -1
- package/menu/index.js +1 -1
- package/menu-item/definition.cjs +6 -6
- package/menu-item/definition.js +1 -1
- package/menu-item/index.cjs +1 -1
- package/menu-item/index.js +1 -1
- package/nav/definition.cjs +1 -1
- package/nav/definition.js +1 -1
- package/nav-disclosure/definition.cjs +5 -5
- package/nav-disclosure/definition.js +2 -2
- package/nav-disclosure/index.cjs +2 -2
- package/nav-disclosure/index.js +6 -5
- package/nav-item/definition.cjs +5 -5
- package/nav-item/definition.js +2 -2
- package/nav-item/index.cjs +2 -2
- package/nav-item/index.js +5 -4
- package/note/definition.cjs +5 -5
- package/note/definition.js +2 -2
- package/note/index.cjs +2 -2
- package/note/index.js +5 -4
- package/number-field/definition.cjs +5 -5
- package/number-field/definition.js +2 -2
- package/number-field/index.cjs +2 -2
- package/number-field/index.js +6 -5
- package/option/definition.cjs +5 -5
- package/option/definition.js +1 -1
- package/option/index.cjs +1 -1
- package/option/index.js +1 -1
- package/package.json +4 -4
- package/pagination/definition.cjs +5 -5
- package/pagination/definition.js +2 -2
- package/pagination/index.cjs +1 -1
- package/pagination/index.js +1 -1
- package/popover/definition.cjs +5 -5
- package/popover/definition.js +2 -2
- package/popover/index.cjs +4 -4
- package/popover/index.js +7 -6
- package/popup/definition.cjs +4 -4
- package/popup/definition.js +1 -1
- package/popup/index.cjs +1 -1
- package/popup/index.js +1 -1
- package/progress/definition.cjs +1 -1
- package/progress/definition.js +1 -1
- package/radio/definition.cjs +1 -1
- package/radio/definition.js +1 -1
- package/radio-group/definition.cjs +5 -5
- package/radio-group/definition.js +2 -2
- package/radio-group/index.cjs +1 -1
- package/radio-group/index.js +1 -1
- package/range-slider/definition.cjs +5 -5
- package/range-slider/definition.js +2 -2
- package/range-slider/index.cjs +1 -1
- package/range-slider/index.js +22 -19
- package/rich-text-editor/definition.cjs +32 -32
- package/rich-text-editor/definition.js +2 -2
- package/rich-text-editor/index.cjs +1 -1
- package/rich-text-editor/index.js +2 -2
- package/rich-text-view/definition.cjs +1 -1
- package/rich-text-view/definition.js +1 -1
- package/searchable-select/definition.cjs +4 -4
- package/searchable-select/definition.js +2 -2
- package/searchable-select/index.cjs +6 -4
- package/searchable-select/index.js +76 -73
- package/select/definition.cjs +5 -5
- package/select/definition.js +2 -2
- package/select/index.cjs +1 -1
- package/select/index.js +1 -1
- package/selectable-box/definition.cjs +5 -5
- package/selectable-box/definition.js +2 -2
- package/selectable-box/index.cjs +1 -1
- package/selectable-box/index.js +1 -1
- package/shared/icon/utils.d.ts +1 -0
- package/shared/localization/Locale.d.ts +2 -0
- package/shared/picker-field/mixins/calendar-picker.d.ts +1 -0
- package/shared/picker-field/mixins/calendar-picker.template.d.ts +1 -0
- package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +1 -0
- package/shared/picker-field/mixins/single-date-picker.d.ts +1 -0
- package/shared/picker-field/mixins/single-value-picker.d.ts +1 -0
- package/shared/picker-field/mixins/time-selection-picker.d.ts +1 -0
- package/shared/picker-field/mixins/time-selection-picker.template.d.ts +2 -0
- package/shared/picker-field/picker-field.d.ts +2 -0
- package/side-drawer/definition.cjs +1 -1
- package/side-drawer/definition.js +1 -1
- package/simple-color-picker/definition.cjs +5 -5
- package/simple-color-picker/definition.js +2 -2
- package/simple-color-picker/index.cjs +2 -2
- package/simple-color-picker/index.js +6 -5
- package/slider/definition.cjs +5 -5
- package/slider/definition.js +1 -1
- package/slider/index.cjs +1 -1
- package/slider/index.js +1 -1
- package/split-button/definition.cjs +5 -5
- package/split-button/definition.js +2 -2
- package/split-button/index.cjs +2 -2
- package/split-button/index.js +7 -6
- package/status/definition.cjs +5 -5
- package/status/definition.js +2 -2
- package/status/index.cjs +2 -2
- package/status/index.js +5 -4
- package/switch/definition.cjs +5 -5
- package/switch/definition.js +2 -2
- package/switch/index.cjs +2 -2
- package/switch/index.js +6 -5
- package/tab/definition.cjs +5 -5
- package/tab/definition.js +2 -2
- package/tab/index.cjs +1 -1
- package/tab/index.js +1 -1
- package/tab-panel/definition.cjs +1 -1
- package/tab-panel/definition.js +1 -1
- package/table/definition.cjs +17 -17
- package/table/definition.js +2 -2
- package/table/index.cjs +3 -3
- package/table/index.js +6 -5
- package/tabs/definition.cjs +6 -6
- package/tabs/definition.js +2 -2
- package/tabs/index.cjs +1 -1
- package/tabs/index.js +1 -1
- package/tag/definition.cjs +5 -5
- package/tag/definition.js +2 -2
- package/tag/index.cjs +4 -4
- package/tag/index.js +6 -5
- package/tag-group/definition.cjs +1 -1
- package/tag-group/definition.js +1 -1
- package/text-area/definition.cjs +5 -5
- package/text-area/definition.js +2 -2
- package/text-area/index.cjs +1 -1
- package/text-area/index.js +1 -1
- package/text-field/definition.cjs +5 -5
- package/text-field/definition.js +1 -1
- package/text-field/index.cjs +1 -1
- package/text-field/index.js +1 -1
- package/time-picker/definition.cjs +4 -4
- package/time-picker/definition.js +2 -2
- package/time-picker/index.cjs +1 -1
- package/time-picker/index.js +1 -1
- package/toggletip/definition.cjs +5 -5
- package/toggletip/definition.js +1 -1
- package/toggletip/index.cjs +1 -1
- package/toggletip/index.js +1 -1
- package/tooltip/definition.cjs +5 -5
- package/tooltip/definition.js +1 -1
- package/tooltip/index.cjs +1 -1
- package/tooltip/index.js +1 -1
- package/tree-item/definition.cjs +5 -5
- package/tree-item/definition.js +2 -2
- package/tree-item/index.cjs +1 -1
- package/tree-item/index.js +1 -1
- package/tree-view/definition.cjs +5 -5
- package/tree-view/definition.js +2 -2
- package/tree-view/index.cjs +1 -1
- package/tree-view/index.js +1 -1
- package/unbundled/definition11.cjs +6 -0
- package/unbundled/definition11.js +6 -0
- package/unbundled/definition14.cjs +1 -0
- package/unbundled/definition14.js +1 -0
- package/unbundled/definition2.cjs +5 -75
- package/unbundled/definition2.js +1 -71
- package/unbundled/definition28.cjs +1 -0
- package/unbundled/definition28.js +1 -0
- package/unbundled/definition31.cjs +2 -1189
- package/unbundled/definition31.js +1 -1188
- package/unbundled/definition32.cjs +207 -1835
- package/unbundled/definition32.js +203 -1807
- package/unbundled/definition33.cjs +83 -311
- package/unbundled/definition33.js +79 -235
- package/unbundled/definition34.cjs +1887 -25
- package/unbundled/definition34.js +1857 -24
- package/unbundled/definition35.cjs +315 -121
- package/unbundled/definition35.js +236 -114
- package/unbundled/definition36.cjs +25 -405
- package/unbundled/definition36.js +22 -397
- package/unbundled/definition37.cjs +47 -142
- package/unbundled/definition37.js +44 -139
- package/unbundled/definition38.cjs +345 -330
- package/unbundled/definition38.js +343 -328
- package/unbundled/definition39.cjs +183 -235
- package/unbundled/definition39.js +181 -233
- package/unbundled/definition40.cjs +377 -47
- package/unbundled/definition40.js +372 -42
- package/unbundled/definition41.cjs +256 -57
- package/unbundled/definition41.js +255 -56
- package/unbundled/definition42.cjs +45 -432
- package/unbundled/definition42.js +41 -428
- package/unbundled/definition43.cjs +63 -49
- package/unbundled/definition43.js +61 -47
- package/unbundled/definition44.cjs +438 -30
- package/unbundled/definition44.js +434 -25
- package/unbundled/definition45.cjs +46 -84
- package/unbundled/definition45.js +43 -81
- package/unbundled/definition46.cjs +29 -54
- package/unbundled/definition46.js +24 -50
- package/unbundled/definition47.cjs +93 -21
- package/unbundled/definition47.js +91 -16
- package/unbundled/definition48.cjs +49 -33
- package/unbundled/definition48.js +46 -30
- package/unbundled/definition49.cjs +22 -347
- package/unbundled/definition49.js +16 -344
- package/unbundled/definition50.cjs +34 -211
- package/unbundled/definition50.js +30 -207
- package/unbundled/definition51.cjs +282 -242
- package/unbundled/definition51.js +275 -235
- package/unbundled/definition52.cjs +211 -51
- package/unbundled/definition52.js +209 -48
- package/unbundled/definition53.cjs +275 -131
- package/unbundled/definition53.js +272 -127
- package/unbundled/definition54.cjs +50 -261
- package/unbundled/definition54.js +48 -260
- package/unbundled/definition55.cjs +126 -443
- package/unbundled/definition55.js +123 -441
- package/unbundled/definition56.cjs +234 -3596
- package/unbundled/definition56.js +229 -3428
- package/unbundled/definition57.cjs +407 -728
- package/unbundled/definition57.js +405 -726
- package/unbundled/definition58.cjs +3618 -106
- package/unbundled/definition58.js +3449 -100
- package/unbundled/definition59.cjs +624 -868
- package/unbundled/definition59.js +619 -863
- package/unbundled/definition60.cjs +106 -108
- package/unbundled/definition60.js +102 -104
- package/unbundled/definition61.cjs +1040 -71
- package/unbundled/definition61.js +1035 -65
- package/unbundled/definition62.cjs +105 -169
- package/unbundled/definition62.js +101 -165
- package/unbundled/definition63.cjs +70 -113
- package/unbundled/definition63.js +65 -109
- package/unbundled/definition64.cjs +181 -53
- package/unbundled/definition64.js +178 -50
- package/unbundled/definition65.cjs +109 -76
- package/unbundled/definition65.js +109 -75
- package/unbundled/definition66.cjs +58 -21
- package/unbundled/definition66.js +55 -15
- package/unbundled/definition67.cjs +81 -74
- package/unbundled/definition67.js +79 -73
- package/unbundled/definition68.cjs +19 -344
- package/unbundled/definition68.js +14 -335
- package/unbundled/definition69.cjs +88 -26
- package/unbundled/definition69.js +85 -22
- package/unbundled/definition7.cjs +18 -3
- package/unbundled/definition7.js +18 -3
- package/unbundled/definition70.cjs +330 -111
- package/unbundled/definition70.js +320 -108
- package/unbundled/definition71.cjs +26 -271
- package/unbundled/definition71.js +21 -267
- package/unbundled/definition72.cjs +134 -27
- package/unbundled/definition72.js +125 -25
- package/unbundled/definition73.cjs +245 -113
- package/unbundled/definition73.js +242 -104
- package/unbundled/definition74.cjs +28 -212
- package/unbundled/definition74.js +26 -202
- package/unbundled/definition75.cjs +117 -479
- package/unbundled/definition75.js +109 -475
- package/unbundled/definition76.cjs +232 -0
- package/unbundled/definition76.js +213 -0
- package/unbundled/definition77.cjs +533 -0
- package/unbundled/definition77.js +513 -0
- package/unbundled/numberConverter.cjs +91 -0
- package/unbundled/numberConverter.js +74 -0
- package/unbundled/picker-field.template.cjs +2 -0
- package/unbundled/picker-field.template.js +2 -0
- package/unbundled/utils.cjs +1439 -0
- package/unbundled/utils.js +1428 -0
- package/unbundled/vivid-element.cjs +1 -1
- package/unbundled/vivid-element.js +1 -1
- package/video-player/definition.cjs +1 -1
- package/video-player/definition.js +1 -1
- package/vivid.api.json +513 -0
- /package/{lib/icon/icon.placeholder.d.ts → shared/icon/icon-placeholder.d.ts} +0 -0
|
@@ -3,1079 +3,835 @@ const require_vivid_element = require("./vivid-element.cjs");
|
|
|
3
3
|
const require_definition = require("./definition2.cjs");
|
|
4
4
|
const require_decorate = require("./decorate.cjs");
|
|
5
5
|
const require_affix = require("./affix.cjs");
|
|
6
|
-
const require_delegates_aria = require("./delegates-aria.cjs");
|
|
7
|
-
const require_definition$1 = require("./definition6.cjs");
|
|
8
6
|
const require_form_associated = require("./form-associated.cjs");
|
|
9
7
|
const require_form_element = require("./form-element.cjs");
|
|
10
8
|
const require_with_success_text = require("./with-success-text.cjs");
|
|
11
9
|
const require_with_error_text = require("./with-error-text.cjs");
|
|
12
10
|
const require_with_contextual_help = require("./with-contextual-help.cjs");
|
|
13
11
|
const require_localized = require("./localized.cjs");
|
|
14
|
-
const require_definition$
|
|
15
|
-
const
|
|
16
|
-
const
|
|
12
|
+
const require_definition$1 = require("./definition7.cjs");
|
|
13
|
+
const require_dialog = require("./dialog.cjs");
|
|
14
|
+
const require_definition$2 = require("./definition10.cjs");
|
|
15
|
+
const require_host_semantics = require("./host-semantics.cjs");
|
|
17
16
|
const require_mixins = require("./mixins.cjs");
|
|
18
|
-
const require_definition$
|
|
19
|
-
const
|
|
20
|
-
const require_scrollIntoView = require("./scrollIntoView.cjs");
|
|
17
|
+
const require_definition$3 = require("./definition29.cjs");
|
|
18
|
+
const require_listbox = require("./listbox.cjs");
|
|
21
19
|
let _microsoft_fast_element = require("@microsoft/fast-element");
|
|
22
20
|
let _microsoft_fast_web_utilities = require("@microsoft/fast-web-utilities");
|
|
23
|
-
//#region src/lib/
|
|
24
|
-
var
|
|
21
|
+
//#region src/lib/select/select.scss?inline
|
|
22
|
+
var select_default = ".label-wrapper{align-items:center;gap:var(--label-wrapper-gap,4px);flex-direction:row;display:flex}.label-wrapper[hidden]{display:none}.label:not(slot),.label::slotted(label){flex:0 auto}.chevron{font:var(--vvd-typography-base-extended);flex-shrink:0;transition:transform .2s;display:flex;transform:rotate(0)}:host([data-expanded=true]) .chevron,:host([open]) .chevron{transform:rotate(180deg)}:host(:focus-visible){outline:none}:host{--_low-ink-color:var(--vvd-color-neutral-600);--focus-stroke-gap-color:transparent;flex-direction:column;gap:4px;display:inline-flex}:host([disabled]){--_low-ink-color:var(--vvd-color-neutral-400);cursor:not-allowed}.label{color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base)}.control{--_appearance-color-text:var(--vvd-color-canvas-text);--_appearance-color-fill:var(--vvd-color-canvas);--_appearance-color-outline:var(--vvd-color-neutral-500)}.control.appearance-ghost{--_appearance-color-text:var(--_connotation-color-firm);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}@media (hover:hover){.control:hover:where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text:var(--vvd-color-canvas-text);--_appearance-color-fill:var(--vvd-color-canvas);--_appearance-color-outline:var(--vvd-color-neutral-700)}.control:hover:where(:not(.disabled,:disabled,.readonly)).appearance-ghost{--_appearance-color-text:var(--_connotation-color-firm);--_appearance-color-fill:var(--_connotation-color-faint);--_appearance-color-outline:transparent}}.control.hover:where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text:var(--vvd-color-canvas-text);--_appearance-color-fill:var(--vvd-color-canvas);--_appearance-color-outline:var(--vvd-color-neutral-700)}.control.hover:where(:not(.disabled,:disabled,.readonly)).appearance-ghost{--_appearance-color-text:var(--_connotation-color-firm);--_appearance-color-fill:var(--_connotation-color-faint);--_appearance-color-outline:transparent}.control:disabled{--_appearance-color-text:var(--vvd-color-neutral-300);--_appearance-color-fill:var(--vvd-color-neutral-100);--_appearance-color-outline:var(--vvd-color-neutral-300)}.control:disabled.appearance-ghost{--_appearance-color-text:var(--vvd-color-neutral-300);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}.control.disabled{--_appearance-color-text:var(--vvd-color-neutral-300);--_appearance-color-fill:var(--vvd-color-neutral-100);--_appearance-color-outline:var(--vvd-color-neutral-300)}.control.disabled.appearance-ghost{--_appearance-color-text:var(--vvd-color-neutral-300);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}.control.readonly:where(:not(.disabled,:disabled)){--_appearance-color-text:var(--vvd-color-canvas-text);--_appearance-color-fill:var(--vvd-color-neutral-200);--_appearance-color-outline:var(--vvd-color-neutral-400)}.control.readonly:where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text:var(--vvd-color-neutral-600);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}.control.error:where(:not(.disabled,:disabled)){--_appearance-color-text:notSet;--_appearance-color-fill:var(--vvd-color-alert-50);--_appearance-color-outline:var(--vvd-color-alert-500)}.control.error:where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text:notSet;--_appearance-color-fill:var(--vvd-color-alert-50);--_appearance-color-outline:transparent}.control.success:where(:not(.disabled,:disabled)){--_appearance-color-text:notSet;--_appearance-color-fill:var(--vvd-color-success-50);--_appearance-color-outline:var(--vvd-color-success-500)}.control.success:where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text:notSet;--_appearance-color-fill:var(--vvd-color-success-50);--_appearance-color-outline:transparent}.control{--_connotation-color-primary:var(--vvd-select-accent-primary,var(--vvd-color-canvas-text));--_connotation-color-primary-text:var(--vvd-select-accent-primary-text,var(--vvd-color-canvas));--_connotation-color-primary-increment:var(--vvd-select-accent-primary-increment,var(--vvd-color-neutral-800));--_connotation-color-intermediate:var(--vvd-select-accent-intermediate,var(--vvd-color-neutral-500));--_connotation-color-faint:var(--vvd-select-accent-faint,var(--vvd-color-neutral-50));--_connotation-color-soft:var(--vvd-select-accent-soft,var(--vvd-color-neutral-100));--_connotation-color-firm:var(--vvd-select-accent-firm,var(--vvd-color-canvas-text));--_connotation-color-fierce:var(--vvd-select-accent-fierce,var(--vvd-color-neutral-700));border-radius:var(--_select-control-border-radius);block-size:var(--_select-block-size);padding-inline:var(--_select-padding-inline);--_select-icon-size:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) / 2);--_select-block-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2)));--_select-padding-inline:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) / 2.5);background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base);justify-content:space-between;align-items:center;gap:8px;transition:box-shadow .2s,background-color .2s;display:flex}.control.size-condensed{--_select-icon-size:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) / 2.5);--_select-block-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 8));--_select-padding-inline:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 16)) / 2)}.control.size-condensed:not(.shape-pill){--_select-control-border-radius:4px}.control-wrapper{position:relative}.control:not(.disabled){cursor:pointer}.control.disabled{pointer-events:none}.control:not(.shape-pill){--_select-control-border-radius:8px}.control.shape-pill{--_select-control-border-radius:24px}.listbox{max-height:var(--select-height,408px);flex-direction:column;gap:2px;padding:4px;display:flex;overflow-y:auto}:host([multiple]:focus-visible) .listbox{box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,var(--vvd-color-cta-500)), transparent 85%), inset 0 0 0 3px var(--focus-stroke-gap-color,currentColor);outline:1px solid var(--focus-stroke-color,var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset,0px));border-radius:8px}.selected-value{white-space:nowrap;flex-grow:1;align-items:center;column-gap:12px;display:flex;overflow:hidden}.selected-value .text{text-overflow:ellipsis;max-inline-size:100%;overflow:hidden}.control.shows-placeholder .selected-value .text{color:var(--vvd-color-neutral-600)}.selected-value slot[name=icon]{flex:0 0 var(--_select-icon-size);font-size:var(--_select-icon-size);line-height:1}.control.has-meta .selected-value{padding-inline-end:8px}.feedback-wrapper{display:contents}::part(popup-base){inline-size:max-content;min-inline-size:var(--_select-fixed-width,100%)}:host([multiple]) ::part(popup-base){position:static}@supports selector(:has(*)){:host(:focus-within) .control:not(.has-activedescendant,:has(.clear-button:focus)){--focus-stroke-gap-color:transparent;box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,var(--vvd-color-cta-500)), transparent 85%), inset 0 0 0 3px var(--focus-stroke-gap-color,currentColor);outline:1px solid var(--focus-stroke-color,var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset,0px))}}@supports not selector(:has(*)){:host(:focus-within) .control:not(.has-activedescendant){--focus-stroke-gap-color:transparent;box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,var(--vvd-color-cta-500)), transparent 85%), inset 0 0 0 3px var(--focus-stroke-gap-color,currentColor);outline:1px solid var(--focus-stroke-color,var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset,0px))}}:host(:not([multiple]):focus-visible) ::slotted([data-vvd-component=option][current-selected]){box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,var(--vvd-color-cta-500)), transparent 85%), inset 0 0 0 3px var(--focus-stroke-gap-color,currentColor);outline:1px solid var(--focus-stroke-color,var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset,0px));--focus-stroke-gap-color:transparent;border-radius:8px}:host([multiple]) .clear-button{margin-inline-start:auto}:host([multiple][clearable]) .label-wrapper{min-block-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 16))}";
|
|
25
23
|
//#endregion
|
|
26
|
-
//#region src/lib/
|
|
27
|
-
var option_tag_default = ".base.connotation-cta{--_connotation-color-contrast:var(--vvd-option-tag-cta-contrast,var(--vvd-color-cta-800))}.base:not(.connotation-cta){--_connotation-color-contrast:var(--vvd-option-tag-accent-contrast,var(--vvd-color-neutral-800))}.base{box-sizing:border-box;background-color:var(--fill-color);block-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 16));box-shadow:inset 0 0 0 1px var(--outline-color);color:var(--text-color);font:var(--vvd-typography-base-bold);user-select:none;vertical-align:middle;align-items:center;column-gap:8px;max-inline-size:100%;padding-inline:8px;display:inline-flex;position:relative}.base:not(.disabled){--text-color:var(--_connotation-color-contrast);--fill-color:var(--_connotation-color-soft);--outline-color:transparent}@supports (background-color:color-mix(in srgb, black 50%, white)){.base:not(.disabled){--fill-color:color-mix(in srgb, var(--_connotation-color-contrast), transparent 87.5%)}}.base.disabled{--text-color:var(--vvd-color-neutral-300);--fill-color:var(--vvd-color-neutral-200);--outline-color:transparent}@supports (background-color:color-mix(in srgb, black 50%, white)){.base.disabled{--fill-color:color-mix(in srgb, var(--vvd-color-neutral-800), transparent 87.5%)}}.base:not(.shape-pill){border-radius:4px}.base.shape-pill{border-radius:16px}.label{text-overflow:ellipsis;white-space:nowrap;max-inline-size:100%;overflow:hidden}slot[name=icon]{font-size:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 16)) / 1.5);line-height:1}.icon-placeholder{inline-size:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 16)) / 1.5)}.remove-button{border-radius:inherit;cursor:pointer;outline:none;align-items:center;display:flex}.disabled .remove-button{pointer-events:none}.remove-button:focus-visible:before{--focus-stroke-gap-color:transparent;box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,var(--vvd-color-cta-500)), transparent 85%), inset 0 0 0 3px var(--focus-stroke-gap-color,currentColor);outline:1px solid var(--focus-stroke-color,var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset,0px));z-index:1;border-radius:inherit;content:\"\";pointer-events:none;display:block;position:absolute;inset:0}";
|
|
28
|
-
//#endregion
|
|
29
|
-
//#region src/lib/searchable-select/searchable-select.ts
|
|
30
|
-
var TagGapPx = 8;
|
|
31
|
-
var InputMinWidthPx = 100;
|
|
32
|
-
var PageSize = 10;
|
|
33
|
-
var isFormAssociatedTryingToSetFormValue = (value) => typeof value === "string";
|
|
24
|
+
//#region src/lib/select/select.ts
|
|
34
25
|
/**
|
|
35
26
|
* @public
|
|
36
|
-
* @component
|
|
37
|
-
* @slot -
|
|
38
|
-
* @slot icon - The preferred way to add an icon to the control.
|
|
39
|
-
* @slot meta - Slot to add meta content to the control.
|
|
40
|
-
* @slot helper-text - Describes how to use the
|
|
41
|
-
* @
|
|
42
|
-
* @
|
|
43
|
-
* @slot loading-options - Message that appears there are no options to display and the component is in a loading state.
|
|
44
|
-
* @event {CustomEvent<undefined>} input - Fired when the selected options change
|
|
45
|
-
* @event {CustomEvent<undefined>} search-text-change - Fired when the search text changes
|
|
46
|
-
* @event {CustomEvent<undefined>} change - Fired when the selected options change
|
|
27
|
+
* @component select
|
|
28
|
+
* @slot - Default slot.
|
|
29
|
+
* @slot icon - The preferred way to add an icon to the select control.
|
|
30
|
+
* @slot meta - Slot to add meta content to the select control.
|
|
31
|
+
* @slot helper-text - Describes how to use the select. Alternative to the `helper-text` attribute.
|
|
32
|
+
* @event {CustomEvent<undefined>} input - Fires a custom 'input' event when the value updates
|
|
33
|
+
* @event {CustomEvent<HTMLElement>} change - Fires a custom 'change' event when the value updates
|
|
47
34
|
* @vueModel modelValue value input,@lazy:change `event.currentTarget.value`
|
|
48
|
-
* @vueModel values values input,@lazy:change `event.currentTarget.values`
|
|
49
35
|
* @testAction selectOptionByValue selectOptionByValue
|
|
50
36
|
* @testAction selectOptionByText selectOptionByText
|
|
51
|
-
* @testQuery values values
|
|
52
|
-
* @testQuery selectedOptions selectedOptionsText
|
|
53
37
|
*/
|
|
54
|
-
var
|
|
38
|
+
var Select = class extends require_mixins.WithLightDOMFeedback(require_with_contextual_help.WithContextualHelp(require_with_error_text.WithErrorText(require_with_success_text.WithSuccessText(require_localized.Localized(require_form_element.FormElement(require_host_semantics.HostSemantics(require_affix.AffixIconWithTrailing(require_form_associated.FormAssociated(require_listbox.Listbox))))))))) {
|
|
55
39
|
constructor(..._args) {
|
|
56
40
|
super(..._args);
|
|
57
|
-
this.
|
|
41
|
+
this.proxy = document.createElement("select");
|
|
42
|
+
this.activeIndex = -1;
|
|
43
|
+
this.rangeStartIndex = -1;
|
|
58
44
|
this.open = false;
|
|
59
|
-
this.
|
|
60
|
-
this.
|
|
61
|
-
this.
|
|
62
|
-
this.
|
|
63
|
-
this.
|
|
64
|
-
this._currentSearchText = null;
|
|
65
|
-
this._areOptionsInitialized = false;
|
|
66
|
-
this._filteredOptions = [];
|
|
67
|
-
this._filteredEnabledOptions = [];
|
|
68
|
-
this.loading = false;
|
|
69
|
-
this._highlightedOptionIndex = null;
|
|
70
|
-
this._numElidedTags = 0;
|
|
71
|
-
this._tagRows = [];
|
|
72
|
-
this._lastTagRow = [];
|
|
45
|
+
this.listboxId = (0, _microsoft_fast_web_utilities.uniqueId)("listbox-");
|
|
46
|
+
this.maxHeight = 0;
|
|
47
|
+
this.fixedDropdown = false;
|
|
48
|
+
this._feedbackWrapper = null;
|
|
49
|
+
this._isResetting = false;
|
|
73
50
|
this.clearable = false;
|
|
74
|
-
this.
|
|
75
|
-
this._slottedDisabledOptions = [];
|
|
76
|
-
this.enableSelectAll = false;
|
|
77
|
-
this.proxy = document.createElement("input");
|
|
78
|
-
this.setFormValue = (value, state) => {
|
|
79
|
-
if (isFormAssociatedTryingToSetFormValue(value)) return;
|
|
80
|
-
super.setFormValue(value, state);
|
|
81
|
-
};
|
|
82
|
-
this._changeDescription = "";
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* @internal
|
|
86
|
-
*/
|
|
87
|
-
openChanged() {
|
|
88
|
-
if (!this.open) this.#transitionHighlightedOptionTo(null);
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* @internal
|
|
92
|
-
*/
|
|
93
|
-
valuesChanged() {
|
|
94
|
-
if (!this._areOptionsInitialized) return;
|
|
95
|
-
if (!this.multiple && this.values.length > 1) {
|
|
96
|
-
this.values = [this.values[0]];
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
if (this.values.some((value) => !this.#isValidValue(value))) {
|
|
100
|
-
this.values = this.values.filter((value) => this.#isValidValue(value));
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
this.value = this.values.length ? this.values[0] : "";
|
|
104
|
-
this.#updateSelectionLimit();
|
|
105
|
-
this.#updateSelectedOnSlottedOptions();
|
|
106
|
-
if (this.$fastController.isConnected) this.#updateTagLayout();
|
|
107
|
-
this.#updateFormValue();
|
|
108
|
-
}
|
|
109
|
-
#updateValuesThroughUserInteraction(newValues) {
|
|
110
|
-
this.values = newValues;
|
|
111
|
-
this.$emit("change", void 0, { bubbles: false });
|
|
112
|
-
this.$emit("input", void 0, { bubbles: false });
|
|
113
|
-
}
|
|
114
|
-
#updateValuesWhileMaintainingOrder(newValues) {
|
|
115
|
-
const oldSet = new Set(this.values);
|
|
116
|
-
const newSet = new Set(newValues);
|
|
117
|
-
this.values = [...this.values].filter((v) => newSet.has(v)).concat([...newValues].filter((v) => !oldSet.has(v)));
|
|
51
|
+
this._isClearButtonFocused = false;
|
|
118
52
|
}
|
|
119
53
|
/**
|
|
54
|
+
* Returns the last checked option.
|
|
55
|
+
*
|
|
120
56
|
* @internal
|
|
121
57
|
*/
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
this.values = this.initialValues;
|
|
125
|
-
this.dirtyValue = false;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
#isValidValue(value) {
|
|
129
|
-
return this._slottedOptions.some((option) => option.value === value);
|
|
58
|
+
get activeOption() {
|
|
59
|
+
return this.options[this.activeIndex];
|
|
130
60
|
}
|
|
131
61
|
/**
|
|
62
|
+
* Returns the list of checked options.
|
|
63
|
+
*
|
|
132
64
|
* @internal
|
|
133
65
|
*/
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
if (!this._areOptionsInitialized) return;
|
|
137
|
-
const isValidValue = this._slottedOptions.some((option) => option.value === next);
|
|
138
|
-
if (this.values[0] !== next) this.values = isValidValue ? [next] : [];
|
|
139
|
-
}
|
|
140
|
-
get selectedIndex() {
|
|
141
|
-
if (this.values.length) return this._slottedOptions.findIndex((option) => option.value === this.values[0]);
|
|
142
|
-
else return -1;
|
|
143
|
-
}
|
|
144
|
-
set selectedIndex(index) {
|
|
145
|
-
this.value = this._slottedOptions[index]?.value ?? "";
|
|
146
|
-
}
|
|
147
|
-
get options() {
|
|
148
|
-
return [...this._slottedOptions];
|
|
149
|
-
}
|
|
150
|
-
get selectedOptions() {
|
|
151
|
-
return this._slottedOptions.filter((option) => this.values.includes(option.value));
|
|
66
|
+
get checkedOptions() {
|
|
67
|
+
return this.options.filter((o) => o.checked);
|
|
152
68
|
}
|
|
153
69
|
/**
|
|
70
|
+
* Returns the index of the first selected option.
|
|
71
|
+
*
|
|
154
72
|
* @internal
|
|
155
73
|
*/
|
|
156
|
-
|
|
157
|
-
this
|
|
158
|
-
this.$emit("search-text-change", void 0, {
|
|
159
|
-
bubbles: false,
|
|
160
|
-
composed: false
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Read-only property containing the current search text.
|
|
165
|
-
*/
|
|
166
|
-
get searchText() {
|
|
167
|
-
return this._currentSearchText ?? "";
|
|
74
|
+
get firstSelectedOptionIndex() {
|
|
75
|
+
return this.options.indexOf(this.firstSelectedOption);
|
|
168
76
|
}
|
|
169
77
|
/**
|
|
78
|
+
* Updates the `ariaActiveDescendant` property when the active index changes.
|
|
79
|
+
*
|
|
170
80
|
* @internal
|
|
171
81
|
*/
|
|
172
|
-
|
|
173
|
-
|
|
82
|
+
activeIndexChanged(_, next) {
|
|
83
|
+
this._activeDescendant = this.options[next]?.id ?? "";
|
|
84
|
+
this.focusAndScrollOptionIntoView();
|
|
174
85
|
}
|
|
175
86
|
/**
|
|
87
|
+
* Toggles the checked state for the currently active option.
|
|
88
|
+
*
|
|
89
|
+
* @remarks
|
|
90
|
+
* Multiple-selection mode only.
|
|
91
|
+
*
|
|
176
92
|
* @internal
|
|
177
93
|
*/
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
*
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
94
|
+
checkActiveIndex() {
|
|
95
|
+
const activeItem = this.activeOption;
|
|
96
|
+
/* v8 ignore else -- @preserve */
|
|
97
|
+
if (activeItem) activeItem.checked = true;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Sets the active index to the first option and marks it as checked.
|
|
101
|
+
*
|
|
102
|
+
* @remarks
|
|
103
|
+
* Multi-selection mode only.
|
|
104
|
+
*
|
|
105
|
+
* @param preserveChecked - mark all options unchecked before changing the active index
|
|
106
|
+
*
|
|
107
|
+
* @internal
|
|
108
|
+
*/
|
|
109
|
+
checkFirstOption(preserveChecked) {
|
|
110
|
+
const firstSelectableIndex = this.getNextSelectableIndex(0);
|
|
111
|
+
if (firstSelectableIndex === -1) return;
|
|
112
|
+
if (preserveChecked) {
|
|
113
|
+
if (this.rangeStartIndex === -1) this.rangeStartIndex = this.activeIndex;
|
|
114
|
+
this.options.forEach((o, i) => {
|
|
115
|
+
o.checked = (0, _microsoft_fast_web_utilities.inRange)(i, firstSelectableIndex, this.rangeStartIndex + 1) && !o.disabled;
|
|
116
|
+
});
|
|
117
|
+
} else this.uncheckAllOptions();
|
|
118
|
+
this.activeIndex = firstSelectableIndex;
|
|
119
|
+
this.checkActiveIndex();
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Decrements the active index and sets the matching option as checked.
|
|
123
|
+
*
|
|
124
|
+
* @remarks
|
|
125
|
+
* Multi-selection mode only.
|
|
126
|
+
*
|
|
127
|
+
* @param preserveChecked - mark all options unchecked before changing the active index
|
|
128
|
+
*
|
|
129
|
+
* @internal
|
|
130
|
+
*/
|
|
131
|
+
checkLastOption(preserveChecked) {
|
|
132
|
+
const lastSelectableIndex = this.getPreviousSelectableIndex(this.length - 1);
|
|
133
|
+
if (lastSelectableIndex === -1) return;
|
|
134
|
+
if (preserveChecked) {
|
|
135
|
+
if (this.rangeStartIndex === -1) this.rangeStartIndex = this.activeIndex;
|
|
136
|
+
this.options.forEach((o, i) => {
|
|
137
|
+
o.checked = (0, _microsoft_fast_web_utilities.inRange)(i, this.rangeStartIndex, lastSelectableIndex + 1) && !o.disabled;
|
|
138
|
+
});
|
|
139
|
+
} else this.uncheckAllOptions();
|
|
140
|
+
this.activeIndex = lastSelectableIndex;
|
|
141
|
+
this.checkActiveIndex();
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Increments the active index and marks the matching option as checked.
|
|
145
|
+
*
|
|
146
|
+
* @remarks
|
|
147
|
+
* Multiple-selection mode only.
|
|
148
|
+
*
|
|
149
|
+
* @param preserveChecked - mark all options unchecked before changing the active index
|
|
150
|
+
*
|
|
151
|
+
* @internal
|
|
152
|
+
*/
|
|
153
|
+
checkNextOption(preserveChecked) {
|
|
154
|
+
const nextIndex = this.getNextSelectableIndex(this.activeIndex + 1);
|
|
155
|
+
if (nextIndex === -1) return;
|
|
156
|
+
if (preserveChecked) {
|
|
157
|
+
if (this.rangeStartIndex === -1) this.rangeStartIndex = this.activeIndex;
|
|
158
|
+
this.options.forEach((o, i) => {
|
|
159
|
+
o.checked = (0, _microsoft_fast_web_utilities.inRange)(i, this.rangeStartIndex, nextIndex + 1) && !o.disabled;
|
|
160
|
+
});
|
|
161
|
+
} else this.uncheckAllOptions();
|
|
162
|
+
this.activeIndex = nextIndex;
|
|
163
|
+
this.checkActiveIndex();
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Decrements the active index and marks the matching option as checked.
|
|
167
|
+
*
|
|
168
|
+
* @remarks
|
|
169
|
+
* Multiple-selection mode only.
|
|
170
|
+
*
|
|
171
|
+
* @param preserveChecked - mark all options unchecked before changing the active index
|
|
172
|
+
*
|
|
173
|
+
* @internal
|
|
174
|
+
*/
|
|
175
|
+
checkPreviousOption(preserveChecked) {
|
|
176
|
+
const previousIndex = this.getPreviousSelectableIndex(this.activeIndex - 1);
|
|
177
|
+
if (previousIndex === -1) return;
|
|
178
|
+
if (preserveChecked) {
|
|
179
|
+
if (this.rangeStartIndex === -1) this.rangeStartIndex = this.activeIndex;
|
|
180
|
+
if (this.checkedOptions.length === 1) this.rangeStartIndex += 1;
|
|
181
|
+
this.options.forEach((o, i) => {
|
|
182
|
+
o.checked = (0, _microsoft_fast_web_utilities.inRange)(i, previousIndex, this.rangeStartIndex + 1) && !o.disabled;
|
|
183
|
+
});
|
|
184
|
+
} else this.uncheckAllOptions();
|
|
185
|
+
this.activeIndex = previousIndex;
|
|
186
|
+
this.checkActiveIndex();
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* @internal
|
|
190
|
+
*/
|
|
191
|
+
focusAndScrollOptionIntoView() {
|
|
192
|
+
super.focusAndScrollOptionIntoView(this.activeOption);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* In multiple-selection mode:
|
|
196
|
+
* If any options are selected, the first selected option is checked when
|
|
197
|
+
* the listbox receives focus. If no options are selected, the first
|
|
198
|
+
* selectable option is checked.
|
|
199
|
+
*
|
|
200
|
+
* @internal
|
|
201
|
+
*/
|
|
202
|
+
focusinHandler(e) {
|
|
203
|
+
if (!this.multiple) return super.focusinHandler(e);
|
|
204
|
+
/* v8 ignore else -- @preserve */
|
|
205
|
+
if (!this.shouldSkipFocus && e.target === e.currentTarget) {
|
|
206
|
+
this.uncheckAllOptions();
|
|
207
|
+
if (this.activeIndex === -1) this.activeIndex = this.firstSelectedOptionIndex !== -1 ? this.firstSelectedOptionIndex : 0;
|
|
208
|
+
this.checkActiveIndex();
|
|
209
|
+
this.setSelectedOptions();
|
|
210
|
+
this.focusAndScrollOptionIntoView();
|
|
266
211
|
}
|
|
267
|
-
|
|
212
|
+
this.shouldSkipFocus = false;
|
|
268
213
|
}
|
|
269
214
|
/**
|
|
270
|
-
*
|
|
215
|
+
* Sets an option as selected and gives it focus.
|
|
216
|
+
*
|
|
217
|
+
* @public
|
|
271
218
|
*/
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
if (oldValue) {
|
|
277
|
-
this._slottedDisabledOptions = [];
|
|
278
|
-
for (const option of oldValue) _microsoft_fast_element.Observable.getNotifier(option).unsubscribe(this.#slottedOptionsChangeHandler, "selected");
|
|
219
|
+
setSelectedOptions() {
|
|
220
|
+
if (!this.multiple) {
|
|
221
|
+
super.setSelectedOptions();
|
|
222
|
+
return;
|
|
279
223
|
}
|
|
280
224
|
/* v8 ignore else -- @preserve */
|
|
281
|
-
if (
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
}
|
|
285
|
-
const values = [];
|
|
286
|
-
for (const option of this._slottedOptions) {
|
|
287
|
-
if (option.selected || option.value === this.value || this.values.includes(option.value)) values.push(option.value);
|
|
288
|
-
if (option.disabled) this._slottedDisabledOptions.push(option);
|
|
225
|
+
if (this.$fastController.isConnected && this.options) {
|
|
226
|
+
this.selectedOptions = this.options.filter((o) => o.selected);
|
|
227
|
+
this.focusAndScrollOptionIntoView();
|
|
289
228
|
}
|
|
290
|
-
this.#updateValuesWhileMaintainingOrder(values);
|
|
291
|
-
this.#updateFilteredOptions();
|
|
292
|
-
this.#updateSelectionLimit();
|
|
293
|
-
}
|
|
294
|
-
#slottedOptionsChangeHandler = { handleChange: (source, _) => {
|
|
295
|
-
if (source.selected && !this.values.includes(source.value)) this.values = [...this.values, source.value];
|
|
296
|
-
else if (!source.selected && this.values.includes(source.value)) this.values = this.values.filter((option) => option !== source.value);
|
|
297
|
-
} };
|
|
298
|
-
#updateSelectedOnSlottedOptions() {
|
|
299
|
-
for (const option of this._slottedOptions) {
|
|
300
|
-
option.selected = this.values.includes(option.value);
|
|
301
|
-
this.#updateClonedTagIconOfOption(option);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
#handleOptionInteraction(option) {
|
|
305
|
-
const value = option.value;
|
|
306
|
-
let newValues;
|
|
307
|
-
let shouldClearSearchText = false;
|
|
308
|
-
const isSelection = !this.values.includes(value);
|
|
309
|
-
if (this.multiple) {
|
|
310
|
-
if (isSelection) newValues = [...this.values, value];
|
|
311
|
-
else newValues = this.values.filter((option) => option !== value);
|
|
312
|
-
shouldClearSearchText = true;
|
|
313
|
-
} else {
|
|
314
|
-
if (isSelection) {
|
|
315
|
-
newValues = [value];
|
|
316
|
-
shouldClearSearchText = true;
|
|
317
|
-
} else newValues = [];
|
|
318
|
-
this.open = false;
|
|
319
|
-
}
|
|
320
|
-
this.#updateValuesThroughUserInteraction(newValues);
|
|
321
|
-
this._changeDescription = `${isSelection ? this.locale.searchableSelect.optionSelectedMessage(option._getAccessibleName()) : this.locale.searchableSelect.optionDeselectedMessage(option._getAccessibleName())} ${this.multiple && this.maxSelected && this.maxSelected >= 1 ? this.locale.searchableSelect.maxSelectedMessage(this.values.length, this.maxSelected) : ""}`;
|
|
322
|
-
if (shouldClearSearchText) this._currentSearchText = null;
|
|
323
|
-
}
|
|
324
|
-
#clonedTagIcons = /* @__PURE__ */ new Map();
|
|
325
|
-
#tagIconOfOption(option) {
|
|
326
|
-
return option.querySelector("[slot=\"tag-icon\"]");
|
|
327
229
|
}
|
|
328
230
|
/**
|
|
231
|
+
* Toggles the selected state of the provided options. If any provided items
|
|
232
|
+
* are in an unselected state, all items are set to selected. If every
|
|
233
|
+
* provided item is selected, they are all unselected.
|
|
234
|
+
*
|
|
329
235
|
* @internal
|
|
330
236
|
*/
|
|
331
|
-
|
|
332
|
-
|
|
237
|
+
toggleSelectedForAllCheckedOptions() {
|
|
238
|
+
const enabledCheckedOptions = this.checkedOptions.filter((o) => !o.disabled);
|
|
239
|
+
const force = !enabledCheckedOptions.every((o) => o.selected);
|
|
240
|
+
enabledCheckedOptions.forEach((o) => o.selected = force);
|
|
241
|
+
this.selectedIndex = this.options.indexOf(enabledCheckedOptions[enabledCheckedOptions.length - 1]);
|
|
242
|
+
this.setSelectedOptions();
|
|
243
|
+
this.updateValue(true);
|
|
333
244
|
}
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
const
|
|
346
|
-
if (
|
|
347
|
-
|
|
348
|
-
this
|
|
245
|
+
/**
|
|
246
|
+
* @internal
|
|
247
|
+
*/
|
|
248
|
+
typeaheadBufferChanged(prev, next) {
|
|
249
|
+
if (!this.multiple) {
|
|
250
|
+
super.typeaheadBufferChanged(prev, next);
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
/* v8 ignore if -- @preserve */
|
|
254
|
+
if (this.$fastController.isConnected) {
|
|
255
|
+
const typeaheadMatches = this.getTypeaheadMatches();
|
|
256
|
+
const activeIndex = this.options.indexOf(typeaheadMatches[0]);
|
|
257
|
+
if (activeIndex > -1) {
|
|
258
|
+
this.activeIndex = activeIndex;
|
|
259
|
+
this.uncheckAllOptions();
|
|
260
|
+
this.checkActiveIndex();
|
|
349
261
|
}
|
|
262
|
+
this.typeaheadExpired = false;
|
|
350
263
|
}
|
|
351
264
|
}
|
|
352
265
|
/**
|
|
266
|
+
* Unchecks all options.
|
|
267
|
+
*
|
|
268
|
+
* @remarks
|
|
269
|
+
* Multiple-selection mode only.
|
|
270
|
+
*
|
|
271
|
+
* @param preserveChecked - reset the rangeStartIndex
|
|
272
|
+
*
|
|
353
273
|
* @internal
|
|
354
274
|
*/
|
|
355
|
-
|
|
356
|
-
this
|
|
275
|
+
uncheckAllOptions(preserveChecked = false) {
|
|
276
|
+
this.options.forEach((o) => o.checked = false);
|
|
277
|
+
/* v8 ignore else -- @preserve */
|
|
278
|
+
if (!preserveChecked) this.rangeStartIndex = -1;
|
|
357
279
|
}
|
|
358
280
|
/**
|
|
281
|
+
* Sets focus when the open property changes.
|
|
282
|
+
*
|
|
359
283
|
* @internal
|
|
360
284
|
*/
|
|
361
|
-
|
|
362
|
-
this.
|
|
363
|
-
if (
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
const optionFilter = this.optionFilter ?? ((option, searchText) => option.text.toLowerCase().includes(searchText.toLowerCase()));
|
|
368
|
-
for (const option of this._slottedOptions ?? []) {
|
|
369
|
-
option._vvdSearchText = this.searchText;
|
|
370
|
-
const matches = !this.searchText || optionFilter(option, this.searchText);
|
|
371
|
-
option._isNotMatching = !matches;
|
|
372
|
-
if (!option.hidden && matches) newFilteredOptions.push(option);
|
|
373
|
-
}
|
|
374
|
-
this.#transitionHighlightedOptionTo(null);
|
|
375
|
-
this._filteredOptions = newFilteredOptions;
|
|
376
|
-
const enabled = newFilteredOptions.filter((o) => !o.disabled);
|
|
377
|
-
if (this._selectAllOption) this._filteredEnabledOptions = [this._selectAllOption, ...enabled];
|
|
378
|
-
else this._filteredEnabledOptions = enabled;
|
|
379
|
-
}
|
|
380
|
-
#transitionHighlightedOptionTo(index) {
|
|
381
|
-
if (typeof this._highlightedOptionIndex === "number") {
|
|
382
|
-
const prevOption = this._filteredEnabledOptions[this._highlightedOptionIndex];
|
|
383
|
-
prevOption._highlighted = false;
|
|
384
|
-
prevOption.removeAttribute("data-highlighted");
|
|
385
|
-
}
|
|
386
|
-
if (typeof index === "number") if (!this._filteredEnabledOptions.length) index = null;
|
|
387
|
-
else index = Math.max(0, Math.min(this._filteredEnabledOptions.length - 1, index));
|
|
388
|
-
this._highlightedOptionIndex = index;
|
|
389
|
-
if (typeof this._highlightedOptionIndex === "number") {
|
|
390
|
-
const highlightedOption = this._filteredEnabledOptions[this._highlightedOptionIndex];
|
|
391
|
-
highlightedOption._highlighted = true;
|
|
392
|
-
highlightedOption.setAttribute("data-highlighted", "");
|
|
393
|
-
require_scrollIntoView.scrollIntoView(highlightedOption, this._listbox, "nearest");
|
|
394
|
-
this._changeDescription = this.locale.searchableSelect.optionFocusedMessage(highlightedOption._getAccessibleName(), this._highlightedOptionIndex + 1, this._filteredEnabledOptions.length, highlightedOption.selected);
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
#selectHighlightedOption() {
|
|
398
|
-
if (this._highlightedOptionIndex === null) return;
|
|
399
|
-
const highlightedOption = this._filteredEnabledOptions[this._highlightedOptionIndex];
|
|
400
|
-
if (highlightedOption.getAttribute("data-select-all") !== null) {
|
|
401
|
-
this._toggleSelectAll();
|
|
285
|
+
openChanged(prev, next) {
|
|
286
|
+
if (!this.collapsible) return;
|
|
287
|
+
if (this.open) {
|
|
288
|
+
this.focusAndScrollOptionIntoView();
|
|
289
|
+
this.indexWhenOpened = this.selectedIndex;
|
|
290
|
+
_microsoft_fast_element.Updates.enqueue(() => this.focus());
|
|
402
291
|
return;
|
|
403
292
|
}
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
this.#transitionHighlightedOptionTo(0);
|
|
408
|
-
}
|
|
409
|
-
#highlightLastOption() {
|
|
410
|
-
this.#transitionHighlightedOptionTo(this._filteredEnabledOptions.length - 1);
|
|
411
|
-
}
|
|
412
|
-
#highlightPrevPage() {
|
|
413
|
-
this.#transitionHighlightedOptionTo((this._highlightedOptionIndex ?? this._filteredEnabledOptions.length) - PageSize);
|
|
414
|
-
}
|
|
415
|
-
#highlightNextPage() {
|
|
416
|
-
this.#transitionHighlightedOptionTo((this._highlightedOptionIndex ?? -1) + PageSize);
|
|
417
|
-
}
|
|
418
|
-
#highlightPreviousOption() {
|
|
419
|
-
this.#transitionHighlightedOptionTo((this._highlightedOptionIndex ?? this._filteredEnabledOptions.length) - 1);
|
|
420
|
-
}
|
|
421
|
-
#highlightNextOption() {
|
|
422
|
-
this.#transitionHighlightedOptionTo((this._highlightedOptionIndex ?? -1) + 1);
|
|
423
|
-
}
|
|
424
|
-
/**
|
|
425
|
-
* @internal
|
|
426
|
-
*/
|
|
427
|
-
_tagLabelForValue(value) {
|
|
428
|
-
return this._slottedOptions.find((option) => option.value === value).label;
|
|
293
|
+
const didClose = prev === true && next === false;
|
|
294
|
+
const selectionChangedWhileOpen = this.indexWhenOpened !== this.selectedIndex;
|
|
295
|
+
if (didClose && selectionChangedWhileOpen) this.updateValue(true);
|
|
429
296
|
}
|
|
430
297
|
/**
|
|
298
|
+
* The component is collapsible when in single-selection mode.
|
|
299
|
+
*
|
|
431
300
|
* @internal
|
|
432
301
|
*/
|
|
433
|
-
|
|
434
|
-
return this.
|
|
302
|
+
get collapsible() {
|
|
303
|
+
return !this.multiple;
|
|
435
304
|
}
|
|
436
305
|
/**
|
|
437
306
|
* @internal
|
|
438
307
|
*/
|
|
439
|
-
|
|
440
|
-
const
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
308
|
+
valueChanged(prev, next) {
|
|
309
|
+
const nextSelectedIndex = this.options.findIndex((el) => el.value === next);
|
|
310
|
+
const validNextSelectedIndex = this._validSelectedIndex(nextSelectedIndex);
|
|
311
|
+
const nextValue = this.options[validNextSelectedIndex]?.value ?? "";
|
|
312
|
+
if (this.selectedIndex !== validNextSelectedIndex) this.selectedIndex = validNextSelectedIndex;
|
|
313
|
+
if (next !== nextValue) return;
|
|
314
|
+
super.valueChanged(prev, next);
|
|
315
|
+
this.updateDisplayValue();
|
|
445
316
|
}
|
|
446
317
|
/**
|
|
318
|
+
* Sets the value and display value to match the first selected option.
|
|
319
|
+
*
|
|
320
|
+
* @param shouldEmit - if true, the input and change events will be emitted
|
|
321
|
+
*
|
|
447
322
|
* @internal
|
|
448
323
|
*/
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
tag.remove();
|
|
458
|
-
return width;
|
|
459
|
-
}
|
|
460
|
-
#updateTagLayout() {
|
|
461
|
-
if (!this.multiple) {
|
|
462
|
-
this._numElidedTags = 0;
|
|
463
|
-
this._tagRows = [];
|
|
464
|
-
this._lastTagRow = [];
|
|
465
|
-
return;
|
|
466
|
-
}
|
|
467
|
-
if (this.externalTags) {
|
|
468
|
-
this._numElidedTags = this.values.length;
|
|
469
|
-
this._tagRows = [];
|
|
470
|
-
this._lastTagRow = [];
|
|
471
|
-
return;
|
|
472
|
-
}
|
|
473
|
-
const rowWidth = this._contentArea.getBoundingClientRect().width;
|
|
474
|
-
const rows = [[]];
|
|
475
|
-
let currentRowIndex = 0;
|
|
476
|
-
let currentRowWidth = InputMinWidthPx;
|
|
477
|
-
let i;
|
|
478
|
-
for (i = this.values.length - 1; i >= 0; i--) {
|
|
479
|
-
const isLastRow = this.maxLines && currentRowIndex === this.maxLines - 1;
|
|
480
|
-
const tagWidth = this.#measureTagWidth(this._tagLabelForValue(this.values[i]), true, this.#tagIconOfOption(this.selectedOptions[i]) !== null);
|
|
481
|
-
const entry = {
|
|
482
|
-
value: this.values[i],
|
|
483
|
-
width: tagWidth
|
|
484
|
-
};
|
|
485
|
-
let elidedTagCounterWidth = 0;
|
|
486
|
-
if (isLastRow) {
|
|
487
|
-
const numElidedTags = i;
|
|
488
|
-
if (numElidedTags) elidedTagCounterWidth = TagGapPx + this.#measureTagWidth(numElidedTags.toString(), false, false);
|
|
489
|
-
}
|
|
490
|
-
if (currentRowWidth + TagGapPx + tagWidth + elidedTagCounterWidth > rowWidth) {
|
|
491
|
-
if (isLastRow) if (i === this.values.length - 1) {
|
|
492
|
-
rows[currentRowIndex].unshift(entry);
|
|
493
|
-
currentRowWidth += TagGapPx + tagWidth;
|
|
494
|
-
} else break;
|
|
495
|
-
else {
|
|
496
|
-
rows.push([]);
|
|
497
|
-
currentRowIndex++;
|
|
498
|
-
rows[currentRowIndex].unshift(entry);
|
|
499
|
-
currentRowWidth = tagWidth;
|
|
500
|
-
}
|
|
501
|
-
continue;
|
|
502
|
-
}
|
|
503
|
-
rows[currentRowIndex].unshift(entry);
|
|
504
|
-
currentRowWidth += TagGapPx + tagWidth;
|
|
505
|
-
}
|
|
506
|
-
this._numElidedTags = i + 1;
|
|
507
|
-
rows.reverse();
|
|
508
|
-
for (let i = 0; i < rows.length - 1; i++) {
|
|
509
|
-
let lineWidth = rows[i].map((e) => e.width).reduce((a, b) => a + b, 0) + (rows[i].length - 1) * TagGapPx;
|
|
510
|
-
if (i === 0 && this._numElidedTags) lineWidth += TagGapPx + this.#measureTagWidth(this._numElidedTags.toString(), false, false);
|
|
511
|
-
while (rows[i + 1].length && lineWidth + TagGapPx + rows[i + 1][0].width <= rowWidth) {
|
|
512
|
-
const nextTag = rows[i + 1].shift();
|
|
513
|
-
rows[i].push(nextTag);
|
|
514
|
-
lineWidth += TagGapPx + nextTag.width;
|
|
515
|
-
}
|
|
324
|
+
updateValue(shouldEmit) {
|
|
325
|
+
if (this.$fastController.isConnected) this.value = this.firstSelectedOption?.value ?? "";
|
|
326
|
+
if (shouldEmit) {
|
|
327
|
+
this.$emit("input");
|
|
328
|
+
this.$emit("change", this, {
|
|
329
|
+
bubbles: true,
|
|
330
|
+
composed: void 0
|
|
331
|
+
});
|
|
516
332
|
}
|
|
517
|
-
const rowValues = rows.map((line) => line.map((entry) => entry.value));
|
|
518
|
-
this._tagRows = rowValues.slice(0, -1);
|
|
519
|
-
this._lastTagRow = rowValues.slice(-1)[0];
|
|
520
333
|
}
|
|
521
334
|
/**
|
|
335
|
+
* Updates the proxy value when the selected index changes.
|
|
336
|
+
*
|
|
337
|
+
* @param prev - the previous selected index
|
|
338
|
+
* @param next - the next selected index
|
|
339
|
+
*
|
|
522
340
|
* @internal
|
|
523
341
|
*/
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
this
|
|
342
|
+
selectedIndexChanged(prev, next) {
|
|
343
|
+
super.selectedIndexChanged(prev, next);
|
|
344
|
+
this.updateValue();
|
|
527
345
|
}
|
|
528
346
|
/**
|
|
347
|
+
* Handle opening and closing the listbox when the select is clicked.
|
|
348
|
+
*
|
|
349
|
+
* @param e - the mouse event
|
|
529
350
|
* @internal
|
|
530
351
|
*/
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
case "ArrowLeft":
|
|
543
|
-
this.#moveTagFocusTo(this.#nextTagIndexLeft(tagIndex) ?? tagIndex);
|
|
544
|
-
break;
|
|
545
|
-
case "ArrowRight":
|
|
546
|
-
this.#moveTagFocusTo(this.#nextTagIndexRight(tagIndex));
|
|
547
|
-
break;
|
|
548
|
-
}
|
|
352
|
+
clickHandler(e) {
|
|
353
|
+
if (this.disabled || this._isFromContextualHelp(e)) return;
|
|
354
|
+
const clickedOption = e.target.closest(`option,[role=option],[data-vvd-component=option]`);
|
|
355
|
+
if (clickedOption && clickedOption.disabled) return;
|
|
356
|
+
if (this.multiple) {
|
|
357
|
+
this.uncheckAllOptions();
|
|
358
|
+
this.activeIndex = this.options.indexOf(clickedOption);
|
|
359
|
+
this.checkActiveIndex();
|
|
360
|
+
this.toggleSelectedForAllCheckedOptions();
|
|
361
|
+
} else super.clickHandler(e);
|
|
362
|
+
if (this.collapsible) this.open = !this.open;
|
|
549
363
|
return true;
|
|
550
364
|
}
|
|
551
|
-
#moveTagFocusTo(index) {
|
|
552
|
-
if (index === null) this._input.focus();
|
|
553
|
-
else this.shadowRoot.querySelector(`[data-index="${index}"]`)?.focus();
|
|
554
|
-
}
|
|
555
|
-
#nextTagIndexLeft(index) {
|
|
556
|
-
if (!this.values.length) return null;
|
|
557
|
-
for (let i = index - 1; i >= 0; i--) if (!this._isTagDisabled(this.values[i])) return i;
|
|
558
|
-
return null;
|
|
559
|
-
}
|
|
560
|
-
#nextTagIndexRight(index) {
|
|
561
|
-
if (!this.values.length) return null;
|
|
562
|
-
for (let i = index + 1; i < this.values.length; i++) if (!this._isTagDisabled(this.values[i])) return i;
|
|
563
|
-
return null;
|
|
564
|
-
}
|
|
565
|
-
#nextTagIndexForRemoved(index) {
|
|
566
|
-
return this.#nextTagIndexRight(index - 1) ?? this.#nextTagIndexLeft(index);
|
|
567
|
-
}
|
|
568
365
|
/**
|
|
366
|
+
* Handles focus state when the element or its children lose focus.
|
|
367
|
+
*
|
|
368
|
+
* @param e - The focus event
|
|
569
369
|
* @internal
|
|
570
370
|
*/
|
|
571
|
-
|
|
572
|
-
if (this.
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
371
|
+
focusoutHandler(e) {
|
|
372
|
+
if (this.multiple) this.uncheckAllOptions();
|
|
373
|
+
if (!this.open) return true;
|
|
374
|
+
const focusTarget = e.relatedTarget;
|
|
375
|
+
if (this.isSameNode(focusTarget)) {
|
|
376
|
+
this.focus();
|
|
576
377
|
return;
|
|
577
378
|
}
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
get _shouldShowClearButton() {
|
|
584
|
-
return this.clearable && this.values.length > 0;
|
|
379
|
+
/* v8 ignore else -- @preserve */
|
|
380
|
+
if (!this.options.includes(focusTarget)) {
|
|
381
|
+
this.open = false;
|
|
382
|
+
if (this.indexWhenOpened !== this.selectedIndex) this.updateValue(true);
|
|
383
|
+
}
|
|
585
384
|
}
|
|
586
385
|
/**
|
|
386
|
+
* Updates the value when an option's value changes.
|
|
387
|
+
*
|
|
388
|
+
* @param source - the source object
|
|
389
|
+
* @param propertyName - the property to evaluate
|
|
390
|
+
*
|
|
587
391
|
* @internal
|
|
588
392
|
*/
|
|
589
|
-
|
|
590
|
-
|
|
393
|
+
handleChange(source, propertyName) {
|
|
394
|
+
super.handleChange(source, propertyName);
|
|
395
|
+
if (propertyName === "value") this.updateValue();
|
|
591
396
|
}
|
|
592
397
|
/**
|
|
398
|
+
* Prevents focus when a scrollbar is clicked.
|
|
399
|
+
*
|
|
400
|
+
* @param e - the mouse event object
|
|
401
|
+
*
|
|
593
402
|
* @internal
|
|
594
403
|
*/
|
|
595
|
-
|
|
596
|
-
this
|
|
597
|
-
|
|
598
|
-
#updateSelectionLimit() {
|
|
599
|
-
if (!this.multiple || !this._slottedOptions || typeof this.maxSelected !== "number" || this.maxSelected <= 0) return;
|
|
600
|
-
const options = this._slottedOptions.filter((option) => !this._slottedDisabledOptions.includes(option));
|
|
601
|
-
if (this.values.length >= this.maxSelected) {
|
|
602
|
-
const unselectedOptions = options.filter((option) => !this.selectedOptions.includes(option));
|
|
603
|
-
for (const option of unselectedOptions) option.disabled = true;
|
|
604
|
-
} else for (const option of options) option.disabled = false;
|
|
404
|
+
mousedownHandler(e) {
|
|
405
|
+
if (e.offsetX >= 0 && e.offsetX <= this.listbox.scrollWidth) return super.mousedownHandler(e);
|
|
406
|
+
return this.collapsible;
|
|
605
407
|
}
|
|
606
408
|
/**
|
|
607
409
|
* @internal
|
|
608
410
|
*/
|
|
609
|
-
|
|
610
|
-
|
|
411
|
+
multipleChanged(_, next) {
|
|
412
|
+
this.options.forEach((o) => {
|
|
413
|
+
o.checked = next ? false : void 0;
|
|
414
|
+
});
|
|
415
|
+
this.setSelectedOptions();
|
|
416
|
+
/* v8 ignore if -- @preserve */
|
|
417
|
+
if (this.proxy) this.proxy.multiple = next;
|
|
611
418
|
}
|
|
612
419
|
/**
|
|
420
|
+
* Updates the selectedness of each option when the list of selected options changes.
|
|
421
|
+
*
|
|
422
|
+
* @param prev - the previous list of selected options
|
|
423
|
+
* @param next - the current list of selected options
|
|
424
|
+
*
|
|
613
425
|
* @internal
|
|
614
426
|
*/
|
|
615
|
-
|
|
616
|
-
|
|
427
|
+
selectedOptionsChanged(prev, next) {
|
|
428
|
+
super.selectedOptionsChanged(prev, next);
|
|
429
|
+
this.options.forEach((o, i) => {
|
|
430
|
+
const proxyOption = this.proxy.options.item(i);
|
|
431
|
+
if (proxyOption) proxyOption.selected = o.selected;
|
|
432
|
+
});
|
|
617
433
|
}
|
|
618
434
|
/**
|
|
435
|
+
* Resets and fills the proxy to match the component's options.
|
|
436
|
+
*
|
|
619
437
|
* @internal
|
|
620
438
|
*/
|
|
621
|
-
|
|
622
|
-
|
|
439
|
+
setProxyOptions() {
|
|
440
|
+
/* v8 ignore else -- @preserve */
|
|
441
|
+
if (this.proxy instanceof HTMLSelectElement && this.options) {
|
|
442
|
+
this.proxy.length = 0;
|
|
443
|
+
this.options.forEach((option) => {
|
|
444
|
+
const proxyOption = option.proxy || (option instanceof HTMLOptionElement ? option.cloneNode() : null);
|
|
445
|
+
if (proxyOption) this.proxy.options.add(proxyOption);
|
|
446
|
+
});
|
|
447
|
+
}
|
|
623
448
|
}
|
|
624
449
|
/**
|
|
450
|
+
* Handles keydown actions when the select is in multiple selection mode.
|
|
451
|
+
*
|
|
625
452
|
* @internal
|
|
626
453
|
*/
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
454
|
+
multipleKeydownHandler(e) {
|
|
455
|
+
if (this.disabled) return;
|
|
456
|
+
const { key, shiftKey } = e;
|
|
457
|
+
this.shouldSkipFocus = false;
|
|
458
|
+
switch (key) {
|
|
459
|
+
case _microsoft_fast_web_utilities.keyHome:
|
|
460
|
+
this.checkFirstOption(shiftKey);
|
|
461
|
+
return;
|
|
462
|
+
case _microsoft_fast_web_utilities.keyArrowDown:
|
|
463
|
+
this.checkNextOption(shiftKey);
|
|
464
|
+
return;
|
|
465
|
+
case _microsoft_fast_web_utilities.keyArrowUp:
|
|
466
|
+
this.checkPreviousOption(shiftKey);
|
|
467
|
+
return;
|
|
468
|
+
case _microsoft_fast_web_utilities.keyEnd:
|
|
469
|
+
this.checkLastOption(shiftKey);
|
|
470
|
+
return;
|
|
471
|
+
case _microsoft_fast_web_utilities.keyTab:
|
|
472
|
+
this.focusAndScrollOptionIntoView();
|
|
473
|
+
return;
|
|
474
|
+
case _microsoft_fast_web_utilities.keyEscape:
|
|
475
|
+
this.uncheckAllOptions();
|
|
476
|
+
this.checkActiveIndex();
|
|
477
|
+
return;
|
|
478
|
+
case _microsoft_fast_web_utilities.keySpace:
|
|
479
|
+
e.preventDefault();
|
|
480
|
+
/* v8 ignore else -- @preserve */
|
|
481
|
+
if (this.typeaheadExpired) {
|
|
482
|
+
this.toggleSelectedForAllCheckedOptions();
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
default:
|
|
486
|
+
/* v8 ignore else -- @preserve */
|
|
487
|
+
if (key.length === 1) this.handleTypeAhead(`${key}`);
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
634
490
|
}
|
|
635
491
|
/**
|
|
492
|
+
* Handle keyboard interaction for the select.
|
|
493
|
+
*
|
|
494
|
+
* @param e - the keyboard event
|
|
636
495
|
* @internal
|
|
637
496
|
*/
|
|
638
|
-
|
|
639
|
-
const
|
|
640
|
-
if (this.
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
497
|
+
keydownHandler(e) {
|
|
498
|
+
const selectedIndexBefore = this.selectedIndex;
|
|
499
|
+
if (this.multiple) this.multipleKeydownHandler(e);
|
|
500
|
+
else super.keydownHandler(e);
|
|
501
|
+
switch (e.key) {
|
|
502
|
+
case _microsoft_fast_web_utilities.keySpace:
|
|
503
|
+
e.preventDefault();
|
|
504
|
+
if (this.collapsible && this.typeaheadExpired) this.open = !this.open;
|
|
505
|
+
break;
|
|
506
|
+
case _microsoft_fast_web_utilities.keyHome:
|
|
507
|
+
case _microsoft_fast_web_utilities.keyEnd:
|
|
508
|
+
e.preventDefault();
|
|
509
|
+
break;
|
|
510
|
+
case _microsoft_fast_web_utilities.keyEnter:
|
|
511
|
+
e.preventDefault();
|
|
512
|
+
this.open = !this.open;
|
|
513
|
+
break;
|
|
514
|
+
case _microsoft_fast_web_utilities.keyEscape:
|
|
515
|
+
if (this.collapsible && this.open) {
|
|
516
|
+
e.preventDefault();
|
|
517
|
+
this.open = false;
|
|
518
|
+
}
|
|
519
|
+
break;
|
|
520
|
+
case _microsoft_fast_web_utilities.keyTab:
|
|
521
|
+
if (this.collapsible && this.open) {
|
|
522
|
+
e.preventDefault();
|
|
523
|
+
this.open = false;
|
|
524
|
+
}
|
|
525
|
+
return true;
|
|
645
526
|
}
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
527
|
+
if (this.collapsible && !this.open && this.selectedIndex !== selectedIndexBefore) this.updateValue(true);
|
|
528
|
+
return !(e.key === _microsoft_fast_web_utilities.keyArrowDown || e.key === _microsoft_fast_web_utilities.keyArrowUp);
|
|
529
|
+
}
|
|
530
|
+
connectedCallback() {
|
|
531
|
+
super.connectedCallback();
|
|
532
|
+
this.addEventListener("focusout", this.focusoutHandler);
|
|
533
|
+
this.addEventListener("contentchange", this.updateDisplayValue);
|
|
650
534
|
}
|
|
651
|
-
|
|
652
|
-
|
|
535
|
+
disconnectedCallback() {
|
|
536
|
+
this.removeEventListener("focusout", this.focusoutHandler);
|
|
537
|
+
this.removeEventListener("contentchange", this.updateDisplayValue);
|
|
538
|
+
super.disconnectedCallback();
|
|
653
539
|
}
|
|
654
540
|
/**
|
|
541
|
+
*
|
|
655
542
|
* @internal
|
|
656
543
|
*/
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
544
|
+
updateDisplayValue() {
|
|
545
|
+
if (this.collapsible) _microsoft_fast_element.Observable.notify(this, "displayValue");
|
|
546
|
+
}
|
|
547
|
+
get displayValue() {
|
|
548
|
+
_microsoft_fast_element.Observable.track(this, "displayValue");
|
|
549
|
+
return this.firstSelectedOption?.getAttribute("label") ?? this.firstSelectedOption?.text ?? this.placeholder ?? "";
|
|
660
550
|
}
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
const
|
|
665
|
-
|
|
666
|
-
this.setFormValue(formData);
|
|
551
|
+
_newDefaultSelectedIndex(prev, next, currentSelectIndex) {
|
|
552
|
+
const defaultSelectedIndex = super._newDefaultSelectedIndex(prev, next, currentSelectIndex);
|
|
553
|
+
if (defaultSelectedIndex === null && currentSelectIndex === -1 && !this.placeholder) {
|
|
554
|
+
const firstSelectableIndex = this.getNextSelectableIndex(0);
|
|
555
|
+
if (firstSelectableIndex !== -1) return firstSelectableIndex;
|
|
667
556
|
}
|
|
557
|
+
return defaultSelectedIndex;
|
|
558
|
+
}
|
|
559
|
+
_isDefaultSelected(option) {
|
|
560
|
+
return super._isDefaultSelected(option) || option.value === this.initialValue || !this._isResetting && option.value === this.value;
|
|
561
|
+
}
|
|
562
|
+
slottedOptionsChanged(prev, next) {
|
|
563
|
+
this.options.forEach((o) => {
|
|
564
|
+
_microsoft_fast_element.Observable.getNotifier(o).unsubscribe(this, "value");
|
|
565
|
+
});
|
|
566
|
+
super.slottedOptionsChanged(prev, next);
|
|
567
|
+
this.options.forEach((o) => {
|
|
568
|
+
_microsoft_fast_element.Observable.getNotifier(o).subscribe(this, "value");
|
|
569
|
+
});
|
|
570
|
+
this.setProxyOptions();
|
|
571
|
+
this.updateValue();
|
|
572
|
+
const scale = this.getAttribute("scale") || this.scale;
|
|
573
|
+
next.forEach((element) => {
|
|
574
|
+
if (scale) {
|
|
575
|
+
element.setAttribute("scale", scale);
|
|
576
|
+
element.scale = scale;
|
|
577
|
+
}
|
|
578
|
+
});
|
|
579
|
+
this.proxy.value = this.value;
|
|
580
|
+
this.validate();
|
|
668
581
|
}
|
|
669
|
-
/**
|
|
670
|
-
* @internal
|
|
671
|
-
*/
|
|
672
582
|
formResetCallback() {
|
|
673
|
-
|
|
674
|
-
this
|
|
583
|
+
this.setProxyOptions();
|
|
584
|
+
this._isResetting = true;
|
|
585
|
+
this.selectedIndex = this._newDefaultSelectedIndex([], this.options, -1) ?? -1;
|
|
586
|
+
this._isResetting = false;
|
|
675
587
|
}
|
|
676
|
-
#resizeObserver = new ResizeObserver(() => {
|
|
677
|
-
this.#updateTagLayout();
|
|
678
|
-
});
|
|
679
588
|
/**
|
|
680
589
|
* @internal
|
|
681
590
|
*/
|
|
682
|
-
|
|
683
|
-
if (this.
|
|
684
|
-
if (
|
|
685
|
-
|
|
686
|
-
this.open = true;
|
|
687
|
-
}
|
|
591
|
+
get _shouldShowClearButton() {
|
|
592
|
+
if (!this.clearable) return false;
|
|
593
|
+
if (this.multiple) return this.selectedOptions?.length > 0;
|
|
594
|
+
return this.value !== "";
|
|
688
595
|
}
|
|
689
596
|
/**
|
|
690
597
|
* @internal
|
|
691
598
|
*/
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
}
|
|
697
|
-
return true;
|
|
698
|
-
}
|
|
699
|
-
connectedCallback() {
|
|
700
|
-
super.connectedCallback();
|
|
701
|
-
if (!this.values.length) this.values = this.#determineInitialValues();
|
|
702
|
-
this.#resizeObserver.observe(this._contentArea);
|
|
703
|
-
}
|
|
704
|
-
disconnectedCallback() {
|
|
705
|
-
super.disconnectedCallback();
|
|
706
|
-
this.#resizeObserver.disconnect();
|
|
599
|
+
_onClearButtonFocus() {
|
|
600
|
+
this._isClearButtonFocused = true;
|
|
601
|
+
this.activeIndex = -1;
|
|
602
|
+
this.uncheckAllOptions();
|
|
707
603
|
}
|
|
708
604
|
/**
|
|
709
605
|
* @internal
|
|
710
606
|
*/
|
|
711
|
-
|
|
712
|
-
|
|
607
|
+
_onClearButtonBlur() {
|
|
608
|
+
this._isClearButtonFocused = false;
|
|
713
609
|
}
|
|
714
610
|
/**
|
|
715
611
|
* @internal
|
|
716
612
|
*/
|
|
717
|
-
|
|
718
|
-
this.
|
|
613
|
+
get _shouldShowLabelWrapper() {
|
|
614
|
+
return Boolean(this.label || this._hasContextualHelp || this.multiple && this._shouldShowClearButton);
|
|
719
615
|
}
|
|
720
616
|
/**
|
|
721
617
|
* @internal
|
|
722
618
|
*/
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
619
|
+
_onClearButtonClick() {
|
|
620
|
+
if (this.multiple) this.selectedOptions?.forEach((o) => {
|
|
621
|
+
/* v8 ignore else -- @preserve */
|
|
622
|
+
if (!o.disabled) o.selected = false;
|
|
623
|
+
});
|
|
624
|
+
else this.selectedIndex = -1;
|
|
625
|
+
this.updateValue(true);
|
|
730
626
|
}
|
|
731
627
|
};
|
|
732
|
-
require_decorate.__decorate([_microsoft_fast_element.
|
|
733
|
-
require_decorate.__decorate([_microsoft_fast_element.attr],
|
|
628
|
+
require_decorate.__decorate([_microsoft_fast_element.observable], Select.prototype, "activeIndex", void 0);
|
|
629
|
+
require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ mode: "boolean" })], Select.prototype, "multiple", void 0);
|
|
734
630
|
require_decorate.__decorate([(0, _microsoft_fast_element.attr)({
|
|
735
|
-
|
|
736
|
-
attribute: "fixed-dropdown"
|
|
737
|
-
})], SearchableSelect.prototype, "fixedDropdown", void 0);
|
|
738
|
-
require_decorate.__decorate([_microsoft_fast_element.attr], SearchableSelect.prototype, "placeholder", void 0);
|
|
739
|
-
require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ mode: "boolean" })], SearchableSelect.prototype, "open", void 0);
|
|
740
|
-
require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ mode: "boolean" })], SearchableSelect.prototype, "multiple", void 0);
|
|
741
|
-
require_decorate.__decorate([(0, _microsoft_fast_element.attr)({
|
|
742
|
-
attribute: "external-tags",
|
|
631
|
+
attribute: "open",
|
|
743
632
|
mode: "boolean"
|
|
744
|
-
})],
|
|
745
|
-
require_decorate.__decorate([
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
require_decorate.__decorate([_microsoft_fast_element.
|
|
750
|
-
require_decorate.__decorate([_microsoft_fast_element.
|
|
751
|
-
require_decorate.__decorate([_microsoft_fast_element.
|
|
752
|
-
require_decorate.__decorate([_microsoft_fast_element.observable], SearchableSelect.prototype, "_currentSearchText", void 0);
|
|
753
|
-
require_decorate.__decorate([_microsoft_fast_element.observable], SearchableSelect.prototype, "_slottedOptions", void 0);
|
|
754
|
-
require_decorate.__decorate([_microsoft_fast_element.observable], SearchableSelect.prototype, "optionFilter", void 0);
|
|
755
|
-
require_decorate.__decorate([_microsoft_fast_element.observable], SearchableSelect.prototype, "_filteredOptions", void 0);
|
|
756
|
-
require_decorate.__decorate([_microsoft_fast_element.observable], SearchableSelect.prototype, "_filteredEnabledOptions", void 0);
|
|
757
|
-
require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ mode: "boolean" })], SearchableSelect.prototype, "loading", void 0);
|
|
758
|
-
require_decorate.__decorate([_microsoft_fast_element.observable], SearchableSelect.prototype, "_highlightedOptionIndex", void 0);
|
|
759
|
-
require_decorate.__decorate([_microsoft_fast_element.observable], SearchableSelect.prototype, "_contentArea", void 0);
|
|
760
|
-
require_decorate.__decorate([_microsoft_fast_element.observable], SearchableSelect.prototype, "_numElidedTags", void 0);
|
|
761
|
-
require_decorate.__decorate([_microsoft_fast_element.observable], SearchableSelect.prototype, "_tagRows", void 0);
|
|
762
|
-
require_decorate.__decorate([_microsoft_fast_element.observable], SearchableSelect.prototype, "_lastTagRow", void 0);
|
|
763
|
-
require_decorate.__decorate([_microsoft_fast_element.observable], SearchableSelect.prototype, "_listbox", void 0);
|
|
764
|
-
require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ mode: "boolean" })], SearchableSelect.prototype, "clearable", void 0);
|
|
765
|
-
require_decorate.__decorate([(0, _microsoft_fast_element.attr)({
|
|
766
|
-
attribute: "max-selected",
|
|
767
|
-
converter: _microsoft_fast_element.nullableNumberConverter
|
|
768
|
-
})], SearchableSelect.prototype, "maxSelected", void 0);
|
|
769
|
-
require_decorate.__decorate([_microsoft_fast_element.observable], SearchableSelect.prototype, "_slottedDisabledOptions", void 0);
|
|
633
|
+
})], Select.prototype, "open", void 0);
|
|
634
|
+
require_decorate.__decorate([_microsoft_fast_element.volatile], Select.prototype, "collapsible", null);
|
|
635
|
+
require_decorate.__decorate([_microsoft_fast_element.observable], Select.prototype, "control", void 0);
|
|
636
|
+
require_decorate.__decorate([_microsoft_fast_element.observable], Select.prototype, "maxHeight", void 0);
|
|
637
|
+
require_decorate.__decorate([_microsoft_fast_element.observable], Select.prototype, "_anchor", void 0);
|
|
638
|
+
require_decorate.__decorate([(0, _microsoft_fast_element.attr)()], Select.prototype, "scale", void 0);
|
|
639
|
+
require_decorate.__decorate([_microsoft_fast_element.attr], Select.prototype, "appearance", void 0);
|
|
640
|
+
require_decorate.__decorate([_microsoft_fast_element.attr], Select.prototype, "shape", void 0);
|
|
770
641
|
require_decorate.__decorate([(0, _microsoft_fast_element.attr)({
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
})],
|
|
774
|
-
require_decorate.__decorate([
|
|
775
|
-
require_decorate.__decorate([
|
|
776
|
-
require_decorate.__decorate([_microsoft_fast_element.observable],
|
|
777
|
-
require_decorate.__decorate([_microsoft_fast_element.
|
|
778
|
-
require_decorate.__decorate([_microsoft_fast_element.observable],
|
|
779
|
-
//#endregion
|
|
780
|
-
//#region src/lib/searchable-select/option-tag.ts
|
|
781
|
-
var OptionTag = class extends require_localized.Localized(require_vivid_element.VividElement) {
|
|
782
|
-
constructor(..._args) {
|
|
783
|
-
super(..._args);
|
|
784
|
-
this.removable = false;
|
|
785
|
-
this.disabled = false;
|
|
786
|
-
this.hasIconPlaceholder = false;
|
|
787
|
-
}
|
|
788
|
-
/** @internal */
|
|
789
|
-
_onClickRemove() {
|
|
790
|
-
this.$emit("remove", void 0, { bubbles: false });
|
|
791
|
-
}
|
|
792
|
-
};
|
|
793
|
-
require_decorate.__decorate([_microsoft_fast_element.attr], OptionTag.prototype, "shape", void 0);
|
|
794
|
-
require_decorate.__decorate([_microsoft_fast_element.observable], OptionTag.prototype, "connotation", void 0);
|
|
795
|
-
require_decorate.__decorate([_microsoft_fast_element.attr], OptionTag.prototype, "label", void 0);
|
|
796
|
-
require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ mode: "boolean" })], OptionTag.prototype, "removable", void 0);
|
|
797
|
-
require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ mode: "boolean" })], OptionTag.prototype, "disabled", void 0);
|
|
798
|
-
require_decorate.__decorate([_microsoft_fast_element.observable], OptionTag.prototype, "hasIconPlaceholder", void 0);
|
|
642
|
+
mode: "boolean",
|
|
643
|
+
attribute: "fixed-dropdown"
|
|
644
|
+
})], Select.prototype, "fixedDropdown", void 0);
|
|
645
|
+
require_decorate.__decorate([_microsoft_fast_element.attr], Select.prototype, "placeholder", void 0);
|
|
646
|
+
require_decorate.__decorate([_microsoft_fast_element.observable], Select.prototype, "_feedbackWrapper", void 0);
|
|
647
|
+
require_decorate.__decorate([_microsoft_fast_element.observable], Select.prototype, "metaSlottedContent", void 0);
|
|
648
|
+
require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ mode: "boolean" })], Select.prototype, "clearable", void 0);
|
|
649
|
+
require_decorate.__decorate([_microsoft_fast_element.observable], Select.prototype, "_isClearButtonFocused", void 0);
|
|
799
650
|
//#endregion
|
|
800
|
-
//#region src/lib/
|
|
801
|
-
var getStateClasses = (
|
|
651
|
+
//#region src/lib/select/select.template.ts
|
|
652
|
+
var getStateClasses = ({ shape, disabled, appearance, metaSlottedContent, errorValidationMessage, successText, placeholder, value, scale, _activeDescendant, open }) => (0, _microsoft_fast_web_utilities.classNames)(["has-activedescendant", Boolean(_activeDescendant) && open], ["disabled", disabled], [`appearance-${appearance}`, Boolean(appearance)], [`shape-${shape}`, Boolean(shape)], ["has-meta", Boolean(metaSlottedContent?.length)], ["error", Boolean(errorValidationMessage)], ["success", !!successText], ["shows-placeholder", Boolean(placeholder) && !value], [`size-${scale}`, Boolean(scale)]);
|
|
802
653
|
function renderLabel() {
|
|
803
|
-
return _microsoft_fast_element.html`
|
|
804
|
-
|
|
805
|
-
|
|
654
|
+
return _microsoft_fast_element.html` <label
|
|
655
|
+
for="${(x) => x.multiple ? null : "control"}"
|
|
656
|
+
class="label"
|
|
657
|
+
id="label"
|
|
658
|
+
>
|
|
659
|
+
${(x) => x.label}
|
|
660
|
+
</label>`;
|
|
806
661
|
}
|
|
807
|
-
function
|
|
662
|
+
function renderPlaceholder(context) {
|
|
663
|
+
const optionTag = context.tagFor(require_definition$3.ListboxOption);
|
|
808
664
|
return _microsoft_fast_element.html`
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
class="selection-count"
|
|
812
|
-
aria-label="${(x) => x.locale.searchableSelect.maxSelectedMessage(x.values.length, x.maxSelected)}"
|
|
813
|
-
>(${(x) => `${x.values.length}/${x.maxSelected}`})</span
|
|
814
|
-
>
|
|
815
|
-
`;
|
|
665
|
+
<${optionTag} text="${(x) => x.placeholder}" hidden disabled>
|
|
666
|
+
</${optionTag}>`;
|
|
816
667
|
}
|
|
817
|
-
|
|
818
|
-
const
|
|
819
|
-
return _microsoft_fast_element.html`
|
|
820
|
-
<div class="tag-wrapper">
|
|
821
|
-
<${optionTagTag}
|
|
822
|
-
class="tag"
|
|
823
|
-
tabindex="-1"
|
|
824
|
-
data-index="${(x, c) => getComponent(c).values.indexOf(x)}"
|
|
825
|
-
removable
|
|
826
|
-
:label="${(x, c) => getComponent(c)._tagLabelForValue(x)}"
|
|
827
|
-
:shape="${(_, c) => getComponent(c).shape}"
|
|
828
|
-
:connotation="${(x, c) => getComponent(c)._tagConnotationForValue(x)}"
|
|
829
|
-
?disabled="${(x, c) => getComponent(c)._isTagDisabled(x)}"
|
|
830
|
-
@remove="${(x, c) => getComponent(c)._onTagRemoved(x)}"
|
|
831
|
-
@keydown="${(_, c) => getComponent(c)._onTagKeydown(c.event)}"
|
|
832
|
-
@mousedown="${() => false}">
|
|
833
|
-
<slot slot="icon" name="${(x, c) => getComponent(c)._tagIconSlotName(x)}"></slot>
|
|
834
|
-
</${optionTagTag}>
|
|
835
|
-
</div>
|
|
836
|
-
`;
|
|
837
|
-
};
|
|
838
|
-
var elidedTagTemplateFactory = (context, getComponent) => {
|
|
839
|
-
const optionTagTag = context.tagFor(OptionTag);
|
|
668
|
+
function renderClearButton(context) {
|
|
669
|
+
const buttonTag = context.tagFor(require_definition$1.Button);
|
|
840
670
|
return _microsoft_fast_element.html`
|
|
841
|
-
<${
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
?disabled="${(x, c) => getComponent(x, c).disabled}"
|
|
847
|
-
@mousedown="${() => false}">
|
|
848
|
-
</${optionTagTag}>
|
|
849
|
-
`;
|
|
850
|
-
};
|
|
851
|
-
function renderFieldset(context) {
|
|
852
|
-
const buttonTag = context.tagFor(require_definition$2.Button);
|
|
853
|
-
const progressRingTag = context.tagFor(require_definition$1.ProgressRing);
|
|
854
|
-
const affixIconTemplate = require_affix.affixIconTemplateFactory(context);
|
|
855
|
-
const chevronTemplate = require_definition$2.chevronTemplateFactory(context);
|
|
856
|
-
const tagTemplate = tagTemplateFactory(context, (c) => c.parent);
|
|
857
|
-
const nestedTagTemplate = tagTemplateFactory(context, (c) => c.parentContext.parent);
|
|
858
|
-
const elidedTagTemplate = elidedTagTemplateFactory(context, (x, _) => x);
|
|
859
|
-
const nestedElidedTagTemplate = elidedTagTemplateFactory(context, (_, c) => c.parent);
|
|
860
|
-
return _microsoft_fast_element.html`
|
|
861
|
-
<div
|
|
862
|
-
class="fieldset ${getStateClasses}"
|
|
863
|
-
@click="${(x, c) => x._onFieldsetClick(c.event)}"
|
|
864
|
-
${(0, _microsoft_fast_element.ref)("_anchor")}
|
|
865
|
-
>
|
|
866
|
-
${(x) => affixIconTemplate(x.icon, require_affix.IconWrapper.Slot)}
|
|
867
|
-
<div class="content-area" ${(0, _microsoft_fast_element.ref)("_contentArea")}>
|
|
868
|
-
${(0, _microsoft_fast_element.repeat)((x) => x._tagRows, _microsoft_fast_element.html`
|
|
869
|
-
<div class="tag-row">
|
|
870
|
-
${(0, _microsoft_fast_element.when)((_, c) => c.isFirst && c.parent._numElidedTags, nestedElidedTagTemplate)}
|
|
871
|
-
${(0, _microsoft_fast_element.repeat)((x) => x, nestedTagTemplate)}
|
|
872
|
-
</div>
|
|
873
|
-
`, { positioning: true })}
|
|
874
|
-
<div
|
|
875
|
-
class="tag-row ${(x) => (0, _microsoft_fast_web_utilities.classNames)(["contains-only-input", x._tagRows.length > 0 && x._lastTagRow.length === 0])}"
|
|
876
|
-
>
|
|
877
|
-
${(0, _microsoft_fast_element.when)((x) => x._tagRows.length === 0 && x._numElidedTags, elidedTagTemplate)}
|
|
878
|
-
${(0, _microsoft_fast_element.repeat)((x) => x._lastTagRow, tagTemplate)}
|
|
879
|
-
<input
|
|
880
|
-
id="control"
|
|
881
|
-
class="control"
|
|
882
|
-
autocomplete="off"
|
|
883
|
-
aria-controls="listbox"
|
|
884
|
-
aria-describedby="${(x) => x._feedbackDescribedBy} ${(x) => x.multiple && x.maxSelected && x.maxSelected >= 1 ? "selection-count" : null}"
|
|
885
|
-
${require_delegates_aria.delegateAria({
|
|
886
|
-
role: "combobox",
|
|
887
|
-
ariaAutoComplete: "list",
|
|
888
|
-
ariaHasPopup: "listbox",
|
|
889
|
-
ariaExpanded: (x) => x.open
|
|
890
|
-
})}
|
|
891
|
-
placeholder="${(x) => x.multiple && x.values.length ? "" : x.placeholder}"
|
|
892
|
-
type="text"
|
|
893
|
-
?disabled="${(x) => x.disabled}"
|
|
894
|
-
:value="${(x) => x._inputValue}"
|
|
895
|
-
@input="${(x, c) => {
|
|
896
|
-
x._onInputInput(c.event);
|
|
671
|
+
<${buttonTag}
|
|
672
|
+
aria-label="${(x) => x.locale.select.clearButtonLabel}"
|
|
673
|
+
aria-hidden="${(x) => x._isClearButtonFocused ? "false" : "true"}"
|
|
674
|
+
@click="${(x, c) => {
|
|
675
|
+
x._onClearButtonClick();
|
|
897
676
|
c.event.stopPropagation();
|
|
898
677
|
}}"
|
|
899
|
-
|
|
678
|
+
@mousedown="${() => false}"
|
|
679
|
+
@keydown="${(x, c) => {
|
|
680
|
+
/* v8 ignore next -- @preserve */
|
|
681
|
+
if (c.event.key === "Tab") x._onClearButtonBlur();
|
|
900
682
|
c.event.stopPropagation();
|
|
683
|
+
return true;
|
|
901
684
|
}}"
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
:shape="${(x) => x.shape}"
|
|
916
|
-
size="super-condensed"
|
|
917
|
-
icon="close-line"
|
|
918
|
-
appearance="ghost-light"
|
|
919
|
-
tabindex="0"
|
|
920
|
-
></${buttonTag}>`)}
|
|
921
|
-
<div @mousedown="${() => false}" @click="${(x) => x._onChevronClick()}">
|
|
922
|
-
${(0, _microsoft_fast_element.when)((x) => x.loading, _microsoft_fast_element.html`<${progressRingTag} indeterminate size="-6" aria-hidden="true"></${progressRingTag}>`)}
|
|
923
|
-
${(0, _microsoft_fast_element.when)((x) => !x.loading, chevronTemplate)}
|
|
924
|
-
</div>
|
|
925
|
-
</div>
|
|
685
|
+
@focusin="${(x, c) => {
|
|
686
|
+
c.event.stopPropagation();
|
|
687
|
+
x._onClearButtonFocus();
|
|
688
|
+
}}"
|
|
689
|
+
@focusout="${(x) => x._onClearButtonBlur()}"
|
|
690
|
+
?disabled="${(x) => x.disabled}"
|
|
691
|
+
:shape="${(x) => x.shape}"
|
|
692
|
+
size="super-condensed"
|
|
693
|
+
icon="close-line"
|
|
694
|
+
appearance="ghost-light"
|
|
695
|
+
class="clear-button"
|
|
696
|
+
tabindex="0"
|
|
697
|
+
></${buttonTag}>
|
|
926
698
|
`;
|
|
927
699
|
}
|
|
928
|
-
function
|
|
929
|
-
|
|
700
|
+
function selectValue(context) {
|
|
701
|
+
const affixIconTemplate = require_affix.affixIconTemplateFactory(context);
|
|
702
|
+
const chevronTemplate = require_definition$1.chevronTemplateFactory(context);
|
|
703
|
+
return _microsoft_fast_element.html` <div
|
|
704
|
+
class="control ${getStateClasses}"
|
|
705
|
+
${(0, _microsoft_fast_element.ref)("_anchor")}
|
|
706
|
+
id="control"
|
|
707
|
+
?disabled="${(x) => x.disabled}"
|
|
708
|
+
>
|
|
709
|
+
<div class="selected-value">
|
|
710
|
+
${(x) => affixIconTemplate(x.icon, require_affix.IconWrapper.Slot)}
|
|
711
|
+
<span class="text">${(x) => x.displayValue}</span>
|
|
712
|
+
<slot name="meta" ${(0, _microsoft_fast_element.slotted)("metaSlottedContent")}></slot>
|
|
713
|
+
</div>
|
|
714
|
+
${(0, _microsoft_fast_element.when)((x) => x._shouldShowClearButton, renderClearButton(context))}
|
|
715
|
+
${chevronTemplate}
|
|
716
|
+
</div>`;
|
|
930
717
|
}
|
|
931
|
-
function
|
|
932
|
-
|
|
933
|
-
const dividerTag = context.tagFor(require_divider.Divider);
|
|
934
|
-
return _microsoft_fast_element.html`
|
|
935
|
-
<${optionTag}
|
|
936
|
-
data-select-all
|
|
937
|
-
tabindex="-1"
|
|
938
|
-
:text="${(x) => x._selectAllLabel}"
|
|
939
|
-
:selected="${(x) => x._isAllSelected}"
|
|
940
|
-
:_displayCheckmark="${() => true}"
|
|
941
|
-
?disabled="${(x) => x._selectableOptions.length === 0}"
|
|
942
|
-
${(0, _microsoft_fast_element.ref)("_selectAllOption")}>
|
|
943
|
-
</${optionTag}>
|
|
944
|
-
<${dividerTag} class="divider"></${dividerTag}>
|
|
945
|
-
`;
|
|
718
|
+
function setFixedDropdownVarWidth(x) {
|
|
719
|
+
return x.open && x.fixedDropdown ? `--_select-fixed-width: ${Math.round(x.getBoundingClientRect().width)}px` : null;
|
|
946
720
|
}
|
|
721
|
+
/**
|
|
722
|
+
* @param context - element definition context
|
|
723
|
+
*/
|
|
947
724
|
function renderControl(context) {
|
|
948
|
-
const popupTag = context.tagFor(require_definition$
|
|
725
|
+
const popupTag = context.tagFor(require_definition$2.Popup);
|
|
949
726
|
return _microsoft_fast_element.html`
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
${(x) => x._changeDescription}
|
|
961
|
-
</span>
|
|
962
|
-
<div>
|
|
963
|
-
${renderFieldset(context)}
|
|
964
|
-
<div class="popup-wrapper">
|
|
965
|
-
<${popupTag}
|
|
727
|
+
<div class="label-wrapper" ?hidden=${(x) => !x._shouldShowLabelWrapper}>
|
|
728
|
+
${(0, _microsoft_fast_element.when)((x) => x.label, renderLabel())}
|
|
729
|
+
${(0, _microsoft_fast_element.when)((x) => x.multiple && x._shouldShowClearButton, renderClearButton(context))}
|
|
730
|
+
<slot name="contextual-help" ${(0, _microsoft_fast_element.slotted)("_contextualHelpSlottedContent")}></slot>
|
|
731
|
+
</div>
|
|
732
|
+
<div class="control-wrapper">
|
|
733
|
+
${(0, _microsoft_fast_element.when)((x) => !x.multiple, selectValue(context))}
|
|
734
|
+
<${popupTag} class="popup"
|
|
735
|
+
style="${setFixedDropdownVarWidth}"
|
|
736
|
+
?open="${(x) => x.collapsible ? x.open : true}"
|
|
966
737
|
:anchor="${(x) => x._anchor}"
|
|
967
|
-
:open="${(x) => x.open}"
|
|
968
|
-
class="popup"
|
|
969
738
|
placement="bottom-start"
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
class="listbox"
|
|
739
|
+
strategy="${(x) => x.fixedDropdown ? null : "absolute"}">
|
|
740
|
+
<div class="listbox"
|
|
741
|
+
id="${(x) => x.listboxId}"
|
|
974
742
|
role="listbox"
|
|
975
743
|
aria-multiselectable="${(x) => x.multiple}"
|
|
976
|
-
aria-
|
|
977
|
-
${(
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
${(0, _microsoft_fast_element.when)((x) => x.
|
|
744
|
+
aria-label="${(x) => x.multiple && !x.label && x.ariaLabel ? x.ariaLabel : null}"
|
|
745
|
+
aria-labelledby="${(x) => x.multiple && x.label ? "label" : null}"
|
|
746
|
+
?disabled="${(x) => x.disabled}"
|
|
747
|
+
?hidden="${(x) => x.collapsible ? !x.open : false}"
|
|
748
|
+
${(0, _microsoft_fast_element.ref)("listbox")}>
|
|
749
|
+
${(0, _microsoft_fast_element.when)((x) => x.placeholder, renderPlaceholder(context))}
|
|
982
750
|
<slot
|
|
983
751
|
${(0, _microsoft_fast_element.slotted)({
|
|
984
|
-
filter:
|
|
752
|
+
filter: require_listbox.Listbox.slottedOptionFilter,
|
|
985
753
|
flatten: true,
|
|
986
|
-
property: "
|
|
754
|
+
property: "slottedOptions"
|
|
987
755
|
})}>
|
|
988
756
|
</slot>
|
|
989
|
-
|
|
990
|
-
${(0, _microsoft_fast_element.when)((x) => x.loading, _microsoft_fast_element.html`<slot name="loading-options">
|
|
991
|
-
${(x) => x.locale.searchableSelect.loadingOptionsMessage}
|
|
992
|
-
</slot>`)}
|
|
993
|
-
${(0, _microsoft_fast_element.when)((x) => !x.loading && x.searchText === "", _microsoft_fast_element.html`<slot name="no-options">
|
|
994
|
-
${(x) => x.locale.searchableSelect.noOptionsMessage}
|
|
995
|
-
</slot>`)}
|
|
996
|
-
${(0, _microsoft_fast_element.when)((x) => !x.loading && x.searchText !== "", _microsoft_fast_element.html`<slot name="no-matches">
|
|
997
|
-
${(x) => x.locale.searchableSelect.noMatchesMessage}
|
|
998
|
-
</slot>`)}
|
|
999
|
-
</div>`)}
|
|
1000
|
-
</div>
|
|
757
|
+
</div>
|
|
1001
758
|
</${popupTag}>
|
|
1002
759
|
</div>
|
|
1003
|
-
|
|
1004
|
-
`;
|
|
760
|
+
`;
|
|
1005
761
|
}
|
|
1006
|
-
|
|
1007
|
-
|
|
762
|
+
/**
|
|
763
|
+
* Ignore events that originate from feedback, e.g. a click on link
|
|
764
|
+
*/
|
|
765
|
+
function ifNotFromFeedback(handler) {
|
|
766
|
+
return (x, c) => {
|
|
767
|
+
if (!c.event.composedPath().includes(x._feedbackWrapper)) return handler(x, c.event);
|
|
768
|
+
return true;
|
|
769
|
+
};
|
|
770
|
+
}
|
|
771
|
+
var SelectTemplate = (context) => {
|
|
1008
772
|
return _microsoft_fast_element.html`
|
|
1009
773
|
<template
|
|
1010
|
-
|
|
1011
|
-
|
|
774
|
+
${require_host_semantics.applyHostSemantics({
|
|
775
|
+
role: "combobox",
|
|
776
|
+
ariaLabel: (x) => x.ariaLabel ?? x.label,
|
|
777
|
+
ariaHasPopup: (x) => x.collapsible ? "listbox" : "false",
|
|
778
|
+
ariaExpanded: (x) => x.open,
|
|
779
|
+
ariaDisabled: (x) => x.disabled
|
|
780
|
+
})}
|
|
781
|
+
aria-controls="${(x) => x.listboxId}"
|
|
782
|
+
aria-activedescendant="${(x) => x.open ? x._activeDescendant : null}"
|
|
783
|
+
aria-describedby="${(x) => x._feedbackDescribedBy}"
|
|
784
|
+
tabindex="${(x) => !x.disabled ? "0" : null}"
|
|
785
|
+
@click="${ifNotFromFeedback((x, e) => x.clickHandler(e))}"
|
|
786
|
+
@focusin="${ifNotFromFeedback((x, e) => x.focusinHandler(e))}"
|
|
787
|
+
@focusout="${ifNotFromFeedback((x, e) => x.focusoutHandler(e))}"
|
|
788
|
+
@keydown="${ifNotFromFeedback((x, e) => {
|
|
789
|
+
x.open && require_dialog.handleEscapeKeyAndStopPropogation(e);
|
|
790
|
+
return x.keydownHandler(e);
|
|
791
|
+
})}"
|
|
792
|
+
@mousedown="${ifNotFromFeedback((x, e) => x.mousedownHandler(e))}"
|
|
1012
793
|
>
|
|
1013
|
-
|
|
1014
|
-
|
|
794
|
+
${renderControl(context)}
|
|
795
|
+
<div class="feedback-wrapper" ${(0, _microsoft_fast_element.ref)("_feedbackWrapper")}>
|
|
796
|
+
${(x) => x._getFeedbackTemplate(context)}
|
|
1015
797
|
</div>
|
|
1016
798
|
</template>
|
|
1017
799
|
`;
|
|
1018
800
|
};
|
|
1019
801
|
//#endregion
|
|
1020
|
-
//#region src/lib/
|
|
1021
|
-
var getClasses = ({ shape, connotation, disabled, removable }) => (0, _microsoft_fast_web_utilities.classNames)("base", ["disabled", disabled], ["removable", removable], [`shape-${shape}`, Boolean(shape)], [`connotation-${connotation}`, Boolean(connotation)]);
|
|
1022
|
-
function renderRemoveButton(iconTag) {
|
|
1023
|
-
return _microsoft_fast_element.html`
|
|
1024
|
-
<span
|
|
1025
|
-
class="remove-button"
|
|
1026
|
-
aria-label="${(x) => x.locale.searchableSelect.removeTagButtonLabel(x.label)}"
|
|
1027
|
-
role="button"
|
|
1028
|
-
tabindex="${(x) => x.disabled ? null : 0}"
|
|
1029
|
-
@click="${(x) => x._onClickRemove()}"
|
|
1030
|
-
>
|
|
1031
|
-
<${iconTag} name="close-line"></${iconTag}>
|
|
1032
|
-
</span>
|
|
1033
|
-
`;
|
|
1034
|
-
}
|
|
1035
|
-
var optionTagTemplate = (context) => {
|
|
1036
|
-
const iconTag = context.tagFor(require_definition.Icon);
|
|
1037
|
-
return _microsoft_fast_element.html`<span class="${getClasses}" aria-disabled="${(x) => x.disabled}">
|
|
1038
|
-
<slot name="icon" aria-hidden="true">
|
|
1039
|
-
${(0, _microsoft_fast_element.when)((x) => x.hasIconPlaceholder, _microsoft_fast_element.html`<div class="icon-placeholder"></div>`)}
|
|
1040
|
-
</slot>
|
|
1041
|
-
${(0, _microsoft_fast_element.when)((x) => x.label, (x) => _microsoft_fast_element.html`<span class="label">${x.label}</span>`)}
|
|
1042
|
-
${(0, _microsoft_fast_element.when)((x) => x.removable, renderRemoveButton(iconTag))}
|
|
1043
|
-
</span>`;
|
|
1044
|
-
};
|
|
1045
|
-
//#endregion
|
|
1046
|
-
//#region src/lib/searchable-select/definition.ts
|
|
802
|
+
//#region src/lib/select/definition.ts
|
|
1047
803
|
/**
|
|
1048
804
|
* @internal
|
|
1049
805
|
*/
|
|
1050
|
-
var
|
|
1051
|
-
require_definition$2.
|
|
1052
|
-
require_definition$3.popupDefinition,
|
|
806
|
+
var selectDefinition = require_vivid_element.defineVividComponent("select", Select, SelectTemplate, [
|
|
807
|
+
require_definition$2.popupDefinition,
|
|
1053
808
|
require_definition.iconDefinition,
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
require_definition$1.progressRingDefinition,
|
|
1059
|
-
require_mixins.feedbackMessageDefinition,
|
|
1060
|
-
require_definition$4.listboxOptionDefinition,
|
|
1061
|
-
require_definition$5.dividerDefinition
|
|
1062
|
-
], { styles: searchable_select_default });
|
|
809
|
+
require_definition$3.listboxOptionDefinition,
|
|
810
|
+
require_definition$1.buttonDefinition,
|
|
811
|
+
require_mixins.feedbackMessageDefinition
|
|
812
|
+
], { styles: select_default });
|
|
1063
813
|
/**
|
|
1064
|
-
* Registers the
|
|
814
|
+
* Registers the select elements with the design system.
|
|
1065
815
|
*
|
|
1066
816
|
* @param prefix - the prefix to use for the component name
|
|
1067
817
|
*/
|
|
1068
|
-
var
|
|
818
|
+
var registerSelect = require_vivid_element.createRegisterFunction(selectDefinition);
|
|
1069
819
|
//#endregion
|
|
1070
|
-
Object.defineProperty(exports, "
|
|
820
|
+
Object.defineProperty(exports, "Select", {
|
|
821
|
+
enumerable: true,
|
|
822
|
+
get: function() {
|
|
823
|
+
return Select;
|
|
824
|
+
}
|
|
825
|
+
});
|
|
826
|
+
Object.defineProperty(exports, "registerSelect", {
|
|
1071
827
|
enumerable: true,
|
|
1072
828
|
get: function() {
|
|
1073
|
-
return
|
|
829
|
+
return registerSelect;
|
|
1074
830
|
}
|
|
1075
831
|
});
|
|
1076
|
-
Object.defineProperty(exports, "
|
|
832
|
+
Object.defineProperty(exports, "selectDefinition", {
|
|
1077
833
|
enumerable: true,
|
|
1078
834
|
get: function() {
|
|
1079
|
-
return
|
|
835
|
+
return selectDefinition;
|
|
1080
836
|
}
|
|
1081
837
|
});
|