@descope/web-components-ui 3.6.0 → 3.7.1

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 (46) hide show
  1. package/dist/cjs/index.cjs.js +689 -344
  2. package/dist/cjs/index.cjs.js.map +1 -1
  3. package/dist/index.esm.js +791 -445
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/umd/8961.js +1 -1
  6. package/dist/umd/8961.js.map +1 -1
  7. package/dist/umd/DescopeDev.js +1 -1
  8. package/dist/umd/DescopeDev.js.map +1 -1
  9. package/dist/umd/button-selection-group-fields-descope-button-selection-group-item-index-js.js +1 -1
  10. package/dist/umd/button-selection-group-fields-descope-button-selection-group-item-index-js.js.map +1 -1
  11. package/dist/umd/descope-anchored.js +2 -0
  12. package/dist/umd/descope-anchored.js.map +1 -0
  13. package/dist/umd/descope-attachment.js +1 -1
  14. package/dist/umd/descope-attachment.js.map +1 -1
  15. package/dist/umd/descope-badge.js +1 -1
  16. package/dist/umd/descope-badge.js.map +1 -1
  17. package/dist/umd/descope-button.js +1 -1
  18. package/dist/umd/descope-button.js.map +1 -1
  19. package/dist/umd/descope-date-field-descope-calendar-index-js.js +1 -1
  20. package/dist/umd/descope-date-field-descope-calendar-index-js.js.map +1 -1
  21. package/dist/umd/descope-outbound-app-button.js +1 -1
  22. package/dist/umd/descope-outbound-app-button.js.map +1 -1
  23. package/dist/umd/descope-outbound-apps.js +1 -1
  24. package/dist/umd/descope-outbound-apps.js.map +1 -1
  25. package/dist/umd/descope-timer-button.js +1 -1
  26. package/dist/umd/descope-timer-button.js.map +1 -1
  27. package/dist/umd/descope-tooltip.js +1 -1
  28. package/dist/umd/descope-tooltip.js.map +1 -1
  29. package/dist/umd/descope-trusted-devices.js +1 -1
  30. package/dist/umd/descope-trusted-devices.js.map +1 -1
  31. package/dist/umd/descope-upload-file-index-js.js +1 -1
  32. package/dist/umd/descope-upload-file-index-js.js.map +1 -1
  33. package/dist/umd/descope-user-attribute-index-js.js +4 -4
  34. package/dist/umd/descope-user-attribute-index-js.js.map +1 -1
  35. package/dist/umd/descope-user-auth-method-index-js.js +4 -4
  36. package/dist/umd/descope-user-auth-method-index-js.js.map +1 -1
  37. package/dist/umd/index.js +1 -1
  38. package/dist/umd/index.js.map +1 -1
  39. package/dist/umd/mapping-fields-descope-mappings-field-index-js.js +1 -1
  40. package/dist/umd/mapping-fields-descope-mappings-field-index-js.js.map +1 -1
  41. package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js +1 -1
  42. package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js.map +1 -1
  43. package/package.json +33 -32
  44. package/src/components/descope-user-attribute/UserAttributeClass.js +58 -7
  45. package/src/theme/components/userAttribute.js +1 -0
  46. package/stories/descope-user-attribute.stories.js +18 -0
@@ -256,6 +256,8 @@ const observeAttributes = (
256
256
  });
257
257
 
258
258
  observer.observe(ele, { attributes: true });
259
+
260
+ return { disconnect: () => observer.disconnect() };
259
261
  };
260
262
 
261
263
  // calling the callback with this object: { addedNodes, removedNodes }
@@ -305,13 +307,12 @@ const getComponentName = (name) => kebabCaseJoin(DESCOPE_PREFIX, name);
305
307
 
306
308
  const getCssVarName = (...args) => `--${kebabCaseJoin(...args)}`;
307
309
 
308
- const forwardAttrs = (source, dest, options = {}) => {
310
+ const forwardAttrs = (source, dest, options = {}) =>
309
311
  observeAttributes(
310
312
  source,
311
313
  createSyncAttrsCb(source, dest, options.mapAttrs),
312
314
  options,
313
315
  );
314
- };
315
316
 
316
317
  const forwardProps$2 = (src, target, props = []) => {
317
318
  if (!props.length) return;
@@ -324,7 +325,6 @@ const forwardProps$2 = (src, target, props = []) => {
324
325
  return src[prop];
325
326
  },
326
327
  set(v) {
327
- // eslint-disable-next-line no-param-reassign
328
328
  src[prop] = v;
329
329
  },
330
330
  },
@@ -339,8 +339,9 @@ const injectStyle = (cssString, ref, { prepend = false } = {}) => {
339
339
  let style;
340
340
 
341
341
  try {
342
+ // eslint-disable-next-line no-undef
342
343
  style = new CSSStyleSheet();
343
- } catch (e) {
344
+ } catch {
344
345
  // fallback for browsers that don't support CSSStyleSheet
345
346
  return generateStyleTagFallback(cssString, ref, { prepend });
346
347
  }
@@ -3024,6 +3025,55 @@ const inputOverrideValidConstraintsMixin$1 = (superclass) =>
3024
3025
  }
3025
3026
  };
3026
3027
 
