@descope/web-components-ui 1.0.322 → 1.0.323

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/cjs/index.cjs.js +480 -19
  2. package/dist/cjs/index.cjs.js.map +1 -1
  3. package/dist/index.esm.js +500 -21
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/umd/4392.js +1 -1
  6. package/dist/umd/DescopeDev.js +1 -1
  7. package/dist/umd/boolean-fields-descope-checkbox-index-js.js +1 -1
  8. package/dist/umd/boolean-fields-descope-switch-toggle-index-js.js +1 -1
  9. package/dist/umd/button-selection-group-fields-descope-button-multi-selection-group-index-js.js +1 -1
  10. package/dist/umd/button-selection-group-fields-descope-button-selection-group-index-js.js +1 -1
  11. package/dist/umd/descope-combo-box-index-js.js +7 -7
  12. package/dist/umd/descope-email-field-index-js.js +3 -3
  13. package/dist/umd/descope-grid-descope-grid-selection-column-index-js.js +1 -1
  14. package/dist/umd/descope-grid-index-js.js +1 -1
  15. package/dist/umd/descope-multi-select-combo-box-index-js.js +1 -1
  16. package/dist/umd/descope-new-password-descope-new-password-internal-index-js.js +1 -1
  17. package/dist/umd/descope-new-password-index-js.js +1 -1
  18. package/dist/umd/descope-number-field-index-js.js +1 -1
  19. package/dist/umd/descope-passcode-index-js.js +1 -1
  20. package/dist/umd/descope-password-index-js.js +1 -1
  21. package/dist/umd/descope-radio-group-index-js.js +1 -1
  22. package/dist/umd/descope-text-area-index-js.js +1 -1
  23. package/dist/umd/descope-text-field-index-js.js +2 -2
  24. package/dist/umd/index.js +1 -1
  25. package/dist/umd/mapping-fields-descope-mappings-field-index-js.js +1 -1
  26. package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js +1 -1
  27. package/dist/umd/phone-fields-descope-phone-field-descope-phone-field-internal-index-js.js +1 -1
  28. package/dist/umd/phone-fields-descope-phone-field-index-js.js +1 -1
  29. package/dist/umd/phone-fields-descope-phone-input-box-field-descope-phone-input-box-internal-index-js.js +1 -1
  30. package/dist/umd/phone-fields-descope-phone-input-box-field-index-js.js +1 -1
  31. package/package.json +1 -1
  32. package/src/components/descope-combo-box/ComboBoxClass.js +57 -0
  33. package/src/components/descope-email-field/EmailFieldClass.js +9 -0
  34. package/src/components/descope-multi-select-combo-box/MultiSelectComboBoxClass.js +31 -0
  35. package/src/components/descope-new-password/NewPasswordClass.js +7 -0
  36. package/src/components/descope-new-password/descope-new-password-internal/NewPasswordInternal.js +1 -0
  37. package/src/components/descope-number-field/NumberFieldClass.js +9 -0
  38. package/src/components/descope-password/PasswordClass.js +30 -0
  39. package/src/components/descope-text-field/TextFieldClass.js +24 -1
  40. package/src/components/descope-text-field/textFieldMappings.js +40 -6
  41. package/src/components/phone-fields/descope-phone-field/PhoneFieldClass.js +36 -4
  42. package/src/components/phone-fields/descope-phone-field/descope-phone-field-internal/PhoneFieldInternal.js +19 -3
  43. package/src/components/phone-fields/descope-phone-input-box-field/PhoneFieldInputBoxClass.js +45 -1
  44. package/src/components/phone-fields/descope-phone-input-box-field/descope-phone-input-box-internal/PhoneFieldInternalInputBox.js +1 -0
  45. package/src/helpers/themeHelpers/resetHelpers.js +15 -0
  46. package/src/theme/components/comboBox.js +17 -0
  47. package/src/theme/components/emailField.js +17 -0
  48. package/src/theme/components/inputWrapper.js +35 -0
  49. package/src/theme/components/multiSelectComboBox.js +22 -0
  50. package/src/theme/components/newPassword.js +10 -0
  51. package/src/theme/components/numberField.js +17 -0
  52. package/src/theme/components/password.js +17 -0
  53. package/src/theme/components/phoneField.js +8 -0
  54. package/src/theme/components/phoneInputBoxField.js +17 -0
  55. package/src/theme/components/textField.js +17 -0
