@descope/web-components-ui 1.0.321 → 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 (56) hide show
  1. package/dist/cjs/index.cjs.js +555 -25
  2. package/dist/cjs/index.cjs.js.map +1 -1
  3. package/dist/index.esm.js +634 -86
  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 +4 -4
  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 +74 -1
  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 +43 -3
  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/{components/descope-password/helpers.js → helpers/externalInputs.js} +5 -5
  46. package/src/helpers/themeHelpers/resetHelpers.js +15 -0
  47. package/src/theme/components/comboBox.js +17 -0
  48. package/src/theme/components/emailField.js +17 -0
  49. package/src/theme/components/inputWrapper.js +35 -0
  50. package/src/theme/components/multiSelectComboBox.js +22 -0
  51. package/src/theme/components/newPassword.js +10 -0
  52. package/src/theme/components/numberField.js +17 -0
  53. package/src/theme/components/password.js +17 -0
  54. package/src/theme/components/phoneField.js +8 -0
  55. package/src/theme/components/phoneInputBoxField.js +17 -0
  56. 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({
@@ -3412,18 +3535,18 @@ const createExternalInputSlot = (slotName, targetSlotName) => {
3412
3535
  return slotEle;
3413
3536
  };
3414
3537
 
3415
- const createExternalInputEle = (targetSlotName, autocompleteType) => {
3538
+ const createExternalInputEle = (targetSlotName, type, autocompleteType) => {
3416
3539
  const inputEle = document.createElement('input');
3417
3540
 
3418
3541
  inputEle.setAttribute('slot', targetSlotName);
3419
- inputEle.setAttribute('type', 'password');
3542
+ inputEle.setAttribute('type', type);
3420
3543
  inputEle.setAttribute('data-hidden-input', 'true');
3421
3544
  inputEle.setAttribute('autocomplete', autocompleteType);
3422
3545
 
3423
3546
  return inputEle;
3424
3547
  };
3425
3548
 
3426
- const applyExternalInputStyles = (sourceInputEle, targetInputEle) => {
3549
+ const applyExternalInputStyles = (sourceInputEle, targetInputEle, customStyle) => {
3427
3550
  const computedStyle = getComputedStyle(sourceInputEle);
3428
3551
  const height = computedStyle.getPropertyValue('height');
3429
3552
  const paddingLeft = computedStyle.getPropertyValue('padding-left');
@@ -3439,7 +3562,6 @@ const applyExternalInputStyles = (sourceInputEle, targetInputEle) => {
3439
3562
  targetInputEle.style = `
3440
3563
  all: unset !important;
3441
3564
  position: absolute !important;
3442
- width: calc(100% - 3em) !important;
3443
3565
  background-color: transparent !important;
3444
3566
  color: ${valueColor} !important;
3445
3567
  height: ${height} !important;
@@ -3449,6 +3571,7 @@ const applyExternalInputStyles = (sourceInputEle, targetInputEle) => {
3449
3571
  font-family: ${fontFamily} !important;
3450
3572
  letter-spacing: ${letterSpacing} !important;
3451
3573
  caret-color: ${caretColor} !important;
3574
+ ${customStyle || ''}
3452
3575
  `;
3453
3576
  };
3454
3577
 
@@ -3473,13 +3596,23 @@ const customMixin$9 = (superclass) =>
3473
3596
  this.baseElement.appendChild(externalInputSlot);
3474
3597
 
3475
3598
  // create external input
3476
- const externalInput = createExternalInputEle('external-input', this.getAutocompleteType());
3599
+ const externalInput = createExternalInputEle(
3600
+ 'external-input',
3601
+ 'password',
3602
+ this.getAutocompleteType()
3603
+ );
3477
3604
 
3478
3605
  this.handlePasswordVisibility(externalInput);
3479
3606
 
3480
3607
  // apply original input's styles to external input
3481
3608
  setTimeout(() => {
3482
- applyExternalInputStyles(origInput, externalInput);
3609
+ applyExternalInputStyles(
3610
+ origInput,
3611
+ externalInput,
3612
+ `
3613
+ width: calc(100% - 3em) !important;
3614
+ `
3615
+ );
3483
3616
  });
3484
3617
 
3485
3618
  // set external input events
@@ -3578,7 +3711,7 @@ const customMixin$9 = (superclass) =>
3578
3711
  const {
3579
3712
  host: host$l,
3580
3713
  inputField: inputField$5,
3581
- inputElement: inputElement$2,
3714
+ inputElement: inputElement$3,
3582
3715
  inputElementPlaceholder,
3583
3716
  revealButtonContainer,
3584
3717
  revealButtonIcon,
@@ -3609,8 +3742,8 @@ const PasswordClass = compose(
3609
3742
  fontFamily: [label$8, inputField$5, errorMessage$b, helperText$9],
3610
3743
  inputHeight: { ...inputField$5, property: 'height' },
3611
3744
  inputHorizontalPadding: [
3612
- { ...inputElement$2, property: 'padding-left' },
3613
- { ...inputElement$2, property: 'padding-right' },
3745
+ { ...inputElement$3, property: 'padding-left' },
3746
+ { ...inputElement$3, property: 'padding-right' },
3614
3747
  ],
3615
3748
  inputBackgroundColor: { ...inputField$5, property: 'background-color' },
3616
3749
 
@@ -3624,6 +3757,8 @@ const PasswordClass = compose(
3624
3757
  inputOutlineOffset: { ...inputField$5, property: 'outline-offset' },
3625
3758
  inputOutlineWidth: { ...inputField$5, property: 'outline-width' },
3626
3759
 
3760
+ labelFontSize: { ...label$8, property: 'font-size' },
3761
+ labelFontWeight: { ...label$8, property: 'font-weight' },
3627
3762
  labelTextColor: [
3628
3763
  { ...label$8, property: 'color' },
3629
3764
  { ...requiredIndicator$a, property: 'color' },
@@ -3636,7 +3771,7 @@ const PasswordClass = compose(
3636
3771
  { selector: () => ':host ::slotted(input:placeholder-shown)', property: 'color' },
3637
3772
  ],
3638
3773
  inputValueTextColor: [
3639
- { ...inputElement$2, property: 'color' },
3774
+ { ...inputElement$3, property: 'color' },
3640
3775
  { selector: () => ':host ::slotted(input)', property: 'color' },
3641
3776
  ],
3642
3777
 
@@ -3646,6 +3781,22 @@ const PasswordClass = compose(
3646
3781
  ],
3647
3782
  revealButtonSize: { ...revealButtonContainer, property: 'font-size' },
3648
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' },
3649
3800
  },
3650
3801
  }),
3651
3802
  draggableMixin,
@@ -3707,6 +3858,17 @@ const PasswordClass = compose(
3707
3858
  vaadin-password-field-button[focus-ring] {
3708
3859
  box-shadow: 0 0 0 2px var(${PasswordClass.cssVarList.inputOutlineColor});
3709
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
+
3710
3872
  `,
3711
3873
  excludeAttrsSync: ['tabindex'],
3712
3874
  componentName: componentName$O,
@@ -3718,9 +3880,12 @@ const vars$F = PasswordClass.cssVarList;
3718
3880
 
3719
3881
  const password = {
3720
3882
  [vars$F.hostWidth]: refs.width,
3883
+ [vars$F.hostMinWidth]: refs.minWidth,
3721
3884
  [vars$F.hostDirection]: refs.direction,
3722
3885
  [vars$F.fontSize]: refs.fontSize,
3723
3886
  [vars$F.fontFamily]: refs.fontFamily,
3887
+ [vars$F.labelFontSize]: refs.labelFontSize,
3888
+ [vars$F.labelFontWeight]: refs.labelFontWeight,
3724
3889
  [vars$F.labelTextColor]: refs.labelTextColor,
3725
3890
  [vars$F.errorMessageTextColor]: refs.errorMessageTextColor,
3726
3891
  [vars$F.inputHorizontalPadding]: refs.horizontalPadding,
@@ -3740,6 +3905,20 @@ const password = {
3740
3905
  [vars$F.revealButtonOffset]: globalRefs$p.spacing.md,
3741
3906
  [vars$F.revealButtonSize]: refs.toggleButtonSize,
3742
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
+ },
3743
3922
  };
3744
3923
 
3745
3924
  var password$1 = /*#__PURE__*/Object.freeze({
@@ -3772,6 +3951,14 @@ const NumberFieldClass = compose(
3772
3951
  ${resetInputLabelPosition('vaadin-number-field')}
3773
3952
  ${useHostExternalPadding(NumberFieldClass.cssVarList)}
3774
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
+ }
3775
3962
  `,
3776
3963
  excludeAttrsSync: ['tabindex'],
3777
3964
  componentName: componentName$N,
@@ -3786,6 +3973,8 @@ const numberField = {
3786
3973
  [vars$E.hostDirection]: refs.direction,
3787
3974
  [vars$E.fontSize]: refs.fontSize,
3788
3975
  [vars$E.fontFamily]: refs.fontFamily,
3976
+ [vars$E.labelFontSize]: refs.labelFontSize,
3977
+ [vars$E.labelFontWeight]: refs.labelFontWeight,
3789
3978
  [vars$E.labelTextColor]: refs.labelTextColor,
3790
3979
  [vars$E.errorMessageTextColor]: refs.errorMessageTextColor,
3791
3980
  [vars$E.inputValueTextColor]: refs.valueTextColor,
@@ -3802,6 +3991,21 @@ const numberField = {
3802
3991
  [vars$E.labelRequiredIndicator]: refs.requiredIndicator,
3803
3992
  [vars$E.inputHorizontalPadding]: refs.horizontalPadding,
3804
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
+ },
3805
4009
  };
3806
4010
 
3807
4011
  var numberField$1 = /*#__PURE__*/Object.freeze({
@@ -3816,9 +4020,68 @@ const customMixin$8 = (superclass) =>
3816
4020
  class EmailFieldMixinClass extends superclass {
3817
4021
  init() {
3818
4022
  super.init?.();
4023
+
3819
4024
  this.baseElement.setAttribute('pattern', '^[\\w\\.\\%\\+\\-]+@[\\w\\.\\-]+\\.[A-Za-z]{2,}$');
4025
+
4026
+ this.handleExternalInput();
4027
+ }
4028
+
4029
+ handleExternalInput() {
4030
+ // reset vaadin's checkValidity
4031
+ this.baseElement.checkValidity = () => {};
4032
+
4033
+ // set safety attribute `external-input`
4034
+ this.setAttribute('external-input', 'true');
4035
+
4036
+ // use original input element as reference
4037
+ const origInput = this.baseElement.querySelector('input');
4038
+
4039
+ // create external slot
4040
+ const externalInputSlot = createExternalInputSlot('external-input', 'suffix');
4041
+ // append external slot to base element
4042
+ this.baseElement.appendChild(externalInputSlot);
4043
+
4044
+ const externalInput = createExternalInputEle(
4045
+ 'external-input',
4046
+ 'text',
4047
+ this.getAutocompleteType()
4048
+ );
4049
+
4050
+ // apply original input's styles to external input
4051
+ setTimeout(() => {
4052
+ applyExternalInputStyles(origInput, externalInput);
4053
+ });
4054
+
4055
+ // set external input events
4056
+ this.handleExternalInputEvents(externalInput);
4057
+
4058
+ syncAttrs(origInput, externalInput, { includeAttrs: ['disabled', 'readonly', 'pattern'] });
4059
+
4060
+ // append external input to component's DOM
4061
+ this.appendChild(externalInput);
4062
+ }
4063
+
4064
+ getAutocompleteType() {
4065
+ return this.getAttribute('autocomplete') || 'username';
4066
+ }
4067
+
4068
+ handleExternalInputEvents(inputEle) {
4069
+ // sync value of insible input back to original input
4070
+ inputEle.addEventListener('input', (e) => {
4071
+ this.value = e.target.value;
4072
+ });
4073
+
4074
+ // sync `focused` attribute on host when focusing on external input
4075
+ inputEle.addEventListener('focus', () => {
4076
+ this.setAttribute('focused', 'true');
4077
+ });
4078
+
4079
+ inputEle.addEventListener('blur', () => {
4080
+ this.removeAttribute('focused');
4081
+ });
3820
4082
  }
3821
4083
  };
4084
+
3822
4085
  const EmailFieldClass = compose(
3823
4086
  createStyleMixin({
3824
4087
  mappings: textFieldMappings,
@@ -3843,6 +4106,14 @@ const EmailFieldClass = compose(
3843
4106
  ${resetInputLabelPosition('vaadin-email-field')}
3844
4107
  ${useHostExternalPadding(EmailFieldClass.cssVarList)}
3845
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
+ }
3846
4117
  `,
3847
4118
  excludeAttrsSync: ['tabindex'],
3848
4119
  componentName: componentName$M,
@@ -3857,6 +4128,8 @@ const emailField = {
3857
4128
  [vars$D.hostDirection]: refs.direction,
3858
4129
  [vars$D.fontSize]: refs.fontSize,
3859
4130
  [vars$D.fontFamily]: refs.fontFamily,
4131
+ [vars$D.labelFontSize]: refs.labelFontSize,
4132
+ [vars$D.labelFontWeight]: refs.labelFontWeight,
3860
4133
  [vars$D.labelTextColor]: refs.labelTextColor,
3861
4134
  [vars$D.errorMessageTextColor]: refs.errorMessageTextColor,
3862
4135
  [vars$D.inputValueTextColor]: refs.valueTextColor,
@@ -3873,6 +4146,21 @@ const emailField = {
3873
4146
  [vars$D.inputBackgroundColor]: refs.backgroundColor,
3874
4147
  [vars$D.inputHorizontalPadding]: refs.horizontalPadding,
3875
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
+ },
3876
4164
  };
3877
4165
 
3878
4166
  var emailField$1 = /*#__PURE__*/Object.freeze({
@@ -5847,6 +6135,10 @@ const componentName$v = getComponentName('combo-box');
5847
6135
 
5848
6136
  const ComboBoxMixin = (superclass) =>
5849
6137
  class ComboBoxMixinClass extends superclass {
6138
+ static get observedAttributes() {
6139
+ return ['label-type'];
6140
+ }
6141
+
5850
6142
  // eslint-disable-next-line class-methods-use-this
5851
6143
  #renderItem = ({ displayName, value, label }) => {
5852
6144
  return `<span data-name="${label}" data-id="${value}">${displayName || label}</span>`;
@@ -6047,6 +6339,28 @@ const ComboBoxMixin = (superclass) =>
6047
6339
  });
6048
6340
  }
6049
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
+
6050
6364
  setDefaultValue() {
6051
6365
  this.value = this.defaultValue;
6052
6366
  }
@@ -6071,7 +6385,7 @@ const ComboBoxMixin = (superclass) =>
6071
6385
  const {
6072
6386
  host: host$d,
6073
6387
  inputField: inputField$3,
6074
- inputElement: inputElement$1,
6388
+ inputElement: inputElement$2,
6075
6389
  placeholder: placeholder$1,
6076
6390
  toggle: toggle$1,
6077
6391
  clearButton: clearButton$1,
@@ -6100,6 +6414,8 @@ const ComboBoxClass = compose(
6100
6414
  // we apply font-size also on the host so we can set its width with em
6101
6415
  fontSize: [{}, host$d],
6102
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' },
6103
6419
  labelTextColor: [
6104
6420
  { ...label$5, property: 'color' },
6105
6421
  { ...requiredIndicator$5, property: 'color' },
@@ -6135,9 +6451,23 @@ const ComboBoxClass = compose(
6135
6451
  inputOutlineStyle: { ...inputField$3, property: 'outline-style' },
6136
6452
  inputOutlineOffset: { ...inputField$3, property: 'outline-offset' },
6137
6453
  inputHorizontalPadding: [
6138
- { ...inputElement$1, property: 'padding-left' },
6139
- { ...inputElement$1, property: 'padding-right' },
6454
+ { ...inputElement$2, property: 'padding-left' },
6455
+ { ...inputElement$2, property: 'padding-right' },
6456
+ ],
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' },
6140
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' },
6141
6471
 
6142
6472
  // we need to use the variables from the portal mixin
6143
6473
  // so we need to use an arrow function on the selector
@@ -6219,7 +6549,21 @@ const ComboBoxClass = compose(
6219
6549
  padding: 0;
6220
6550
  box-shadow: none;
6221
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
+
6222
6565
  ${resetInputLabelPosition('vaadin-combo-box')}
6566
+ ${inputFloatingLabelStyle()}
6223
6567
  `,
6224
6568
  // Note: we exclude `size` to avoid overriding Vaadin's ComboBox property
6225
6569
  // with the same name. Including it will cause Vaadin to calculate NaN size,
@@ -6239,6 +6583,8 @@ const comboBox = {
6239
6583
  [vars$o.hostDirection]: refs.direction,
6240
6584
  [vars$o.fontSize]: refs.fontSize,
6241
6585
  [vars$o.fontFamily]: refs.fontFamily,
6586
+ [vars$o.labelFontSize]: refs.labelFontSize,
6587
+ [vars$o.labelFontWeight]: refs.labelFontWeight,
6242
6588
  [vars$o.labelTextColor]: refs.labelTextColor,
6243
6589
  [vars$o.errorMessageTextColor]: refs.errorMessageTextColor,
6244
6590
  [vars$o.inputBorderColor]: refs.borderColor,
@@ -6262,6 +6608,21 @@ const comboBox = {
6262
6608
  [vars$o.overlayItemPaddingInlineStart]: globalRefs$g.spacing.xs,
6263
6609
  [vars$o.overlayItemPaddingInlineEnd]: globalRefs$g.spacing.lg,
6264
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
+
6265
6626
  _readonly: {
6266
6627
  [vars$o.inputDropdownButtonCursor]: 'default',
6267
6628
  },
@@ -7599,6 +7960,10 @@ const customMixin$6 = (superclass) =>
7599
7960
  'phone-input-placeholder',
7600
7961
  'disabled',
7601
7962
  'restrict-countries',
7963
+ 'label-type',
7964
+ 'country-input-label',
7965
+ 'phone-input-label',
7966
+ 'readonly',
7602
7967
  ],
7603
7968
  });
7604
7969
  }
@@ -7611,6 +7976,7 @@ const {
7611
7976
  inputField: inputField$2,
7612
7977
  countryCodeInput,
7613
7978
  phoneInput: phoneInput$1,
7979
+ phoneExternalInput,
7614
7980
  separator: separator$1,
7615
7981
  errorMessage: errorMessage$5,
7616
7982
  helperText: helperText$4,
@@ -7620,6 +7986,7 @@ const {
7620
7986
  requiredIndicator: { selector: '[required]::part(required-indicator)::after' },
7621
7987
  inputField: { selector: '::part(input-field)' },
7622
7988
  phoneInput: { selector: () => 'descope-text-field' },
7989
+ phoneExternalInput: { selector: () => '::slotted(input)' },
7623
7990
  countryCodeInput: { selector: () => 'descope-combo-box' },
7624
7991
  separator: { selector: 'descope-phone-field-internal .separator' },
7625
7992
  helperText: { selector: '::part(helper-text)' },
@@ -7678,6 +8045,13 @@ const PhoneFieldClass = compose(
7678
8045
  },
7679
8046
  phoneInputWidth: { ...phoneInput$1, property: 'width' },
7680
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
+
7681
8055
  labelTextColor: [
7682
8056
  { ...label$4, property: 'color' },
7683
8057
  { ...requiredIndicator$4, property: 'color' },
@@ -7701,6 +8075,20 @@ const PhoneFieldClass = compose(
7701
8075
  inputOutlineColor: { ...inputField$2, property: 'outline-color' },
7702
8076
  inputOutlineWidth: { ...inputField$2, property: 'outline-width' },
7703
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
+ ],
7704
8092
  },
7705
8093
  }),
7706
8094
  draggableMixin,
@@ -7771,10 +8159,15 @@ const PhoneFieldClass = compose(
7771
8159
  ${textVars$1.inputOutlineOffset}: 0;
7772
8160
  ${textVars$1.inputBorderWidth}: 0;
7773
8161
  ${textVars$1.inputBorderRadius}: 0;
7774
- }
7775
- vaadin-text-field[readonly] > input:placeholder-shown {
7776
- opacity: 1;
7777
- }
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
+
7778
8171
  vaadin-text-field::part(input-field)::after {
7779
8172
  border: none;
7780
8173
  }
@@ -7809,6 +8202,14 @@ const phoneField = {
7809
8202
  [vars$m.countryCodeInputWidth]: '5em',
7810
8203
  [vars$m.countryCodeDropdownWidth]: '20em',
7811
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
+
7812
8213
  // '@overlay': {
7813
8214
  // overlayItemBackgroundColor: 'red'
7814
8215
  // }
@@ -7860,14 +8261,26 @@ const customMixin$5 = (superclass) =>
7860
8261
  'default-code',
7861
8262
  'disabled',
7862
8263
  'phone-input-placeholder',
8264
+ 'label-type',
7863
8265
  ],
7864
8266
  });
7865
8267
  }
7866
8268
  };
7867
8269
 
7868
- 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
+ } = {
7869
8280
  host: { selector: () => ':host' },
7870
8281
  label: { selector: '::part(label)' },
8282
+ placeholder: { selector: '> input:placeholder-shown' },
8283
+ inputElement: { selector: 'input' },
7871
8284
  requiredIndicator: { selector: '[required]::part(required-indicator)::after' },
7872
8285
  inputField: { selector: '::part(input-field)' },
7873
8286
  phoneInput: { selector: () => 'descope-text-field' },
@@ -7896,6 +8309,13 @@ const PhoneFieldInputBoxClass = compose(
7896
8309
  inputBorderColor: { ...inputField$1, property: 'border-color' },
7897
8310
  inputBorderRadius: { ...inputField$1, property: 'border-radius' },
7898
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' },
7899
8319
  labelTextColor: [
7900
8320
  { ...label$3, property: 'color' },
7901
8321
  { ...requiredIndicator$3, property: 'color' },
@@ -7911,6 +8331,21 @@ const PhoneFieldInputBoxClass = compose(
7911
8331
  inputOutlineColor: { ...inputField$1, property: 'outline-color' },
7912
8332
  inputOutlineWidth: { ...inputField$1, property: 'outline-width' },
7913
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
+ },
7914
8349
  },
7915
8350
  }),
7916
8351
  draggableMixin,
@@ -7978,7 +8413,16 @@ const PhoneFieldInputBoxClass = compose(
7978
8413
  vaadin-text-field::part(input-field)::after {
7979
8414
  border: none;
7980
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
+
7981
8424
  ${resetInputLabelPosition('vaadin-text-field')}
8425
+ ${inputFloatingLabelStyle()}
7982
8426
  `,
7983
8427
  excludeAttrsSync: ['tabindex'],
7984
8428
  componentName: componentName$q,
@@ -7993,6 +8437,8 @@ const phoneInputBoxField = {
7993
8437
  [vars$l.hostDirection]: refs.direction,
7994
8438
  [vars$l.fontSize]: refs.fontSize,
7995
8439
  [vars$l.fontFamily]: refs.fontFamily,
8440
+ [vars$l.labelFontSize]: refs.labelFontSize,
8441
+ [vars$l.labelFontWeight]: refs.labelFontWeight,
7996
8442
  [vars$l.labelTextColor]: refs.labelTextColor,
7997
8443
  [vars$l.labelRequiredIndicator]: refs.requiredIndicator,
7998
8444
  [vars$l.errorMessageTextColor]: refs.errorMessageTextColor,
@@ -8006,6 +8452,21 @@ const phoneInputBoxField = {
8006
8452
  [vars$l.inputOutlineWidth]: refs.outlineWidth,
8007
8453
  [vars$l.inputOutlineColor]: refs.outlineColor,
8008
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
+
8009
8470
  _fullWidth: {
8010
8471
  [vars$l.hostWidth]: refs.width,
8011
8472
  },
@@ -8291,6 +8752,7 @@ const customMixin$4 = (superclass) =>
8291
8752
  'active-policies',
8292
8753
  'available-policies',
8293
8754
  'data-password-policy-value-minlength',
8755
+ 'label-type',
8294
8756
  ],
8295
8757
  });
8296
8758
  }
@@ -8354,6 +8816,12 @@ const NewPasswordClass = compose(
8354
8816
  property: policyPreviewVars.backgroundColor,
8355
8817
  },
8356
8818
  policyPreviewPadding: { ...policyPreview, property: policyPreviewVars.padding },
8819
+
8820
+ valueInputHeight: { ...passwordInput, property: PasswordClass.cssVarList.valueInputHeight },
8821
+ valueInputMarginBottom: {
8822
+ ...passwordInput,
8823
+ property: PasswordClass.cssVarList.valueInputMarginBottom,
8824
+ },
8357
8825
  },
8358
8826
  }),
8359
8827
  draggableMixin,
@@ -8430,11 +8898,21 @@ const newPassword = {
8430
8898
  [vars$k.hostDirection]: refs.direction,
8431
8899
  [vars$k.fontSize]: refs.fontSize,
8432
8900
  [vars$k.fontFamily]: refs.fontFamily,
8901
+ [vars$k.labelFontSize]: refs.labelFontSize,
8902
+ [vars$k.labelFontWeight]: refs.labelFontWeight,
8903
+ [vars$k.labelTextColor]: refs.labelTextColor,
8433
8904
  [vars$k.spaceBetweenInputs]: '1em',
8434
8905
  [vars$k.errorMessageTextColor]: refs.errorMessageTextColor,
8435
8906
  [vars$k.policyPreviewBackgroundColor]: 'none',
8436
8907
  [vars$k.policyPreviewPadding]: globalRefs$f.spacing.lg,
8437
8908
 
8909
+ labelType: {
8910
+ floating: {
8911
+ [vars$k.inputHeight]: refs.inputHeight,
8912
+ [vars$k.valueInputHeight]: refs.valueInputHeight,
8913
+ },
8914
+ },
8915
+
8438
8916
  _required: {
8439
8917
  // NewPassword doesn't pass `required` attribute to its Password components.
8440
8918
  // That's why we fake the required indicator on each input.
@@ -10487,6 +10965,8 @@ const MultiSelectComboBoxClass = compose(
10487
10965
  fontSize: [{}, host$5],
10488
10966
  chipFontSize: { ...chipLabel, property: 'font-size' },
10489
10967
  fontFamily: [label, placeholder, inputField, helperText$1, errorMessage$1, chipLabel],
10968
+ labelFontSize: { ...label, property: 'font-size' },
10969
+ labelFontWeight: { ...label, property: 'font-weight' },
10490
10970
  labelTextColor: [
10491
10971
  { ...label, property: 'color' },
10492
10972
  { ...requiredIndicator, property: 'color' },
@@ -10537,6 +11017,19 @@ const MultiSelectComboBoxClass = compose(
10537
11017
  { ...overflowChipSecondBorder, property: 'border-color' },
10538
11018
  ],
10539
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
+
10540
11033
  // we need to use the variables from the portal mixin
10541
11034
  // so we need to use an arrow function on the selector
10542
11035
  // for that to work, because ComboBox is not available
@@ -10651,6 +11144,21 @@ const MultiSelectComboBoxClass = compose(
10651
11144
  :host([has-no-options][allow-custom-value='true']) ::part(toggle-button) {
10652
11145
  display: none;
10653
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
+
10654
11162
  `,
10655
11163
  // Note: we exclude `size` to avoid overriding Vaadin's ComboBox property
10656
11164
  // with the same name. Including it will cause Vaadin to calculate NaN size,
@@ -10672,6 +11180,8 @@ const multiSelectComboBox = {
10672
11180
  [vars$c.hostDirection]: refs.direction,
10673
11181
  [vars$c.fontSize]: refs.fontSize,
10674
11182
  [vars$c.fontFamily]: refs.fontFamily,
11183
+ [vars$c.labelFontSize]: refs.labelFontSize,
11184
+ [vars$c.labelFontWeight]: refs.labelFontWeight,
10675
11185
  [vars$c.labelTextColor]: refs.labelTextColor,
10676
11186
  [vars$c.errorMessageTextColor]: refs.errorMessageTextColor,
10677
11187
  [vars$c.inputBorderColor]: refs.borderColor,
@@ -10699,6 +11209,26 @@ const multiSelectComboBox = {
10699
11209
  [vars$c.chipTextColor]: globalRefs$9.colors.surface.contrast,
10700
11210
  [vars$c.chipBackgroundColor]: globalRefs$9.colors.surface.light,
10701
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
+
10702
11232
  _readonly: {
10703
11233
  [vars$c.inputDropdownButtonCursor]: 'default',
10704
11234
  },