3028
+ // stretchMixin — manages the `[stretch]` attribute as a pure layout signal.
3029
+ // Consumers own the visual implementation (`:host([stretch])` CSS in their
3030
+ // own init styles, theme rules, etc.).
3031
+ //
3032
+ // triggers — for leaf components that own a "full size" attribute.
3033
+ // Each entry maps an attribute/value pair; when the attribute matches the
3034
+ // value, `[stretch]` is toggled on the host.
3035
+ // Example: stretchMixin({ triggers: [{ attr: 'full-width', value: 'true' }] })
3036
+ // Use on components like descope-button that expose a full-width prop.
3037
+ //
3038
+ // Propagating `[stretch]` from slotted children (e.g. for anchored components)
3039
+ // is the consumer's responsibility. descope-anchored implements this correctly
3040
+ // via per-anchor MutationObservers on assignedElements({ flatten: true }),
3041
+ // which also handles React props set after init.
3042
+
3043
+ const stretchMixin =
3044
+ ({ triggers = [] } = {}) =>
3045
+ (superclass) =>
3046
+ class StretchMixinClass extends superclass {
3047
+ static get observedAttributes() {
3048
+ return [
3049
+ ...(superclass.observedAttributes || []),
3050
+ ...triggers.map(({ attr }) => attr),
3051
+ ];
3052
+ }
3053
+
3054
+ get #shouldStretch() {
3055
+ return triggers.some(
3056
+ ({ attr, value }) => this.getAttribute(attr) === value,
3057
+ );
3058
+ }
3059
+
3060
+ #syncStretch = () => {
3061
+ this.toggleAttribute('stretch', this.#shouldStretch);
3062
+ };
3063
+
3064
+ attributeChangedCallback(name, oldVal, newVal) {
3065
+ super.attributeChangedCallback?.(name, oldVal, newVal);
3066
+ if (oldVal !== newVal) {
3067
+ this.#syncStretch();
3068
+ }
3069
+ }
3070
+
3071
+ init() {
3072
+ super.init?.();
3073
+ this.#syncStretch();
3074
+ }
3075
+ };
3076
+
3027
3077
  const getFileExtension = (path) => {
3028
3078
  const match = path.match(/\.([0-9a-z]+)(?:[\\?#]|$)/i);
3029
3079
  return match ? match[1] : null;
@@ -3085,12 +3135,12 @@ const createImage = async (src, altText) => {
3085
3135
 
3086
3136
  /* eslint-disable no-use-before-define */
3087
3137
 
3088
- const componentName$1k = getComponentName('image');
3138
+ const componentName$1l = getComponentName('image');
3089
3139
 
3090
3140
  const srcAttrs = ['src', 'src-dark'];
3091
3141
 
3092
3142
  class RawImage extends createBaseClass$1({
3093
- componentName: componentName$1k,
3143
+ componentName: componentName$1l,
3094
3144
  baseSelector: 'slot',
3095
3145
  }) {
3096
3146
  static get observedAttributes() {
@@ -3218,7 +3268,7 @@ const ImageClass = compose(
3218
3268
  componentNameValidationMixin$1,
3219
3269
  )(RawImage);
3220
3270
 
3221
- const componentName$1j = getComponentName('icon');
3271
+ const componentName$1k = getComponentName('icon');
3222
3272
 
3223
3273
  const IconClass = compose(
3224
3274
  createStyleMixin$1({
@@ -3239,7 +3289,7 @@ const IconClass = compose(
3239
3289
  }
3240
3290
  `,
3241
3291
  excludeAttrsSync: ['tabindex', 'class', 'style'],
3242
- componentName: componentName$1j,
3292
+ componentName: componentName$1k,
3243
3293
  }),
3244
3294
  );
3245
3295
 
@@ -3254,7 +3304,7 @@ const clickableMixin = (superclass) =>
3254
3304
  }
3255
3305
  };
3256
3306
 
3257
- const componentName$1i = getComponentName('button');
3307
+ const componentName$1j = getComponentName('button');
3258
3308
 
3259
3309
  const resetStyles = `
3260
3310
  :host {
@@ -3301,6 +3351,7 @@ const { host: host$x, label: label$a, slottedIcon } = {
3301
3351
  let loadingIndicatorStyles;
3302
3352
 
3303
3353
  const ButtonClass = compose(
3354
+ stretchMixin({ triggers: [{ attr: 'full-width', value: 'true' }] }),
3304
3355
  createStyleMixin$1({
3305
3356
  mappings: {
3306
3357
  hostWidth: { property: 'width' },
@@ -3374,7 +3425,7 @@ const ButtonClass = compose(
3374
3425
  }
3375
3426
  `,
3376
3427
  excludeAttrsSync: ['tabindex', 'class', 'style'],
3377
- componentName: componentName$1i,
3428
+ componentName: componentName$1j,
3378
3429
  }),
3379
3430
  );
3380
3431
 
@@ -3424,7 +3475,7 @@ const mode = {
3424
3475
 
3425
3476
  const [helperTheme$7, helperRefs$7, helperVars$6] = createHelperVars$1(
3426
3477
  { mode },
3427
- componentName$1i,
3478
+ componentName$1j,
3428
3479
  );
3429
3480
 
3430
3481
  const button = {
@@ -3549,10 +3600,10 @@ var button$1 = /*#__PURE__*/Object.freeze({
3549
3600
  vars: vars$15
3550
3601
  });
3551
3602
 
3552
- const componentName$1h = getComponentName('text');
3603
+ const componentName$1i = getComponentName('text');
3553
3604
 
3554
3605
  class RawText extends createBaseClass$1({
3555
- componentName: componentName$1h,
3606
+ componentName: componentName$1i,
3556
3607
  baseSelector: ':host > slot',
3557
3608
  }) {
3558
3609
  constructor() {
@@ -3745,9 +3796,9 @@ const decodeHTML = (html) => {
3745
3796
  /* eslint-disable no-param-reassign */
3746
3797
 
3747
3798
 
3748
- const componentName$1g = getComponentName('enriched-text');
3799
+ const componentName$1h = getComponentName('enriched-text');
3749
3800
 
3750
- class EnrichedText extends createBaseClass$1({ componentName: componentName$1g, baseSelector: ':host > div' }) {
3801
+ class EnrichedText extends createBaseClass$1({ componentName: componentName$1h, baseSelector: ':host > div' }) {
3751
3802
  #origLinkRenderer;
3752
3803
 
3753
3804
  #origEmRenderer;
@@ -3952,12 +4003,12 @@ const EnrichedTextClass = compose(
3952
4003
  componentNameValidationMixin$1
3953
4004
  )(EnrichedText);
3954
4005
 
3955
- const componentName$1f = getComponentName('link');
4006
+ const componentName$1g = getComponentName('link');
3956
4007
 
3957
4008
  const observedAttrs$6 = ['href', 'readonly'];
3958
4009
 
3959
4010
  class RawLink extends createBaseClass$1({
3960
- componentName: componentName$1f,
4011
+ componentName: componentName$1g,
3961
4012
  baseSelector: ':host a',
3962
4013
  }) {
3963
4014
  static get observedAttributes() {
@@ -4130,7 +4181,7 @@ var enrichedText$1 = /*#__PURE__*/Object.freeze({
4130
4181
  vars: vars$12
4131
4182
  });
4132
4183
 
4133
- const componentName$1e = getComponentName('combo-box');
4184
+ const componentName$1f = getComponentName('combo-box');
4134
4185
 
4135
4186
  const ComboBoxMixin = (superclass) =>
4136
4187
  class ComboBoxMixinClass extends superclass {
@@ -4823,12 +4874,12 @@ const ComboBoxClass = compose(
4823
4874
  // and reset items to an empty array, and opening the list box with no items
4824
4875
  // to display.
4825
4876
  excludeAttrsSync: ['tabindex', 'size', 'data', 'loading', 'style'],
4826
- componentName: componentName$1e,
4877
+ componentName: componentName$1f,
4827
4878
  includeForwardProps: ['items', 'renderer', 'selectedItem'],
4828
4879
  }),
4829
4880
  );
4830
4881
 
4831
- const componentName$1d = getComponentName('input-wrapper');
4882
+ const componentName$1e = getComponentName('input-wrapper');
4832
4883
  const globalRefs$D = getThemeRefs$1(globals);
4833
4884
 
4834
4885
  const [theme$2, refs$1] = createHelperVars$1(
@@ -4954,7 +5005,7 @@ const [theme$2, refs$1] = createHelperVars$1(
4954
5005
  backgroundColor: globalRefs$D.colors.surface.main,
4955
5006
  },
4956
5007
  },
4957
- componentName$1d,
5008
+ componentName$1e,
4958
5009
  );
4959
5010
 
4960
5011
  const globalRefs$C = getThemeRefs$1(globals);
@@ -5065,12 +5116,16 @@ var comboBox$1 = /*#__PURE__*/Object.freeze({
5065
5116
  vars: vars$11
5066
5117
  });
5067
5118
 
5068
- const componentName$1c = getComponentName('badge');
5119
+ const componentName$1d = getComponentName('badge');
5069
5120
 
5070
5121
  class RawBadge extends createBaseClass$1({
5071
- componentName: componentName$1c,
5122
+ componentName: componentName$1d,
5072
5123
  baseSelector: ':host > div',
5073
5124
  }) {
5125
+ static get observedAttributes() {
5126
+ return ['data-attachment-size', 'shrink-to-indicator-threshold'];
5127
+ }
5128
+
5074
5129
  constructor() {
5075
5130
  super();
5076
5131
 
@@ -5096,6 +5151,24 @@ class RawBadge extends createBaseClass$1({
5096
5151
  this,
5097
5152
  );
5098
5153
  }
5154
+
5155
+ get shrinkToIndicatorThreshold() {
5156
+ return this.getAttribute('shrink-to-indicator-threshold') || 65;
5157
+ }
5158
+
5159
+ #handleShrinkToIndicator(value) {
5160
+ this.toggleAttribute(
5161
+ 'shrink-to-indicator',
5162
+ parseFloat(value) < this.shrinkToIndicatorThreshold,
5163
+ );
5164
+ }
5165
+
5166
+ attributeChangedCallback(name, oldVal, newVal) {
5167
+ super.attributeChangedCallback?.(name, oldVal, newVal);
5168
+ if (name === 'data-attachment-size' && oldVal !== newVal) {
5169
+ this.#handleShrinkToIndicator(newVal);
5170
+ }
5171
+ }
5099
5172
  }
5100
5173
 
5101
5174
  const BadgeClass = compose(
@@ -5141,7 +5214,7 @@ const [helperTheme$6, helperRefs$6] = createHelperVars$1(
5141
5214
  {
5142
5215
  shadowColor: '#00000020', // if we want to support transparency vars, we should use different color format
5143
5216
  },
5144
- componentName$1c,
5217
+ componentName$1d,
5145
5218
  );
5146
5219
 
5147
5220
  const { shadowColor: shadowColor$6 } = helperRefs$6;
@@ -5184,18 +5257,26 @@ const badge$2 = {
5184
5257
  },
5185
5258
  },
5186
5259
 
5187
- $breakpoints: {
5188
- indicator: '(max-width: 65px)',
5189
- },
5260
+ // Container Query example:
5261
+ // $breakpoints: {
5262
+ // indicator: '(max-width: 65px)',
5263
+ // },
5264
+ // _shrinkToIndicator: {
5265
+ // '$breakpoints.indicator': {
5266
+ // [vars.hostWidth]: '13px',
5267
+ // [vars.hostHeight]: '13px',
5268
+ // [vars.borderRadius]: '50%',
5269
+ // [vars.fontSize]: '0',
5270
+ // [vars.textIndent]: '-9999px',
5271
+ // },
5272
+ // },
5190
5273
 
5191
5274
  _shrinkToIndicator: {
5192
- '$breakpoints.indicator': {
5193
- [vars$10.hostWidth]: '13px',
5194
- [vars$10.hostHeight]: '13px',
5195
- [vars$10.borderRadius]: '50%',
5196
- [vars$10.fontSize]: '0',
5197
- [vars$10.textIndent]: '-9999px',
5198
- },
5275
+ [vars$10.hostWidth]: '13px',
5276
+ [vars$10.hostHeight]: '13px',
5277
+ [vars$10.borderRadius]: '50%',
5278
+ [vars$10.fontSize]: '0',
5279
+ [vars$10.textIndent]: '-9999px',
5199
5280
  },
5200
5281
 
5201
5282
  mode: {
@@ -5253,9 +5334,9 @@ var badge$3 = /*#__PURE__*/Object.freeze({
5253
5334
  vars: vars$10
5254
5335
  });
5255
5336
 
5256
- const componentName$1b = getComponentName('avatar');
5337
+ const componentName$1c = getComponentName('avatar');
5257
5338
  class RawAvatar extends createBaseClass$1({
5258
- componentName: componentName$1b,
5339
+ componentName: componentName$1c,
5259
5340
  baseSelector: ':host > .wrapper',
5260
5341
  }) {
5261
5342
  constructor() {
@@ -5436,7 +5517,7 @@ var image$1 = /*#__PURE__*/Object.freeze({
5436
5517
  vars: vars$Z
5437
5518
  });
5438
5519
 
5439
- const componentName$1a = getComponentName('list-item');
5520
+ const componentName$1b = getComponentName('list-item');
5440
5521
 
5441
5522
  const customMixin$f = (superclass) =>
5442
5523
  class ListItemMixinClass extends superclass {
@@ -5493,12 +5574,12 @@ const ListItemClass = compose(
5493
5574
  componentNameValidationMixin$1,
5494
5575
  customMixin$f,
5495
5576
  activeableMixin,
5496
- )(createBaseClass$1({ componentName: componentName$1a, baseSelector: 'slot' }));
5577
+ )(createBaseClass$1({ componentName: componentName$1b, baseSelector: 'slot' }));
5497
5578
 
5498
- const componentName$19 = getComponentName('list');
5579
+ const componentName$1a = getComponentName('list');
5499
5580
 
5500
5581
  class RawList extends createBaseClass$1({
5501
- componentName: componentName$19,
5582
+ componentName: componentName$1a,
5502
5583
  baseSelector: '.wrapper',
5503
5584
  }) {
5504
5585
  static get observedAttributes() {
@@ -5669,7 +5750,7 @@ const ListClass = compose(
5669
5750
  componentNameValidationMixin$1,
5670
5751
  )(RawList);
5671
5752
 
5672
- const componentName$18 = getComponentName('apps-list');
5753
+ const componentName$19 = getComponentName('apps-list');
5673
5754
 
5674
5755
  const itemRenderer$4 = ({ name, icon, url }, _, ref) => `
5675
5756
  <a ${url ? `href="${url}" title="${url}"` : ''} ${ref.openInSameWindow ? '' : 'target="_blank"'}>
@@ -5793,7 +5874,7 @@ const AppsListClass = compose(
5793
5874
  slots: ['empty-state'],
5794
5875
  wrappedEleName: 'descope-list',
5795
5876
  excludeAttrsSync: ['tabindex', 'class', 'empty', 'style'],
5796
- componentName: componentName$18,
5877
+ componentName: componentName$19,
5797
5878
  style: () => `
5798
5879
  :host {
5799
5880
  width: 100%;
@@ -5898,7 +5979,7 @@ const compVars$7 = ListClass.cssVarList;
5898
5979
 
5899
5980
  const [helperTheme$5, helperRefs$5, helperVars$5] = createHelperVars$1(
5900
5981
  { shadowColor: '#00000020' },
5901
- componentName$19,
5982
+ componentName$1a,
5902
5983
  );
5903
5984
 
5904
5985
  const { shadowColor: shadowColor$5 } = helperRefs$5;
@@ -6013,14 +6094,14 @@ var listItem$1 = /*#__PURE__*/Object.freeze({
6013
6094
  vars: vars$W
6014
6095
  });
6015
6096
 
6016
- const componentName$17 = getComponentName('autocomplete-field-internal');
6097
+ const componentName$18 = getComponentName('autocomplete-field-internal');
6017
6098
 
6018
6099
  createBaseInputClass$1({
6019
- componentName: componentName$17,
6100
+ componentName: componentName$18,
6020
6101
  baseSelector: '',
6021
6102
  });
6022
6103
 
6023
- const componentName$16 = getComponentName('autocomplete-field');
6104
+ const componentName$17 = getComponentName('autocomplete-field');
6024
6105
 
6025
6106
  const customMixin$d = (superclass) =>
6026
6107
  class AutocompleteFieldMixinClass extends superclass {
@@ -6041,15 +6122,15 @@ const customMixin$d = (superclass) =>
6041
6122
  const template = document.createElement('template');
6042
6123
 
6043
6124
  template.innerHTML = `
6044
- <${componentName$17}
6125
+ <${componentName$18}
6045
6126
  tabindex="-1"
6046
- ></${componentName$17}>
6127
+ ></${componentName$18}>
6047
6128
  `;
6048
6129
 
6049
6130
  this.baseElement.appendChild(template.content.cloneNode(true));
6050
6131
 
6051
6132
  this.inputElement = this.shadowRoot.querySelector(
6052
- componentName$17,
6133
+ componentName$18,
6053
6134
  );
6054
6135
 
6055
6136
  forwardAttrs(this, this.inputElement, {
@@ -6168,7 +6249,7 @@ const AutocompleteFieldClass = compose(
6168
6249
  }
6169
6250
  `,
6170
6251
  excludeAttrsSync: ['tabindex', 'error-message', 'label', 'style'],
6171
- componentName: componentName$16,
6252
+ componentName: componentName$17,
6172
6253
  }),
6173
6254
  );
6174
6255
 
@@ -6422,7 +6503,7 @@ class RadarConnector extends createBaseConnectorClass() {
6422
6503
  }
6423
6504
  }
6424
6505
 
6425
- const componentName$15 = getComponentName('address-field-internal');
6506
+ const componentName$16 = getComponentName('address-field-internal');
6426
6507
 
6427
6508
  const GOOGLE_MAPS_CONNECTOR_TEMPLATE = 'google-maps-places';
6428
6509
  const RADAR_CONNECTOR_TEMPLATE = 'radar';
@@ -6433,7 +6514,7 @@ const CONNECTOR_CLASSES = {
6433
6514
  };
6434
6515
 
6435
6516
  const BaseInputClass$5 = createBaseInputClass$1({
6436
- componentName: componentName$15,
6517
+ componentName: componentName$16,
6437
6518
  baseSelector: '',
6438
6519
  });
6439
6520
  const initConnectorAttrs = ['public-api-key'];
@@ -6540,7 +6621,7 @@ compose(
6540
6621
  connectorMixin({ connectorClasses: CONNECTOR_CLASSES }),
6541
6622
  )(RawAddressFieldInternal);
6542
6623
 
6543
- const componentName$14 = getComponentName('address-field');
6624
+ const componentName$15 = getComponentName('address-field');
6544
6625
 
6545
6626
  const customMixin$c = (superclass) =>
6546
6627
  class AddressFieldMixinClass extends superclass {
@@ -6569,15 +6650,15 @@ const customMixin$c = (superclass) =>
6569
6650
  const template = document.createElement('template');
6570
6651
 
6571
6652
  template.innerHTML = `
6572
- <${componentName$15}
6653
+ <${componentName$16}
6573
6654
  tabindex="-1"
6574
- ></${componentName$15}>
6655
+ ></${componentName$16}>
6575
6656
  `;
6576
6657
 
6577
6658
  this.baseElement.appendChild(template.content.cloneNode(true));
6578
6659
 
6579
6660
  this.inputElement = this.shadowRoot.querySelector(
6580
- componentName$15,
6661
+ componentName$16,
6581
6662
  );
6582
6663
 
6583
6664
  forwardAttrs(this, this.inputElement, {
@@ -6655,7 +6736,7 @@ const AddressFieldClass = compose(
6655
6736
  width: 100%;
6656
6737
  }
6657
6738
 
6658
- ${componentName$15} {
6739
+ ${componentName$16} {
6659
6740
  display: inline-block;
6660
6741
  box-sizing: border-box;
6661
6742
  user-select: none;
@@ -6663,12 +6744,12 @@ const AddressFieldClass = compose(
6663
6744
  max-width: 100%;
6664
6745
  }
6665
6746
 
6666
- ${componentName$15} ::slotted {
6747
+ ${componentName$16} ::slotted {
6667
6748
  padding: 0;
6668
6749
  }
6669
6750
  `,
6670
6751
  excludeAttrsSync: ['tabindex', 'error-message', 'label', 'style'],
6671
- componentName: componentName$14,
6752
+ componentName: componentName$15,
6672
6753
  }),
6673
6754
  );
6674
6755
 
@@ -6708,24 +6789,24 @@ const formatTime = (ms = 0) => {
6708
6789
  return timeParts.join(':');
6709
6790
  };
6710
6791
 
6711
- const componentName$13 = getComponentName('timer');
6792
+ const componentName$14 = getComponentName('timer');
6712
6793
 
6713
6794
  const observedAttributes$5 = ['seconds', 'hide-icon', 'paused'];
6714
6795
 
6715
- const BaseClass$7 = createBaseClass$1({
6716
- componentName: componentName$13,
6796
+ const BaseClass$6 = createBaseClass$1({
6797
+ componentName: componentName$14,
6717
6798
  baseSelector: ':host > .wrapper',
6718
6799
  });
6719
6800
 
6720
6801
  const DEFAULT_INTERVAL = 1000;
6721
6802
 
6722
- class RawTimer extends BaseClass$7 {
6803
+ class RawTimer extends BaseClass$6 {
6723
6804
  #timeRemains = 0;
6724
6805
 
6725
6806
  #intervalId;
6726
6807
 
6727
6808
  static get observedAttributes() {
6728
- return observedAttributes$5.concat(BaseClass$7.observedAttributes || []);
6809
+ return observedAttributes$5.concat(BaseClass$6.observedAttributes || []);
6729
6810
  }
6730
6811
 
6731
6812
  constructor() {
@@ -6934,7 +7015,7 @@ var timer$1 = /*#__PURE__*/Object.freeze({
6934
7015
  vars: vars$T
6935
7016
  });
6936
7017
 
6937
- const componentName$12 = getComponentName('timer-button');
7018
+ const componentName$13 = getComponentName('timer-button');
6938
7019
 
6939
7020
  const buttonAttrs = [
6940
7021
  'button-variant',
@@ -6964,12 +7045,12 @@ const mapTimerAttrs = {
6964
7045
  'timer-paused': 'paused',
6965
7046
  };
6966
7047
 
6967
- const BaseClass$6 = createBaseClass$1({
6968
- componentName: componentName$12,
7048
+ const BaseClass$5 = createBaseClass$1({
7049
+ componentName: componentName$13,
6969
7050
  baseSelector: ':host > div',
6970
7051
  });
6971
7052
 
6972
- class RawTimerButton extends BaseClass$6 {
7053
+ class RawTimerButton extends BaseClass$5 {
6973
7054
  constructor() {
6974
7055
  super();
6975
7056
 
@@ -7220,9 +7301,9 @@ var timerButton$1 = /*#__PURE__*/Object.freeze({
7220
7301
  vars: vars$S
7221
7302
  });
7222
7303
 
7223
- const componentName$11 = getComponentName('password-strength');
7304
+ const componentName$12 = getComponentName('password-strength');
7224
7305
  class RawPasswordStrength extends createBaseClass$1({
7225
- componentName: componentName$11,
7306
+ componentName: componentName$12,
7226
7307
  baseSelector: ':host > .wrapper',
7227
7308
  }) {
7228
7309
  static get observedAttributes() {
@@ -7425,10 +7506,10 @@ var passwordStrength$1 = /*#__PURE__*/Object.freeze({
7425
7506
 
7426
7507
  var chevronIcon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iYmxhY2siIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0xNy4yMTkzIDkuMjcyODNDMTcuNjU4NCA4Ljg3OTEyIDE4LjMzMzQgOC45MTU4NyAxOC43MjcyIDkuMzU0OTJDMTkuMTIwOSA5Ljc5Mzk3IDE5LjA4NDEgMTAuNDY5MSAxOC42NDUxIDEwLjg2MjhDMTguNjQ1MSAxMC44NjI4IDEzLjA0NTcgMTYuMDAyMiAxMi42NCAxNi4zNjZDMTIuMjM0MyAxNi43Mjk4IDExLjc2MDggMTYuNzI5OCAxMS4zNTUyIDE2LjM2Nkw1LjM1NDkyIDEwLjg2MjhDNC45MTU4NyAxMC40NjkxIDQuODc5MTIgOS43OTM5NyA1LjI3MjgzIDkuMzU0OTJDNS42NjY1NSA4LjkxNTg3IDYuMzQxNjQgOC44NzkxMiA2Ljc4MDY5IDkuMjcyODNMMTIgMTQuMTM2OEwxNy4yMTkzIDkuMjcyODNaIi8+Cjwvc3ZnPgo=";
7427
7508
 
7428
- const componentName$10 = getComponentName('collapsible-container');
7509
+ const componentName$11 = getComponentName('collapsible-container');
7429
7510
 
7430
7511
  class RawCollapsibleContainer extends createBaseClass$1({
7431
- componentName: componentName$10,
7512
+ componentName: componentName$11,
7432
7513
  baseSelector: 'slot',
7433
7514
  }) {
7434
7515
  static get observedAttributes() {
@@ -7663,7 +7744,7 @@ const [helperTheme$4, helperRefs$4, helperVars$4] = createHelperVars$1(
7663
7744
  {
7664
7745
  shadowColor: '#00000020', // if we want to support transparency vars, we should use different color format
7665
7746
  },
7666
- componentName$10
7747
+ componentName$11
7667
7748
  );
7668
7749
 
7669
7750
  const { shadowColor: shadowColor$4 } = helperRefs$4;
@@ -7774,7 +7855,7 @@ var collapsibleContainer$1 = /*#__PURE__*/Object.freeze({
7774
7855
  vars: vars$Q
7775
7856
  });
7776
7857
 
7777
- const componentName$$ = getComponentName('recovery-codes');
7858
+ const componentName$10 = getComponentName('recovery-codes');
7778
7859
 
7779
7860
  const itemRenderer$3 = ({ value }, _, ref) => {
7780
7861
  return `
@@ -7785,7 +7866,7 @@ const itemRenderer$3 = ({ value }, _, ref) => {
7785
7866
  };
7786
7867
 
7787
7868
  class RawRecoveryCodes extends createBaseClass$1({
7788
- componentName: componentName$$,
7869
+ componentName: componentName$10,
7789
7870
  baseSelector: ':host > div',
7790
7871
  }) {
7791
7872
  static get observedAttributes() {
@@ -7953,7 +8034,7 @@ var recoveryCodes$1 = /*#__PURE__*/Object.freeze({
7953
8034
  vars: vars$P
7954
8035
  });
7955
8036
 
7956
- const componentName$_ = getComponentName('outbound-apps');
8037
+ const componentName$$ = getComponentName('outbound-apps');
7957
8038
 
7958
8039
  const itemRenderer$2 = (
7959
8040
  { name, description, logo, appId, isConnected },
@@ -7998,12 +8079,12 @@ const itemRenderer$2 = (
7998
8079
  `;
7999
8080
  };
8000
8081
 
8001
- const BaseClass$5 = createBaseClass$1({
8002
- componentName: componentName$_,
8082
+ const BaseClass$4 = createBaseClass$1({
8083
+ componentName: componentName$$,
8003
8084
  baseSelector: 'descope-list',
8004
8085
  });
8005
8086
 
8006
- class RawOutboundAppsClass extends BaseClass$5 {
8087
+ class RawOutboundAppsClass extends BaseClass$4 {
8007
8088
  constructor() {
8008
8089
  super();
8009
8090
 
@@ -8215,10 +8296,10 @@ var outboundApps$1 = /*#__PURE__*/Object.freeze({
8215
8296
  vars: vars$O
8216
8297
  });
8217
8298
 
8218
- const componentName$Z = getComponentName('outbound-app-button');
8299
+ const componentName$_ = getComponentName('outbound-app-button');
8219
8300
 
8220
8301
  class RawOutboundAppButton extends createBaseClass$1({
8221
- componentName: componentName$Z,
8302
+ componentName: componentName$_,
8222
8303
  baseSelector: ':host > descope-button',
8223
8304
  }) {
8224
8305
  static get observedAttributes() {
@@ -8400,7 +8481,7 @@ const getDeviceIcon = (deviceType) => {
8400
8481
  };
8401
8482
  };
8402
8483
 
8403
- const componentName$Y = getComponentName('trusted-devices');
8484
+ const componentName$Z = getComponentName('trusted-devices');
8404
8485
 
8405
8486
  const itemRenderer$1 = (
8406
8487
  { id, name, lastLoginDate, deviceType, isCurrent },
@@ -8488,12 +8569,12 @@ const itemRenderer$1 = (
8488
8569
  return template;
8489
8570
  };
8490
8571
 
8491
- const BaseClass$4 = createBaseClass$1({
8492
- componentName: componentName$Y,
8572
+ const BaseClass$3 = createBaseClass$1({
8573
+ componentName: componentName$Z,
8493
8574
  baseSelector: ListClass.componentName,
8494
8575
  });
8495
8576
 
8496
- class RawTrustedDevicesClass extends BaseClass$4 {
8577
+ class RawTrustedDevicesClass extends BaseClass$3 {
8497
8578
  constructor() {
8498
8579
  super();
8499
8580
 
@@ -8823,7 +8904,7 @@ var trustedDevices = /*#__PURE__*/Object.freeze({
8823
8904
  vars: vars$M
8824
8905
  });
8825
8906
 
8826
- const componentName$X = getComponentName('tooltip');
8907
+ const componentName$Y = getComponentName('tooltip');
8827
8908
 
8828
8909
  const tooltipAttrs = [
8829
8910
  'text',
@@ -8833,14 +8914,26 @@ const tooltipAttrs = [
8833
8914
  'opened',
8834
8915
  ];
8835
8916
 
8836
- const BaseClass$3 = createBaseClass$1({
8837
- componentName: componentName$X,
8917
+ class RawTooltip extends createBaseClass$1({
8918
+ componentName: componentName$Y,
8838
8919
  baseSelector: 'vaadin-tooltip',
8839
- });
8920
+ }) {
8921
+ constructor() {
8922
+ super();
8923
+
8924
+ this.attachShadow({ mode: 'open' }).innerHTML = `
8925
+ <descope-anchored>
8926
+ <slot></slot>
8927
+ <vaadin-tooltip slot="anchored"></vaadin-tooltip>
8928
+ </descope-anchored>
8929
+ `;
8930
+
8931
+ this.defaultSlot = this.shadowRoot.querySelector('slot:not([name])');
8932
+ this.tooltip = this.shadowRoot.querySelector('vaadin-tooltip');
8933
+ }
8840
8934
 
8841
- class RawTooltip extends BaseClass$3 {
8842
8935
  static get observedAttributes() {
8843
- return tooltipAttrs.concat(BaseClass$3.observedAttributes || []);
8936
+ return tooltipAttrs.concat(super.observedAttributes || []);
8844
8937
  }
8845
8938
 
8846
8939
  get isOpened() {
@@ -8863,51 +8956,81 @@ class RawTooltip extends BaseClass$3 {
8863
8956
  return this.getAttribute('static-display') === 'true';
8864
8957
  }
8865
8958
 
8959
+ get srLabel() {
8960
+ return this.tooltip?.querySelector('[slot="sr-label"]');
8961
+ }
8962
+
8866
8963
  // We use `static-display` for presentation purposes, to show the tooltip content.
8867
8964
  // This should be used only when `opened` is `true`. Once `static-display` is set,
8868
- // the overlay would become a `static` element, and will have layout in the presenting page.
8869
- // This is mainly aimed to solve the presentation problem on our Styles Page in the Console.
8965
+ // the overlay flows in-line and has layout in the presenting page. Mainly aimed
8966
+ // to solve the presentation problem on our Styles Page in the Console.
8870
8967
  #handleStaticDisplay() {
8871
8968
  if (this.isStaticDisplay) {
8872
- this.#revealWrappedParts();
8969
+ this.#revealOverlay();
8873
8970
  this.setAttribute('inert', 'true');
8874
8971
  } else {
8875
- this.#hideWrappedParts();
8876
8972
  this.removeAttribute('inert');
8877
8973
  }
8878
8974
  }
8879
8975
 
8880
- init() {
8881
- super.init();
8976
+ #revealOverlay() {
8977
+ if (!this.overlay) return;
8978
+ // Keep the overlay in vaadin-tooltip.shadowRoot so adopted stylesheets from
8979
+ // portalMixin continue to apply (they are scoped to that shadow root).
8980
+ // Layout is handled via CSS: anchored-root becomes a column, vaadin-tooltip
8981
+ // becomes a visible block below the anchor, and the sr-label is hidden.
8982
+ this.overlay.style.display = 'block';
8983
+ this.overlay.style.position = 'static';
8984
+ }
8882
8985
 
8883
- // Create the vaadin-tooltip here instead of constructor (for React compatibility)
8884
- this.style.display = 'contents';
8885
- this.insertAdjacentHTML('beforeend', '<vaadin-tooltip></vaadin-tooltip>');
8886
- this.tooltip = this.querySelector('vaadin-tooltip');
8986
+ init() {
8987
+ super.init?.();
8887
8988
 
8888
- this.#hideWrappedParts();
8989
+ injectStyle(
8990
+ `
8991
+ :host {
8992
+ display: inline-block;
8993
+ }
8994
+ vaadin-tooltip {
8995
+ display: block;
8996
+ position: absolute;
8997
+ width: 0;
8998
+ height: 0;
8999
+ overflow: hidden;
9000
+ }
9001
+ /* Stack anchor above the anchored element so the tooltip flows below it inline. */
9002
+ :host([static-display="true"]) descope-anchored::part(root) {
9003
+ flex-direction: column;
9004
+ }
9005
+ :host([static-display="true"]) descope-anchored::part(anchored) {
9006
+ position: static;
9007
+ inset: unset;
9008
+ }
9009
+ :host([static-display="true"]) vaadin-tooltip {
9010
+ position: static;
9011
+ width: auto;
9012
+ height: auto;
9013
+ overflow: visible;
9014
+ }
9015
+ :host([static-display="true"]) vaadin-tooltip [slot="sr-label"] {
9016
+ display: none;
9017
+ }
9018
+ `,
9019
+ this,
9020
+ );
8889
9021
 
9022
+ this.defaultSlot.addEventListener('slotchange', () =>
9023
+ this.#setTooltipTarget(),
9024
+ );
8890
9025
  this.#setTooltipTarget();
8891
9026
 
8892
9027
  setTimeout(() => this.#onOverlayReady());
8893
9028
  }
8894
9029
 
8895
- #hideWrappedParts() {
8896
- this.tooltip.style.width = '0';
8897
- this.tooltip.style.height = '0';
8898
- this.tooltip.style.display = 'block';
8899
- this.tooltip.style.overflow = 'hidden';
8900
- this.tooltip.style.position = 'absolute';
8901
- }
8902
-
8903
- #revealWrappedParts() {
8904
- this.tooltip.style.width = '100%';
8905
- this.tooltip.style.height = '100%';
8906
- this.tooltip.style.position = 'static';
8907
- this.tooltip.style.overflow = 'visible';
8908
- this.tooltip.textContent = '';
8909
- this.overlay.style.display = 'block';
8910
- this.overlay.style.position = 'static';
9030
+ #setTooltipTarget() {
9031
+ const target = this.defaultSlot?.assignedElements()?.[0];
9032
+ if (!target) return;
9033
+ this.tooltip.target = target;
8911
9034
  }
8912
9035
 
8913
9036
  #onOverlayReady() {
@@ -8921,16 +9044,6 @@ class RawTooltip extends BaseClass$3 {
8921
9044
  this.#handleTooltipVisibility();
8922
9045
  }
8923
9046
 
8924
- #setTooltipTarget() {
8925
- if (!this.children?.length) return;
8926
-
8927
- let ele = Array.from(this.children).find((child) => child !== this.tooltip);
8928
-
8929
- if (!ele) return;
8930
-
8931
- this.tooltip.target = ele;
8932
- }
8933
-
8934
9047
  #clearOverlayContentNode() {
8935
9048
  this.overlayContentNode.innerHTML = '';
8936
9049
  }
@@ -8944,10 +9057,6 @@ class RawTooltip extends BaseClass$3 {
8944
9057
  return enrichedText;
8945
9058
  }
8946
9059
 
8947
- get srLabel() {
8948
- return this.tooltip?.querySelector('[slot="sr-label"]');
8949
- }
8950
-
8951
9060
  #initTooltipTextComponent() {
8952
9061
  if (!this.overlayContentNode) return;
8953
9062
 
@@ -8970,25 +9079,35 @@ class RawTooltip extends BaseClass$3 {
8970
9079
  });
8971
9080
  }
8972
9081
 
8973
- // the default vaadin behavior is to attach the overlay to the body when opened
8974
- // we do not want that because it's difficult to style the overlay in this way
8975
- // so we override it to open inside the shadow DOM
9082
+ // The default vaadin behavior is to attach the overlay to the body when opened,
9083
+ // which makes it hard to style. We move the overlay into our shadow root instead.
9084
+ // Critical: vaadin computes position against the overlay's offsetParent moving
9085
+ // it changes that context, so we must call `_updatePosition()` afterwards.
9086
+ // That's vaadin's own position-recompute method (the same one its resize/scroll
9087
+ // listeners use internally), so we get the right reposition without dispatching
9088
+ // global events.
8976
9089
  #overrideAttachOverlay() {
8977
9090
  if (!this.overlay) return;
8978
9091
 
8979
- if (this.isOpened) {
8980
- // When `opened` attr is used, vaadin doesn't execute `_attachOverlay`,
8981
- // and the overlay element is rendered outside the component, on the top
8982
- // level. We need to move it back to the local component's DOM.
9092
+ const originalAttach = this.overlay._attachOverlay?.bind(this.overlay);
9093
+
9094
+ this.overlay._detachOverlay = () => {};
9095
+ this.overlay._attachOverlay = () => {
9096
+ originalAttach?.();
8983
9097
  setTimeout(() => {
8984
9098
  this.tooltip.shadowRoot.appendChild(this.overlay);
8985
- this.#handleStaticDisplay();
9099
+ this.overlay._updatePosition?.();
8986
9100
  });
8987
- } else {
8988
- this.overlay._detachOverlay = () => {};
9101
+ };
8989
9102
 
8990
- this.overlay._attachOverlay = () =>
9103
+ if (this.isOpened) {
9104
+ // When `opened` attr is set at init, vaadin renders the overlay at the top
9105
+ // level without calling `_attachOverlay`. Move it back into our shadow root.
9106
+ setTimeout(() => {
8991
9107
  this.tooltip.shadowRoot.appendChild(this.overlay);
9108
+ this.#handleStaticDisplay();
9109
+ this.overlay._updatePosition?.();
9110
+ });
8992
9111
  }
8993
9112
  }
8994
9113
 
@@ -9030,11 +9149,6 @@ const { overlay: overlay$1, content } = {
9030
9149
  content: { selector: () => 'vaadin-tooltip-overlay::part(content)' },
9031
9150
  };
9032
9151
 
9033
- /**
9034
- * This component has no Shadow DOM of its own, so we can't add styles to it
9035
- * (otherwise it would affect the rest of the DOM).
9036
- * Note that all styles are within PortalMixin.
9037
- */
9038
9152
  const TooltipClass = compose(
9039
9153
  componentNameValidationMixin$1,
9040
9154
  portalMixin$1({
@@ -9089,7 +9203,7 @@ const [helperTheme$3, helperRefs$3, helperVars$3] = createHelperVars$1(
9089
9203
  {
9090
9204
  shadowColor: '#00000020', // if we want to support transparency vars, we should use different color format
9091
9205
  },
9092
- componentName$X
9206
+ componentName$Y
9093
9207
  );
9094
9208
 
9095
9209
  const { shadowColor: shadowColor$3 } = helperRefs$3;
@@ -9187,7 +9301,7 @@ const fetchLabels = async (baseUrl) => {
9187
9301
  const fetchCitiesForCountry = async (countryIso2, baseUrl) =>
9188
9302
  fetchJson(`${baseUrl}/countries/${countryIso2}/cities.json`);
9189
9303
 
9190
- const componentName$W = getComponentName(
9304
+ const componentName$X = getComponentName(
9191
9305
  'country-subdivision-city-field-internal',
9192
9306
  );
9193
9307
 
@@ -9247,7 +9361,7 @@ const comboBoxHTML = (id) =>
9247
9361
  // --- Base class ---
9248
9362
 
9249
9363
  const BaseInputClass$4 = createBaseInputClass$1({
9250
- componentName: componentName$W,
9364
+ componentName: componentName$X,
9251
9365
  baseSelector: '',
9252
9366
  });
9253
9367
 
@@ -9423,7 +9537,7 @@ class RawCountrySubdivisionCityFieldInternal extends BaseInputClass$4 {
9423
9537
  if (e.isTrusted) {
9424
9538
  const firstInvalidCombo = this.#allCombos.find(
9425
9539
  (combo) =>
9426
- !combo.classList.contains(`${componentName$W}-hidden`) &&
9540
+ !combo.classList.contains(`${componentName$X}-hidden`) &&
9427
9541
  !combo.checkValidity(),
9428
9542
  );
9429
9543
  (firstInvalidCombo || this.#getFirstVisibleCombo())?.focus();
@@ -9520,7 +9634,7 @@ class RawCountrySubdivisionCityFieldInternal extends BaseInputClass$4 {
9520
9634
  // Iterate in reverse so reportValidity's focus() lands on the first invalid combo last.
9521
9635
  #handleInvalidCombos() {
9522
9636
  for (const combo of [...this.#allCombos].reverse()) {
9523
- if (combo.classList.contains(`${componentName$W}-hidden`)) continue;
9637
+ if (combo.classList.contains(`${componentName$X}-hidden`)) continue;
9524
9638
  if (!combo.checkValidity()) combo.reportValidity();
9525
9639
  }
9526
9640
  }
@@ -9793,7 +9907,7 @@ class RawCountrySubdivisionCityFieldInternal extends BaseInputClass$4 {
9793
9907
  if (!this.#pendingValue && this.#defaultCountry)
9794
9908
  this.#onCountrySelected(this.#defaultCountry);
9795
9909
  } catch (e) {
9796
- console.error(`[${componentName$W}] Failed to load countries`, e);
9910
+ console.error(`[${componentName$X}] Failed to load countries`, e);
9797
9911
  } finally {
9798
9912
  this.#countryComboBox.removeAttribute('loading');
9799
9913
  }
@@ -9818,7 +9932,7 @@ class RawCountrySubdivisionCityFieldInternal extends BaseInputClass$4 {
9818
9932
  }
9819
9933
  } catch (e) {
9820
9934
  console.error(
9821
- `[${componentName$W}] Failed to load subdivisions for ${countryIso2}`,
9935
+ `[${componentName$X}] Failed to load subdivisions for ${countryIso2}`,
9822
9936
  e,
9823
9937
  );
9824
9938
  this.#subdivisionVisible = false;
@@ -9846,7 +9960,7 @@ class RawCountrySubdivisionCityFieldInternal extends BaseInputClass$4 {
9846
9960
  }
9847
9961
  } catch (e) {
9848
9962
  console.error(
9849
- `[${componentName$W}] Failed to load cities for ${countryIso2}${stateCode ? `/${stateCode}` : ''}`,
9963
+ `[${componentName$X}] Failed to load cities for ${countryIso2}${stateCode ? `/${stateCode}` : ''}`,
9850
9964
  e,
9851
9965
  );
9852
9966
  } finally {
@@ -9938,7 +10052,7 @@ class RawCountrySubdivisionCityFieldInternal extends BaseInputClass$4 {
9938
10052
  }
9939
10053
 
9940
10054
  #setVisible(el, visible) {
9941
- el?.classList.toggle(`${componentName$W}-hidden`, !visible);
10055
+ el?.classList.toggle(`${componentName$X}-hidden`, !visible);
9942
10056
  }
9943
10057
 
9944
10058
  #updateRequiredOnCombos() {
@@ -10008,7 +10122,7 @@ class RawCountrySubdivisionCityFieldInternal extends BaseInputClass$4 {
10008
10122
 
10009
10123
  #getFirstVisibleCombo() {
10010
10124
  return this.#allCombos.find(
10011
- (combo) => !combo.classList.contains(`${componentName$W}-hidden`),
10125
+ (combo) => !combo.classList.contains(`${componentName$X}-hidden`),
10012
10126
  );
10013
10127
  }
10014
10128
 
@@ -10025,7 +10139,7 @@ compose()(
10025
10139
  RawCountrySubdivisionCityFieldInternal,
10026
10140
  );
10027
10141
 
10028
- const componentName$V = getComponentName('country-subdivision-city-field');
10142
+ const componentName$W = getComponentName('country-subdivision-city-field');
10029
10143
 
10030
10144
  const customMixin$b = (superclass) =>
10031
10145
  class CountrySubdivisionCityFieldMixinClass extends superclass {
@@ -10035,15 +10149,15 @@ const customMixin$b = (superclass) =>
10035
10149
  const template = document.createElement('template');
10036
10150
 
10037
10151
  template.innerHTML = `
10038
- <${componentName$W}
10152
+ <${componentName$X}
10039
10153
  tabindex="-1"
10040
- ></${componentName$W}>
10154
+ ></${componentName$X}>
10041
10155
  `;
10042
10156
 
10043
10157
  this.baseElement.appendChild(template.content.cloneNode(true));
10044
10158
 
10045
10159
  this.inputElement = this.shadowRoot.querySelector(
10046
- componentName$W,
10160
+ componentName$X,
10047
10161
  );
10048
10162
 
10049
10163
  forwardAttrs(this, this.inputElement, {
@@ -10080,11 +10194,11 @@ const customMixin$b = (superclass) =>
10080
10194
  const host$l = { selector: () => ':host' };
10081
10195
 
10082
10196
  const internalWrapper$2 = {
10083
- selector: `${componentName$W} > .wrapper`,
10197
+ selector: `${componentName$X} > .wrapper`,
10084
10198
  };
10085
10199
 
10086
10200
  const internalComboBoxes = {
10087
- selector: `${componentName$W} > .wrapper > descope-combo-box`,
10201
+ selector: `${componentName$X} > .wrapper > descope-combo-box`,
10088
10202
  };
10089
10203
 
10090
10204
  const CountrySubdivisionCityFieldClass = compose(
@@ -10134,7 +10248,7 @@ const CountrySubdivisionCityFieldClass = compose(
10134
10248
  width: 100%;
10135
10249
  }
10136
10250
 
10137
- ${componentName$W} {
10251
+ ${componentName$X} {
10138
10252
  display: inline-block;
10139
10253
  box-sizing: border-box;
10140
10254
  user-select: none;
@@ -10142,19 +10256,19 @@ const CountrySubdivisionCityFieldClass = compose(
10142
10256
  max-width: 100%;
10143
10257
  }
10144
10258
 
10145
- ${componentName$W} > .wrapper {
10259
+ ${componentName$X} > .wrapper {
10146
10260
  display: flex;
10147
10261
  width: 100%;
10148
10262
  flex-wrap: wrap;
10149
10263
  }
10150
10264
 
10151
- .${componentName$W}-hidden {
10265
+ .${componentName$X}-hidden {
10152
10266
  display: none;
10153
10267
  }
10154
10268
 
10155
10269
  `,
10156
10270
  excludeAttrsSync: ['tabindex', 'style', 'error-message'],
10157
- componentName: componentName$V,
10271
+ componentName: componentName$W,
10158
10272
  }),
10159
10273
  );
10160
10274
 
@@ -10185,7 +10299,7 @@ var countrySubdivisionCityField$1 = /*#__PURE__*/Object.freeze({
10185
10299
  vars: vars$K
10186
10300
  });
10187
10301
 
10188
- const componentName$U = getComponentName('attachment');
10302
+ const componentName$V = getComponentName('attachment');
10189
10303
 
10190
10304
  const ATTACHMENT_POSITIONS = [
10191
10305
  'top-end',
@@ -10199,19 +10313,19 @@ const ATTACHMENT_POSITIONS = [
10199
10313
  const DEFAULT_POSITION = ATTACHMENT_POSITIONS[0];
10200
10314
 
10201
10315
  class RawAttachment extends createBaseClass$1({
10202
- componentName: componentName$U,
10203
- baseSelector: ':host > .wrapper',
10316
+ componentName: componentName$V,
10317
+ baseSelector: 'descope-anchored',
10204
10318
  }) {
10205
10319
  constructor() {
10206
10320
  super();
10207
10321
 
10208
10322
  this.attachShadow({ mode: 'open' }).innerHTML = `
10209
- <div class="wrapper">
10323
+ <descope-anchored>
10210
10324
  <slot></slot>
10211
- <div class="attachment-container">
10325
+ <div slot="anchored" class="attachment-container">
10212
10326
  <slot name="attachment"></slot>
10213
10327
  </div>
10214
- </div>
10328
+ </descope-anchored>
10215
10329
  `;
10216
10330
 
10217
10331
  this.defaultSlot = this.shadowRoot.querySelector('slot:not([name])');
@@ -10220,6 +10334,10 @@ class RawAttachment extends createBaseClass$1({
10220
10334
  );
10221
10335
  }
10222
10336
 
10337
+ get #attachment() {
10338
+ return this.attachmentSlot?.assignedElements()[0];
10339
+ }
10340
+
10223
10341
  static get observedAttributes() {
10224
10342
  return [...(super.observedAttributes || []), 'position'];
10225
10343
  }
@@ -10239,9 +10357,8 @@ class RawAttachment extends createBaseClass$1({
10239
10357
  :host {
10240
10358
  display: inline-block;
10241
10359
  }
10242
- .wrapper {
10243
- position: relative;
10244
- display: inline-flex;
10360
+ :host(.hidden) {
10361
+ display: none;
10245
10362
  }
10246
10363
  .attachment-container {
10247
10364
  position: absolute;
@@ -10252,24 +10369,43 @@ class RawAttachment extends createBaseClass$1({
10252
10369
  align-items: center;
10253
10370
  container-type: inline-size;
10254
10371
  }
10255
- :host(.hidden) {
10256
- display: none;
10257
- }
10258
- `,
10372
+ `,
10259
10373
  this,
10260
10374
  );
10261
10375
 
10262
10376
  this.#handlePositionChange();
10263
10377
 
10264
- this.defaultSlot.addEventListener('slotchange', () => {
10265
- this.#setVisibility();
10266
- this.#syncDirection();
10378
+ // When descope-anchored forwards st-host-direction from the anchor to this container,
10379
+ // propagate it to the attachment elements.
10380
+ const container = this.shadowRoot.querySelector('.attachment-container');
10381
+ observeAttributes(container, () => this.#syncDirection(), {
10382
+ includeAttrs: ['st-host-direction'],
10267
10383
  });
10268
10384
 
10269
- window.requestAnimationFrame(() => {
10385
+ // Re-sync direction when new elements are slotted into the attachment slot.
10386
+ this.attachmentSlot.addEventListener('slotchange', () =>
10387
+ this.#syncDirection(),
10388
+ );
10389
+
10390
+ this.defaultSlot.addEventListener('slotchange', () => {
10270
10391
  this.#setVisibility();
10271
- this.#syncDirection();
10392
+ window.requestAnimationFrame(() => this.#syncAvailableSizeAttr());
10272
10393
  });
10394
+
10395
+ window.requestAnimationFrame(() => this.#setVisibility());
10396
+ }
10397
+
10398
+ #syncAvailableSizeAttr() {
10399
+ const anchor = this.defaultSlot?.assignedElements()?.[0];
10400
+
10401
+ const anchorRect = anchor?.getBoundingClientRect();
10402
+ if (anchorRect) {
10403
+ const availableWidth = anchorRect.width;
10404
+ this.#attachment?.setAttribute(
10405
+ 'data-attachment-size',
10406
+ Number(availableWidth),
10407
+ );
10408
+ }
10273
10409
  }
10274
10410
 
10275
10411
  #setVisibility() {
@@ -10278,16 +10414,14 @@ class RawAttachment extends createBaseClass$1({
10278
10414
  }
10279
10415
 
10280
10416
  #syncDirection() {
10281
- const child = this.defaultSlot?.assignedElements()?.[0];
10282
- if (!child) return;
10283
-
10284
- const { direction } = window.getComputedStyle(child);
10417
+ const direction = this.shadowRoot
10418
+ .querySelector('.attachment-container')
10419
+ ?.getAttribute('st-host-direction');
10285
10420
 
10421
+ if (!direction) return;
10286
10422
  // currently we support direction sync only for web-components-ui
10287
10423
  // elements, which support st-host-direction attribute.
10288
- this.attachmentSlot?.assignedElements().forEach((el) => {
10289
- el.setAttribute('st-host-direction', direction);
10290
- });
10424
+ this.#attachment?.setAttribute('st-host-direction', direction);
10291
10425
  }
10292
10426
 
10293
10427
  get offsetX() {
@@ -12015,7 +12149,7 @@ var textFieldMappings = {
12015
12149
  ],
12016
12150
  };
12017
12151
 
12018
- const componentName$T = getComponentName$1('text-field');
12152
+ const componentName$U = getComponentName$1('text-field');
12019
12153
 
12020
12154
  const observedAttrs$3 = ['type', 'label-type', 'copy-to-clipboard'];
12021
12155
 
@@ -12137,11 +12271,11 @@ const TextFieldClass = compose$1(
12137
12271
  }
12138
12272
  `,
12139
12273
  excludeAttrsSync: ['tabindex', 'style'],
12140
- componentName: componentName$T,
12274
+ componentName: componentName$U,
12141
12275
  })
12142
12276
  );
12143
12277
 
12144
- const componentName$S = getComponentName$1('input-wrapper');
12278
+ const componentName$T = getComponentName$1('input-wrapper');
12145
12279
  const globalRefs$p = getThemeRefs(globals$1);
12146
12280
 
12147
12281
  const [theme$1, refs, vars$I] = createHelperVars(
@@ -12271,7 +12405,7 @@ const [theme$1, refs, vars$I] = createHelperVars(
12271
12405
  inputTextSecurity: 'disc',
12272
12406
  },
12273
12407
  },
12274
- componentName$S
12408
+ componentName$T
12275
12409
  );
12276
12410
 
12277
12411
  var inputWrapper = /*#__PURE__*/Object.freeze({
@@ -12391,7 +12525,7 @@ const passwordDraggableMixin = (superclass) =>
12391
12525
  }
12392
12526
  };
12393
12527
 
12394
- const componentName$R = getComponentName$1('password');
12528
+ const componentName$S = getComponentName$1('password');
12395
12529
 
12396
12530
  const customMixin$9 = (superclass) =>
12397
12531
  class PasswordFieldMixinClass extends superclass {
@@ -12685,7 +12819,7 @@ const PasswordClass = compose$1(
12685
12819
  }
12686
12820
  `,
12687
12821
  excludeAttrsSync: ['tabindex', 'style'],
12688
- componentName: componentName$R,
12822
+ componentName: componentName$S,
12689
12823
  })
12690
12824
  );
12691
12825
 
@@ -12748,7 +12882,7 @@ var password$1 = /*#__PURE__*/Object.freeze({
12748
12882
  vars: vars$G
12749
12883
  });
12750
12884
 
12751
- const componentName$Q = getComponentName$1('number-field');
12885
+ const componentName$R = getComponentName$1('number-field');
12752
12886
 
12753
12887
  const NumberFieldClass = compose$1(
12754
12888
  createStyleMixin({
@@ -12782,7 +12916,7 @@ const NumberFieldClass = compose$1(
12782
12916
  }
12783
12917
  `,
12784
12918
  excludeAttrsSync: ['tabindex', 'style'],
12785
- componentName: componentName$Q,
12919
+ componentName: componentName$R,
12786
12920
  })
12787
12921
  );
12788
12922
 
@@ -12842,7 +12976,7 @@ var numberField$1 = /*#__PURE__*/Object.freeze({
12842
12976
  vars: vars$F
12843
12977
  });
12844
12978
 
12845
- const componentName$P = getComponentName$1('email-field');
12979
+ const componentName$Q = getComponentName$1('email-field');
12846
12980
 
12847
12981
  const defaultPattern = "^[\\w\\.\\%\\+\\-']+@[\\w\\.\\-]+\\.[A-Za-z]{2,}$";
12848
12982
  const defaultAutocomplete = 'username';
@@ -12911,7 +13045,7 @@ const EmailFieldClass = compose$1(
12911
13045
  }
12912
13046
  `,
12913
13047
  excludeAttrsSync: ['tabindex', 'style'],
12914
- componentName: componentName$P,
13048
+ componentName: componentName$Q,
12915
13049
  })
12916
13050
  );
12917
13051
 
@@ -12971,7 +13105,7 @@ var emailField$1 = /*#__PURE__*/Object.freeze({
12971
13105
  vars: vars$E
12972
13106
  });
12973
13107
 
12974
- const componentName$O = getComponentName$1('text-area');
13108
+ const componentName$P = getComponentName$1('text-area');
12975
13109
 
12976
13110
  const {
12977
13111
  host: host$i,
@@ -13060,7 +13194,7 @@ const TextAreaClass = compose$1(
13060
13194
  ${resetInputCursor('vaadin-text-area')}
13061
13195
  `,
13062
13196
  excludeAttrsSync: ['tabindex', 'style'],
13063
- componentName: componentName$O,
13197
+ componentName: componentName$P,
13064
13198
  })
13065
13199
  );
13066
13200
 
@@ -13128,9 +13262,9 @@ const createBaseInputClass = (...args) =>
13128
13262
  inputEventsDispatchingMixin
13129
13263
  )(createBaseClass(...args));
13130
13264
 
13131
- const componentName$N = getComponentName$1('boolean-field-internal');
13265
+ const componentName$O = getComponentName$1('boolean-field-internal');
13132
13266
 
13133
- createBaseInputClass({ componentName: componentName$N, baseSelector: 'div' });
13267
+ createBaseInputClass({ componentName: componentName$O, baseSelector: 'div' });
13134
13268
 
13135
13269
  const booleanFieldMixin = (superclass) =>
13136
13270
  class BooleanFieldMixinClass extends superclass {
@@ -13139,14 +13273,14 @@ const booleanFieldMixin = (superclass) =>
13139
13273
 
13140
13274
  const template = document.createElement('template');
13141
13275
  template.innerHTML = `
13142
- <${componentName$N}
13276
+ <${componentName$O}
13143
13277
  tabindex="-1"
13144
13278
  slot="input"
13145
- ></${componentName$N}>
13279
+ ></${componentName$O}>
13146
13280
  `;
13147
13281
 
13148
13282
  this.baseElement.appendChild(template.content.cloneNode(true));
13149
- this.inputElement = this.shadowRoot.querySelector(componentName$N);
13283
+ this.inputElement = this.shadowRoot.querySelector(componentName$O);
13150
13284
  this.checkbox = this.inputElement.querySelector('vaadin-checkbox');
13151
13285
 
13152
13286
  forwardAttrs$1(this, this.inputElement, {
@@ -13224,7 +13358,7 @@ descope-enriched-text {
13224
13358
 
13225
13359
  `;
13226
13360
 
13227
- const componentName$M = getComponentName$1('checkbox');
13361
+ const componentName$N = getComponentName$1('checkbox');
13228
13362
 
13229
13363
  const {
13230
13364
  host: host$h,
@@ -13360,7 +13494,7 @@ const CheckboxClass = compose$1(
13360
13494
  }
13361
13495
  `,
13362
13496
  excludeAttrsSync: ['label', 'tabindex', 'style'],
13363
- componentName: componentName$M,
13497
+ componentName: componentName$N,
13364
13498
  })
13365
13499
  );
13366
13500
 
@@ -13405,7 +13539,7 @@ var checkbox$1 = /*#__PURE__*/Object.freeze({
13405
13539
  vars: vars$C
13406
13540
  });
13407
13541
 
13408
- const componentName$L = getComponentName$1('switch-toggle');
13542
+ const componentName$M = getComponentName$1('switch-toggle');
13409
13543
 
13410
13544
  const {
13411
13545
  host: host$g,
@@ -13549,7 +13683,7 @@ const SwitchToggleClass = compose$1(
13549
13683
  }
13550
13684
  `,
13551
13685
  excludeAttrsSync: ['label', 'tabindex', 'style'],
13552
- componentName: componentName$L,
13686
+ componentName: componentName$M,
13553
13687
  })
13554
13688
  );
13555
13689
 
@@ -13630,9 +13764,9 @@ var switchToggle$1 = /*#__PURE__*/Object.freeze({
13630
13764
  vars: vars$B
13631
13765
  });
13632
13766
 
13633
- const componentName$K = getComponentName$1('container');
13767
+ const componentName$L = getComponentName$1('container');
13634
13768
 
13635
- class RawContainer extends createBaseClass({ componentName: componentName$K, baseSelector: 'slot' }) {
13769
+ class RawContainer extends createBaseClass({ componentName: componentName$L, baseSelector: 'slot' }) {
13636
13770
  constructor() {
13637
13771
  super();
13638
13772
 
@@ -13717,7 +13851,7 @@ const [helperTheme$2, helperRefs$2, helperVars$2] = createHelperVars(
13717
13851
  horizontalAlignment,
13718
13852
  shadowColor: '#00000020', // if we want to support transparency vars, we should use different color format
13719
13853
  },
13720
- componentName$K
13854
+ componentName$L
13721
13855
  );
13722
13856
 
13723
13857
  const { shadowColor: shadowColor$2 } = helperRefs$2;
@@ -13883,10 +14017,10 @@ const createCssVarImageClass = ({ componentName, varName, fallbackVarName }) =>
13883
14017
  return CssVarImageClass;
13884
14018
  };
13885
14019
 
13886
- const componentName$J = getComponentName$1('logo');
14020
+ const componentName$K = getComponentName$1('logo');
13887
14021
 
13888
14022
  const LogoClass = createCssVarImageClass({
13889
- componentName: componentName$J,
14023
+ componentName: componentName$K,
13890
14024
  varName: 'url',
13891
14025
  fallbackVarName: 'fallbackUrl',
13892
14026
  });
@@ -13903,10 +14037,10 @@ var logo$3 = /*#__PURE__*/Object.freeze({
13903
14037
  vars: vars$z
13904
14038
  });
13905
14039
 
13906
- const componentName$I = getComponentName$1('totp-image');
14040
+ const componentName$J = getComponentName$1('totp-image');
13907
14041
 
13908
14042
  const TotpImageClass = createCssVarImageClass({
13909
- componentName: componentName$I,
14043
+ componentName: componentName$J,
13910
14044
  varName: 'url',
13911
14045
  fallbackVarName: 'fallbackUrl',
13912
14046
  });
@@ -13923,10 +14057,10 @@ var totpImage = /*#__PURE__*/Object.freeze({
13923
14057
  vars: vars$y
13924
14058
  });
13925
14059
 
13926
- const componentName$H = getComponentName$1('notp-image');
14060
+ const componentName$I = getComponentName$1('notp-image');
13927
14061
 
13928
14062
  const NotpImageClass = createCssVarImageClass({
13929
- componentName: componentName$H,
14063
+ componentName: componentName$I,
13930
14064
  varName: 'url',
13931
14065
  fallbackVarName: 'fallbackUrl',
13932
14066
  });
@@ -13943,8 +14077,8 @@ var notpImage = /*#__PURE__*/Object.freeze({
13943
14077
  vars: vars$x
13944
14078
  });
13945
14079
 
13946
- const componentName$G = getComponentName$1('divider');
13947
- class RawDivider extends createBaseClass({ componentName: componentName$G, baseSelector: ':host > div' }) {
14080
+ const componentName$H = getComponentName$1('divider');
14081
+ class RawDivider extends createBaseClass({ componentName: componentName$H, baseSelector: ':host > div' }) {
13948
14082
  constructor() {
13949
14083
  super();
13950
14084
 
@@ -14055,7 +14189,7 @@ const [helperTheme$1, helperRefs$1, helperVars$1] = createHelperVars(
14055
14189
  thickness: '2px',
14056
14190
  spacing: '10px',
14057
14191
  },
14058
- componentName$G
14192
+ componentName$H
14059
14193
  );
14060
14194
 
14061
14195
  const divider = {
@@ -14097,13 +14231,13 @@ var divider$1 = /*#__PURE__*/Object.freeze({
14097
14231
  vars: vars$w
14098
14232
  });
14099
14233
 
14100
- const componentName$F = getComponentName$1('passcode-internal');
14234
+ const componentName$G = getComponentName$1('passcode-internal');
14101
14235
 
14102
- createBaseInputClass({ componentName: componentName$F, baseSelector: 'div' });
14236
+ createBaseInputClass({ componentName: componentName$G, baseSelector: 'div' });
14103
14237
 
14104
- const componentName$E = getComponentName$1('loader-radial');
14238
+ const componentName$F = getComponentName$1('loader-radial');
14105
14239
 
14106
- class RawLoaderRadial extends createBaseClass({ componentName: componentName$E, baseSelector: ':host > div' }) {
14240
+ class RawLoaderRadial extends createBaseClass({ componentName: componentName$F, baseSelector: ':host > div' }) {
14107
14241
  constructor() {
14108
14242
  super();
14109
14243
 
@@ -14151,7 +14285,7 @@ const LoaderRadialClass = compose$1(
14151
14285
  componentNameValidationMixin
14152
14286
  )(RawLoaderRadial);
14153
14287
 
14154
- const componentName$D = getComponentName$1('passcode');
14288
+ const componentName$E = getComponentName$1('passcode');
14155
14289
 
14156
14290
  const observedAttributes$3 = ['digits'];
14157
14291
 
@@ -14196,18 +14330,18 @@ const customMixin$7 = (superclass) =>
14196
14330
  const template = document.createElement('template');
14197
14331
 
14198
14332
  template.innerHTML = `
14199
- <${componentName$F}
14333
+ <${componentName$G}
14200
14334
  bordered="true"
14201
14335
  name="code"
14202
14336
  tabindex="-1"
14203
14337
  slot="input"
14204
14338
  role="textbox"
14205
- ><slot></slot></${componentName$F}>
14339
+ ><slot></slot></${componentName$G}>
14206
14340
  `;
14207
14341
 
14208
14342
  this.baseElement.appendChild(template.content.cloneNode(true));
14209
14343
 
14210
- this.inputElement = this.shadowRoot.querySelector(componentName$F);
14344
+ this.inputElement = this.shadowRoot.querySelector(componentName$G);
14211
14345
 
14212
14346
  forwardAttrs$1(this, this.inputElement, {
14213
14347
  includeAttrs: ['digits', 'size', 'loading', 'disabled'],
@@ -14376,7 +14510,7 @@ const PasscodeClass = compose$1(
14376
14510
  ${resetInputCursor('vaadin-text-field')}
14377
14511
  `,
14378
14512
  excludeAttrsSync: ['tabindex', 'style'],
14379
- componentName: componentName$D,
14513
+ componentName: componentName$E,
14380
14514
  })
14381
14515
  );
14382
14516
 
@@ -14432,11 +14566,11 @@ var passcode$1 = /*#__PURE__*/Object.freeze({
14432
14566
  vars: vars$v
14433
14567
  });
14434
14568
 
14435
- const componentName$C = getComponentName$1('loader-linear');
14569
+ const componentName$D = getComponentName$1('loader-linear');
14436
14570
 
14437
- class RawLoaderLinear extends createBaseClass({ componentName: componentName$C, baseSelector: ':host > div' }) {
14571
+ class RawLoaderLinear extends createBaseClass({ componentName: componentName$D, baseSelector: ':host > div' }) {
14438
14572
  static get componentName() {
14439
- return componentName$C;
14573
+ return componentName$D;
14440
14574
  }
14441
14575
 
14442
14576
  constructor() {
@@ -14561,7 +14695,7 @@ const [helperTheme, helperRefs, helperVars] = createHelperVars(
14561
14695
  },
14562
14696
  },
14563
14697
  },
14564
- componentName$E
14698
+ componentName$F
14565
14699
  );
14566
14700
 
14567
14701
  const loaderRadial = {
@@ -15812,14 +15946,14 @@ var CountryCodes = [
15812
15946
  ].sort((a, b) => (a.name < b.name ? -1 : 1)),
15813
15947
  ];
15814
15948
 
15815
- const componentName$B = getComponentName$1('phone-field-internal');
15949
+ const componentName$C = getComponentName$1('phone-field-internal');
15816
15950
 
15817
- createBaseInputClass({ componentName: componentName$B, baseSelector: 'div' });
15951
+ createBaseInputClass({ componentName: componentName$C, baseSelector: 'div' });
15818
15952
 
15819
15953
  const textVars$2 = TextFieldClass.cssVarList;
15820
15954
  const comboVars = ComboBoxClass.cssVarList;
15821
15955
 
15822
- const componentName$A = getComponentName$1('phone-field');
15956
+ const componentName$B = getComponentName$1('phone-field');
15823
15957
 
15824
15958
  const customMixin$6 = (superclass) =>
15825
15959
  class PhoneFieldMixinClass extends superclass {
@@ -15833,15 +15967,15 @@ const customMixin$6 = (superclass) =>
15833
15967
  const template = document.createElement('template');
15834
15968
 
15835
15969
  template.innerHTML = `
15836
- <${componentName$B}
15970
+ <${componentName$C}
15837
15971
  tabindex="-1"
15838
15972
  slot="input"
15839
- ></${componentName$B}>
15973
+ ></${componentName$C}>
15840
15974
  `;
15841
15975
 
15842
15976
  this.baseElement.appendChild(template.content.cloneNode(true));
15843
15977
 
15844
- this.inputElement = this.shadowRoot.querySelector(componentName$B);
15978
+ this.inputElement = this.shadowRoot.querySelector(componentName$C);
15845
15979
 
15846
15980
  forwardAttrs$1(this.shadowRoot.host, this.inputElement, {
15847
15981
  includeAttrs: [
@@ -16124,7 +16258,7 @@ const PhoneFieldClass = compose$1(
16124
16258
  ${resetInputLabelPosition('vaadin-text-field')}
16125
16259
  `,
16126
16260
  excludeAttrsSync: ['tabindex', 'style'],
16127
- componentName: componentName$A,
16261
+ componentName: componentName$B,
16128
16262
  })
16129
16263
  );
16130
16264
 
@@ -16176,13 +16310,13 @@ var phoneField$1 = /*#__PURE__*/Object.freeze({
16176
16310
  vars: vars$s
16177
16311
  });
16178
16312
 
16179
- const componentName$z = getComponentName$1('phone-field-internal-input-box');
16313
+ const componentName$A = getComponentName$1('phone-field-internal-input-box');
16180
16314
 
16181
- createBaseInputClass({ componentName: componentName$z, baseSelector: 'div' });
16315
+ createBaseInputClass({ componentName: componentName$A, baseSelector: 'div' });
16182
16316
 
16183
16317
  const textVars$1 = TextFieldClass.cssVarList;
16184
16318
 
16185
- const componentName$y = getComponentName$1('phone-input-box-field');
16319
+ const componentName$z = getComponentName$1('phone-input-box-field');
16186
16320
 
16187
16321
  const customMixin$5 = (superclass) =>
16188
16322
  class PhoneFieldInputBoxMixinClass extends superclass {
@@ -16196,15 +16330,15 @@ const customMixin$5 = (superclass) =>
16196
16330
  const template = document.createElement('template');
16197
16331
 
16198
16332
  template.innerHTML = `
16199
- <${componentName$z}
16333
+ <${componentName$A}
16200
16334
  tabindex="-1"
16201
16335
  slot="input"
16202
- ></${componentName$z}>
16336
+ ></${componentName$A}>
16203
16337
  `;
16204
16338
 
16205
16339
  this.baseElement.appendChild(template.content.cloneNode(true));
16206
16340
 
16207
- this.inputElement = this.shadowRoot.querySelector(componentName$z);
16341
+ this.inputElement = this.shadowRoot.querySelector(componentName$A);
16208
16342
 
16209
16343
  syncAttrs(this, this.inputElement, { includeAttrs: ['has-value'] });
16210
16344
 
@@ -16416,7 +16550,7 @@ const PhoneFieldInputBoxClass = compose$1(
16416
16550
  ${inputFloatingLabelStyle()}
16417
16551
  `,
16418
16552
  excludeAttrsSync: ['tabindex', 'style'],
16419
- componentName: componentName$y,
16553
+ componentName: componentName$z,
16420
16554
  })
16421
16555
  );
16422
16556
 
@@ -16476,12 +16610,12 @@ var phoneInputBoxField$1 = /*#__PURE__*/Object.freeze({
16476
16610
  vars: vars$r
16477
16611
  });
16478
16612
 
16479
- const componentName$x = getComponentName$1('new-password-internal');
16613
+ const componentName$y = getComponentName$1('new-password-internal');
16480
16614
 
16481
16615
  const interpolateString = (template, values) =>
16482
16616
  template.replace(/{{(\w+)+}}/g, (match, key) => values?.[key] || match);
16483
16617
 
16484
- const componentName$w = getComponentName$1('policy-validation');
16618
+ const componentName$x = getComponentName$1('policy-validation');
16485
16619
 
16486
16620
  const overrideAttrs = [
16487
16621
  'data-password-policy-value-minlength',
@@ -16491,7 +16625,7 @@ const overrideAttrs = [
16491
16625
  const dataAttrs = ['data', 'active-policies', 'overrides', ...overrideAttrs];
16492
16626
  const policyAttrs = ['label', 'value', ...dataAttrs];
16493
16627
 
16494
- class RawPolicyValidation extends createBaseClass({ componentName: componentName$w, baseSelector: ':host > div' }) {
16628
+ class RawPolicyValidation extends createBaseClass({ componentName: componentName$x, baseSelector: ':host > div' }) {
16495
16629
  #availablePolicies;
16496
16630
 
16497
16631
  #activePolicies = [];
@@ -16763,7 +16897,7 @@ const PolicyValidationClass = compose$1(
16763
16897
  componentNameValidationMixin
16764
16898
  )(RawPolicyValidation);
16765
16899
 
16766
- const componentName$v = getComponentName$1('new-password');
16900
+ const componentName$w = getComponentName$1('new-password');
16767
16901
 
16768
16902
  const policyPreviewVars = PolicyValidationClass.cssVarList;
16769
16903
 
@@ -16777,18 +16911,18 @@ const customMixin$4 = (superclass) =>
16777
16911
  const externalInputAttr = this.getAttribute('external-input');
16778
16912
 
16779
16913
  template.innerHTML = `
16780
- <${componentName$x}
16914
+ <${componentName$y}
16781
16915
  name="new-password"
16782
16916
  tabindex="-1"
16783
16917
  slot="input"
16784
16918
  external-input="${externalInputAttr}"
16785
16919
  >
16786
- </${componentName$x}>
16920
+ </${componentName$y}>
16787
16921
  `;
16788
16922
 
16789
16923
  this.baseElement.appendChild(template.content.cloneNode(true));
16790
16924
 
16791
- this.inputElement = this.shadowRoot.querySelector(componentName$x);
16925
+ this.inputElement = this.shadowRoot.querySelector(componentName$y);
16792
16926
 
16793
16927
  if (this.getAttribute('external-input') === 'true') {
16794
16928
  this.initExternalInput();
@@ -16983,7 +17117,7 @@ const NewPasswordClass = compose$1(
16983
17117
  }
16984
17118
  `,
16985
17119
  excludeAttrsSync: ['tabindex', 'style'],
16986
- componentName: componentName$v,
17120
+ componentName: componentName$w,
16987
17121
  })
16988
17122
  );
16989
17123
 
@@ -17040,7 +17174,7 @@ const getFileBase64 = (fileObj) =>
17040
17174
 
17041
17175
  const getFilename = (fileObj) => fileObj.name.replace(/^.*\\/, '');
17042
17176
 
17043
- const componentName$u = getComponentName$1('upload-file');
17177
+ const componentName$v = getComponentName$1('upload-file');
17044
17178
 
17045
17179
  const observedAttributes$2 = [
17046
17180
  'title',
@@ -17055,7 +17189,7 @@ const observedAttributes$2 = [
17055
17189
  'icon',
17056
17190
  ];
17057
17191
 
17058
- const BaseInputClass$3 = createBaseInputClass({ componentName: componentName$u, baseSelector: ':host > div' });
17192
+ const BaseInputClass$3 = createBaseInputClass({ componentName: componentName$v, baseSelector: ':host > div' });
17059
17193
 
17060
17194
  class RawUploadFile extends BaseInputClass$3 {
17061
17195
  static get observedAttributes() {
@@ -17341,10 +17475,10 @@ var uploadFile$1 = /*#__PURE__*/Object.freeze({
17341
17475
  vars: vars$p
17342
17476
  });
17343
17477
 
17344
- const componentName$t = getComponentName$1('button-selection-group-item');
17478
+ const componentName$u = getComponentName$1('button-selection-group-item');
17345
17479
 
17346
17480
  class RawSelectItem extends createBaseClass({
17347
- componentName: componentName$t,
17481
+ componentName: componentName$u,
17348
17482
  baseSelector: ':host > descope-button',
17349
17483
  }) {
17350
17484
  get size() {
@@ -17576,10 +17710,10 @@ const createBaseButtonSelectionGroupInternalClass = (componentName) => {
17576
17710
  return BaseButtonSelectionGroupInternalClass;
17577
17711
  };
17578
17712
 
17579
- const componentName$s = getComponentName$1('button-selection-group-internal');
17713
+ const componentName$t = getComponentName$1('button-selection-group-internal');
17580
17714
 
17581
17715
  class ButtonSelectionGroupInternalClass extends createBaseButtonSelectionGroupInternalClass(
17582
- componentName$s
17716
+ componentName$t
17583
17717
  ) {
17584
17718
  getSelectedNode() {
17585
17719
  return this.items.find((item) => item.hasAttribute('selected'));
@@ -17822,7 +17956,7 @@ const buttonSelectionGroupStyles = `
17822
17956
  ${resetInputCursor('vaadin-text-field')}
17823
17957
  `;
17824
17958
 
17825
- const componentName$r = getComponentName$1('button-selection-group');
17959
+ const componentName$s = getComponentName$1('button-selection-group');
17826
17960
 
17827
17961
  const buttonSelectionGroupMixin = (superclass) =>
17828
17962
  class ButtonMultiSelectionGroupMixinClass extends superclass {
@@ -17831,19 +17965,19 @@ const buttonSelectionGroupMixin = (superclass) =>
17831
17965
  const template = document.createElement('template');
17832
17966
 
17833
17967
  template.innerHTML = `
17834
- <${componentName$s}
17968
+ <${componentName$t}
17835
17969
  name="button-selection-group"
17836
17970
  slot="input"
17837
17971
  tabindex="-1"
17838
17972
  part="internal-component"
17839
17973
  >
17840
17974
  <slot></slot>
17841
- </${componentName$s}>
17975
+ </${componentName$t}>
17842
17976
  `;
17843
17977
 
17844
17978
  this.baseElement.appendChild(template.content.cloneNode(true));
17845
17979
 
17846
- this.inputElement = this.shadowRoot.querySelector(componentName$s);
17980
+ this.inputElement = this.shadowRoot.querySelector(componentName$t);
17847
17981
 
17848
17982
  forwardAttrs$1(this, this.inputElement, {
17849
17983
  includeAttrs: ['size', 'default-value', 'allow-deselect'],
@@ -17868,7 +18002,7 @@ const ButtonSelectionGroupClass = compose$1(
17868
18002
  wrappedEleName: 'vaadin-text-field',
17869
18003
  style: () => buttonSelectionGroupStyles,
17870
18004
  excludeAttrsSync: ['tabindex', 'style'],
17871
- componentName: componentName$r,
18005
+ componentName: componentName$s,
17872
18006
  })
17873
18007
  );
17874
18008
 
@@ -17905,10 +18039,10 @@ var buttonSelectionGroup$1 = /*#__PURE__*/Object.freeze({
17905
18039
  vars: vars$n
17906
18040
  });
17907
18041
 
17908
- const componentName$q = getComponentName$1('button-multi-selection-group-internal');
18042
+ const componentName$r = getComponentName$1('button-multi-selection-group-internal');
17909
18043
 
17910
18044
  class ButtonMultiSelectionGroupInternalClass extends createBaseButtonSelectionGroupInternalClass(
17911
- componentName$q
18045
+ componentName$r
17912
18046
  ) {
17913
18047
  #getSelectedNodes() {
17914
18048
  return this.items.filter((item) => item.hasAttribute('selected'));
@@ -18010,7 +18144,7 @@ class ButtonMultiSelectionGroupInternalClass extends createBaseButtonSelectionGr
18010
18144
  }
18011
18145
  }
18012
18146
 
18013
- const componentName$p = getComponentName$1('button-multi-selection-group');
18147
+ const componentName$q = getComponentName$1('button-multi-selection-group');
18014
18148
 
18015
18149
  const buttonMultiSelectionGroupMixin = (superclass) =>
18016
18150
  class ButtonMultiSelectionGroupMixinClass extends superclass {
@@ -18019,19 +18153,19 @@ const buttonMultiSelectionGroupMixin = (superclass) =>
18019
18153
  const template = document.createElement('template');
18020
18154
 
18021
18155
  template.innerHTML = `
18022
- <${componentName$q}
18156
+ <${componentName$r}
18023
18157
  name="button-selection-group"
18024
18158
  slot="input"
18025
18159
  tabindex="-1"
18026
18160
  part="internal-component"
18027
18161
  >
18028
18162
  <slot></slot>
18029
- </${componentName$q}>
18163
+ </${componentName$r}>
18030
18164
  `;
18031
18165
 
18032
18166
  this.baseElement.appendChild(template.content.cloneNode(true));
18033
18167
 
18034
- this.inputElement = this.shadowRoot.querySelector(componentName$q);
18168
+ this.inputElement = this.shadowRoot.querySelector(componentName$r);
18035
18169
 
18036
18170
  forwardAttrs$1(this, this.inputElement, {
18037
18171
  includeAttrs: ['size', 'default-values', 'min-items-selection', 'max-items-selection'],
@@ -18056,7 +18190,7 @@ const ButtonMultiSelectionGroupClass = compose$1(
18056
18190
  wrappedEleName: 'vaadin-text-field',
18057
18191
  style: () => buttonSelectionGroupStyles,
18058
18192
  excludeAttrsSync: ['tabindex', 'style'],
18059
- componentName: componentName$p,
18193
+ componentName: componentName$q,
18060
18194
  })
18061
18195
  );
18062
18196
 
@@ -18072,7 +18206,7 @@ var buttonMultiSelectionGroup$1 = /*#__PURE__*/Object.freeze({
18072
18206
  vars: vars$m
18073
18207
  });
18074
18208
 
18075
- const componentName$o = getComponentName$1('modal');
18209
+ const componentName$p = getComponentName$1('modal');
18076
18210
 
18077
18211
  const observedAttrs$2 = ['opened'];
18078
18212
 
@@ -18221,7 +18355,7 @@ const ModalClass = compose$1(
18221
18355
  }
18222
18356
  `,
18223
18357
  excludeAttrsSync: ['tabindex', 'opened', 'style'],
18224
- componentName: componentName$o,
18358
+ componentName: componentName$p,
18225
18359
  })
18226
18360
  );
18227
18361
 
@@ -18332,7 +18466,7 @@ const defaultRowDetailsRenderer = (item, itemLabelsMapping) => `
18332
18466
  </div>
18333
18467
  `;
18334
18468
 
18335
- const componentName$n = getComponentName$1('grid');
18469
+ const componentName$o = getComponentName$1('grid');
18336
18470
 
18337
18471
  const GridMixin = (superclass) =>
18338
18472
  class GridMixinClass extends superclass {
@@ -18701,7 +18835,7 @@ const GridClass = compose$1(
18701
18835
  /*!css*/
18702
18836
  `,
18703
18837
  excludeAttrsSync: ['columns', 'tabindex', 'style'],
18704
- componentName: componentName$n,
18838
+ componentName: componentName$o,
18705
18839
  })
18706
18840
  );
18707
18841
 
@@ -18757,7 +18891,7 @@ var grid$1 = /*#__PURE__*/Object.freeze({
18757
18891
  vars: vars$k
18758
18892
  });
18759
18893
 
18760
- const componentName$m = getComponentName$1('notification-card');
18894
+ const componentName$n = getComponentName$1('notification-card');
18761
18895
 
18762
18896
  const notificationCardMixin = (superclass) =>
18763
18897
  class NotificationCardMixinClass extends superclass {
@@ -18865,7 +18999,7 @@ const NotificationCardClass = compose$1(
18865
18999
  }
18866
19000
  `,
18867
19001
  excludeAttrsSync: ['tabindex', 'style'],
18868
- componentName: componentName$m,
19002
+ componentName: componentName$n,
18869
19003
  })
18870
19004
  );
18871
19005
 
@@ -18923,7 +19057,7 @@ var notificationCard = /*#__PURE__*/Object.freeze({
18923
19057
  vars: vars$j
18924
19058
  });
18925
19059
 
18926
- const componentName$l = getComponentName$1('multi-select-combo-box');
19060
+ const componentName$m = getComponentName$1('multi-select-combo-box');
18927
19061
 
18928
19062
  const multiSelectComboBoxMixin = (superclass) =>
18929
19063
  class MultiSelectComboBoxMixinClass extends superclass {
@@ -19578,7 +19712,7 @@ const MultiSelectComboBoxClass = compose$1(
19578
19712
  // Note: we exclude `placeholder` because the vaadin component observes it and
19579
19713
  // tries to override it, causing us to lose the user set placeholder.
19580
19714
  excludeAttrsSync: ['tabindex', 'size', 'data', 'placeholder', 'style'],
19581
- componentName: componentName$l,
19715
+ componentName: componentName$m,
19582
19716
  includeForwardProps: ['items', 'renderer', 'selectedItems'],
19583
19717
  })
19584
19718
  );
@@ -19674,11 +19808,11 @@ var multiSelectComboBox$1 = /*#__PURE__*/Object.freeze({
19674
19808
  vars: vars$i
19675
19809
  });
19676
19810
 
19677
- const componentName$k = getComponentName$1('mappings-field-internal');
19811
+ const componentName$l = getComponentName$1('mappings-field-internal');
19678
19812
 
19679
- createBaseInputClass({ componentName: componentName$k, baseSelector: 'div' });
19813
+ createBaseInputClass({ componentName: componentName$l, baseSelector: 'div' });
19680
19814
 
19681
- const componentName$j = getComponentName$1('mappings-field');
19815
+ const componentName$k = getComponentName$1('mappings-field');
19682
19816
 
19683
19817
  const customMixin$2 = (superclass) =>
19684
19818
  class MappingsFieldMixinClass extends superclass {
@@ -19707,14 +19841,14 @@ const customMixin$2 = (superclass) =>
19707
19841
  const template = document.createElement('template');
19708
19842
 
19709
19843
  template.innerHTML = `
19710
- <${componentName$k}
19844
+ <${componentName$l}
19711
19845
  tabindex="-1"
19712
- ></${componentName$k}>
19846
+ ></${componentName$l}>
19713
19847
  `;
19714
19848
 
19715
19849
  this.baseElement.appendChild(template.content.cloneNode(true));
19716
19850
 
19717
- this.inputElement = this.shadowRoot.querySelector(componentName$k);
19851
+ this.inputElement = this.shadowRoot.querySelector(componentName$l);
19718
19852
 
19719
19853
  forwardAttrs$1(this, this.inputElement, {
19720
19854
  includeAttrs: [
@@ -19850,7 +19984,7 @@ const MappingsFieldClass = compose$1(
19850
19984
  'error-message',
19851
19985
  'style',
19852
19986
  ],
19853
- componentName: componentName$j,
19987
+ componentName: componentName$k,
19854
19988
  })
19855
19989
  );
19856
19990
 
@@ -19888,9 +20022,9 @@ var deleteIcon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTgi
19888
20022
 
19889
20023
  var editIcon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxNSAxNSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8cGF0aCBkPSJNMTAuMDAwMiAwLjk5MjE0OUMxMC4wMDAyIDEuMDE2MTUgMTAuMDAwMiAxLjAxNjE1IDEwLjAwMDIgMS4wMTYxNUw4LjIyNDE5IDMuMDA4MTVIMi45OTIxOUMyLjQ2NDE5IDMuMDA4MTUgMi4wMDgxOSAzLjQ0MDE1IDIuMDA4MTkgMy45OTIxNVYxMi4wMDgyQzIuMDA4MTkgMTIuNTM2MiAyLjQ0MDE5IDEyLjk5MjIgMi45OTIxOSAxMi45OTIySDUuNTM2MTlDNS44NDgxOSAxMy4wNDAyIDYuMTYwMTkgMTMuMDQwMiA2LjQ3MjE5IDEyLjk5MjJIMTEuMDA4MkMxMS41MzYyIDEyLjk5MjIgMTEuOTkyMiAxMi41NjAyIDExLjk5MjIgMTIuMDA4MlY3Ljc4NDE2TDEzLjkzNjIgNS42MjQxNUwxNC4wMDgyIDUuNjcyMTVWMTEuOTg0MkMxNC4wMDgyIDEzLjY2NDIgMTIuNjY0MiAxNS4wMDgyIDExLjAwODIgMTUuMDA4MkgzLjAxNjE5QzEuMzM2MTkgMTUuMDA4MiAtMC4wMDc4MTI1IDEzLjY2NDIgLTAuMDA3ODEyNSAxMS45ODQyVjMuOTkyMTVDLTAuMDA3ODEyNSAyLjMzNjE1IDEuMzM2MTkgMC45OTIxNDkgMy4wMTYxOSAwLjk5MjE0OUgxMC4wMDAyWk0xMS4yNzIyIDIuNjI0MTVMMTIuNjE2MiA0LjExMjE1TDcuNzIwMTkgOS42ODAxNkM3LjUwNDE5IDkuOTIwMTYgNi44MzIxOSAxMC4yMzIyIDUuNjgwMTkgMTAuNjE2MkM1LjY1NjE5IDEwLjY0MDIgNS42MDgxOSAxMC42NDAyIDUuNTYwMTkgMTAuNjE2MkM1LjQ2NDE5IDEwLjU5MjIgNS4zOTIxOSAxMC40NzIyIDUuNDQwMTkgMTAuMzc2MkM1Ljc1MjE5IDkuMjQ4MTYgNi4wNDAxOSA4LjU1MjE2IDYuMjU2MTkgOC4zMTIxNkwxMS4yNzIyIDIuNjI0MTVaTTExLjkyMDIgMS44NTYxNUwxMy4yODgyIDAuMzIwMTQ5QzEzLjY0ODIgLTAuMDg3ODUxNiAxNC4yNzIyIC0wLjExMTg1MiAxNC42ODAyIDAuMjcyMTQ5QzE1LjA4ODIgMC42MzIxNDkgMTUuMTEyMiAxLjI4MDE1IDE0Ljc1MjIgMS42ODgxNUwxMy4yNjQyIDMuMzY4MTVMMTEuOTIwMiAxLjg1NjE1WiIgZmlsbD0iY3VycmVudGNvbG9yIi8+Cjwvc3ZnPgo=";
19890
20024
 
19891
- const componentName$i = getComponentName$1('user-attribute');
20025
+ const componentName$j = getComponentName$1('user-attribute');
19892
20026
  class RawUserAttribute extends createBaseClass({
19893
- componentName: componentName$i,
20027
+ componentName: componentName$j,
19894
20028
  baseSelector: ':host > .root',
19895
20029
  }) {
19896
20030
  constructor() {
@@ -19903,12 +20037,12 @@ class RawUserAttribute extends createBaseClass({
19903
20037
  <descope-text st-text-align="auto" data-id="value-text" variant="body1" mode="primary" class="value"></descope-text>
19904
20038
  <div class="btn-wrapper">
19905
20039
  <descope-badge mode="default" bordered="true" size="xs"></descope-badge>
19906
- <descope-button size="xs" data-id="edit-btn" square="true" variant="link" mode="primary">
19907
- <slot name="edit-icon"></slot>
19908
- </descope-button>
19909
- <descope-button size="xs" data-id="delete-btn" square="true" variant="link" mode="primary">
20040
+ <descope-button size="sm" data-id="delete-btn" variant="link" mode="primary">
19910
20041
  <slot name="delete-icon"></slot>
19911
20042
  </descope-button>
20043
+ <descope-button size="sm" data-id="edit-btn" variant="link" mode="primary">
20044
+ <slot name="edit-icon"></slot>
20045
+ </descope-button>
19912
20046
  </div>
19913
20047
  </div>
19914
20048
  </div>
@@ -19927,7 +20061,7 @@ class RawUserAttribute extends createBaseClass({
19927
20061
  height: 100%;
19928
20062
  align-items: center;
19929
20063
  }
19930
-
20064
+
19931
20065
  ::slotted(*) {
19932
20066
  display: flex;
19933
20067
  align-items: center;
@@ -19945,6 +20079,14 @@ class RawUserAttribute extends createBaseClass({
19945
20079
  justify-content: space-between;
19946
20080
  align-items: center;
19947
20081
  flex-grow: 0;
20082
+ flex-shrink: 0;
20083
+ }
20084
+
20085
+ slot[name="edit-icon"],
20086
+ slot[name="delete-icon"] {
20087
+ display: inline-flex;
20088
+ flex-shrink: 0;
20089
+ align-items: center;
19948
20090
  }
19949
20091
 
19950
20092
  .content-wrapper {
@@ -19981,6 +20123,7 @@ class RawUserAttribute extends createBaseClass({
19981
20123
 
19982
20124
  .hidden {
19983
20125
  visibility: hidden;
20126
+ width: 0;
19984
20127
  }
19985
20128
 
19986
20129
  descope-text[data-id="label-text"].required:after {
@@ -19990,6 +20133,7 @@ class RawUserAttribute extends createBaseClass({
19990
20133
 
19991
20134
  :host([readonly="true"]) descope-button {
19992
20135
  visibility: hidden;
20136
+ width: 0;
19993
20137
  }
19994
20138
  `,
19995
20139
  this
@@ -20029,6 +20173,21 @@ class RawUserAttribute extends createBaseClass({
20029
20173
  this.badge.setAttribute('title', this.badgeTooltipText || this.badgeLabel);
20030
20174
  }
20031
20175
 
20176
+ updateButtonLabel(btnRef, label) {
20177
+ let textSpanEle = btnRef.querySelector('span.btn-label');
20178
+
20179
+ if (label) {
20180
+ if (!textSpanEle) {
20181
+ textSpanEle = document.createElement('span');
20182
+ textSpanEle.classList.add('btn-label');
20183
+ btnRef.appendChild(textSpanEle);
20184
+ }
20185
+ textSpanEle.innerText = label;
20186
+ } else {
20187
+ textSpanEle?.remove();
20188
+ }
20189
+ }
20190
+
20032
20191
  onIsRequiredChange() {
20033
20192
  this.labelText.classList.toggle('required', this.isRequired);
20034
20193
  }
@@ -20057,12 +20216,26 @@ class RawUserAttribute extends createBaseClass({
20057
20216
  return this.getAttribute('badge-tooltip-text') || '';
20058
20217
  }
20059
20218
 
20219
+ get editButtonLabel() {
20220
+ return this.getAttribute('edit-button-label') || '';
20221
+ }
20222
+
20223
+ get deleteButtonLabel() {
20224
+ return this.getAttribute('delete-button-label') || '';
20225
+ }
20226
+
20227
+ get isDeleteHidden() {
20228
+ return this.getAttribute('hide-delete') === 'true';
20229
+ }
20230
+
20060
20231
  init() {
20061
20232
  this.onLabelChange();
20062
20233
  this.onValueOrPlaceholderChange();
20063
20234
  this.onIsRequiredChange();
20064
20235
  this.onBadgeLabelChange();
20065
20236
  this.onBadgeTooltipTextChange();
20237
+ this.updateButtonLabel(this.editButton, this.editButtonLabel);
20238
+ this.updateButtonLabel(this.deleteButton, this.deleteButtonLabel);
20066
20239
  this.handleDeleteButtonVisibility();
20067
20240
 
20068
20241
  this.deleteButton.addEventListener('click', () =>
@@ -20098,11 +20271,17 @@ class RawUserAttribute extends createBaseClass({
20098
20271
  'required',
20099
20272
  'badge-label',
20100
20273
  'badge-tooltip-text',
20274
+ 'edit-button-label',
20275
+ 'delete-button-label',
20276
+ 'hide-delete',
20101
20277
  ].concat(super.observedAttributes);
20102
20278
  }
20103
20279
 
20104
20280
  handleDeleteButtonVisibility() {
20105
- this.deleteButton.classList.toggle('hidden', this.isRequired || !this.value);
20281
+ this.deleteButton.classList.toggle(
20282
+ 'hidden',
20283
+ this.isRequired || !this.value || this.isDeleteHidden
20284
+ );
20106
20285
  }
20107
20286
 
20108
20287
  attributeChangedCallback(name, oldValue, newValue) {
@@ -20122,9 +20301,13 @@ class RawUserAttribute extends createBaseClass({
20122
20301
  this.onBadgeLabelChange();
20123
20302
  } else if (name === 'badge-tooltip-text') {
20124
20303
  this.onBadgeTooltipTextChange();
20304
+ } else if (name === 'edit-button-label') {
20305
+ this.updateButtonLabel(this.editButton, this.editButtonLabel);
20306
+ } else if (name === 'delete-button-label') {
20307
+ this.updateButtonLabel(this.deleteButton, this.deleteButtonLabel);
20125
20308
  }
20126
20309
 
20127
- if (name === 'value' || name === 'required') {
20310
+ if (name === 'value' || name === 'required' || name === 'hide-delete') {
20128
20311
  this.handleDeleteButtonVisibility();
20129
20312
  }
20130
20313
  }
@@ -20155,6 +20338,7 @@ const UserAttributeClass = compose$1(
20155
20338
  contentMinWidth: { ...contentWrapper, property: 'min-width' },
20156
20339
  badgeMaxWidth: { ...badge$1, property: 'max-width' },
20157
20340
  itemsGap: [{ property: 'gap' }, { ...contentWrapper, property: 'gap' }],
20341
+ iconColor: [{ selector: () => '::slotted(*)', property: IconClass.cssVarList.fill }],
20158
20342
  },
20159
20343
  }),
20160
20344
  draggableMixin,
@@ -20173,6 +20357,7 @@ const userAttribute = {
20173
20357
  [vars$g.hostMinWidth]: '310px',
20174
20358
  [vars$g.hostWidth]: '530px',
20175
20359
  [vars$g.hostMaxWidth]: '100%',
20360
+ [vars$g.iconColor]: 'currentcolor',
20176
20361
 
20177
20362
  _fullWidth: {
20178
20363
  [vars$g.hostWidth]: '100%',
@@ -20187,9 +20372,9 @@ var userAttribute$1 = /*#__PURE__*/Object.freeze({
20187
20372
 
20188
20373
  var greenVIcon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTggMEMzLjYgMCAwIDMuNiAwIDhDMCAxMi40IDMuNiAxNiA4IDE2QzEyLjQgMTYgMTYgMTIuNCAxNiA4QzE2IDMuNiAxMi40IDAgOCAwWk03LjEgMTEuN0wyLjkgNy42TDQuMyA2LjJMNyA4LjlMMTIgNEwxMy40IDUuNEw3LjEgMTEuN1oiIGZpbGw9IiM0Q0FGNTAiLz4KPC9zdmc+Cg==";
20189
20374
 
20190
- const componentName$h = getComponentName$1('user-auth-method');
20375
+ const componentName$i = getComponentName$1('user-auth-method');
20191
20376
  class RawUserAuthMethod extends createBaseClass({
20192
- componentName: componentName$h,
20377
+ componentName: componentName$i,
20193
20378
  baseSelector: ':host > .root',
20194
20379
  }) {
20195
20380
  constructor() {
@@ -20462,11 +20647,11 @@ var userAuthMethod$1 = /*#__PURE__*/Object.freeze({
20462
20647
  vars: vars$f
20463
20648
  });
20464
20649
 
20465
- const componentName$g = getComponentName$1('saml-group-mappings-internal');
20650
+ const componentName$h = getComponentName$1('saml-group-mappings-internal');
20466
20651
 
20467
- createBaseInputClass({ componentName: componentName$g, baseSelector: '' });
20652
+ createBaseInputClass({ componentName: componentName$h, baseSelector: '' });
20468
20653
 
20469
- const componentName$f = getComponentName$1('saml-group-mappings');
20654
+ const componentName$g = getComponentName$1('saml-group-mappings');
20470
20655
 
20471
20656
  const customMixin$1 = (superclass) =>
20472
20657
  class SamlGroupMappingsMixinClass extends superclass {
@@ -20476,14 +20661,14 @@ const customMixin$1 = (superclass) =>
20476
20661
  const template = document.createElement('template');
20477
20662
 
20478
20663
  template.innerHTML = `
20479
- <${componentName$g}
20664
+ <${componentName$h}
20480
20665
  tabindex="-1"
20481
- ></${componentName$g}>
20666
+ ></${componentName$h}>
20482
20667
  `;
20483
20668
 
20484
20669
  this.baseElement.appendChild(template.content.cloneNode(true));
20485
20670
 
20486
- this.inputElement = this.shadowRoot.querySelector(componentName$g);
20671
+ this.inputElement = this.shadowRoot.querySelector(componentName$h);
20487
20672
 
20488
20673
  forwardAttrs$1(this, this.inputElement, {
20489
20674
  includeAttrs: [
@@ -20568,7 +20753,7 @@ const SamlGroupMappingsClass = compose$1(
20568
20753
  'error-message',
20569
20754
  'style',
20570
20755
  ],
20571
- componentName: componentName$f,
20756
+ componentName: componentName$g,
20572
20757
  })
20573
20758
  );
20574
20759
 
@@ -20635,9 +20820,9 @@ var copyIconSrc = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5
20635
20820
 
20636
20821
  var checkIconSrc = "data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iY2hlY2staWNvbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICA8cG9seWxpbmUgcG9pbnRzPSIyMCA2IDkgMTcgNCAxMiI+PC9wb2x5bGluZT4KPC9zdmc+Cg==";
20637
20822
 
20638
- const componentName$e = getComponentName$1('code-snippet');
20823
+ const componentName$f = getComponentName$1('code-snippet');
20639
20824
 
20640
- let CodeSnippet$1 = class CodeSnippet extends createBaseClass({ componentName: componentName$e, baseSelector: ':host > .wrapper' }) {
20825
+ let CodeSnippet$1 = class CodeSnippet extends createBaseClass({ componentName: componentName$f, baseSelector: ':host > .wrapper' }) {
20641
20826
  static get observedAttributes() {
20642
20827
  return ['lang', 'inline', 'copy-button'];
20643
20828
  }
@@ -21120,7 +21305,7 @@ var codeSnippet = /*#__PURE__*/Object.freeze({
21120
21305
  vars: vars$c
21121
21306
  });
21122
21307
 
21123
- const componentName$d = getComponentName$1('radio-button');
21308
+ const componentName$e = getComponentName$1('radio-button');
21124
21309
 
21125
21310
  const customMixin = (superclass) =>
21126
21311
  class CustomMixin extends superclass {
@@ -21185,11 +21370,11 @@ const RadioButtonClass = compose$1(
21185
21370
  wrappedEleName: 'vaadin-radio-button',
21186
21371
  excludeAttrsSync: ['tabindex', 'data', 'style'],
21187
21372
  includeForwardProps: ['checked', 'name', 'disabled'],
21188
- componentName: componentName$d,
21373
+ componentName: componentName$e,
21189
21374
  })
21190
21375
  );
21191
21376
 
21192
- const componentName$c = getComponentName$1('radio-group');
21377
+ const componentName$d = getComponentName$1('radio-group');
21193
21378
 
21194
21379
  const RadioGroupMixin = (superclass) =>
21195
21380
  class RadioGroupMixinClass extends superclass {
@@ -21203,12 +21388,12 @@ const RadioGroupMixin = (superclass) =>
21203
21388
 
21204
21389
  // we are overriding vaadin children getter so it will run on our custom elements
21205
21390
  Object.defineProperty(this.baseElement, 'children', {
21206
- get: () => this.querySelectorAll(componentName$d),
21391
+ get: () => this.querySelectorAll(componentName$e),
21207
21392
  });
21208
21393
 
21209
21394
  // we are overriding vaadin __filterRadioButtons so it will run on our custom elements
21210
21395
  this.baseElement.__filterRadioButtons = (nodes) =>
21211
- nodes.filter((node) => node.localName === componentName$d);
21396
+ nodes.filter((node) => node.localName === componentName$e);
21212
21397
 
21213
21398
  // vaadin radio group missing some input properties
21214
21399
  this.baseElement.setCustomValidity = () => {};
@@ -21354,7 +21539,7 @@ const RadioGroupClass = compose$1(
21354
21539
  `,
21355
21540
 
21356
21541
  excludeAttrsSync: ['tabindex', 'size', 'data', 'direction', 'style'],
21357
- componentName: componentName$c,
21542
+ componentName: componentName$d,
21358
21543
  includeForwardProps: ['value'],
21359
21544
  })
21360
21545
  );
@@ -21800,7 +21985,7 @@ const nextMonth = (epoch) => {
21800
21985
  return date;
21801
21986
  };
21802
21987
 
21803
- const componentName$b = getComponentName$1('calendar');
21988
+ const componentName$c = getComponentName$1('calendar');
21804
21989
 
21805
21990
  const observedAttrs$1 = [
21806
21991
  'initial-value',
@@ -21817,7 +22002,7 @@ const observedAttrs$1 = [
21817
22002
 
21818
22003
  const calendarUiAttrs = ['calendar-label-submit', 'calendar-label-cancel'];
21819
22004
 
21820
- const BaseInputClass$2 = createBaseInputClass({ componentName: componentName$b, baseSelector: 'div' });
22005
+ const BaseInputClass$2 = createBaseInputClass({ componentName: componentName$c, baseSelector: 'div' });
21821
22006
 
21822
22007
  class RawCalendar extends BaseInputClass$2 {
21823
22008
  static get observedAttributes() {
@@ -22646,12 +22831,12 @@ class DateCounter {
22646
22831
  }
22647
22832
  }
22648
22833
 
22649
- const componentName$a = getComponentName$1('date-field');
22834
+ const componentName$b = getComponentName$1('date-field');
22650
22835
 
22651
22836
  // we set baseSelector to `vaadin-popover` as a temporary hack, so our portalMixin will
22652
22837
  // be able to process this component's overlay. The whole process needs refactoring as soon as possible.
22653
22838
  const BASE_SELECTOR = 'vaadin-popover';
22654
- const BaseInputClass$1 = createBaseInputClass({ componentName: componentName$a, baseSelector: BASE_SELECTOR });
22839
+ const BaseInputClass$1 = createBaseInputClass({ componentName: componentName$b, baseSelector: BASE_SELECTOR });
22655
22840
 
22656
22841
  const dateFieldAttrs = [
22657
22842
  'format',
@@ -23731,7 +23916,7 @@ const createDynamicDataMixin =
23731
23916
  }
23732
23917
  };
23733
23918
 
23734
- const componentName$9 = getComponentName$1('scopes-list');
23919
+ const componentName$a = getComponentName$1('scopes-list');
23735
23920
  const variants = ['checkbox', 'switch'];
23736
23921
 
23737
23922
  const itemRenderer = ({ id, desc, required = false }, _, ref) => {
@@ -23750,7 +23935,7 @@ const itemRenderer = ({ id, desc, required = false }, _, ref) => {
23750
23935
  `;
23751
23936
  };
23752
23937
 
23753
- class RawScopesList extends createBaseClass({ componentName: componentName$9, baseSelector: 'div' }) {
23938
+ class RawScopesList extends createBaseClass({ componentName: componentName$a, baseSelector: 'div' }) {
23754
23939
  constructor() {
23755
23940
  super();
23756
23941
 
@@ -23874,9 +24059,9 @@ var scopesList$1 = /*#__PURE__*/Object.freeze({
23874
24059
 
23875
24060
  var arrowsImg = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjkiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCAyOSAyOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTkuMTQ0OTIgMTUuNjQ1TDcuNDk5OTIgMTRMMi44MzMyNSAxOC42NjY3TDcuNDk5OTIgMjMuMzMzM0w5LjE0NDkyIDIxLjY4ODNMNy4zMDE1OSAxOS44MzMzSDI0Ljk5OTlWMTcuNUg3LjMwMTU5TDkuMTQ0OTIgMTUuNjQ1WiIgZmlsbD0iIzYzNkM3NCIvPgo8cGF0aCBkPSJNMTkuODU1IDEyLjM1NTNMMjEuNSAxNC4wMDAzTDI2LjE2NjcgOS4zMzM2NkwyMS41IDQuNjY2OTlMMTkuODU1IDYuMzExOTlMMjEuNjk4MyA4LjE2Njk5SDRWMTAuNTAwM0gyMS42OTgzTDE5Ljg1NSAxMi4zNTUzWiIgZmlsbD0iIzYzNkM3NCIvPgo8L3N2Zz4K";
23876
24061
 
23877
- const componentName$8 = getComponentName$1('third-party-app-logo');
24062
+ const componentName$9 = getComponentName$1('third-party-app-logo');
23878
24063
  class RawThirdPartyAppLogoClass extends createBaseClass({
23879
- componentName: componentName$8,
24064
+ componentName: componentName$9,
23880
24065
  baseSelector: '.wrapper',
23881
24066
  }) {
23882
24067
  constructor() {
@@ -24009,7 +24194,7 @@ var thirdPartyAppLogo$1 = /*#__PURE__*/Object.freeze({
24009
24194
  vars: vars$6
24010
24195
  });
24011
24196
 
24012
- const componentName$7 = getComponentName$1('security-questions-setup');
24197
+ const componentName$8 = getComponentName$1('security-questions-setup');
24013
24198
 
24014
24199
  const attrsToSync$1 = [
24015
24200
  'full-width',
@@ -24028,7 +24213,7 @@ const attrsToSync$1 = [
24028
24213
  ];
24029
24214
 
24030
24215
  const attrsToReRender$1 = ['count', 'questions'];
24031
- class RawSecurityQuestionsSetup extends createBaseClass({ componentName: componentName$7, baseSelector: 'div' }) {
24216
+ class RawSecurityQuestionsSetup extends createBaseClass({ componentName: componentName$8, baseSelector: 'div' }) {
24032
24217
  constructor() {
24033
24218
  super();
24034
24219
 
@@ -24136,7 +24321,7 @@ class RawSecurityQuestionsSetup extends createBaseClass({ componentName: compone
24136
24321
  return JSON.parse(this.getAttribute('questions')) || [];
24137
24322
  } catch (e) {
24138
24323
  // eslint-disable-next-line no-console
24139
- console.error(componentName$7, 'Error parsing questions attribute', e);
24324
+ console.error(componentName$8, 'Error parsing questions attribute', e);
24140
24325
  return [];
24141
24326
  }
24142
24327
  }
@@ -24258,7 +24443,7 @@ var securityQuestionsSetup$1 = /*#__PURE__*/Object.freeze({
24258
24443
  vars: vars$5
24259
24444
  });
24260
24445
 
24261
- const componentName$6 = getComponentName$1('security-questions-verify');
24446
+ const componentName$7 = getComponentName$1('security-questions-verify');
24262
24447
 
24263
24448
  const textFieldsAttrs = [
24264
24449
  'full-width',
@@ -24282,7 +24467,7 @@ const attrMappings = {
24282
24467
  const attrsToSync = [...textFieldsAttrs, ...textsAttrs];
24283
24468
 
24284
24469
  const attrsToReRender = ['questions'];
24285
- class RawSecurityQuestionsVerify extends createBaseClass({ componentName: componentName$6, baseSelector: 'div' }) {
24470
+ class RawSecurityQuestionsVerify extends createBaseClass({ componentName: componentName$7, baseSelector: 'div' }) {
24286
24471
  constructor() {
24287
24472
  super();
24288
24473
 
@@ -24356,7 +24541,7 @@ class RawSecurityQuestionsVerify extends createBaseClass({ componentName: compon
24356
24541
  return JSON.parse(this.getAttribute('questions')) || [];
24357
24542
  } catch (e) {
24358
24543
  // eslint-disable-next-line no-console
24359
- console.error(componentName$6, 'Error parsing questions attribute', e);
24544
+ console.error(componentName$7, 'Error parsing questions attribute', e);
24360
24545
  return [];
24361
24546
  }
24362
24547
  }
@@ -24515,7 +24700,7 @@ const isNumericValue = (val) => !!val && !INVALID_PHONE_CHARS_RE.test(val);
24515
24700
 
24516
24701
  const sanitizeCountryCodePrefix = (val) => val.replace(/\+\d+-/, '');
24517
24702
 
24518
- const componentName$5 = getComponentName$1('hybrid-field');
24703
+ const componentName$6 = getComponentName$1('hybrid-field');
24519
24704
 
24520
24705
  const attrs = {
24521
24706
  shared: [
@@ -24582,7 +24767,7 @@ const PHONE_FIELD = 'descope-phone-field';
24582
24767
  const PHONE_INPUT_BOX_FIELD = 'descope-phone-input-box-field';
24583
24768
 
24584
24769
  const BaseClass$2 = createBaseClass({
24585
- componentName: componentName$5,
24770
+ componentName: componentName$6,
24586
24771
  baseSelector: 'div',
24587
24772
  });
24588
24773
 
@@ -24993,9 +25178,9 @@ var hybridField$1 = /*#__PURE__*/Object.freeze({
24993
25178
  vars: vars$3
24994
25179
  });
24995
25180
 
24996
- const componentName$4 = getComponentName$1('alert');
25181
+ const componentName$5 = getComponentName$1('alert');
24997
25182
 
24998
- class RawAlert extends createBaseClass({ componentName: componentName$4, baseSelector: ':host > div' }) {
25183
+ class RawAlert extends createBaseClass({ componentName: componentName$5, baseSelector: ':host > div' }) {
24999
25184
  constructor() {
25000
25185
  super();
25001
25186
 
@@ -25203,11 +25388,11 @@ var alert$1 = /*#__PURE__*/Object.freeze({
25203
25388
  vars: vars$2
25204
25389
  });
25205
25390
 
25206
- const componentName$3 = getComponentName$1('hcaptcha');
25391
+ const componentName$4 = getComponentName$1('hcaptcha');
25207
25392
 
25208
25393
  const observedAttributes$1 = ['enabled', 'site-key'];
25209
25394
 
25210
- const BaseInputClass = createBaseInputClass({ componentName: componentName$3, baseSelector: ':host > div' });
25395
+ const BaseInputClass = createBaseInputClass({ componentName: componentName$4, baseSelector: ':host > div' });
25211
25396
  class RawHcaptcha extends BaseInputClass {
25212
25397
  static get observedAttributes() {
25213
25398
  return observedAttributes$1.concat(BaseInputClass.observedAttributes || []);
@@ -25489,12 +25674,12 @@ const darkTheme = merge({}, defaultTheme, {
25489
25674
  },
25490
25675
  });
25491
25676
 
25492
- const componentName$2 = getComponentName$1('recaptcha');
25677
+ const componentName$3 = getComponentName$1('recaptcha');
25493
25678
 
25494
25679
  const observedAttributes = ['enabled', 'site-key', 'action', 'enterprise', 'variant'];
25495
25680
 
25496
25681
  const BaseClass$1 = createBaseClass({
25497
- componentName: componentName$2,
25682
+ componentName: componentName$3,
25498
25683
  baseSelector: ':host > div',
25499
25684
  });
25500
25685
  class RawRecaptcha extends BaseClass$1 {
@@ -25792,7 +25977,7 @@ class RawRecaptcha extends BaseClass$1 {
25792
25977
 
25793
25978
  const RecaptchaClass = compose$1(draggableMixin)(RawRecaptcha);
25794
25979
 
25795
- const componentName$1 = getComponentName$1('notification');
25980
+ const componentName$2 = getComponentName$1('notification');
25796
25981
 
25797
25982
  const NotificationMixin = (superclass) =>
25798
25983
  class NotificationMixinClass extends superclass {
@@ -25885,10 +26070,169 @@ const NotificationClass = compose$1(
25885
26070
  createProxy({
25886
26071
  wrappedEleName: 'vaadin-notification',
25887
26072
  excludeAttrsSync: ['tabindex', 'style'],
25888
- componentName: componentName$1,
26073
+ componentName: componentName$2,
25889
26074
  })
25890
26075
  );
25891
26076
 
26077
+ const componentName$1 = getComponentName('anchored');
26078
+
26079
+ class RawAnchored extends createBaseClass$1({
26080
+ componentName: componentName$1,
26081
+ baseSelector: '.anchored-root',
26082
+ }) {
26083
+ #stretchObserver = null;
26084
+
26085
+ #directionObserver = null;
26086
+
26087
+ #hostStretchSheet = null;
26088
+
26089
+ get #anchor() {
26090
+ return this.defaultSlot.assignedElements({ flatten: true })[0];
26091
+ }
26092
+
26093
+ get #anchored() {
26094
+ return this.shadowRoot
26095
+ .querySelector('slot[name="anchored"]')
26096
+ ?.assignedElements()[0];
26097
+ }
26098
+
26099
+ get #outerHost() {
26100
+ return this.getRootNode().host;
26101
+ }
26102
+
26103
+ constructor() {
26104
+ super();
26105
+
26106
+ this.attachShadow({ mode: 'open' }).innerHTML = `
26107
+ <div class="anchored-root" part="root">
26108
+ <slot></slot>
26109
+ <div class="anchored-host" part="anchored">
26110
+ <slot name="anchored"></slot>
26111
+ </div>
26112
+ </div>
26113
+ `;
26114
+
26115
+ this.defaultSlot = this.shadowRoot.querySelector('slot:not([name])');
26116
+ }
26117
+
26118
+ init() {
26119
+ super.init?.();
26120
+
26121
+ injectStyle(
26122
+ `
26123
+ :host {
26124
+ display: inline-flex;
26125
+ position: relative;
26126
+ box-sizing: border-box;
26127
+ }
26128
+
26129
+ :host(:not([has-anchor])) {
26130
+ display: none;
26131
+ }
26132
+
26133
+ .anchored-root {
26134
+ position: relative;
26135
+ display: flex;
26136
+ width: 100%;
26137
+ min-width: 0;
26138
+ }
26139
+
26140
+ /* Make anchor fill the flex row and allow it to shrink. */
26141
+ ::slotted(*:not([slot])) {
26142
+ flex-grow: 1; /* fill the flex row */
26143
+ flex-shrink: 1; /* compress when constrained */
26144
+ flex-basis: auto; /* start from the anchor's natural size */
26145
+ min-width: 0; /* flex items won't shrink below content size without this */
26146
+ }
26147
+
26148
+ /* Anchored container covers the anchor but is invisible to pointer events. */
26149
+ .anchored-host {
26150
+ position: absolute;
26151
+ inset: 0;
26152
+ pointer-events: none;
26153
+ }
26154
+
26155
+ /* Restore interactivity for actual anchored content. */
26156
+ ::slotted([slot="anchored"]) {
26157
+ pointer-events: auto;
26158
+ }
26159
+ `,
26160
+ this,
26161
+ );
26162
+
26163
+ this.#syncStretchCSS();
26164
+
26165
+ this.defaultSlot.addEventListener('slotchange', () => this.#syncAnchor());
26166
+
26167
+ this.#syncAnchor();
26168
+ }
26169
+
26170
+ #syncAnchor() {
26171
+ this.#onAnchorChanged();
26172
+
26173
+ this.#stretchObserver = this.#forwardAttr(
26174
+ this.#stretchObserver,
26175
+ this.#outerHost,
26176
+ 'stretch',
26177
+ );
26178
+
26179
+ this.#directionObserver = this.#forwardAttr(
26180
+ this.#directionObserver,
26181
+ this.#anchored,
26182
+ 'st-host-direction',
26183
+ );
26184
+ }
26185
+
26186
+ // Injects [stretch] layout rules into the containing component's shadow root (e.g. descope-attachment)
26187
+ // so it stretches when the anchor has [stretch]. Replaces the existing rules on subsequent calls.
26188
+ #syncStretchCSS() {
26189
+ const css = `
26190
+ descope-anchored {
26191
+ width: 100%; /* fill the outer host so the anchored element spans the full anchor width */
26192
+ }
26193
+ :host([stretch]) {
26194
+ display: inline-flex; /* switch from inline-block so internal children are flex items */
26195
+ width: 100%; /* fill non-flex parents */
26196
+ flex-grow: 1; /* absorb extra space in flex parents */
26197
+ flex-shrink: 0; /* hold full width — shrink:1 would let siblings squeeze it below 100% */
26198
+ flex-basis: 100%; /* start at full width before grow/shrink */
26199
+ min-width: 0; /* prevent overflow when the outer host is itself inside a constrained flex row */
26200
+ }
26201
+ `;
26202
+
26203
+ if (this.#hostStretchSheet) {
26204
+ this.#hostStretchSheet.replaceSync(css);
26205
+ } else if (this.#outerHost) {
26206
+ this.#hostStretchSheet = injectStyle(css, this.#outerHost);
26207
+ }
26208
+ }
26209
+
26210
+ // Reconnects forwarding to the current anchor. Disconnects the old observer and
26211
+ // removes the stale attr from target first — forwardAttrs only sets attrs present
26212
+ // on the source, so absent attrs won't be removed automatically.
26213
+ #forwardAttr(observer, target, attr) {
26214
+ observer?.disconnect();
26215
+ target?.removeAttribute(attr);
26216
+ if (!this.#anchor || !target) return null;
26217
+ return forwardAttrs(this.#anchor, target, { includeAttrs: [attr] });
26218
+ }
26219
+
26220
+ // Prevent stale callbacks from firing on a detached anchor after removal.
26221
+ disconnectedCallback() {
26222
+ super.disconnectedCallback?.();
26223
+ this.#stretchObserver?.disconnect();
26224
+ this.#directionObserver?.disconnect();
26225
+ }
26226
+
26227
+ // Track whether anything is slotted, so the host display rule can hide an
26228
+ // empty host rather than reserving its layout box.
26229
+ #onAnchorChanged() {
26230
+ this.toggleAttribute('has-anchor', !!this.#anchor);
26231
+ }
26232
+ }
26233
+
26234
+ const AnchoredClass = compose(componentNameValidationMixin$1)(RawAnchored);
26235
+
25892
26236
  // NOTICE: This component registers with a DIFFERENT name than its file name
25893
26237
  const componentName = getComponentName('ponyhot');
25894
26238
 
@@ -26009,6 +26353,7 @@ var calcScore = /*#__PURE__*/Object.freeze({
26009
26353
 
26010
26354
  exports.AddressFieldClass = AddressFieldClass;
26011
26355
  exports.AlertClass = AlertClass;
26356
+ exports.AnchoredClass = AnchoredClass;
26012
26357
  exports.AppsListClass = AppsListClass;
26013
26358
  exports.AttachmentClass = AttachmentClass;
26014
26359
  exports.AutocompleteFieldClass = AutocompleteFieldClass;