@@ -2941,7 +2941,10 @@ const {
2941
2941
  host: { selector: () => ':host' },
2942
2942
  label: { selector: '::part(label)' },
2943
2943
  requiredIndicator: { selector: '[required]::part(required-indicator)::after' },
2944
- placeholder: { selector: '> input:placeholder-shown' },
2944
+ placeholder: [
2945
+ { selector: '> input:placeholder-shown' },
2946
+ { selector: () => ':host::slotted(input:placeholder-shown)' },
2947
+ ],
2945
2948
  disabledPlaceholder: { selector: '> input:disabled::placeholder' },
2946
2949
  inputField: { selector: '::part(input-field)' },
2947
2950
  input: { selector: 'input' },
@@ -2959,11 +2962,8 @@ var textFieldMappings = {
2959
2962
  fontSize: [{}, host$m],
2960
2963
  fontFamily: [label$9, inputField$6, helperText$a, errorMessage$c],
2961
2964
 
2962
- hostWidth: { ...host$m, property: 'width' },
2963
- hostMinWidth: { ...host$m, property: 'min-width' },
2964
- hostDirection: { ...host$m, property: 'direction' },
2965
-
2966
- inputBackgroundColor: { ...inputField$6, property: 'background-color' },
2965
+ labelFontSize: { ...label$9, property: 'font-size' },
2966
+ labelFontWeight: { ...label$9, property: 'font-weight' },
2967
2967
 
2968
2968
  labelTextColor: [
2969
2969
  { ...label$9, property: 'color' },
@@ -2971,6 +2971,13 @@ var textFieldMappings = {
2971
2971
  { ...label$9, property: '-webkit-text-fill-color' },
2972
2972
  { ...requiredIndicator$b, property: '-webkit-text-fill-color' },
2973
2973
  ],
2974
+
2975
+ hostWidth: { ...host$m, property: 'width' },
2976
+ hostMinWidth: { ...host$m, property: 'min-width' },
2977
+ hostDirection: { ...host$m, property: 'direction' },
2978
+
2979
+ inputBackgroundColor: { ...inputField$6, property: 'background-color' },
2980
+
2974
2981
  errorMessageTextColor: { ...errorMessage$c, property: 'color' },
2975
2982
  helperTextColor: { ...helperText$a, property: '-webkit-text-fill-color' },
2976
2983
 
@@ -3010,11 +3017,38 @@ var textFieldMappings = {
3010
3017
  ],
3011
3018
 
3012
3019
  inputPlaceholderColor: [
3020
+ { selector: () => ':host input:placeholder-shown', property: 'color' },
3013
3021
  { ...placeholder$3, property: 'color' },
3014
3022
  { ...externalPlaceholder, property: 'color' },
3015
3023
  { ...disabledPlaceholder, property: '-webkit-text-fill-color' },
3016
3024
  { ...externalDisabledPlaceholder, property: '-webkit-text-fill-color' },
3017
3025
  ],
3026
+
3027
+ labelPosition: { ...label$9, property: 'position' },
3028
+ labelTopPosition: { ...label$9, property: 'top' },
3029
+ labelHorizontalPosition: [
3030
+ { ...label$9, property: 'left' },
3031
+ { ...label$9, property: 'right' },
3032
+ ],
3033
+ inputTransformY: { ...label$9, property: 'transform' },
3034
+ inputTransition: { ...label$9, property: 'transition' },
3035
+ marginInlineStart: { ...label$9, property: 'margin-inline-start' },
3036
+ placeholderOpacity: [
3037
+ { selector: '> input:placeholder-shown', property: 'opacity' },
3038
+ { ...externalPlaceholder, property: 'opacity' },
3039
+ ],
3040
+ inputVerticalAlignment: [
3041
+ { ...inputField$6, property: 'align-items' },
3042
+ { ...externalInput, property: 'align-items' },
3043
+ ],
3044
+ valueInputHeight: [
3045
+ { ...input, property: 'height' },
3046
+ { ...externalInput, property: 'height' },
3047
+ ],
3048
+ valueInputMarginBottom: [
3049
+ { ...input, property: 'margin-bottom' },
3050
+ { ...externalInput, property: 'margin-bottom' },
3051
+ ],
3018
3052
  };
3019
3053
 
3020
3054
  const useHostExternalPadding = (cssVarList) => `
@@ -3146,9 +3180,24 @@ const resetInputLabelPosition = (name) => `
3146
3180
  }
3147
3181
  `;
3148
3182
 
3183
+ const inputFloatingLabelStyle = () => {
3184
+ return `
3185
+ :host([label-type="floating"]) {
3186
+ position: relative;
3187
+ }
3188
+ :host([label-type="floating"][has-label]) [slot="label"] {
3189
+ padding: 0;
3190
+ }
3191
+ :host([label-type="floating"][has-label]) > ::part(label) {
3192
+ z-index: 1;
3193
+ padding: 0;
3194
+ }
3195
+ `;
3196
+ };
3197
+
3149
3198
  const componentName$Q = getComponentName('text-field');
3150
3199
 
3151
- const observedAttrs = ['type'];
3200
+ const observedAttrs = ['type', 'label-type'];
3152
3201
 
3153
3202
  const customMixin$a = (superclass) =>
3154
3203
  class TextFieldClass extends superclass {
@@ -3156,6 +3205,10 @@ const customMixin$a = (superclass) =>
3156
3205
  return observedAttrs.concat(superclass.observedAttributes || []);
3157
3206
  }
3158
3207
 
3208
+ onLabelClick() {
3209
+ this.focus();
3210
+ }
3211
+
3159
3212
  attributeChangedCallback(attrName, oldVal, newVal) {
3160
3213
  super.attributeChangeCallback?.(attrName, oldVal, newVal);
3161
3214
 
@@ -3167,6 +3220,16 @@ const customMixin$a = (superclass) =>
3167
3220
  if (attrName === 'type') {
3168
3221
  this.baseElement._setType(newVal);
3169
3222
  }
3223
+
3224
+ if (oldVal !== newVal) {
3225
+ if (attrName === 'label-type') {
3226
+ if (newVal === 'floating') {
3227
+ this.addEventListener('click', this.onLabelClick);
3228
+ } else {
3229
+ this.removeEventListener('click', this.onLabelClick);
3230
+ }
3231
+ }
3232
+ }
3170
3233
  }
3171
3234
 
3172
3235
  // webauthn is not working when the native input element is nested inside multiple shadow roots
@@ -3219,9 +3282,17 @@ const TextFieldClass = compose(
3219
3282
  :host(:is([readonly], [disabled])) ::slotted(:is(input, textarea):placeholder-shown) {
3220
3283
  opacity: 1;
3221
3284
  }
3285
+
3286
+ vaadin-text-field[label-type="floating"]:not([focused])[readonly] > input:placeholder-shown {
3287
+ opacity: 0;
3288
+ }
3289
+ vaadin-text-field[label-type="floating"]:not([focused])[disabled] > input:placeholder-shown {
3290
+ opacity: 0;
3291
+ }
3222
3292
  ${resetInputLabelPosition('vaadin-text-field')}
3223
3293
  ${useHostExternalPadding(TextFieldClass.cssVarList)}
3224
3294
  ${resetInputOverrides('vaadin-text-field', TextFieldClass.cssVarList)}
3295
+ ${inputFloatingLabelStyle()}
3225
3296
  `,
3226
3297
  excludeAttrsSync: ['tabindex'],
3227
3298
  componentName: componentName$Q,
@@ -3235,6 +3306,7 @@ const [theme$1, refs, vars$H] = createHelperVars(
3235
3306
  {
3236
3307
  labelTextColor: globalRefs$q.colors.surface.dark,
3237
3308
  labelFontSize: '14px', // not taken from globals as it is fixed in all inputs
3309
+ labelFontWeight: '500', // not taken from globals as it is fixed in all inputs
3238
3310
  valueTextColor: globalRefs$q.colors.surface.contrast,
3239
3311
  placeholderTextColor: globalRefs$q.colors.surface.dark,
3240
3312
  requiredIndicator: "'*'",
@@ -3272,6 +3344,40 @@ const [theme$1, refs, vars$H] = createHelperVars(
3272
3344
  lg: { fontSize: '18px', chipFontSize: '16px' },
3273
3345
  },
3274
3346
 
3347
+ labelType: {
3348
+ floating: {
3349
+ labelPosition: 'absolute',
3350
+ labelTopPosition: '0',
3351
+ labelHorizontalPosition: '0.9em',
3352
+ labelFontSize: '1em',
3353
+ placeholderOpacity: 0,
3354
+ inputHeight: '3.5em',
3355
+ inputVerticalAlignment: 'flex-end',
3356
+ inputTransformY: 'translateY(1.55em)',
3357
+ inputTransition: 'all 75ms ease-in-out',
3358
+ marginInlineStart: '0', // `calc(0.25em + ${globalRefs.border.sm})`,
3359
+ valueInputHeight: '1.5702em',
3360
+ valueInputMarginBottom: '0.5em',
3361
+
3362
+ _focused: {
3363
+ labelFontSize: '0.75em',
3364
+ inputTransformY: 'translateY(1.05em)',
3365
+ labelFontWeight: '400',
3366
+ placeholderOpacity: 1,
3367
+ },
3368
+
3369
+ _readOnly: {
3370
+ placeholderOpacity: 0,
3371
+ },
3372
+
3373
+ _hasValue: {
3374
+ inputTransformY: 'translateY(1.05em)',
3375
+ labelFontSize: '0.75em',
3376
+ labelFontWeight: '400',
3377
+ },
3378
+ },
3379
+ },
3380
+
3275
3381
  _fullWidth: {
3276
3382
  width: '100%',
3277
3383
  },
@@ -3319,6 +3425,8 @@ const textField$1 = {
3319
3425
  [vars$G.hostDirection]: refs.direction,
3320
3426
  [vars$G.fontSize]: refs.fontSize,
3321
3427
  [vars$G.fontFamily]: refs.fontFamily,
3428
+ [vars$G.labelFontSize]: refs.labelFontSize,
3429
+ [vars$G.labelFontWeight]: refs.labelFontWeight,
3322
3430
  [vars$G.labelTextColor]: refs.labelTextColor,
3323
3431
  [vars$G.labelRequiredIndicator]: refs.requiredIndicator,
3324
3432
  [vars$G.errorMessageTextColor]: refs.errorMessageTextColor,
@@ -3341,6 +3449,21 @@ const textField$1 = {
3341
3449
  left: { [vars$G.inputTextAlign]: 'left' },
3342
3450
  center: { [vars$G.inputTextAlign]: 'center' },
3343
3451
  },
3452
+
3453
+ labelType: {
3454
+ floating: {
3455
+ [vars$G.labelPosition]: refs.labelPosition,
3456
+ [vars$G.labelTopPosition]: refs.labelTopPosition,
3457
+ [vars$G.labelHorizontalPosition]: refs.labelHorizontalPosition,
3458
+ [vars$G.inputTransformY]: refs.inputTransformY,
3459
+ [vars$G.inputTransition]: refs.inputTransition,
3460
+ [vars$G.marginInlineStart]: refs.marginInlineStart,
3461
+ [vars$G.placeholderOpacity]: refs.placeholderOpacity,
3462
+ [vars$G.inputVerticalAlignment]: refs.inputVerticalAlignment,
3463
+ [vars$G.valueInputHeight]: refs.valueInputHeight,
3464
+ [vars$G.valueInputMarginBottom]: refs.valueInputMarginBottom,
3465
+ },
3466
+ },
3344
3467
  };
3345
3468
 
3346
3469
  var textField$2 = /*#__PURE__*/Object.freeze({
@@ -3588,7 +3711,7 @@ const customMixin$9 = (superclass) =>
3588
3711
  const {
3589
3712
  host: host$l,
3590
3713
  inputField: inputField$5,
3591
- inputElement: inputElement$2,
3714
+ inputElement: inputElement$3,
3592
3715
  inputElementPlaceholder,
3593
3716
  revealButtonContainer,
3594
3717
  revealButtonIcon,
@@ -3619,8 +3742,8 @@ const PasswordClass = compose(
3619
3742
  fontFamily: [label$8, inputField$5, errorMessage$b, helperText$9],
3620
3743
  inputHeight: { ...inputField$5, property: 'height' },
3621
3744
  inputHorizontalPadding: [
3622
- { ...inputElement$2, property: 'padding-left' },
3623
- { ...inputElement$2, property: 'padding-right' },
3745
+ { ...inputElement$3, property: 'padding-left' },
3746
+ { ...inputElement$3, property: 'padding-right' },
3624
3747
  ],
3625
3748
  inputBackgroundColor: { ...inputField$5, property: 'background-color' },
3626
3749
 
@@ -3634,6 +3757,8 @@ const PasswordClass = compose(
3634
3757
  inputOutlineOffset: { ...inputField$5, property: 'outline-offset' },
3635
3758
  inputOutlineWidth: { ...inputField$5, property: 'outline-width' },
3636
3759
 
3760
+ labelFontSize: { ...label$8, property: 'font-size' },
3761
+ labelFontWeight: { ...label$8, property: 'font-weight' },
3637
3762
  labelTextColor: [
3638
3763
  { ...label$8, property: 'color' },
3639
3764
  { ...requiredIndicator$a, property: 'color' },
@@ -3646,7 +3771,7 @@ const PasswordClass = compose(
3646
3771
  { selector: () => ':host ::slotted(input:placeholder-shown)', property: 'color' },
3647
3772
  ],
3648
3773
  inputValueTextColor: [
3649
- { ...inputElement$2, property: 'color' },
3774
+ { ...inputElement$3, property: 'color' },
3650
3775
  { selector: () => ':host ::slotted(input)', property: 'color' },
3651
3776
  ],
3652
3777
 
@@ -3656,6 +3781,22 @@ const PasswordClass = compose(
3656
3781
  ],
3657
3782
  revealButtonSize: { ...revealButtonContainer, property: 'font-size' },
3658
3783
  revealButtonColor: { ...revealButtonIcon, property: 'color' },
3784
+
3785
+ labelPosition: { ...label$8, property: 'position' },
3786
+ labelTopPosition: { ...label$8, property: 'top' },
3787
+ labelHorizontalPosition: [
3788
+ { ...label$8, property: 'left' },
3789
+ { ...label$8, property: 'right' },
3790
+ ],
3791
+ inputTransformY: { ...label$8, property: 'transform' },
3792
+ inputTransition: { ...label$8, property: 'transition' },
3793
+ marginInlineStart: { ...label$8, property: 'margin-inline-start' },
3794
+ placeholderOpacity: [
3795
+ { selector: '> input:placeholder-shown', property: 'opacity' },
3796
+ { ...inputElement$3, property: 'opacity' },
3797
+ ],
3798
+ inputVerticalAlignment: { ...inputField$5, property: 'align-items' },
3799
+ valueInputHeight: { ...inputElement$3, property: 'height' },
3659
3800
  },
3660
3801
  }),
3661
3802
  draggableMixin,
@@ -3717,6 +3858,17 @@ const PasswordClass = compose(
3717
3858
  vaadin-password-field-button[focus-ring] {
3718
3859
  box-shadow: 0 0 0 2px var(${PasswordClass.cssVarList.inputOutlineColor});
3719
3860
  }
3861
+
3862
+ ${inputFloatingLabelStyle()}
3863
+
3864
+ :host ::slotted(input) {
3865
+ display: none !important;
3866
+ }
3867
+
3868
+ ::part(reveal-button) {
3869
+ align-self: center;
3870
+ }
3871
+
3720
3872
  `,
3721
3873
  excludeAttrsSync: ['tabindex'],
3722
3874
  componentName: componentName$O,
@@ -3728,9 +3880,12 @@ const vars$F = PasswordClass.cssVarList;
3728
3880
 
3729
3881
  const password = {
3730
3882
  [vars$F.hostWidth]: refs.width,
3883
+ [vars$F.hostMinWidth]: refs.minWidth,
3731
3884
  [vars$F.hostDirection]: refs.direction,
3732
3885
  [vars$F.fontSize]: refs.fontSize,
3733
3886
  [vars$F.fontFamily]: refs.fontFamily,
3887
+ [vars$F.labelFontSize]: refs.labelFontSize,
3888
+ [vars$F.labelFontWeight]: refs.labelFontWeight,
3734
3889
  [vars$F.labelTextColor]: refs.labelTextColor,
3735
3890
  [vars$F.errorMessageTextColor]: refs.errorMessageTextColor,
3736
3891
  [vars$F.inputHorizontalPadding]: refs.horizontalPadding,
@@ -3750,6 +3905,20 @@ const password = {
3750
3905
  [vars$F.revealButtonOffset]: globalRefs$p.spacing.md,
3751
3906
  [vars$F.revealButtonSize]: refs.toggleButtonSize,
3752
3907
  [vars$F.revealButtonColor]: refs.placeholderTextColor,
3908
+
3909
+ labelType: {
3910
+ floating: {
3911
+ [vars$F.labelPosition]: refs.labelPosition,
3912
+ [vars$F.labelTopPosition]: refs.labelTopPosition,
3913
+ [vars$F.labelHorizontalPosition]: refs.labelHorizontalPosition,
3914
+ [vars$F.inputTransformY]: refs.inputTransformY,
3915
+ [vars$F.inputTransition]: refs.inputTransition,
3916
+ [vars$F.marginInlineStart]: refs.marginInlineStart,
3917
+ [vars$F.placeholderOpacity]: refs.placeholderOpacity,
3918
+ [vars$F.inputVerticalAlignment]: refs.inputVerticalAlignment,
3919
+ [vars$F.valueInputHeight]: refs.valueInputHeight,
3920
+ },
3921
+ },
3753
3922
  };
3754
3923
 
3755
3924
  var password$1 = /*#__PURE__*/Object.freeze({
@@ -3782,6 +3951,14 @@ const NumberFieldClass = compose(
3782
3951
  ${resetInputLabelPosition('vaadin-number-field')}
3783
3952
  ${useHostExternalPadding(NumberFieldClass.cssVarList)}
3784
3953
  ${resetInputOverrides('vaadin-number-field', NumberFieldClass.cssVarList)}
3954
+ ${inputFloatingLabelStyle()}
3955
+
3956
+ vaadin-number-field[label-type="floating"]:not([focused])[readonly] > input:placeholder-shown {
3957
+ opacity: 0;
3958
+ }
3959
+ vaadin-number-field[label-type="floating"]:not([focused])[disabled] > input:placeholder-shown {
3960
+ opacity: 0;
3961
+ }
3785
3962
  `,
3786
3963
  excludeAttrsSync: ['tabindex'],
3787
3964
  componentName: componentName$N,
@@ -3796,6 +3973,8 @@ const numberField = {
3796
3973
  [vars$E.hostDirection]: refs.direction,
3797
3974
  [vars$E.fontSize]: refs.fontSize,
3798
3975
  [vars$E.fontFamily]: refs.fontFamily,
3976
+ [vars$E.labelFontSize]: refs.labelFontSize,
3977
+ [vars$E.labelFontWeight]: refs.labelFontWeight,
3799
3978
  [vars$E.labelTextColor]: refs.labelTextColor,
3800
3979
  [vars$E.errorMessageTextColor]: refs.errorMessageTextColor,
3801
3980
  [vars$E.inputValueTextColor]: refs.valueTextColor,
@@ -3812,6 +3991,21 @@ const numberField = {
3812
3991
  [vars$E.labelRequiredIndicator]: refs.requiredIndicator,
3813
3992
  [vars$E.inputHorizontalPadding]: refs.horizontalPadding,
3814
3993
  [vars$E.inputHeight]: refs.inputHeight,
3994
+
3995
+ labelType: {
3996
+ floating: {
3997
+ [vars$E.labelPosition]: refs.labelPosition,
3998
+ [vars$E.labelTopPosition]: refs.labelTopPosition,
3999
+ [vars$E.labelHorizontalPosition]: refs.labelHorizontalPosition,
4000
+ [vars$E.inputTransformY]: refs.inputTransformY,
4001
+ [vars$E.inputTransition]: refs.inputTransition,
4002
+ [vars$E.marginInlineStart]: refs.marginInlineStart,
4003
+ [vars$E.placeholderOpacity]: refs.placeholderOpacity,
4004
+ [vars$E.inputVerticalAlignment]: refs.inputVerticalAlignment,
4005
+ [vars$E.valueInputHeight]: refs.valueInputHeight,
4006
+ [vars$E.valueInputMarginBottom]: refs.valueInputMarginBottom,
4007
+ },
4008
+ },
3815
4009
  };
3816
4010
 
3817
4011
  var numberField$1 = /*#__PURE__*/Object.freeze({
@@ -3912,6 +4106,14 @@ const EmailFieldClass = compose(
3912
4106
  ${resetInputLabelPosition('vaadin-email-field')}
3913
4107
  ${useHostExternalPadding(EmailFieldClass.cssVarList)}
3914
4108
  ${resetInputOverrides('vaadin-email-field', EmailFieldClass.cssVarList)}
4109
+ ${inputFloatingLabelStyle()}
4110
+
4111
+ vaadin-email-field[label-type="floating"]:not([focused])[readonly] > input:placeholder-shown {
4112
+ opacity: 0;
4113
+ }
4114
+ vaadin-email-field[label-type="floating"]:not([focused])[disabled] > input:placeholder-shown {
4115
+ opacity: 0;
4116
+ }
3915
4117
  `,
3916
4118
  excludeAttrsSync: ['tabindex'],
3917
4119
  componentName: componentName$M,
@@ -3926,6 +4128,8 @@ const emailField = {
3926
4128
  [vars$D.hostDirection]: refs.direction,
3927
4129
  [vars$D.fontSize]: refs.fontSize,
3928
4130
  [vars$D.fontFamily]: refs.fontFamily,
4131
+ [vars$D.labelFontSize]: refs.labelFontSize,
4132
+ [vars$D.labelFontWeight]: refs.labelFontWeight,
3929
4133
  [vars$D.labelTextColor]: refs.labelTextColor,
3930
4134
  [vars$D.errorMessageTextColor]: refs.errorMessageTextColor,
3931
4135
  [vars$D.inputValueTextColor]: refs.valueTextColor,
@@ -3942,6 +4146,21 @@ const emailField = {
3942
4146
  [vars$D.inputBackgroundColor]: refs.backgroundColor,
3943
4147
  [vars$D.inputHorizontalPadding]: refs.horizontalPadding,
3944
4148
  [vars$D.inputHeight]: refs.inputHeight,
4149
+
4150
+ labelType: {
4151
+ floating: {
4152
+ [vars$D.labelPosition]: refs.labelPosition,
4153
+ [vars$D.labelTopPosition]: refs.labelTopPosition,
4154
+ [vars$D.labelHorizontalPosition]: refs.labelHorizontalPosition,
4155
+ [vars$D.inputTransformY]: refs.inputTransformY,
4156
+ [vars$D.inputTransition]: refs.inputTransition,
4157
+ [vars$D.marginInlineStart]: refs.marginInlineStart,
4158
+ [vars$D.placeholderOpacity]: refs.placeholderOpacity,
4159
+ [vars$D.inputVerticalAlignment]: refs.inputVerticalAlignment,
4160
+ [vars$D.valueInputHeight]: refs.valueInputHeight,
4161
+ [vars$D.valueInputMarginBottom]: refs.valueInputMarginBottom,
4162
+ },
4163
+ },
3945
4164
  };
3946
4165
 
3947
4166
  var emailField$1 = /*#__PURE__*/Object.freeze({
@@ -5916,6 +6135,10 @@ const componentName$v = getComponentName('combo-box');
5916
6135
 
5917
6136
  const ComboBoxMixin = (superclass) =>
5918
6137
  class ComboBoxMixinClass extends superclass {
6138
+ static get observedAttributes() {
6139
+ return ['label-type'];
6140
+ }
6141
+
5919
6142
  // eslint-disable-next-line class-methods-use-this
5920
6143
  #renderItem = ({ displayName, value, label }) => {
5921
6144
  return `<span data-name="${label}" data-id="${value}">${displayName || label}</span>`;
@@ -6116,6 +6339,28 @@ const ComboBoxMixin = (superclass) =>
6116
6339
  });
6117
6340
  }
6118
6341
 
6342
+ onLabelClick() {
6343
+ if (this.isReadOnly || this.isDisabled) {
6344
+ return;
6345
+ }
6346
+ this.focus();
6347
+ this.setAttribute('opened', 'true');
6348
+ }
6349
+
6350
+ attributeChangedCallback(attrName, oldValue, newValue) {
6351
+ super.attributeChangedCallback?.(attrName, oldValue, newValue);
6352
+
6353
+ if (oldValue !== newValue) {
6354
+ if (attrName === 'label-type') {
6355
+ if (newValue === 'floating') {
6356
+ this.addEventListener('click', this.onLabelClick);
6357
+ } else {
6358
+ this.removeEventListener('click', this.onLabelClick);
6359
+ }
6360
+ }
6361
+ }
6362
+ }
6363
+
6119
6364
  setDefaultValue() {
6120
6365
  this.value = this.defaultValue;
6121
6366
  }
@@ -6140,7 +6385,7 @@ const ComboBoxMixin = (superclass) =>
6140
6385
  const {
6141
6386
  host: host$d,
6142
6387
  inputField: inputField$3,
6143
- inputElement: inputElement$1,
6388
+ inputElement: inputElement$2,
6144
6389
  placeholder: placeholder$1,
6145
6390
  toggle: toggle$1,
6146
6391
  clearButton: clearButton$1,
@@ -6169,6 +6414,8 @@ const ComboBoxClass = compose(
6169
6414
  // we apply font-size also on the host so we can set its width with em
6170
6415
  fontSize: [{}, host$d],
6171
6416
  fontFamily: [label$5, placeholder$1, inputField$3, helperText$5, errorMessage$6],
6417
+ labelFontSize: { ...label$5, property: 'font-size' },
6418
+ labelFontWeight: { ...label$5, property: 'font-weight' },
6172
6419
  labelTextColor: [
6173
6420
  { ...label$5, property: 'color' },
6174
6421
  { ...requiredIndicator$5, property: 'color' },
@@ -6204,10 +6451,24 @@ const ComboBoxClass = compose(
6204
6451
  inputOutlineStyle: { ...inputField$3, property: 'outline-style' },
6205
6452
  inputOutlineOffset: { ...inputField$3, property: 'outline-offset' },
6206
6453
  inputHorizontalPadding: [
6207
- { ...inputElement$1, property: 'padding-left' },
6208
- { ...inputElement$1, property: 'padding-right' },
6454
+ { ...inputElement$2, property: 'padding-left' },
6455
+ { ...inputElement$2, property: 'padding-right' },
6209
6456
  ],
6210
6457
 
6458
+ labelPosition: { ...label$5, property: 'position' },
6459
+ labelTopPosition: { ...label$5, property: 'top' },
6460
+ labelHorizontalPosition: [
6461
+ { ...label$5, property: 'left' },
6462
+ { ...label$5, property: 'right' },
6463
+ ],
6464
+ inputTransformY: { ...label$5, property: 'transform' },
6465
+ inputTransition: { ...label$5, property: 'transition' },
6466
+ marginInlineStart: { ...label$5, property: 'margin-inline-start' },
6467
+ placeholderOpacity: { ...placeholder$1, property: 'opacity' },
6468
+ inputVerticalAlignment: { ...inputField$3, property: 'align-items' },
6469
+ valueInputHeight: { ...inputElement$2, property: 'height' },
6470
+ valueInputMarginBottom: { ...inputElement$2, property: 'margin-bottom' },
6471
+
6211
6472
  // we need to use the variables from the portal mixin
6212
6473
  // so we need to use an arrow function on the selector
6213
6474
  // for that to work, because ComboBox is not available
@@ -6288,7 +6549,21 @@ const ComboBoxClass = compose(
6288
6549
  padding: 0;
6289
6550
  box-shadow: none;
6290
6551
  }
6552
+
6553
+ vaadin-combo-box::part(toggle-button),
6554
+ vaadin-combo-box::part(clear-button) {
6555
+ align-self: center;
6556
+ }
6557
+
6558
+ vaadin-combo-box[label-type="floating"]:not([focused])[readonly] > input:placeholder-shown {
6559
+ opacity: 0;
6560
+ }
6561
+ vaadin-combo-box[label-type="floating"]:not([focused])[disabled] > input:placeholder-shown {
6562
+ opacity: 0;
6563
+ }
6564
+
6291
6565
  ${resetInputLabelPosition('vaadin-combo-box')}
6566
+ ${inputFloatingLabelStyle()}
6292
6567
  `,
6293
6568
  // Note: we exclude `size` to avoid overriding Vaadin's ComboBox property
6294
6569
  // with the same name. Including it will cause Vaadin to calculate NaN size,
@@ -6308,6 +6583,8 @@ const comboBox = {
6308
6583
  [vars$o.hostDirection]: refs.direction,
6309
6584
  [vars$o.fontSize]: refs.fontSize,
6310
6585
  [vars$o.fontFamily]: refs.fontFamily,
6586
+ [vars$o.labelFontSize]: refs.labelFontSize,
6587
+ [vars$o.labelFontWeight]: refs.labelFontWeight,
6311
6588
  [vars$o.labelTextColor]: refs.labelTextColor,
6312
6589
  [vars$o.errorMessageTextColor]: refs.errorMessageTextColor,
6313
6590
  [vars$o.inputBorderColor]: refs.borderColor,
@@ -6331,6 +6608,21 @@ const comboBox = {
6331
6608
  [vars$o.overlayItemPaddingInlineStart]: globalRefs$g.spacing.xs,
6332
6609
  [vars$o.overlayItemPaddingInlineEnd]: globalRefs$g.spacing.lg,
6333
6610
 
6611
+ labelType: {
6612
+ floating: {
6613
+ [vars$o.labelPosition]: refs.labelPosition,
6614
+ [vars$o.labelTopPosition]: refs.labelTopPosition,
6615
+ [vars$o.labelHorizontalPosition]: refs.labelHorizontalPosition,
6616
+ [vars$o.inputTransformY]: refs.inputTransformY,
6617
+ [vars$o.inputTransition]: refs.inputTransition,
6618
+ [vars$o.marginInlineStart]: refs.marginInlineStart,
6619
+ [vars$o.placeholderOpacity]: refs.placeholderOpacity,
6620
+ [vars$o.inputVerticalAlignment]: refs.inputVerticalAlignment,
6621
+ [vars$o.valueInputHeight]: refs.valueInputHeight,
6622
+ [vars$o.valueInputMarginBottom]: refs.valueInputMarginBottom,
6623
+ },
6624
+ },
6625
+
6334
6626
  _readonly: {
6335
6627
  [vars$o.inputDropdownButtonCursor]: 'default',
6336
6628
  },
@@ -7668,6 +7960,10 @@ const customMixin$6 = (superclass) =>
7668
7960
  'phone-input-placeholder',
7669
7961
  'disabled',
7670
7962
  'restrict-countries',
7963
+ 'label-type',
7964
+ 'country-input-label',
7965
+ 'phone-input-label',
7966
+ 'readonly',
7671
7967
  ],
7672
7968
  });
7673
7969
  }
@@ -7680,6 +7976,7 @@ const {
7680
7976
  inputField: inputField$2,
7681
7977
  countryCodeInput,
7682
7978
  phoneInput: phoneInput$1,
7979
+ phoneExternalInput,
7683
7980
  separator: separator$1,
7684
7981
  errorMessage: errorMessage$5,
7685
7982
  helperText: helperText$4,
@@ -7689,6 +7986,7 @@ const {
7689
7986
  requiredIndicator: { selector: '[required]::part(required-indicator)::after' },
7690
7987
  inputField: { selector: '::part(input-field)' },
7691
7988
  phoneInput: { selector: () => 'descope-text-field' },
7989
+ phoneExternalInput: { selector: () => '::slotted(input)' },
7692
7990
  countryCodeInput: { selector: () => 'descope-combo-box' },
7693
7991
  separator: { selector: 'descope-phone-field-internal .separator' },
7694
7992
  helperText: { selector: '::part(helper-text)' },
@@ -7747,6 +8045,13 @@ const PhoneFieldClass = compose(
7747
8045
  },
7748
8046
  phoneInputWidth: { ...phoneInput$1, property: 'width' },
7749
8047
 
8048
+ horizontalPadding: [
8049
+ { ...phoneInput$1, property: 'padding-left' },
8050
+ { ...phoneInput$1, property: 'padding-right' },
8051
+ { ...countryCodeInput, property: 'padding-left' },
8052
+ { ...countryCodeInput, property: 'padding-right' },
8053
+ ],
8054
+
7750
8055
  labelTextColor: [
7751
8056
  { ...label$4, property: 'color' },
7752
8057
  { ...requiredIndicator$4, property: 'color' },
@@ -7770,6 +8075,20 @@ const PhoneFieldClass = compose(
7770
8075
  inputOutlineColor: { ...inputField$2, property: 'outline-color' },
7771
8076
  inputOutlineWidth: { ...inputField$2, property: 'outline-width' },
7772
8077
  inputOutlineOffset: { ...inputField$2, property: 'outline-offset' },
8078
+
8079
+ valueInputHeight: [
8080
+ { ...phoneExternalInput, property: textVars$1.valueInputHeight },
8081
+ { ...countryCodeInput, property: comboVars.valueInputHeight },
8082
+ ],
8083
+ valueInputMarginBottom: [
8084
+ { ...phoneInput$1, property: textVars$1.valueInputMarginBottom },
8085
+ { ...phoneExternalInput, property: 'margin-bottom' },
8086
+ ],
8087
+ marginInlineStart: [
8088
+ { ...phoneInput$1, property: textVars$1.marginInlineStart },
8089
+ { ...phoneExternalInput, property: 'margin-inline-start' },
8090
+ { ...countryCodeInput, property: comboVars.marginInlineStart },
8091
+ ],
7773
8092
  },
7774
8093
  }),
7775
8094
  draggableMixin,
@@ -7840,10 +8159,15 @@ const PhoneFieldClass = compose(
7840
8159
  ${textVars$1.inputOutlineOffset}: 0;
7841
8160
  ${textVars$1.inputBorderWidth}: 0;
7842
8161
  ${textVars$1.inputBorderRadius}: 0;
7843
- }
7844
- vaadin-text-field[readonly] > input:placeholder-shown {
7845
- opacity: 1;
7846
- }
8162
+ }
8163
+
8164
+ descope-text-field[label-type="floating"]:not([focused])[readonly] > input:placeholder-shown {
8165
+ opacity: 0;
8166
+ }
8167
+ descope-text-field[label-type="floating"]:not([focused])[disabled] > input:placeholder-shown {
8168
+ opacity: 0;
8169
+ }
8170
+
7847
8171
  vaadin-text-field::part(input-field)::after {
7848
8172
  border: none;
7849
8173
  }
@@ -7878,6 +8202,14 @@ const phoneField = {
7878
8202
  [vars$m.countryCodeInputWidth]: '5em',
7879
8203
  [vars$m.countryCodeDropdownWidth]: '20em',
7880
8204
 
8205
+ labelType: {
8206
+ floating: {
8207
+ [vars$m.marginInlineStart]: '-0.25em',
8208
+ [vars$m.valueInputHeight]: '1.65em',
8209
+ [vars$m.valueInputMarginBottom]: '0.25em',
8210
+ },
8211
+ },
8212
+
7881
8213
  // '@overlay': {
7882
8214
  // overlayItemBackgroundColor: 'red'
7883
8215
  // }
@@ -7929,14 +8261,26 @@ const customMixin$5 = (superclass) =>
7929
8261
  'default-code',
7930
8262
  'disabled',
7931
8263
  'phone-input-placeholder',
8264
+ 'label-type',
7932
8265
  ],
7933
8266
  });
7934
8267
  }
7935
8268
  };
7936
8269
 
7937
- const { host: host$b, label: label$3, requiredIndicator: requiredIndicator$3, inputField: inputField$1, phoneInput, errorMessage: errorMessage$4, helperText: helperText$3 } = {
8270
+ const {
8271
+ host: host$b,
8272
+ label: label$3,
8273
+ inputElement: inputElement$1,
8274
+ requiredIndicator: requiredIndicator$3,
8275
+ inputField: inputField$1,
8276
+ phoneInput,
8277
+ errorMessage: errorMessage$4,
8278
+ helperText: helperText$3,
8279
+ } = {
7938
8280
  host: { selector: () => ':host' },
7939
8281
  label: { selector: '::part(label)' },
8282
+ placeholder: { selector: '> input:placeholder-shown' },
8283
+ inputElement: { selector: 'input' },
7940
8284
  requiredIndicator: { selector: '[required]::part(required-indicator)::after' },
7941
8285
  inputField: { selector: '::part(input-field)' },
7942
8286
  phoneInput: { selector: () => 'descope-text-field' },
@@ -7965,6 +8309,13 @@ const PhoneFieldInputBoxClass = compose(
7965
8309
  inputBorderColor: { ...inputField$1, property: 'border-color' },
7966
8310
  inputBorderRadius: { ...inputField$1, property: 'border-radius' },
7967
8311
 
8312
+ inputHorizontalPadding: [
8313
+ { ...phoneInput, property: 'padding-left' },
8314
+ { ...phoneInput, property: 'padding-right' },
8315
+ ],
8316
+
8317
+ labelFontSize: { ...label$3, property: 'font-size' },
8318
+ labelFontWeight: { ...label$3, property: 'font-weight' },
7968
8319
  labelTextColor: [
7969
8320
  { ...label$3, property: 'color' },
7970
8321
  { ...requiredIndicator$3, property: 'color' },
@@ -7980,6 +8331,21 @@ const PhoneFieldInputBoxClass = compose(
7980
8331
  inputOutlineColor: { ...inputField$1, property: 'outline-color' },
7981
8332
  inputOutlineWidth: { ...inputField$1, property: 'outline-width' },
7982
8333
  inputOutlineOffset: { ...inputField$1, property: 'outline-offset' },
8334
+
8335
+ labelPosition: { ...label$3, property: 'position' },
8336
+ labelTopPosition: { ...label$3, property: 'top' },
8337
+ labelHorizontalPosition: [
8338
+ { ...label$3, property: 'left' },
8339
+ { ...label$3, property: 'right' },
8340
+ ],
8341
+ inputTransformY: { ...label$3, property: 'transform' },
8342
+ inputTransition: { ...label$3, property: 'transition' },
8343
+ marginInlineStart: { ...label$3, property: 'margin-inline-start' },
8344
+ valueInputHeight: { ...inputElement$1, property: 'height' },
8345
+ valueInputMarginBottom: {
8346
+ selector: TextFieldClass.componentName,
8347
+ property: textVars.valueInputMarginBottom,
8348
+ },
7983
8349
  },
7984
8350
  }),
7985
8351
  draggableMixin,
@@ -8047,7 +8413,16 @@ const PhoneFieldInputBoxClass = compose(
8047
8413
  vaadin-text-field::part(input-field)::after {
8048
8414
  border: none;
8049
8415
  }
8416
+
8417
+ vaadin-text-field[label-type="floating"]:not([focused])[readonly] input:placeholder-shown {
8418
+ opacity: 0;
8419
+ }
8420
+ vaadin-text-field[label-type="floating"]:not([focused])[disabled] input:placeholder-shown {
8421
+ opacity: 0;
8422
+ }
8423
+
8050
8424
  ${resetInputLabelPosition('vaadin-text-field')}
8425
+ ${inputFloatingLabelStyle()}
8051
8426
  `,
8052
8427
  excludeAttrsSync: ['tabindex'],
8053
8428
  componentName: componentName$q,
@@ -8062,6 +8437,8 @@ const phoneInputBoxField = {
8062
8437
  [vars$l.hostDirection]: refs.direction,
8063
8438
  [vars$l.fontSize]: refs.fontSize,
8064
8439
  [vars$l.fontFamily]: refs.fontFamily,
8440
+ [vars$l.labelFontSize]: refs.labelFontSize,
8441
+ [vars$l.labelFontWeight]: refs.labelFontWeight,
8065
8442
  [vars$l.labelTextColor]: refs.labelTextColor,
8066
8443
  [vars$l.labelRequiredIndicator]: refs.requiredIndicator,
8067
8444
  [vars$l.errorMessageTextColor]: refs.errorMessageTextColor,
@@ -8075,6 +8452,21 @@ const phoneInputBoxField = {
8075
8452
  [vars$l.inputOutlineWidth]: refs.outlineWidth,
8076
8453
  [vars$l.inputOutlineColor]: refs.outlineColor,
8077
8454
  [vars$l.inputOutlineOffset]: refs.outlineOffset,
8455
+
8456
+ labelType: {
8457
+ floating: {
8458
+ [vars$l.labelPosition]: refs.labelPosition,
8459
+ [vars$l.labelTopPosition]: refs.labelTopPosition,
8460
+ [vars$l.labelHorizontalPosition]: refs.labelHorizontalPosition,
8461
+ [vars$l.inputTransformY]: refs.inputTransformY,
8462
+ [vars$l.inputTransition]: refs.inputTransition,
8463
+ [vars$l.marginInlineStart]: refs.marginInlineStart,
8464
+ [vars$l.valueInputHeight]: refs.valueInputHeight,
8465
+ [vars$l.valueInputMarginBottom]: '0.25em',
8466
+ [vars$l.inputHorizontalPadding]: '0',
8467
+ },
8468
+ },
8469
+
8078
8470
  _fullWidth: {
8079
8471
  [vars$l.hostWidth]: refs.width,
8080
8472
  },
@@ -8360,6 +8752,7 @@ const customMixin$4 = (superclass) =>
8360
8752
  'active-policies',
8361
8753
  'available-policies',
8362
8754
  'data-password-policy-value-minlength',
8755
+ 'label-type',
8363
8756
  ],
8364
8757
  });
8365
8758
  }
@@ -8423,6 +8816,12 @@ const NewPasswordClass = compose(
8423
8816
  property: policyPreviewVars.backgroundColor,
8424
8817
  },
8425
8818
  policyPreviewPadding: { ...policyPreview, property: policyPreviewVars.padding },
8819
+
8820
+ valueInputHeight: { ...passwordInput, property: PasswordClass.cssVarList.valueInputHeight },
8821
+ valueInputMarginBottom: {
8822
+ ...passwordInput,
8823
+ property: PasswordClass.cssVarList.valueInputMarginBottom,
8824
+ },
8426
8825
  },
8427
8826
  }),
8428
8827
  draggableMixin,
@@ -8499,11 +8898,21 @@ const newPassword = {
8499
8898
  [vars$k.hostDirection]: refs.direction,
8500
8899
  [vars$k.fontSize]: refs.fontSize,
8501
8900
  [vars$k.fontFamily]: refs.fontFamily,
8901
+ [vars$k.labelFontSize]: refs.labelFontSize,
8902
+ [vars$k.labelFontWeight]: refs.labelFontWeight,
8903
+ [vars$k.labelTextColor]: refs.labelTextColor,
8502
8904
  [vars$k.spaceBetweenInputs]: '1em',
8503
8905
  [vars$k.errorMessageTextColor]: refs.errorMessageTextColor,
8504
8906
  [vars$k.policyPreviewBackgroundColor]: 'none',
8505
8907
  [vars$k.policyPreviewPadding]: globalRefs$f.spacing.lg,
8506
8908
 
8909
+ labelType: {
8910
+ floating: {
8911
+ [vars$k.inputHeight]: refs.inputHeight,
8912
+ [vars$k.valueInputHeight]: refs.valueInputHeight,
8913
+ },
8914
+ },
8915
+
8507
8916
  _required: {
8508
8917
  // NewPassword doesn't pass `required` attribute to its Password components.
8509
8918
  // That's why we fake the required indicator on each input.
@@ -10556,6 +10965,8 @@ const MultiSelectComboBoxClass = compose(
10556
10965
  fontSize: [{}, host$5],
10557
10966
  chipFontSize: { ...chipLabel, property: 'font-size' },
10558
10967
  fontFamily: [label, placeholder, inputField, helperText$1, errorMessage$1, chipLabel],
10968
+ labelFontSize: { ...label, property: 'font-size' },
10969
+ labelFontWeight: { ...label, property: 'font-weight' },
10559
10970
  labelTextColor: [
10560
10971
  { ...label, property: 'color' },
10561
10972
  { ...requiredIndicator, property: 'color' },
@@ -10606,6 +11017,19 @@ const MultiSelectComboBoxClass = compose(
10606
11017
  { ...overflowChipSecondBorder, property: 'border-color' },
10607
11018
  ],
10608
11019
 
11020
+ labelPosition: { ...label, property: 'position' },
11021
+ labelTopPosition: { ...label, property: 'top' },
11022
+ labelLeftPosition: { ...label, property: 'left' },
11023
+ labelHorizontalPosition: [
11024
+ { ...label, property: 'left' },
11025
+ { ...label, property: 'right' },
11026
+ ],
11027
+ inputTransformY: { ...label, property: 'transform' },
11028
+ inputTransition: { ...label, property: 'transition' },
11029
+ marginInlineStart: { ...label, property: 'margin-inline-start' },
11030
+ placeholderOpacity: { ...placeholder, property: 'opacity' },
11031
+ inputVerticalAlignment: { ...inputField, property: 'align-items' },
11032
+
10609
11033
  // we need to use the variables from the portal mixin
10610
11034
  // so we need to use an arrow function on the selector
10611
11035
  // for that to work, because ComboBox is not available
@@ -10720,6 +11144,21 @@ const MultiSelectComboBoxClass = compose(
10720
11144
  :host([has-no-options][allow-custom-value='true']) ::part(toggle-button) {
10721
11145
  display: none;
10722
11146
  }
11147
+
11148
+ ${inputFloatingLabelStyle()}
11149
+
11150
+ vaadin-multi-select-combo-box::part(toggle-button),
11151
+ vaadin-multi-select-combo-box::part(clear-button) {
11152
+ align-self: center;
11153
+ }
11154
+
11155
+ vaadin-multi-select-combo-box[label-type="floating"]:not([focused])[readonly] > input:placeholder-shown {
11156
+ opacity: 0;
11157
+ }
11158
+ vaadin-multi-select-combo-box[label-type="floating"]:not([focused])[disabled] > input:placeholder-shown {
11159
+ opacity: 0;
11160
+ }
11161
+
10723
11162
  `,
10724
11163
  // Note: we exclude `size` to avoid overriding Vaadin's ComboBox property
10725
11164
  // with the same name. Including it will cause Vaadin to calculate NaN size,
@@ -10741,6 +11180,8 @@ const multiSelectComboBox = {
10741
11180
  [vars$c.hostDirection]: refs.direction,
10742
11181
  [vars$c.fontSize]: refs.fontSize,
10743
11182
  [vars$c.fontFamily]: refs.fontFamily,
11183
+ [vars$c.labelFontSize]: refs.labelFontSize,
11184
+ [vars$c.labelFontWeight]: refs.labelFontWeight,
10744
11185
  [vars$c.labelTextColor]: refs.labelTextColor,
10745
11186
  [vars$c.errorMessageTextColor]: refs.errorMessageTextColor,
10746
11187
  [vars$c.inputBorderColor]: refs.borderColor,
@@ -10768,6 +11209,26 @@ const multiSelectComboBox = {
10768
11209
  [vars$c.chipTextColor]: globalRefs$9.colors.surface.contrast,
10769
11210
  [vars$c.chipBackgroundColor]: globalRefs$9.colors.surface.light,
10770
11211
 
11212
+ labelType: {
11213
+ floating: {
11214
+ [vars$c.labelPosition]: refs.labelPosition,
11215
+ [vars$c.labelTopPosition]: refs.labelTopPosition,
11216
+ [vars$c.labelLeftPosition]: refs.labelLeftPosition,
11217
+ [vars$c.labelHorizontalPosition]: refs.labelHorizontalPosition,
11218
+ [vars$c.inputTransformY]: refs.inputTransformY,
11219
+ [vars$c.inputTransition]: refs.inputTransition,
11220
+ [vars$c.marginInlineStart]: refs.marginInlineStart,
11221
+ [vars$c.placeholderOpacity]: refs.placeholderOpacity,
11222
+ [vars$c.inputVerticalAlignment]: refs.inputVerticalAlignment,
11223
+ [vars$c.valueInputHeight]: refs.valueInputHeight,
11224
+ [vars$c.inputHorizontalPadding]: '0.25em',
11225
+
11226
+ _hasValue: {
11227
+ [vars$c.inputHorizontalPadding]: '0.45em',
11228
+ },
11229
+ },
11230
+ },
11231
+
10771
11232
  _readonly: {
10772
11233
  [vars$c.inputDropdownButtonCursor]: 'default',
10773
11234
  },