@descope/web-components-ui 1.0.243 → 1.0.245

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.esm.js CHANGED
@@ -10,6 +10,7 @@ import '@vaadin/combo-box';
10
10
  import '@vaadin/grid';
11
11
  import { GridSortColumn } from '@vaadin/grid/vaadin-grid-sort-column';
12
12
  import { GridSelectionColumn } from '@vaadin/grid/vaadin-grid-selection-column';
13
+ import '@vaadin/multi-select-combo-box';
13
14
  import merge from 'lodash.merge';
14
15
  import set from 'lodash.set';
15
16
  import Color from 'color';
@@ -6730,8 +6731,6 @@ const ButtonSelectionGroupClass = compose(
6730
6731
 
6731
6732
  customElements.define(componentName$b, ButtonSelectionGroupInternalClass);
6732
6733
 
6733
- customElements.define(componentName$a, ButtonSelectionGroupClass);
6734
-
6735
6734
  const componentName$9 = getComponentName('button-selection-group-item');
6736
6735
 
6737
6736
  class RawSelectItem extends createBaseClass({
@@ -6835,6 +6834,8 @@ const ButtonSelectionGroupItemClass = compose(
6835
6834
 
6836
6835
  customElements.define(componentName$9, ButtonSelectionGroupItemClass);
6837
6836
 
6837
+ customElements.define(componentName$a, ButtonSelectionGroupClass);
6838
+
6838
6839
  class GridTextColumnClass extends GridSortColumn {
6839
6840
  get sortable() {
6840
6841
  return this.getAttribute('sortable') === 'true';
@@ -6867,7 +6868,7 @@ class GridCustomColumnClass extends GridTextColumnClass {
6867
6868
  // we are going over the elements, and when finding an element which is pattern matches the data,
6868
6869
  // we are cloning this element, and injecting the data as its child
6869
6870
  const contentEle = Array.from(this.children).find((child) => {
6870
- const pattern = child.getAttribute('pattern');
6871
+ const pattern = child.getAttribute('data-pattern');
6871
6872
  if (!pattern) return true;
6872
6873
 
6873
6874
  const regEx = new RegExp(pattern);
@@ -6902,7 +6903,8 @@ const createCheckboxEle = () => {
6902
6903
  return checkbox;
6903
6904
  };
6904
6905
 
6905
- const getIsAllItemsSelected = (grid) => grid.selectedItems.length === grid.items?.length;
6906
+ const getIsAllItemsSelected = (grid) =>
6907
+ !!grid.items?.length && grid.selectedItems.length === grid.items.length;
6906
6908
 
6907
6909
  class GridSelectionColumnClass extends GridSelectionColumn {
6908
6910
  // eslint-disable-next-line class-methods-use-this
@@ -7201,173 +7203,720 @@ const GridClass = compose(
7201
7203
 
7202
7204
  customElements.define(componentName$5, GridClass);
7203
7205
 
7204
- const getVarName = (path) => getCssVarName(DESCOPE_PREFIX, ...path);
7205
-
7206
- const transformTheme = (theme, path, getTransformation) => {
7207
- return Object.entries(theme).reduce((acc, [key, val]) => {
7208
- if (val?.constructor !== Object) {
7209
- return merge(acc, getTransformation(path.concat(key), val));
7210
- }
7211
- return merge(acc, transformTheme(val, [...path, key], getTransformation));
7212
- }, {});
7213
- };
7214
-
7215
- const stringifyArray = (strArr) =>
7216
- strArr.map((str) => (str.includes(' ') ? `"${str}"` : str)).join(', ');
7206
+ const componentName$4 = getComponentName('multi-select-combo-box');
7217
7207
 
7218
- const getCssVarValue = (val) => {
7219
- switch (true) {
7220
- case Array.isArray(val):
7221
- return stringifyArray(val);
7222
- case isUrl(val):
7223
- return `url(${val})`;
7224
- default:
7225
- return val;
7226
- }
7227
- };
7208
+ const MultiSelectComboBoxMixin = (superclass) =>
7209
+ class MultiSelectComboBoxMixinClass extends superclass {
7210
+ // eslint-disable-next-line class-methods-use-this
7211
+ #renderItem = ({ displayName, value, label }) => {
7212
+ return `<span data-name="${label}" data-id="${value}">${displayName || label}</span>`;
7213
+ };
7228
7214
 
7229
- const themeToCSSVarsObj = (theme) =>
7230
- transformTheme(theme, [], (path, val) => ({
7231
- [getVarName(path)]: getCssVarValue(val),
7232
- }));
7215
+ #data;
7233
7216
 
7234
- const getThemeRefs = (theme, prefix) =>
7235
- transformTheme(theme, [], (path) =>
7236
- set({}, path, `var(${getVarName(prefix ? [prefix, ...path] : path)})`)
7237
- );
7217
+ get defaultValues() {
7218
+ const defaultValuesAttr = this.getAttribute('default-values');
7219
+ if (defaultValuesAttr) {
7220
+ try {
7221
+ const defaultValues = JSON.parse(defaultValuesAttr);
7222
+ if (this.isValidDataType(defaultValues)) {
7223
+ return defaultValues;
7224
+ }
7225
+ } catch (e) {
7226
+ // eslint-disable-next-line no-console
7227
+ console.error('could not parse data string from attribute "default-values" -', e.message);
7228
+ }
7229
+ }
7230
+ return [];
7231
+ }
7238
7232
 
7239
- const getThemeVars = (theme, prefix) =>
7240
- transformTheme(theme, [], (path) => set({}, path, getVarName(prefix ? [prefix, ...path] : path)));
7233
+ get renderItem() {
7234
+ return this.#renderItem;
7235
+ }
7241
7236
 
7242
- const globalsThemeToStyle = (theme, themeName = '') => {
7243
- const style = Object.entries(themeToCSSVarsObj(theme)).reduce(
7244
- (acc, entry) => `${acc}${entry.join(':')};\n`,
7245
- ''
7246
- );
7237
+ set renderItem(renderFn) {
7238
+ this.#renderItem = renderFn;
7239
+ this.renderItems();
7240
+ }
7247
7241
 
7248
- if (!themeName) return style;
7242
+ get data() {
7243
+ if (this.#data) return this.#data;
7249
7244
 
7250
- return `*[data-theme="${themeName}"] {${style}}`;
7251
- };
7245
+ const dataAttr = this.getAttribute('data');
7252
7246
 
7253
- const componentsThemeToStyleObj = (componentsTheme) =>
7254
- transformTheme(componentsTheme, [], (path, val) => {
7255
- const [component, ...restPath] = path;
7256
- const property = restPath.pop();
7257
- const componentName = getComponentName(component);
7247
+ if (dataAttr) {
7248
+ try {
7249
+ const data = JSON.parse(dataAttr);
7250
+ if (this.isValidDataType(data)) {
7251
+ return data;
7252
+ }
7253
+ } catch (e) {
7254
+ // eslint-disable-next-line no-console
7255
+ console.error('could not parse data string from attribute "data" -', e.message);
7256
+ }
7257
+ }
7258
7258
 
7259
- if (property === 'undefined') {
7260
- // eslint-disable-next-line no-console
7261
- console.warn(componentName, `theme value: "${val}" is mapped to an invalid property`);
7259
+ return [];
7262
7260
  }
7263
7261
 
7264
- // we need a support for portal components theme (e.g. overlay)
7265
- // this allows us to generate those themes under different sections
7266
- // if the theme has root level attribute that starts with #
7267
- // we are generating a new theme
7268
- let themeName = BASE_THEME_SECTION;
7262
+ set data(data) {
7263
+ if (this.isValidDataType(data)) {
7264
+ this.#data = data;
7265
+ this.renderItems();
7266
+ }
7267
+ }
7269
7268
 
7270
- if (restPath[0] && restPath[0].startsWith(PORTAL_THEME_PREFIX)) {
7271
- themeName = restPath.shift();
7269
+ get allowCustomValue() {
7270
+ return this.getAttribute('allow-custom-value') === 'true';
7272
7271
  }
7273
7272
 
7274
- // do not start with underscore -> key:value, must have 2 no underscore attrs in a row
7275
- // starts with underscore -> attribute selector
7276
- const attrsSelector = restPath.reduce((acc, section, idx) => {
7277
- if (section.startsWith('_')) return `${acc}[${kebabCase(section.replace(/^_/, ''))}="true"]`;
7273
+ get minItemsSelection() {
7274
+ return parseInt(this.getAttribute('min-items-selection'), 10) || 0;
7275
+ }
7278
7276
 
7279
- const nextSection = restPath[idx + 1];
7277
+ get maxItemsSelection() {
7278
+ return parseInt(this.getAttribute('max-items-selection'), 10) || 0;
7279
+ }
7280
7280
 
7281
- if (typeof nextSection !== 'string' || nextSection.startsWith('_')) {
7281
+ // eslint-disable-next-line class-methods-use-this
7282
+ isValidDataType(data) {
7283
+ const isValid = Array.isArray(data);
7284
+ if (!isValid) {
7282
7285
  // eslint-disable-next-line no-console
7283
- console.error(
7284
- 'theme generator',
7285
- `your theme structure is invalid, attribute "${section}" is followed by "${nextSection}" which is not allowed`
7286
- );
7287
- return acc;
7286
+ console.error('data and default-values must be an array, received:', data);
7288
7287
  }
7289
7288
 
7290
- return `${acc}[${kebabCase(section)}="${restPath.splice(idx + 1, 1).join('')}"]`;
7291
- }, '');
7289
+ return isValid;
7290
+ }
7292
7291
 
7293
- const selector = `:host${attrsSelector ? `(${attrsSelector})` : ''}`;
7292
+ getItemsTemplate() {
7293
+ return this.data?.reduce?.((acc, item) => acc + (this.renderItem?.(item || {}) || ''), '');
7294
+ }
7294
7295
 
7295
- return {
7296
- [componentName]: {
7297
- [themeName]: {
7298
- [selector]: {
7299
- [property]: getCssVarValue(val),
7300
- },
7301
- },
7302
- },
7303
- };
7304
- });
7296
+ renderItems() {
7297
+ const template = this.getItemsTemplate();
7298
+ if (template) this.innerHTML = template;
7299
+ }
7305
7300
 
7306
- const componentsThemeToStyle = (componentsTheme) =>
7307
- Object.entries(componentsTheme).reduce(
7308
- (acc, [selector, vars]) =>
7309
- `${acc}${selector} { \n${Object.entries(vars)
7310
- .map(([key, val]) => `${key}: ${val}`)
7311
- .join(';\n')} \n}\n\n`,
7312
- ''
7313
- );
7301
+ handleSelectedItems() {
7302
+ const currentSelected =
7303
+ this.baseElement.selectedItems?.map((item) => item.getAttribute('data-id')) || [];
7314
7304
 
7315
- const createComponentsTheme = (componentsTheme) => {
7316
- const styleObj = componentsThemeToStyleObj(componentsTheme);
7305
+ this.baseElement.selectedItems = [];
7317
7306
 
7318
- return Object.keys(styleObj).reduce((acc, componentName) => {
7319
- const componentThemes = styleObj[componentName];
7307
+ // if previously selected item ID exists in current children, set it as selected
7308
+ if (currentSelected.length > 0) {
7309
+ this.value = currentSelected;
7310
+ }
7320
7311
 
7321
- return Object.assign(acc, {
7322
- [componentName]: Object.keys(componentThemes).reduce(
7323
- (res, theme) =>
7324
- Object.assign(res, { [theme]: componentsThemeToStyle(componentThemes[theme]) }),
7325
- {}
7326
- ),
7327
- });
7328
- }, {});
7329
- };
7312
+ // otherwise, if default value is specified, set default value as selected item
7313
+ if (this.value.length === 0) {
7314
+ this.setDefaultValues();
7315
+ }
7316
+ }
7330
7317
 
7331
- const themeToStyle = ({ globals, components }, themeName) => ({
7332
- globals: globalsThemeToStyle(globals, themeName),
7333
- components: createComponentsTheme(components),
7334
- });
7318
+ // eslint-disable-next-line class-methods-use-this
7319
+ customValueTransformFn(val) {
7320
+ return val;
7321
+ }
7335
7322
 
7336
- const useVar = (varName) => `var(${varName})`;
7323
+ // We want to override Vaadin's Combo Box value setter. This is needed since Vaadin couples between the
7324
+ // field that it searches the value, and the finaly display value of the input.
7325
+ // We provide a custom transform function to override that behavior.
7326
+ setComboBoxDescriptor() {
7327
+ const valueDescriptor = Object.getOwnPropertyDescriptor(
7328
+ this.inputElement.constructor.prototype,
7329
+ 'value'
7330
+ );
7337
7331
 
7338
- const createHelperVars = (theme, prefix) => {
7339
- const res = transformTheme(theme, [], (path, value) => {
7340
- const modifiedPath = [...path];
7341
- const property = modifiedPath.splice(-1);
7342
- const varName = getCssVarName(prefix, property);
7332
+ const comboBox = this;
7343
7333
 
7344
- const vars = { [property]: varName };
7345
- const useVars = { [property]: useVar(varName) };
7334
+ Object.defineProperties(this.inputElement, {
7335
+ value: {
7336
+ ...valueDescriptor,
7337
+ set(val) {
7338
+ const transformedValue = comboBox.customValueTransformFn(val) || '';
7346
7339
 
7347
- return { theme: set({}, [...modifiedPath, varName], value), useVars, vars };
7348
- });
7340
+ if (transformedValue === this.value) {
7341
+ return;
7342
+ }
7349
7343
 
7350
- return [res.theme, res.useVars, res.vars];
7351
- };
7344
+ valueDescriptor.set.call(this, transformedValue);
7345
+ },
7346
+ },
7347
+ });
7348
+ }
7352
7349
 
7353
- const genDark = (c, percentage = 0.5) => c.darken(percentage).hex();
7354
- const genLight = (c, percentage = 0.5) => c.lighten(percentage).hex();
7355
- const genContrast = (c, percentage = 0.9) => {
7356
- const isDark = c.isDark();
7357
- return c
7358
- .mix(Color(isDark ? 'white' : 'black'), percentage)
7359
- .saturate(1)
7360
- .hex();
7361
- };
7350
+ // vaadin api is to set props on their combo box node,
7351
+ // in order to avoid it, we are passing the children of this component
7352
+ // to the items & renderer props, so it will be used as the combo box items
7353
+ #onChildrenChange() {
7354
+ const items = Array.from(this.children);
7362
7355
 
7363
- const genColor = (color) => {
7364
- const mainColor = new Color(color.main || color);
7356
+ // we want the data-name attribute to be accessible as an object attribute
7357
+ if (items.length) {
7358
+ this.removeAttribute('has-no-options');
7365
7359
 
7366
- return {
7367
- main: mainColor.hex(),
7368
- dark: color.dark || genDark(mainColor),
7369
- light: color.light || genLight(mainColor),
7370
- contrast: color.contrast || genContrast(mainColor),
7360
+ items.forEach((node) => {
7361
+ Object.defineProperty(node, 'data-name', {
7362
+ value: node.getAttribute('data-name'),
7363
+ configurable: true,
7364
+ writable: true,
7365
+ });
7366
+ Object.defineProperty(node, 'data-id', {
7367
+ value: node.getAttribute('data-id'),
7368
+ configurable: true,
7369
+ writable: true,
7370
+ });
7371
+ });
7372
+
7373
+ this.baseElement.items = items;
7374
+
7375
+ setTimeout(() => {
7376
+ // set timeout to ensure this runs after customValueTransformFn had the chance to be overriden
7377
+ this.handleSelectedItems();
7378
+ }, 0);
7379
+ } else {
7380
+ this.baseElement.items = [];
7381
+ this.setAttribute('has-no-options', '');
7382
+ }
7383
+
7384
+ // use vaadin combobox custom renderer to render options as HTML
7385
+ // and not via default renderer, which renders only the data-name's value
7386
+ // in its own HTML template
7387
+ this.baseElement.renderer = (root, combo, model) => {
7388
+ // eslint-disable-next-line no-param-reassign
7389
+ root.innerHTML = model.item.outerHTML;
7390
+ };
7391
+ }
7392
+
7393
+ // the default vaadin behavior is to attach the overlay to the body when opened
7394
+ // we do not want that because it's difficult to style the overlay in this way
7395
+ // so we override it to open inside the shadow DOM
7396
+ #overrideOverlaySettings() {
7397
+ const overlay = this.baseElement.shadowRoot
7398
+ .querySelector('vaadin-multi-select-combo-box-internal')
7399
+ .shadowRoot.querySelector('vaadin-multi-select-combo-box-overlay');
7400
+ overlay._attachOverlay = () => {
7401
+ overlay.bringToFront();
7402
+ };
7403
+ overlay._detachOverlay = () => {};
7404
+ overlay._enterModalState = () => {};
7405
+ }
7406
+
7407
+ #handleCustomValues() {
7408
+ if (this.allowCustomValue) {
7409
+ this.baseElement.addEventListener('custom-value-set', (e) => {
7410
+ const newItemHtml = this.#renderItem({
7411
+ label: e.detail,
7412
+ displayName: e.detail,
7413
+ value: e.detail,
7414
+ });
7415
+ this.innerHTML += newItemHtml;
7416
+ // The value needs to be set with a timeout because it needs to execute after
7417
+ // the custom value is added to items by the children change observer
7418
+ setTimeout(() => {
7419
+ this.value = [...this.value, e.detail];
7420
+ }, 0);
7421
+ });
7422
+ }
7423
+ }
7424
+
7425
+ setGetValidity() {
7426
+ // eslint-disable-next-line func-names
7427
+ this.getValidity = function () {
7428
+ if (this.isRequired && !this.value.length) {
7429
+ return {
7430
+ valueMissing: true,
7431
+ };
7432
+ }
7433
+ // If the field is not required, no minimum selection can be set
7434
+ if (
7435
+ this.isRequired &&
7436
+ this.minItemsSelection &&
7437
+ this.value.length < this.minItemsSelection
7438
+ ) {
7439
+ return {
7440
+ rangeUnderflow: true,
7441
+ };
7442
+ }
7443
+ if (this.maxItemsSelection && this.value.length > this.maxItemsSelection) {
7444
+ return {
7445
+ rangeOverflow: true,
7446
+ };
7447
+ }
7448
+ return {};
7449
+ };
7450
+ }
7451
+
7452
+ init() {
7453
+ super.init?.();
7454
+
7455
+ this.setGetValidity();
7456
+
7457
+ this.setComboBoxDescriptor();
7458
+
7459
+ this.#overrideOverlaySettings();
7460
+
7461
+ this.#handleCustomValues();
7462
+
7463
+ this.renderItems();
7464
+
7465
+ observeAttributes(this, this.renderItems.bind(this), { includeAttrs: ['data'] });
7466
+
7467
+ observeChildren(this, this.#onChildrenChange.bind(this));
7468
+
7469
+ // Note: we need to forward the `placeholder` because the vaadin component observes it and
7470
+ // tries to override it, causing us to lose the user set placeholder.
7471
+ forwardAttrs(this, this.baseElement, { includeAttrs: ['placeholder'] });
7472
+
7473
+ this.setDefaultValues();
7474
+ }
7475
+
7476
+ setDefaultValues() {
7477
+ this.value = this.defaultValues;
7478
+ }
7479
+
7480
+ set value(vals) {
7481
+ if (vals && vals.length > 0) {
7482
+ const children = this.baseElement.items?.filter((item) => vals.includes(item['data-id']));
7483
+
7484
+ if (children?.length > 0) {
7485
+ this.baseElement.selectedItems = children;
7486
+ }
7487
+ } else {
7488
+ this.baseElement.selectedItems = [];
7489
+ }
7490
+ }
7491
+
7492
+ get value() {
7493
+ return this.baseElement.selectedItems.map((elem) => elem.getAttribute('data-id')) || [];
7494
+ }
7495
+ };
7496
+
7497
+ const {
7498
+ host,
7499
+ inputField,
7500
+ inputElement,
7501
+ placeholder,
7502
+ toggle,
7503
+ label,
7504
+ requiredIndicator,
7505
+ helperText,
7506
+ errorMessage,
7507
+ chip,
7508
+ chipLabel,
7509
+ overflowChipFirstBorder,
7510
+ overflowChipSecondBorder,
7511
+ } = {
7512
+ host: { selector: () => ':host' },
7513
+ inputField: { selector: '::part(input-field)' },
7514
+ inputElement: { selector: 'input' },
7515
+ placeholder: { selector: '> input:placeholder-shown' },
7516
+ toggle: { selector: '::part(toggle-button)' },
7517
+ label: { selector: '::part(label)' },
7518
+ requiredIndicator: { selector: '[required]::part(required-indicator)::after' },
7519
+ helperText: { selector: '::part(helper-text)' },
7520
+ errorMessage: { selector: '::part(error-message)' },
7521
+ chip: { selector: 'vaadin-multi-select-combo-box-chip' },
7522
+ chipLabel: { selector: 'vaadin-multi-select-combo-box-chip::part(label)' },
7523
+ overflowChipFirstBorder: {
7524
+ selector: "vaadin-multi-select-combo-box-chip[slot='overflow']::before",
7525
+ },
7526
+ overflowChipSecondBorder: {
7527
+ selector: "vaadin-multi-select-combo-box-chip[slot='overflow']::after",
7528
+ },
7529
+ };
7530
+
7531
+ const MultiSelectComboBoxClass = compose(
7532
+ createStyleMixin({
7533
+ mappings: {
7534
+ hostWidth: { ...host, property: 'width' },
7535
+ hostDirection: { ...host, property: 'direction' },
7536
+ // we apply font-size also on the host so we can set its width with em
7537
+ fontSize: [{}, host],
7538
+ chipFontSize: { ...chipLabel, property: 'font-size' },
7539
+ fontFamily: [label, placeholder, inputField, helperText, errorMessage, chipLabel],
7540
+ labelTextColor: [
7541
+ { ...label, property: 'color' },
7542
+ { ...requiredIndicator, property: 'color' },
7543
+ ],
7544
+ errorMessageTextColor: { ...errorMessage, property: 'color' },
7545
+ inputHeight: { ...inputField, property: 'min-height' },
7546
+ inputBackgroundColor: { ...inputField, property: 'background-color' },
7547
+ inputBorderColor: { ...inputField, property: 'border-color' },
7548
+ inputBorderWidth: { ...inputField, property: 'border-width' },
7549
+ inputBorderStyle: { ...inputField, property: 'border-style' },
7550
+ inputBorderRadius: { ...inputField, property: 'border-radius' },
7551
+ labelRequiredIndicator: { ...requiredIndicator, property: 'content' },
7552
+ inputValueTextColor: { ...inputField, property: 'color' },
7553
+ inputPlaceholderTextColor: { ...placeholder, property: 'color' },
7554
+ inputDropdownButtonCursor: { ...toggle, property: 'cursor' },
7555
+ inputDropdownButtonColor: { ...toggle, property: 'color' },
7556
+ inputDropdownButtonSize: { ...toggle, property: 'font-size' },
7557
+ inputDropdownButtonOffset: [
7558
+ { ...toggle, property: 'margin-right' },
7559
+ { ...toggle, property: 'margin-left' },
7560
+ ],
7561
+ inputOutlineColor: { ...inputField, property: 'outline-color' },
7562
+ inputOutlineWidth: { ...inputField, property: 'outline-width' },
7563
+ inputOutlineStyle: { ...inputField, property: 'outline-style' },
7564
+ inputOutlineOffset: { ...inputField, property: 'outline-offset' },
7565
+ inputHorizontalPadding: [
7566
+ { ...inputElement, property: 'padding-left' },
7567
+ { ...inputElement, property: 'padding-right' },
7568
+ { ...inputField, property: 'padding-inline-start' },
7569
+ ],
7570
+ inputVerticalPadding: [
7571
+ { ...inputField, property: 'padding-top' },
7572
+ { ...inputField, property: 'padding-bottom' },
7573
+ ],
7574
+ chipTextColor: { ...chipLabel, property: 'color' },
7575
+ chipBackgroundColor: [
7576
+ { ...chip, property: 'background-color' },
7577
+ { ...overflowChipFirstBorder, property: 'border-color' },
7578
+ { ...overflowChipSecondBorder, property: 'border-color' },
7579
+ ],
7580
+
7581
+ // we need to use the variables from the portal mixin
7582
+ // so we need to use an arrow function on the selector
7583
+ // for that to work, because ComboBox is not available
7584
+ // at this time.
7585
+ overlayBackground: {
7586
+ property: () => MultiSelectComboBoxClass.cssVarList.overlay.backgroundColor,
7587
+ },
7588
+ overlayBorder: { property: () => MultiSelectComboBoxClass.cssVarList.overlay.border },
7589
+ overlayFontSize: { property: () => MultiSelectComboBoxClass.cssVarList.overlay.fontSize },
7590
+ overlayFontFamily: { property: () => MultiSelectComboBoxClass.cssVarList.overlay.fontFamily },
7591
+ overlayCursor: { property: () => MultiSelectComboBoxClass.cssVarList.overlay.cursor },
7592
+ overlayItemBoxShadow: {
7593
+ property: () => MultiSelectComboBoxClass.cssVarList.overlay.itemBoxShadow,
7594
+ },
7595
+ overlayItemPaddingInlineStart: {
7596
+ property: () => MultiSelectComboBoxClass.cssVarList.overlay.itemPaddingInlineStart,
7597
+ },
7598
+ overlayItemPaddingInlineEnd: {
7599
+ property: () => MultiSelectComboBoxClass.cssVarList.overlay.itemPaddingInlineEnd,
7600
+ },
7601
+ },
7602
+ }),
7603
+ draggableMixin,
7604
+ portalMixin({
7605
+ name: 'overlay',
7606
+ selector: 'vaadin-multi-select-combo-box-internal',
7607
+ mappings: {
7608
+ backgroundColor: { selector: 'vaadin-multi-select-combo-box-scroller' },
7609
+ minHeight: { selector: 'vaadin-multi-select-combo-box-overlay' },
7610
+ margin: { selector: 'vaadin-multi-select-combo-box-overlay' },
7611
+ cursor: { selector: 'vaadin-multi-select-combo-box-item' },
7612
+ fontFamily: { selector: 'vaadin-multi-select-combo-box-item' },
7613
+ fontSize: { selector: 'vaadin-multi-select-combo-box-item' },
7614
+ itemBoxShadow: { selector: 'vaadin-multi-select-combo-box-item', property: 'box-shadow' },
7615
+ itemPaddingInlineStart: {
7616
+ selector: 'vaadin-multi-select-combo-box-item',
7617
+ property: 'padding-inline-start',
7618
+ },
7619
+ itemPaddingInlineEnd: {
7620
+ selector: 'vaadin-multi-select-combo-box-item',
7621
+ property: 'padding-inline-end',
7622
+ },
7623
+ },
7624
+ forward: {
7625
+ include: false,
7626
+ attributes: ['size'],
7627
+ },
7628
+ }),
7629
+ composedProxyInputMixin({ proxyProps: ['selectionStart'], inputEvent: 'selected-items-changed' }),
7630
+ componentNameValidationMixin,
7631
+ MultiSelectComboBoxMixin
7632
+ )(
7633
+ createProxy({
7634
+ slots: ['', 'prefix'],
7635
+ wrappedEleName: 'vaadin-multi-select-combo-box',
7636
+ style: () => `
7637
+ :host {
7638
+ display: inline-flex;
7639
+ box-sizing: border-box;
7640
+ -webkit-mask-image: none;
7641
+ }
7642
+ ${useHostExternalPadding(MultiSelectComboBoxClass.cssVarList)}
7643
+ ${resetInputReadonlyStyle('vaadin-multi-select-combo-box')}
7644
+ ${resetInputPlaceholder('vaadin-multi-select-combo-box')}
7645
+ ${resetInputCursor('vaadin-multi-select-combo-box')}
7646
+
7647
+ vaadin-multi-select-combo-box {
7648
+ padding: 0;
7649
+ width: 100%;
7650
+ }
7651
+ vaadin-multi-select-combo-box::before {
7652
+ height: initial;
7653
+ }
7654
+ vaadin-multi-select-combo-box [slot="input"] {
7655
+ -webkit-mask-image: none;
7656
+ min-height: 0;
7657
+ align-self: center;
7658
+ box-sizing: border-box;
7659
+ }
7660
+
7661
+ ::part(input-field) {
7662
+ padding: 0;
7663
+ box-shadow: none;
7664
+ }
7665
+ ${resetInputLabelPosition('vaadin-multi-select-combo-box')}
7666
+ :host([has-label]) vaadin-multi-select-combo-box-chip::part(label) {
7667
+ display: block;
7668
+ }
7669
+
7670
+ vaadin-multi-select-combo-box vaadin-multi-select-combo-box-chip[slot='overflow']::before,
7671
+ vaadin-multi-select-combo-box vaadin-multi-select-combo-box-chip[slot='overflow']::after {
7672
+ left: -4px;
7673
+ right: -4px;
7674
+ border-left-width: 0;
7675
+ border-inline-start-style: solid;
7676
+ border-inline-start-width: 2px;
7677
+ }
7678
+ vaadin-multi-select-combo-box vaadin-multi-select-combo-box-chip[slot='overflow']::after {
7679
+ left: -8px;
7680
+ right: -8px;
7681
+ }
7682
+
7683
+ :host([has-no-options][allow-custom-value='true']) ::part(toggle-button) {
7684
+ display: none;
7685
+ }
7686
+ `,
7687
+ // Note: we exclude `size` to avoid overriding Vaadin's ComboBox property
7688
+ // with the same name. Including it will cause Vaadin to calculate NaN size,
7689
+ // and reset items to an empty array, and opening the list box with no items
7690
+ // to display.
7691
+ // Note: we exclude `placeholder` because the vaadin component observes it and
7692
+ // tries to override it, causing us to lose the user set placeholder.
7693
+ excludeAttrsSync: ['tabindex', 'size', 'data', 'placeholder'],
7694
+ componentName: componentName$4,
7695
+ includeForwardProps: ['items', 'renderer', 'selectedItems'],
7696
+ })
7697
+ );
7698
+
7699
+ customElements.define(componentName$4, MultiSelectComboBoxClass);
7700
+
7701
+ const componentName$3 = getComponentName('badge');
7702
+
7703
+ class RawBadge extends createBaseClass({ componentName: componentName$3, baseSelector: ':host > div' }) {
7704
+ constructor() {
7705
+ super();
7706
+
7707
+ this.attachShadow({ mode: 'open' }).innerHTML = `
7708
+ <style>
7709
+ :host {
7710
+ display: inline-flex;
7711
+ }
7712
+ :host > div {
7713
+ width: 100%;
7714
+ }
7715
+ </style>
7716
+ <div>
7717
+ <slot></slot>
7718
+ </div>
7719
+ `;
7720
+ }
7721
+ }
7722
+
7723
+ const BadgeClass = compose(
7724
+ createStyleMixin({
7725
+ mappings: {
7726
+ hostWidth: [{ selector: () => ':host', property: 'width' }],
7727
+ hostDirection: { property: 'direction' },
7728
+
7729
+ fontFamily: {},
7730
+ fontSize: {},
7731
+ fontWeight: {},
7732
+ textTransform: {},
7733
+ verticalPadding: [{ property: 'padding-top' }, { property: 'padding-bottom' }],
7734
+ horizontalPadding: [{ property: 'padding-left' }, { property: 'padding-right' }],
7735
+
7736
+ borderWidth: {},
7737
+ borderStyle: {},
7738
+ borderColor: {},
7739
+ borderRadius: {},
7740
+
7741
+ backgroundColor: {},
7742
+
7743
+ textColor: { property: 'color' },
7744
+ textAlign: {},
7745
+ },
7746
+ }),
7747
+ draggableMixin,
7748
+ componentNameValidationMixin
7749
+ )(RawBadge);
7750
+
7751
+ customElements.define(componentName$3, BadgeClass);
7752
+
7753
+ const getVarName = (path) => getCssVarName(DESCOPE_PREFIX, ...path);
7754
+
7755
+ const transformTheme = (theme, path, getTransformation) => {
7756
+ return Object.entries(theme).reduce((acc, [key, val]) => {
7757
+ if (val?.constructor !== Object) {
7758
+ return merge(acc, getTransformation(path.concat(key), val));
7759
+ }
7760
+ return merge(acc, transformTheme(val, [...path, key], getTransformation));
7761
+ }, {});
7762
+ };
7763
+
7764
+ const stringifyArray = (strArr) =>
7765
+ strArr.map((str) => (str.includes(' ') ? `"${str}"` : str)).join(', ');
7766
+
7767
+ const getCssVarValue = (val) => {
7768
+ switch (true) {
7769
+ case Array.isArray(val):
7770
+ return stringifyArray(val);
7771
+ case isUrl(val):
7772
+ return `url(${val})`;
7773
+ default:
7774
+ return val;
7775
+ }
7776
+ };
7777
+
7778
+ const themeToCSSVarsObj = (theme) =>
7779
+ transformTheme(theme, [], (path, val) => ({
7780
+ [getVarName(path)]: getCssVarValue(val),
7781
+ }));
7782
+
7783
+ const getThemeRefs = (theme, prefix) =>
7784
+ transformTheme(theme, [], (path) =>
7785
+ set({}, path, `var(${getVarName(prefix ? [prefix, ...path] : path)})`)
7786
+ );
7787
+
7788
+ const getThemeVars = (theme, prefix) =>
7789
+ transformTheme(theme, [], (path) => set({}, path, getVarName(prefix ? [prefix, ...path] : path)));
7790
+
7791
+ const globalsThemeToStyle = (theme, themeName = '') => {
7792
+ const style = Object.entries(themeToCSSVarsObj(theme)).reduce(
7793
+ (acc, entry) => `${acc}${entry.join(':')};\n`,
7794
+ ''
7795
+ );
7796
+
7797
+ if (!themeName) return style;
7798
+
7799
+ return `*[data-theme="${themeName}"] {${style}}`;
7800
+ };
7801
+
7802
+ const componentsThemeToStyleObj = (componentsTheme) =>
7803
+ transformTheme(componentsTheme, [], (path, val) => {
7804
+ const [component, ...restPath] = path;
7805
+ const property = restPath.pop();
7806
+ const componentName = getComponentName(component);
7807
+
7808
+ if (property === 'undefined') {
7809
+ // eslint-disable-next-line no-console
7810
+ console.warn(componentName, `theme value: "${val}" is mapped to an invalid property`);
7811
+ }
7812
+
7813
+ // we need a support for portal components theme (e.g. overlay)
7814
+ // this allows us to generate those themes under different sections
7815
+ // if the theme has root level attribute that starts with #
7816
+ // we are generating a new theme
7817
+ let themeName = BASE_THEME_SECTION;
7818
+
7819
+ if (restPath[0] && restPath[0].startsWith(PORTAL_THEME_PREFIX)) {
7820
+ themeName = restPath.shift();
7821
+ }
7822
+
7823
+ // do not start with underscore -> key:value, must have 2 no underscore attrs in a row
7824
+ // starts with underscore -> attribute selector
7825
+ const attrsSelector = restPath.reduce((acc, section, idx) => {
7826
+ if (section.startsWith('_')) return `${acc}[${kebabCase(section.replace(/^_/, ''))}="true"]`;
7827
+
7828
+ const nextSection = restPath[idx + 1];
7829
+
7830
+ if (typeof nextSection !== 'string' || nextSection.startsWith('_')) {
7831
+ // eslint-disable-next-line no-console
7832
+ console.error(
7833
+ 'theme generator',
7834
+ `your theme structure is invalid, attribute "${section}" is followed by "${nextSection}" which is not allowed`
7835
+ );
7836
+ return acc;
7837
+ }
7838
+
7839
+ return `${acc}[${kebabCase(section)}="${restPath.splice(idx + 1, 1).join('')}"]`;
7840
+ }, '');
7841
+
7842
+ const selector = `:host${attrsSelector ? `(${attrsSelector})` : ''}`;
7843
+
7844
+ return {
7845
+ [componentName]: {
7846
+ [themeName]: {
7847
+ [selector]: {
7848
+ [property]: getCssVarValue(val),
7849
+ },
7850
+ },
7851
+ },
7852
+ };
7853
+ });
7854
+
7855
+ const componentsThemeToStyle = (componentsTheme) =>
7856
+ Object.entries(componentsTheme).reduce(
7857
+ (acc, [selector, vars]) =>
7858
+ `${acc}${selector} { \n${Object.entries(vars)
7859
+ .map(([key, val]) => `${key}: ${val}`)
7860
+ .join(';\n')} \n}\n\n`,
7861
+ ''
7862
+ );
7863
+
7864
+ const createComponentsTheme = (componentsTheme) => {
7865
+ const styleObj = componentsThemeToStyleObj(componentsTheme);
7866
+
7867
+ return Object.keys(styleObj).reduce((acc, componentName) => {
7868
+ const componentThemes = styleObj[componentName];
7869
+
7870
+ return Object.assign(acc, {
7871
+ [componentName]: Object.keys(componentThemes).reduce(
7872
+ (res, theme) =>
7873
+ Object.assign(res, { [theme]: componentsThemeToStyle(componentThemes[theme]) }),
7874
+ {}
7875
+ ),
7876
+ });
7877
+ }, {});
7878
+ };
7879
+
7880
+ const themeToStyle = ({ globals, components }, themeName) => ({
7881
+ globals: globalsThemeToStyle(globals, themeName),
7882
+ components: createComponentsTheme(components),
7883
+ });
7884
+
7885
+ const useVar = (varName) => `var(${varName})`;
7886
+
7887
+ const createHelperVars = (theme, prefix) => {
7888
+ const res = transformTheme(theme, [], (path, value) => {
7889
+ const modifiedPath = [...path];
7890
+ const property = modifiedPath.splice(-1);
7891
+ const varName = getCssVarName(prefix, property);
7892
+
7893
+ const vars = { [property]: varName };
7894
+ const useVars = { [property]: useVar(varName) };
7895
+
7896
+ return { theme: set({}, [...modifiedPath, varName], value), useVars, vars };
7897
+ });
7898
+
7899
+ return [res.theme, res.useVars, res.vars];
7900
+ };
7901
+
7902
+ const genDark = (c, percentage = 0.5) => c.darken(percentage).hex();
7903
+ const genLight = (c, percentage = 0.5) => c.lighten(percentage).hex();
7904
+ const genContrast = (c, percentage = 0.9) => {
7905
+ const isDark = c.isDark();
7906
+ return c
7907
+ .mix(Color(isDark ? 'white' : 'black'), percentage)
7908
+ .saturate(1)
7909
+ .hex();
7910
+ };
7911
+
7912
+ const genColor = (color) => {
7913
+ const mainColor = new Color(color.main || color);
7914
+
7915
+ return {
7916
+ main: mainColor.hex(),
7917
+ dark: color.dark || genDark(mainColor),
7918
+ light: color.light || genLight(mainColor),
7919
+ contrast: color.contrast || genContrast(mainColor),
7371
7920
  };
7372
7921
  };
7373
7922
 
@@ -7652,7 +8201,7 @@ var button$1 = /*#__PURE__*/Object.freeze({
7652
8201
  vars: vars$v
7653
8202
  });
7654
8203
 
7655
- const componentName$4 = getComponentName('input-wrapper');
8204
+ const componentName$2 = getComponentName('input-wrapper');
7656
8205
  const globalRefs$h = getThemeRefs(globals);
7657
8206
 
7658
8207
  const [theme$1, refs, vars$u] = createHelperVars(
@@ -7721,7 +8270,7 @@ const [theme$1, refs, vars$u] = createHelperVars(
7721
8270
  backgroundColor: globalRefs$h.colors.surface.main,
7722
8271
  },
7723
8272
  },
7724
- componentName$4
8273
+ componentName$2
7725
8274
  );
7726
8275
 
7727
8276
  var inputWrapper = /*#__PURE__*/Object.freeze({
@@ -8131,1443 +8680,950 @@ var container$1 = /*#__PURE__*/Object.freeze({
8131
8680
  vars: vars$m
8132
8681
  });
8133
8682
 
8134
- const vars$l = LogoClass.cssVarList;
8135
-
8136
- const logo$1 = {
8137
- [vars$l.fallbackUrl]: 'url(https://imgs.descope.com/components/no-logo-placeholder.svg)',
8138
- };
8139
-
8140
- var logo$2 = /*#__PURE__*/Object.freeze({
8141
- __proto__: null,
8142
- default: logo$1,
8143
- vars: vars$l
8144
- });
8145
-
8146
- const vars$k = TotpImageClass.cssVarList;
8147
-
8148
- const logo = {
8149
- [vars$k.fallbackUrl]: 'url(https://imgs.descope.com/components/totp-placeholder.svg)',
8150
- };
8151
-
8152
- var totpImage = /*#__PURE__*/Object.freeze({
8153
- __proto__: null,
8154
- default: logo,
8155
- vars: vars$k
8156
- });
8157
-
8158
- const globalRefs$c = getThemeRefs(globals);
8159
- const vars$j = TextClass.cssVarList;
8160
-
8161
- const text = {
8162
- [vars$j.hostDirection]: globalRefs$c.direction,
8163
- [vars$j.textLineHeight]: '1.35em',
8164
- [vars$j.textAlign]: 'left',
8165
- [vars$j.textColor]: globalRefs$c.colors.surface.dark,
8166
- variant: {
8167
- h1: {
8168
- [vars$j.fontSize]: globalRefs$c.typography.h1.size,
8169
- [vars$j.fontWeight]: globalRefs$c.typography.h1.weight,
8170
- [vars$j.fontFamily]: globalRefs$c.typography.h1.font,
8171
- },
8172
- h2: {
8173
- [vars$j.fontSize]: globalRefs$c.typography.h2.size,
8174
- [vars$j.fontWeight]: globalRefs$c.typography.h2.weight,
8175
- [vars$j.fontFamily]: globalRefs$c.typography.h2.font,
8176
- },
8177
- h3: {
8178
- [vars$j.fontSize]: globalRefs$c.typography.h3.size,
8179
- [vars$j.fontWeight]: globalRefs$c.typography.h3.weight,
8180
- [vars$j.fontFamily]: globalRefs$c.typography.h3.font,
8181
- },
8182
- subtitle1: {
8183
- [vars$j.fontSize]: globalRefs$c.typography.subtitle1.size,
8184
- [vars$j.fontWeight]: globalRefs$c.typography.subtitle1.weight,
8185
- [vars$j.fontFamily]: globalRefs$c.typography.subtitle1.font,
8186
- },
8187
- subtitle2: {
8188
- [vars$j.fontSize]: globalRefs$c.typography.subtitle2.size,
8189
- [vars$j.fontWeight]: globalRefs$c.typography.subtitle2.weight,
8190
- [vars$j.fontFamily]: globalRefs$c.typography.subtitle2.font,
8191
- },
8192
- body1: {
8193
- [vars$j.fontSize]: globalRefs$c.typography.body1.size,
8194
- [vars$j.fontWeight]: globalRefs$c.typography.body1.weight,
8195
- [vars$j.fontFamily]: globalRefs$c.typography.body1.font,
8196
- },
8197
- body2: {
8198
- [vars$j.fontSize]: globalRefs$c.typography.body2.size,
8199
- [vars$j.fontWeight]: globalRefs$c.typography.body2.weight,
8200
- [vars$j.fontFamily]: globalRefs$c.typography.body2.font,
8201
- },
8202
- },
8203
-
8204
- mode: {
8205
- primary: {
8206
- [vars$j.textColor]: globalRefs$c.colors.primary.main,
8207
- },
8208
- secondary: {
8209
- [vars$j.textColor]: globalRefs$c.colors.secondary.main,
8210
- },
8211
- error: {
8212
- [vars$j.textColor]: globalRefs$c.colors.error.main,
8213
- },
8214
- success: {
8215
- [vars$j.textColor]: globalRefs$c.colors.success.main,
8216
- },
8217
- },
8218
-
8219
- textAlign: {
8220
- right: { [vars$j.textAlign]: 'right' },
8221
- left: { [vars$j.textAlign]: 'left' },
8222
- center: { [vars$j.textAlign]: 'center' },
8223
- },
8224
-
8225
- _fullWidth: {
8226
- [vars$j.hostWidth]: '100%',
8227
- },
8228
-
8229
- _italic: {
8230
- [vars$j.fontStyle]: 'italic',
8231
- },
8232
-
8233
- _uppercase: {
8234
- [vars$j.textTransform]: 'uppercase',
8235
- },
8236
-
8237
- _lowercase: {
8238
- [vars$j.textTransform]: 'lowercase',
8239
- },
8240
- };
8241
-
8242
- var text$1 = /*#__PURE__*/Object.freeze({
8243
- __proto__: null,
8244
- default: text,
8245
- vars: vars$j
8246
- });
8247
-
8248
- const globalRefs$b = getThemeRefs(globals);
8249
- const vars$i = LinkClass.cssVarList;
8250
-
8251
- const link = {
8252
- [vars$i.hostDirection]: globalRefs$b.direction,
8253
- [vars$i.cursor]: 'pointer',
8254
-
8255
- [vars$i.textColor]: globalRefs$b.colors.primary.main,
8256
-
8257
- textAlign: {
8258
- right: { [vars$i.textAlign]: 'right' },
8259
- left: { [vars$i.textAlign]: 'left' },
8260
- center: { [vars$i.textAlign]: 'center' },
8261
- },
8262
-
8263
- _fullWidth: {
8264
- [vars$i.hostWidth]: '100%',
8265
- },
8266
-
8267
- mode: {
8268
- primary: {
8269
- [vars$i.textColor]: globalRefs$b.colors.primary.main,
8270
- },
8271
- secondary: {
8272
- [vars$i.textColor]: globalRefs$b.colors.secondary.main,
8273
- },
8274
- error: {
8275
- [vars$i.textColor]: globalRefs$b.colors.error.main,
8276
- },
8277
- success: {
8278
- [vars$i.textColor]: globalRefs$b.colors.success.main,
8279
- },
8280
- },
8281
- };
8282
-
8283
- var link$1 = /*#__PURE__*/Object.freeze({
8284
- __proto__: null,
8285
- default: link,
8286
- vars: vars$i
8287
- });
8288
-
8289
- const globalRefs$a = getThemeRefs(globals);
8290
- const compVars$2 = DividerClass.cssVarList;
8291
-
8292
- const [helperTheme$1, helperRefs$1, helperVars$1] = createHelperVars(
8293
- {
8294
- thickness: '2px',
8295
- spacing: '10px',
8296
- },
8297
- componentName$w
8298
- );
8299
-
8300
- const divider = {
8301
- ...helperTheme$1,
8302
-
8303
- [compVars$2.hostDirection]: globalRefs$a.direction,
8304
- [compVars$2.alignItems]: 'center',
8305
- [compVars$2.flexDirection]: 'row',
8306
- [compVars$2.alignSelf]: 'stretch',
8307
- [compVars$2.hostWidth]: '100%',
8308
- [compVars$2.stripeColor]: globalRefs$a.colors.surface.main,
8309
- [compVars$2.stripeColorOpacity]: '0.5',
8310
- [compVars$2.stripeHorizontalThickness]: helperRefs$1.thickness,
8311
- [compVars$2.labelTextWidth]: 'fit-content',
8312
- [compVars$2.labelTextMaxWidth]: 'calc(100% - 100px)',
8313
- [compVars$2.labelTextHorizontalSpacing]: helperRefs$1.spacing,
8314
- [compVars$2.textAlign]: 'center',
8315
-
8316
- _vertical: {
8317
- [compVars$2.minHeight]: '200px',
8318
- [compVars$2.flexDirection]: 'column',
8319
- [compVars$2.hostWidth]: 'fit-content',
8320
- [compVars$2.hostPadding]: `0 calc(${helperRefs$1.thickness} * 3)`,
8321
- [compVars$2.stripeVerticalThickness]: helperRefs$1.thickness,
8322
- [compVars$2.labelTextWidth]: 'fit-content',
8323
- [compVars$2.labelTextMaxWidth]: '100%',
8324
- [compVars$2.labelTextVerticalSpacing]: helperRefs$1.spacing,
8325
- },
8326
- };
8327
-
8328
- const vars$h = {
8329
- ...compVars$2,
8330
- ...helperVars$1,
8331
- };
8332
-
8333
- var divider$1 = /*#__PURE__*/Object.freeze({
8334
- __proto__: null,
8335
- default: divider,
8336
- vars: vars$h
8337
- });
8338
-
8339
- const vars$g = PasscodeClass.cssVarList;
8340
-
8341
- const passcode = {
8342
- [vars$g.hostDirection]: refs.direction,
8343
- [vars$g.fontFamily]: refs.fontFamily,
8344
- [vars$g.fontSize]: refs.fontSize,
8345
- [vars$g.labelTextColor]: refs.labelTextColor,
8346
- [vars$g.labelRequiredIndicator]: refs.requiredIndicator,
8347
- [vars$g.errorMessageTextColor]: refs.errorMessageTextColor,
8348
- [vars$g.digitValueTextColor]: refs.valueTextColor,
8349
- [vars$g.digitPadding]: '0',
8350
- [vars$g.digitTextAlign]: 'center',
8351
- [vars$g.digitSpacing]: '4px',
8352
- [vars$g.hostWidth]: refs.width,
8353
- [vars$g.digitOutlineColor]: 'transparent',
8354
- [vars$g.digitOutlineWidth]: refs.outlineWidth,
8355
- [vars$g.focusedDigitFieldOutlineColor]: refs.outlineColor,
8356
- [vars$g.digitSize]: refs.inputHeight,
8357
-
8358
- size: {
8359
- xs: { [vars$g.spinnerSize]: '15px' },
8360
- sm: { [vars$g.spinnerSize]: '20px' },
8361
- md: { [vars$g.spinnerSize]: '20px' },
8362
- lg: { [vars$g.spinnerSize]: '20px' },
8363
- },
8364
-
8365
- _hideCursor: {
8366
- [vars$g.digitCaretTextColor]: 'transparent',
8367
- },
8683
+ const vars$l = LogoClass.cssVarList;
8368
8684
 
8369
- _loading: {
8370
- [vars$g.overlayOpacity]: refs.overlayOpacity,
8371
- },
8685
+ const logo$1 = {
8686
+ [vars$l.fallbackUrl]: 'url(https://imgs.descope.com/components/no-logo-placeholder.svg)',
8372
8687
  };
8373
8688
 
8374
- var passcode$1 = /*#__PURE__*/Object.freeze({
8689
+ var logo$2 = /*#__PURE__*/Object.freeze({
8375
8690
  __proto__: null,
8376
- default: passcode,
8377
- vars: vars$g
8691
+ default: logo$1,
8692
+ vars: vars$l
8378
8693
  });
8379
8694
 
8380
- const globalRefs$9 = getThemeRefs(globals);
8381
- const vars$f = LoaderLinearClass.cssVarList;
8382
-
8383
- const loaderLinear = {
8384
- [vars$f.hostDisplay]: 'inline-block',
8385
- [vars$f.hostWidth]: '100%',
8695
+ const vars$k = TotpImageClass.cssVarList;
8386
8696
 
8387
- [vars$f.barColor]: globalRefs$9.colors.surface.contrast,
8388
- [vars$f.barWidth]: '20%',
8697
+ const logo = {
8698
+ [vars$k.fallbackUrl]: 'url(https://imgs.descope.com/components/totp-placeholder.svg)',
8699
+ };
8389
8700
 
8390
- [vars$f.barBackgroundColor]: globalRefs$9.colors.surface.main,
8391
- [vars$f.barBorderRadius]: '4px',
8701
+ var totpImage = /*#__PURE__*/Object.freeze({
8702
+ __proto__: null,
8703
+ default: logo,
8704
+ vars: vars$k
8705
+ });
8392
8706
 
8393
- [vars$f.animationDuration]: '2s',
8394
- [vars$f.animationTimingFunction]: 'linear',
8395
- [vars$f.animationIterationCount]: 'infinite',
8396
- [vars$f.verticalPadding]: '0.25em',
8707
+ const globalRefs$c = getThemeRefs(globals);
8708
+ const vars$j = TextClass.cssVarList;
8397
8709
 
8398
- size: {
8399
- xs: { [vars$f.barHeight]: '2px' },
8400
- sm: { [vars$f.barHeight]: '4px' },
8401
- md: { [vars$f.barHeight]: '6px' },
8402
- lg: { [vars$f.barHeight]: '8px' },
8710
+ const text = {
8711
+ [vars$j.hostDirection]: globalRefs$c.direction,
8712
+ [vars$j.textLineHeight]: '1.35em',
8713
+ [vars$j.textAlign]: 'left',
8714
+ [vars$j.textColor]: globalRefs$c.colors.surface.dark,
8715
+ variant: {
8716
+ h1: {
8717
+ [vars$j.fontSize]: globalRefs$c.typography.h1.size,
8718
+ [vars$j.fontWeight]: globalRefs$c.typography.h1.weight,
8719
+ [vars$j.fontFamily]: globalRefs$c.typography.h1.font,
8720
+ },
8721
+ h2: {
8722
+ [vars$j.fontSize]: globalRefs$c.typography.h2.size,
8723
+ [vars$j.fontWeight]: globalRefs$c.typography.h2.weight,
8724
+ [vars$j.fontFamily]: globalRefs$c.typography.h2.font,
8725
+ },
8726
+ h3: {
8727
+ [vars$j.fontSize]: globalRefs$c.typography.h3.size,
8728
+ [vars$j.fontWeight]: globalRefs$c.typography.h3.weight,
8729
+ [vars$j.fontFamily]: globalRefs$c.typography.h3.font,
8730
+ },
8731
+ subtitle1: {
8732
+ [vars$j.fontSize]: globalRefs$c.typography.subtitle1.size,
8733
+ [vars$j.fontWeight]: globalRefs$c.typography.subtitle1.weight,
8734
+ [vars$j.fontFamily]: globalRefs$c.typography.subtitle1.font,
8735
+ },
8736
+ subtitle2: {
8737
+ [vars$j.fontSize]: globalRefs$c.typography.subtitle2.size,
8738
+ [vars$j.fontWeight]: globalRefs$c.typography.subtitle2.weight,
8739
+ [vars$j.fontFamily]: globalRefs$c.typography.subtitle2.font,
8740
+ },
8741
+ body1: {
8742
+ [vars$j.fontSize]: globalRefs$c.typography.body1.size,
8743
+ [vars$j.fontWeight]: globalRefs$c.typography.body1.weight,
8744
+ [vars$j.fontFamily]: globalRefs$c.typography.body1.font,
8745
+ },
8746
+ body2: {
8747
+ [vars$j.fontSize]: globalRefs$c.typography.body2.size,
8748
+ [vars$j.fontWeight]: globalRefs$c.typography.body2.weight,
8749
+ [vars$j.fontFamily]: globalRefs$c.typography.body2.font,
8750
+ },
8403
8751
  },
8404
8752
 
8405
8753
  mode: {
8406
8754
  primary: {
8407
- [vars$f.barColor]: globalRefs$9.colors.primary.main,
8755
+ [vars$j.textColor]: globalRefs$c.colors.primary.main,
8408
8756
  },
8409
8757
  secondary: {
8410
- [vars$f.barColor]: globalRefs$9.colors.secondary.main,
8758
+ [vars$j.textColor]: globalRefs$c.colors.secondary.main,
8759
+ },
8760
+ error: {
8761
+ [vars$j.textColor]: globalRefs$c.colors.error.main,
8762
+ },
8763
+ success: {
8764
+ [vars$j.textColor]: globalRefs$c.colors.success.main,
8411
8765
  },
8412
8766
  },
8413
8767
 
8414
- _hidden: {
8415
- [vars$f.hostDisplay]: 'none',
8768
+ textAlign: {
8769
+ right: { [vars$j.textAlign]: 'right' },
8770
+ left: { [vars$j.textAlign]: 'left' },
8771
+ center: { [vars$j.textAlign]: 'center' },
8416
8772
  },
8417
- };
8418
-
8419
- var loaderLinear$1 = /*#__PURE__*/Object.freeze({
8420
- __proto__: null,
8421
- default: loaderLinear,
8422
- vars: vars$f
8423
- });
8424
-
8425
- const globalRefs$8 = getThemeRefs(globals);
8426
- const compVars$1 = LoaderRadialClass.cssVarList;
8427
8773
 
8428
- const [helperTheme, helperRefs, helperVars] = createHelperVars(
8429
- {
8430
- spinnerColor: globalRefs$8.colors.surface.contrast,
8431
- mode: {
8432
- primary: {
8433
- spinnerColor: globalRefs$8.colors.primary.main,
8434
- },
8435
- secondary: {
8436
- spinnerColor: globalRefs$8.colors.secondary.main,
8437
- },
8438
- },
8774
+ _fullWidth: {
8775
+ [vars$j.hostWidth]: '100%',
8439
8776
  },
8440
- componentName$z
8441
- );
8442
-
8443
- const loaderRadial = {
8444
- ...helperTheme,
8445
-
8446
- [compVars$1.animationDuration]: '2s',
8447
- [compVars$1.animationTimingFunction]: 'linear',
8448
- [compVars$1.animationIterationCount]: 'infinite',
8449
- [compVars$1.spinnerBorderStyle]: 'solid',
8450
- [compVars$1.spinnerBorderWidth]: '0.2em',
8451
- [compVars$1.spinnerBorderRadius]: '50%',
8452
- [compVars$1.spinnerQuadrant1Color]: helperRefs.spinnerColor,
8453
- [compVars$1.spinnerQuadrant2Color]: 'transparent',
8454
- [compVars$1.spinnerQuadrant3Color]: helperRefs.spinnerColor,
8455
- [compVars$1.spinnerQuadrant4Color]: 'transparent',
8456
8777
 
8457
- size: {
8458
- xs: { [compVars$1.spinnerSize]: '20px' },
8459
- sm: { [compVars$1.spinnerSize]: '30px' },
8460
- md: { [compVars$1.spinnerSize]: '40px' },
8461
- lg: { [compVars$1.spinnerSize]: '60px' },
8462
- xl: { [compVars$1.spinnerSize]: '80px' },
8778
+ _italic: {
8779
+ [vars$j.fontStyle]: 'italic',
8463
8780
  },
8464
8781
 
8465
- _hidden: {
8466
- [compVars$1.hostDisplay]: 'none',
8782
+ _uppercase: {
8783
+ [vars$j.textTransform]: 'uppercase',
8467
8784
  },
8468
- };
8469
- const vars$e = {
8470
- ...compVars$1,
8471
- ...helperVars,
8472
- };
8473
-
8474
- var loaderRadial$1 = /*#__PURE__*/Object.freeze({
8475
- __proto__: null,
8476
- default: loaderRadial,
8477
- vars: vars$e
8478
- });
8479
-
8480
- const globalRefs$7 = getThemeRefs(globals);
8481
- const vars$d = ComboBoxClass.cssVarList;
8482
-
8483
- const comboBox = {
8484
- [vars$d.hostWidth]: refs.width,
8485
- [vars$d.hostDirection]: refs.direction,
8486
- [vars$d.fontSize]: refs.fontSize,
8487
- [vars$d.fontFamily]: refs.fontFamily,
8488
- [vars$d.labelTextColor]: refs.labelTextColor,
8489
- [vars$d.errorMessageTextColor]: refs.errorMessageTextColor,
8490
- [vars$d.inputBorderColor]: refs.borderColor,
8491
- [vars$d.inputBorderWidth]: refs.borderWidth,
8492
- [vars$d.inputBorderStyle]: refs.borderStyle,
8493
- [vars$d.inputBorderRadius]: refs.borderRadius,
8494
- [vars$d.inputOutlineColor]: refs.outlineColor,
8495
- [vars$d.inputOutlineOffset]: refs.outlineOffset,
8496
- [vars$d.inputOutlineWidth]: refs.outlineWidth,
8497
- [vars$d.inputOutlineStyle]: refs.outlineStyle,
8498
- [vars$d.labelRequiredIndicator]: refs.requiredIndicator,
8499
- [vars$d.inputValueTextColor]: refs.valueTextColor,
8500
- [vars$d.inputPlaceholderTextColor]: refs.placeholderTextColor,
8501
- [vars$d.inputBackgroundColor]: refs.backgroundColor,
8502
- [vars$d.inputHorizontalPadding]: refs.horizontalPadding,
8503
- [vars$d.inputHeight]: refs.inputHeight,
8504
- [vars$d.inputDropdownButtonColor]: globalRefs$7.colors.surface.contrast,
8505
- [vars$d.inputDropdownButtonCursor]: 'pointer',
8506
- [vars$d.inputDropdownButtonSize]: refs.toggleButtonSize,
8507
- [vars$d.inputDropdownButtonOffset]: globalRefs$7.spacing.xs,
8508
- [vars$d.overlayItemPaddingInlineStart]: globalRefs$7.spacing.xs,
8509
- [vars$d.overlayItemPaddingInlineEnd]: globalRefs$7.spacing.lg,
8510
8785
 
8511
- _readonly: {
8512
- [vars$d.inputDropdownButtonCursor]: 'default',
8786
+ _lowercase: {
8787
+ [vars$j.textTransform]: 'lowercase',
8513
8788
  },
8514
-
8515
- // Overlay theme exposed via the component:
8516
- [vars$d.overlayFontSize]: refs.fontSize,
8517
- [vars$d.overlayFontFamily]: refs.fontFamily,
8518
- [vars$d.overlayCursor]: 'pointer',
8519
- [vars$d.overlayItemBoxShadow]: 'none',
8520
-
8521
- // Overlay direct theme:
8522
- [vars$d.overlay.minHeight]: '400px',
8523
- [vars$d.overlay.margin]: '0',
8524
8789
  };
8525
8790
 
8526
- var comboBox$1 = /*#__PURE__*/Object.freeze({
8791
+ var text$1 = /*#__PURE__*/Object.freeze({
8527
8792
  __proto__: null,
8528
- comboBox: comboBox,
8529
- default: comboBox,
8530
- vars: vars$d
8793
+ default: text,
8794
+ vars: vars$j
8531
8795
  });
8532
8796
 
8533
- const vars$c = ImageClass.cssVarList;
8797
+ const globalRefs$b = getThemeRefs(globals);
8798
+ const vars$i = LinkClass.cssVarList;
8534
8799
 
8535
- const image = {};
8800
+ const link = {
8801
+ [vars$i.hostDirection]: globalRefs$b.direction,
8802
+ [vars$i.cursor]: 'pointer',
8536
8803
 
8537
- var image$1 = /*#__PURE__*/Object.freeze({
8538
- __proto__: null,
8539
- default: image,
8540
- vars: vars$c
8541
- });
8804
+ [vars$i.textColor]: globalRefs$b.colors.primary.main,
8542
8805
 
8543
- const vars$b = PhoneFieldClass.cssVarList;
8806
+ textAlign: {
8807
+ right: { [vars$i.textAlign]: 'right' },
8808
+ left: { [vars$i.textAlign]: 'left' },
8809
+ center: { [vars$i.textAlign]: 'center' },
8810
+ },
8544
8811
 
8545
- const phoneField = {
8546
- [vars$b.hostWidth]: refs.width,
8547
- [vars$b.hostDirection]: refs.direction,
8548
- [vars$b.fontSize]: refs.fontSize,
8549
- [vars$b.fontFamily]: refs.fontFamily,
8550
- [vars$b.labelTextColor]: refs.labelTextColor,
8551
- [vars$b.labelRequiredIndicator]: refs.requiredIndicator,
8552
- [vars$b.errorMessageTextColor]: refs.errorMessageTextColor,
8553
- [vars$b.inputValueTextColor]: refs.valueTextColor,
8554
- [vars$b.inputPlaceholderTextColor]: refs.placeholderTextColor,
8555
- [vars$b.inputBorderStyle]: refs.borderStyle,
8556
- [vars$b.inputBorderWidth]: refs.borderWidth,
8557
- [vars$b.inputBorderColor]: refs.borderColor,
8558
- [vars$b.inputBorderRadius]: refs.borderRadius,
8559
- [vars$b.inputOutlineStyle]: refs.outlineStyle,
8560
- [vars$b.inputOutlineWidth]: refs.outlineWidth,
8561
- [vars$b.inputOutlineColor]: refs.outlineColor,
8562
- [vars$b.inputOutlineOffset]: refs.outlineOffset,
8563
- [vars$b.phoneInputWidth]: refs.minWidth,
8564
- [vars$b.countryCodeInputWidth]: '5em',
8565
- [vars$b.countryCodeDropdownWidth]: '20em',
8812
+ _fullWidth: {
8813
+ [vars$i.hostWidth]: '100%',
8814
+ },
8566
8815
 
8567
- // '@overlay': {
8568
- // overlayItemBackgroundColor: 'red'
8569
- // }
8816
+ mode: {
8817
+ primary: {
8818
+ [vars$i.textColor]: globalRefs$b.colors.primary.main,
8819
+ },
8820
+ secondary: {
8821
+ [vars$i.textColor]: globalRefs$b.colors.secondary.main,
8822
+ },
8823
+ error: {
8824
+ [vars$i.textColor]: globalRefs$b.colors.error.main,
8825
+ },
8826
+ success: {
8827
+ [vars$i.textColor]: globalRefs$b.colors.success.main,
8828
+ },
8829
+ },
8570
8830
  };
8571
8831
 
8572
- var phoneField$1 = /*#__PURE__*/Object.freeze({
8832
+ var link$1 = /*#__PURE__*/Object.freeze({
8573
8833
  __proto__: null,
8574
- default: phoneField,
8575
- vars: vars$b
8834
+ default: link,
8835
+ vars: vars$i
8576
8836
  });
8577
8837
 
8578
- const vars$a = PhoneFieldInputBoxClass.cssVarList;
8838
+ const globalRefs$a = getThemeRefs(globals);
8839
+ const compVars$2 = DividerClass.cssVarList;
8579
8840
 
8580
- const phoneInputBoxField = {
8581
- [vars$a.hostWidth]: '16em',
8582
- [vars$a.hostMinWidth]: refs.minWidth,
8583
- [vars$a.hostDirection]: refs.direction,
8584
- [vars$a.fontSize]: refs.fontSize,
8585
- [vars$a.fontFamily]: refs.fontFamily,
8586
- [vars$a.labelTextColor]: refs.labelTextColor,
8587
- [vars$a.labelRequiredIndicator]: refs.requiredIndicator,
8588
- [vars$a.errorMessageTextColor]: refs.errorMessageTextColor,
8589
- [vars$a.inputValueTextColor]: refs.valueTextColor,
8590
- [vars$a.inputPlaceholderTextColor]: refs.placeholderTextColor,
8591
- [vars$a.inputBorderStyle]: refs.borderStyle,
8592
- [vars$a.inputBorderWidth]: refs.borderWidth,
8593
- [vars$a.inputBorderColor]: refs.borderColor,
8594
- [vars$a.inputBorderRadius]: refs.borderRadius,
8595
- [vars$a.inputOutlineStyle]: refs.outlineStyle,
8596
- [vars$a.inputOutlineWidth]: refs.outlineWidth,
8597
- [vars$a.inputOutlineColor]: refs.outlineColor,
8598
- [vars$a.inputOutlineOffset]: refs.outlineOffset,
8599
- _fullWidth: {
8600
- [vars$a.hostWidth]: refs.width,
8841
+ const [helperTheme$1, helperRefs$1, helperVars$1] = createHelperVars(
8842
+ {
8843
+ thickness: '2px',
8844
+ spacing: '10px',
8845
+ },
8846
+ componentName$w
8847
+ );
8848
+
8849
+ const divider = {
8850
+ ...helperTheme$1,
8851
+
8852
+ [compVars$2.hostDirection]: globalRefs$a.direction,
8853
+ [compVars$2.alignItems]: 'center',
8854
+ [compVars$2.flexDirection]: 'row',
8855
+ [compVars$2.alignSelf]: 'stretch',
8856
+ [compVars$2.hostWidth]: '100%',
8857
+ [compVars$2.stripeColor]: globalRefs$a.colors.surface.main,
8858
+ [compVars$2.stripeColorOpacity]: '0.5',
8859
+ [compVars$2.stripeHorizontalThickness]: helperRefs$1.thickness,
8860
+ [compVars$2.labelTextWidth]: 'fit-content',
8861
+ [compVars$2.labelTextMaxWidth]: 'calc(100% - 100px)',
8862
+ [compVars$2.labelTextHorizontalSpacing]: helperRefs$1.spacing,
8863
+ [compVars$2.textAlign]: 'center',
8864
+
8865
+ _vertical: {
8866
+ [compVars$2.minHeight]: '200px',
8867
+ [compVars$2.flexDirection]: 'column',
8868
+ [compVars$2.hostWidth]: 'fit-content',
8869
+ [compVars$2.hostPadding]: `0 calc(${helperRefs$1.thickness} * 3)`,
8870
+ [compVars$2.stripeVerticalThickness]: helperRefs$1.thickness,
8871
+ [compVars$2.labelTextWidth]: 'fit-content',
8872
+ [compVars$2.labelTextMaxWidth]: '100%',
8873
+ [compVars$2.labelTextVerticalSpacing]: helperRefs$1.spacing,
8601
8874
  },
8602
8875
  };
8603
8876
 
8604
- var phoneInputBoxField$1 = /*#__PURE__*/Object.freeze({
8877
+ const vars$h = {
8878
+ ...compVars$2,
8879
+ ...helperVars$1,
8880
+ };
8881
+
8882
+ var divider$1 = /*#__PURE__*/Object.freeze({
8605
8883
  __proto__: null,
8606
- default: phoneInputBoxField,
8607
- vars: vars$a
8884
+ default: divider,
8885
+ vars: vars$h
8608
8886
  });
8609
8887
 
8610
- const vars$9 = NewPasswordClass.cssVarList;
8888
+ const vars$g = PasscodeClass.cssVarList;
8611
8889
 
8612
- const newPassword = {
8613
- [vars$9.hostWidth]: refs.width,
8614
- [vars$9.hostMinWidth]: refs.minWidth,
8615
- [vars$9.hostDirection]: refs.direction,
8616
- [vars$9.fontSize]: refs.fontSize,
8617
- [vars$9.fontFamily]: refs.fontFamily,
8618
- [vars$9.spaceBetweenInputs]: '1em',
8619
- [vars$9.errorMessageTextColor]: refs.errorMessageTextColor,
8890
+ const passcode = {
8891
+ [vars$g.hostDirection]: refs.direction,
8892
+ [vars$g.fontFamily]: refs.fontFamily,
8893
+ [vars$g.fontSize]: refs.fontSize,
8894
+ [vars$g.labelTextColor]: refs.labelTextColor,
8895
+ [vars$g.labelRequiredIndicator]: refs.requiredIndicator,
8896
+ [vars$g.errorMessageTextColor]: refs.errorMessageTextColor,
8897
+ [vars$g.digitValueTextColor]: refs.valueTextColor,
8898
+ [vars$g.digitPadding]: '0',
8899
+ [vars$g.digitTextAlign]: 'center',
8900
+ [vars$g.digitSpacing]: '4px',
8901
+ [vars$g.hostWidth]: refs.width,
8902
+ [vars$g.digitOutlineColor]: 'transparent',
8903
+ [vars$g.digitOutlineWidth]: refs.outlineWidth,
8904
+ [vars$g.focusedDigitFieldOutlineColor]: refs.outlineColor,
8905
+ [vars$g.digitSize]: refs.inputHeight,
8620
8906
 
8621
- _required: {
8622
- // NewPassword doesn't pass `required` attribute to its Password components.
8623
- // That's why we fake the required indicator on each input.
8624
- // We do that by injecting `::after` element, and populating it with requiredIndicator content.
8625
- [vars$9.inputsRequiredIndicator]: refs.requiredIndicator, // used to populate required content for NewPassword input fields outside the theme
8907
+ size: {
8908
+ xs: { [vars$g.spinnerSize]: '15px' },
8909
+ sm: { [vars$g.spinnerSize]: '20px' },
8910
+ md: { [vars$g.spinnerSize]: '20px' },
8911
+ lg: { [vars$g.spinnerSize]: '20px' },
8912
+ },
8913
+
8914
+ _hideCursor: {
8915
+ [vars$g.digitCaretTextColor]: 'transparent',
8916
+ },
8917
+
8918
+ _loading: {
8919
+ [vars$g.overlayOpacity]: refs.overlayOpacity,
8626
8920
  },
8627
8921
  };
8628
8922
 
8629
- var newPassword$1 = /*#__PURE__*/Object.freeze({
8923
+ var passcode$1 = /*#__PURE__*/Object.freeze({
8630
8924
  __proto__: null,
8631
- default: newPassword,
8632
- vars: vars$9
8925
+ default: passcode,
8926
+ vars: vars$g
8633
8927
  });
8634
8928
 
8635
- const vars$8 = UploadFileClass.cssVarList;
8636
-
8637
- const uploadFile = {
8638
- [vars$8.hostDirection]: refs.direction,
8639
- [vars$8.labelTextColor]: refs.labelTextColor,
8640
- [vars$8.fontFamily]: refs.fontFamily,
8929
+ const globalRefs$9 = getThemeRefs(globals);
8930
+ const vars$f = LoaderLinearClass.cssVarList;
8641
8931
 
8642
- [vars$8.iconSize]: '2em',
8932
+ const loaderLinear = {
8933
+ [vars$f.hostDisplay]: 'inline-block',
8934
+ [vars$f.hostWidth]: '100%',
8643
8935
 
8644
- [vars$8.hostPadding]: '0.75em',
8645
- [vars$8.gap]: '0.5em',
8936
+ [vars$f.barColor]: globalRefs$9.colors.surface.contrast,
8937
+ [vars$f.barWidth]: '20%',
8646
8938
 
8647
- [vars$8.fontSize]: '16px',
8648
- [vars$8.titleFontWeight]: '500',
8649
- [vars$8.lineHeight]: '1em',
8939
+ [vars$f.barBackgroundColor]: globalRefs$9.colors.surface.main,
8940
+ [vars$f.barBorderRadius]: '4px',
8650
8941
 
8651
- [vars$8.borderWidth]: refs.borderWidth,
8652
- [vars$8.borderColor]: refs.borderColor,
8653
- [vars$8.borderRadius]: refs.borderRadius,
8654
- [vars$8.borderStyle]: 'dashed',
8942
+ [vars$f.animationDuration]: '2s',
8943
+ [vars$f.animationTimingFunction]: 'linear',
8944
+ [vars$f.animationIterationCount]: 'infinite',
8945
+ [vars$f.verticalPadding]: '0.25em',
8655
8946
 
8656
- _required: {
8657
- [vars$8.requiredIndicator]: refs.requiredIndicator,
8947
+ size: {
8948
+ xs: { [vars$f.barHeight]: '2px' },
8949
+ sm: { [vars$f.barHeight]: '4px' },
8950
+ md: { [vars$f.barHeight]: '6px' },
8951
+ lg: { [vars$f.barHeight]: '8px' },
8658
8952
  },
8659
8953
 
8660
- size: {
8661
- xs: {
8662
- [vars$8.hostHeight]: '196px',
8663
- [vars$8.hostWidth]: '200px',
8664
- [vars$8.titleFontSize]: '0.875em',
8665
- [vars$8.descriptionFontSize]: '0.875em',
8666
- [vars$8.lineHeight]: '1.25em',
8667
- },
8668
- sm: {
8669
- [vars$8.hostHeight]: '216px',
8670
- [vars$8.hostWidth]: '230px',
8671
- [vars$8.titleFontSize]: '1em',
8672
- [vars$8.descriptionFontSize]: '0.875em',
8673
- [vars$8.lineHeight]: '1.25em',
8674
- },
8675
- md: {
8676
- [vars$8.hostHeight]: '256px',
8677
- [vars$8.hostWidth]: '312px',
8678
- [vars$8.titleFontSize]: '1.125em',
8679
- [vars$8.descriptionFontSize]: '1em',
8680
- [vars$8.lineHeight]: '1.5em',
8954
+ mode: {
8955
+ primary: {
8956
+ [vars$f.barColor]: globalRefs$9.colors.primary.main,
8681
8957
  },
8682
- lg: {
8683
- [vars$8.hostHeight]: '280px',
8684
- [vars$8.hostWidth]: '336px',
8685
- [vars$8.titleFontSize]: '1.125em',
8686
- [vars$8.descriptionFontSize]: '1.125em',
8687
- [vars$8.lineHeight]: '1.75em',
8958
+ secondary: {
8959
+ [vars$f.barColor]: globalRefs$9.colors.secondary.main,
8688
8960
  },
8689
8961
  },
8690
8962
 
8691
- _fullWidth: {
8692
- [vars$8.hostWidth]: refs.width,
8963
+ _hidden: {
8964
+ [vars$f.hostDisplay]: 'none',
8693
8965
  },
8694
8966
  };
8695
8967
 
8696
- var uploadFile$1 = /*#__PURE__*/Object.freeze({
8968
+ var loaderLinear$1 = /*#__PURE__*/Object.freeze({
8697
8969
  __proto__: null,
8698
- default: uploadFile,
8699
- vars: vars$8
8970
+ default: loaderLinear,
8971
+ vars: vars$f
8700
8972
  });
8701
8973
 
8702
- const globalRefs$6 = getThemeRefs(globals);
8974
+ const globalRefs$8 = getThemeRefs(globals);
8975
+ const compVars$1 = LoaderRadialClass.cssVarList;
8703
8976
 
8704
- const vars$7 = ButtonSelectionGroupItemClass.cssVarList;
8977
+ const [helperTheme, helperRefs, helperVars] = createHelperVars(
8978
+ {
8979
+ spinnerColor: globalRefs$8.colors.surface.contrast,
8980
+ mode: {
8981
+ primary: {
8982
+ spinnerColor: globalRefs$8.colors.primary.main,
8983
+ },
8984
+ secondary: {
8985
+ spinnerColor: globalRefs$8.colors.secondary.main,
8986
+ },
8987
+ },
8988
+ },
8989
+ componentName$z
8990
+ );
8705
8991
 
8706
- const buttonSelectionGroupItem = {
8707
- [vars$7.hostDirection]: 'inherit',
8708
- [vars$7.backgroundColor]: globalRefs$6.colors.surface.light,
8709
- [vars$7.labelTextColor]: globalRefs$6.colors.surface.contrast,
8710
- [vars$7.borderColor]: globalRefs$6.colors.surface.main,
8711
- [vars$7.borderStyle]: 'solid',
8712
- [vars$7.borderRadius]: globalRefs$6.radius.sm,
8992
+ const loaderRadial = {
8993
+ ...helperTheme,
8994
+
8995
+ [compVars$1.animationDuration]: '2s',
8996
+ [compVars$1.animationTimingFunction]: 'linear',
8997
+ [compVars$1.animationIterationCount]: 'infinite',
8998
+ [compVars$1.spinnerBorderStyle]: 'solid',
8999
+ [compVars$1.spinnerBorderWidth]: '0.2em',
9000
+ [compVars$1.spinnerBorderRadius]: '50%',
9001
+ [compVars$1.spinnerQuadrant1Color]: helperRefs.spinnerColor,
9002
+ [compVars$1.spinnerQuadrant2Color]: 'transparent',
9003
+ [compVars$1.spinnerQuadrant3Color]: helperRefs.spinnerColor,
9004
+ [compVars$1.spinnerQuadrant4Color]: 'transparent',
8713
9005
 
8714
- _hover: {
8715
- [vars$7.backgroundColor]: '#f4f5f5', // can we take it from the palette?
9006
+ size: {
9007
+ xs: { [compVars$1.spinnerSize]: '20px' },
9008
+ sm: { [compVars$1.spinnerSize]: '30px' },
9009
+ md: { [compVars$1.spinnerSize]: '40px' },
9010
+ lg: { [compVars$1.spinnerSize]: '60px' },
9011
+ xl: { [compVars$1.spinnerSize]: '80px' },
8716
9012
  },
8717
9013
 
8718
- _selected: {
8719
- [vars$7.borderColor]: globalRefs$6.colors.surface.contrast,
8720
- [vars$7.backgroundColor]: globalRefs$6.colors.surface.contrast,
8721
- [vars$7.labelTextColor]: globalRefs$6.colors.surface.light,
9014
+ _hidden: {
9015
+ [compVars$1.hostDisplay]: 'none',
8722
9016
  },
8723
9017
  };
8724
-
8725
- var buttonSelectionGroupItem$1 = /*#__PURE__*/Object.freeze({
8726
- __proto__: null,
8727
- default: buttonSelectionGroupItem,
8728
- vars: vars$7
8729
- });
8730
-
8731
- const globalRefs$5 = getThemeRefs(globals);
8732
- const vars$6 = ButtonSelectionGroupClass.cssVarList;
8733
-
8734
- const buttonSelectionGroup = {
8735
- [vars$6.hostDirection]: refs.direction,
8736
- [vars$6.fontFamily]: refs.fontFamily,
8737
- [vars$6.labelTextColor]: refs.labelTextColor,
8738
- [vars$6.labelRequiredIndicator]: refs.requiredIndicator,
8739
- [vars$6.errorMessageTextColor]: refs.errorMessageTextColor,
8740
- [vars$6.itemsSpacing]: globalRefs$5.spacing.sm,
8741
- [vars$6.hostWidth]: refs.width,
9018
+ const vars$e = {
9019
+ ...compVars$1,
9020
+ ...helperVars,
8742
9021
  };
8743
9022
 
8744
- var buttonSelectionGroup$1 = /*#__PURE__*/Object.freeze({
9023
+ var loaderRadial$1 = /*#__PURE__*/Object.freeze({
8745
9024
  __proto__: null,
8746
- default: buttonSelectionGroup,
8747
- vars: vars$6
9025
+ default: loaderRadial,
9026
+ vars: vars$e
8748
9027
  });
8749
9028
 
8750
- const componentName$3 = getComponentName('modal');
8751
-
8752
- const customMixin = (superclass) =>
8753
- class ModalMixinClass extends superclass {
8754
- get opened() {
8755
- return this.getAttribute('opened') === 'true';
8756
- }
8757
-
8758
- handleOpened() {
8759
- forwardAttrs(this, this.baseElement, { includeAttrs: ['opened'] });
8760
- if (this.opened) {
8761
- this.style.display = '';
8762
- } else {
8763
- this.style.display = 'none';
8764
- }
8765
- }
8766
-
8767
- init() {
8768
- super.init?.();
8769
- this.style.display = 'none';
9029
+ const globalRefs$7 = getThemeRefs(globals);
9030
+ const vars$d = ComboBoxClass.cssVarList;
8770
9031
 
8771
- // vaadin-dialog might not be loaded in time
8772
- // in order to make sure it's loaded before this block is running
8773
- // we are wrapping it with setTimeout
8774
- setTimeout(() => {
8775
- // we want to sync descope-modal content through vaadin-dialog into the overlay
8776
- // so we are adding a slot to the overlay, which allows us to forward the content from
8777
- // vaadin-dialog to vaadin-dialog-overlay
8778
- this.baseElement.shadowRoot
8779
- .querySelector('vaadin-dialog-overlay')
8780
- .appendChild(document.createElement('slot'));
9032
+ const comboBox = {
9033
+ [vars$d.hostWidth]: refs.width,
9034
+ [vars$d.hostDirection]: refs.direction,
9035
+ [vars$d.fontSize]: refs.fontSize,
9036
+ [vars$d.fontFamily]: refs.fontFamily,
9037
+ [vars$d.labelTextColor]: refs.labelTextColor,
9038
+ [vars$d.errorMessageTextColor]: refs.errorMessageTextColor,
9039
+ [vars$d.inputBorderColor]: refs.borderColor,
9040
+ [vars$d.inputBorderWidth]: refs.borderWidth,
9041
+ [vars$d.inputBorderStyle]: refs.borderStyle,
9042
+ [vars$d.inputBorderRadius]: refs.borderRadius,
9043
+ [vars$d.inputOutlineColor]: refs.outlineColor,
9044
+ [vars$d.inputOutlineOffset]: refs.outlineOffset,
9045
+ [vars$d.inputOutlineWidth]: refs.outlineWidth,
9046
+ [vars$d.inputOutlineStyle]: refs.outlineStyle,
9047
+ [vars$d.labelRequiredIndicator]: refs.requiredIndicator,
9048
+ [vars$d.inputValueTextColor]: refs.valueTextColor,
9049
+ [vars$d.inputPlaceholderTextColor]: refs.placeholderTextColor,
9050
+ [vars$d.inputBackgroundColor]: refs.backgroundColor,
9051
+ [vars$d.inputHorizontalPadding]: refs.horizontalPadding,
9052
+ [vars$d.inputHeight]: refs.inputHeight,
9053
+ [vars$d.inputDropdownButtonColor]: globalRefs$7.colors.surface.contrast,
9054
+ [vars$d.inputDropdownButtonCursor]: 'pointer',
9055
+ [vars$d.inputDropdownButtonSize]: refs.toggleButtonSize,
9056
+ [vars$d.inputDropdownButtonOffset]: globalRefs$7.spacing.xs,
9057
+ [vars$d.overlayItemPaddingInlineStart]: globalRefs$7.spacing.xs,
9058
+ [vars$d.overlayItemPaddingInlineEnd]: globalRefs$7.spacing.lg,
8781
9059
 
8782
- this.#overrideOverlaySettings();
9060
+ _readonly: {
9061
+ [vars$d.inputDropdownButtonCursor]: 'default',
9062
+ },
8783
9063
 
8784
- // we need to always open the modal in `opened=false`
8785
- // to prevent it from rendering outside the dialog
8786
- // first, we have to run `overrideOverlaySettings` to setup
8787
- // the component.
8788
- this.handleOpened();
8789
- });
8790
- }
9064
+ // Overlay theme exposed via the component:
9065
+ [vars$d.overlayFontSize]: refs.fontSize,
9066
+ [vars$d.overlayFontFamily]: refs.fontFamily,
9067
+ [vars$d.overlayCursor]: 'pointer',
9068
+ [vars$d.overlayItemBoxShadow]: 'none',
8791
9069
 
8792
- // the default vaadin behavior is to attach the overlay to the body when opened
8793
- // we do not want that because it's difficult to style the overlay in this way
8794
- // so we override it to open inside the shadow DOM
8795
- #overrideOverlaySettings() {
8796
- const overlay = this.baseElement.shadowRoot.querySelector('vaadin-dialog-overlay');
9070
+ // Overlay direct theme:
9071
+ [vars$d.overlay.minHeight]: '400px',
9072
+ [vars$d.overlay.margin]: '0',
9073
+ };
8797
9074
 
8798
- overlay._attachOverlay = () => {
8799
- overlay.bringToFront();
8800
- this.baseElement.setAttribute('style', 'display:flex!important;');
8801
- };
8802
- overlay._detachOverlay = () => {
8803
- this.baseElement.style.display = 'none';
8804
- };
8805
- overlay._enterModalState = () => {};
9075
+ var comboBox$1 = /*#__PURE__*/Object.freeze({
9076
+ __proto__: null,
9077
+ comboBox: comboBox,
9078
+ default: comboBox,
9079
+ vars: vars$d
9080
+ });
8806
9081
 
8807
- overlay.close = () => false;
8808
- }
8809
- };
9082
+ const vars$c = ImageClass.cssVarList;
8810
9083
 
8811
- const ModalClass = compose(
8812
- createStyleMixin({
8813
- mappings: {
8814
- overlayBackgroundColor: { property: () => ModalClass.cssVarList.overlay.backgroundColor },
8815
- overlayShadow: { property: () => ModalClass.cssVarList.overlay.shadow },
8816
- overlayWidth: { property: () => ModalClass.cssVarList.overlay.width },
8817
- },
8818
- }),
8819
- portalMixin({
8820
- name: 'overlay',
8821
- selector: '',
8822
- mappings: {
8823
- hostDisplay: {
8824
- selector: () => ':host(.descope-modal)',
8825
- property: 'display',
8826
- important: true,
8827
- },
8828
- backgroundColor: [
8829
- { selector: () => '::part(content)', property: 'background-color' },
8830
- { selector: () => '::part(overlay)', property: 'background-color' },
8831
- ],
8832
- width: { selector: () => '::part(overlay)', property: 'width' },
8833
- shadow: { selector: () => '::part(overlay)', property: 'box-shadow' },
8834
- },
8835
- forward: {
8836
- include: false,
8837
- attributes: ['opened'],
8838
- },
8839
- }),
8840
- draggableMixin,
8841
- componentNameValidationMixin,
8842
- customMixin
8843
- )(
8844
- createProxy({
8845
- slots: [''],
8846
- wrappedEleName: 'vaadin-dialog',
8847
- style: () => ``,
8848
- excludeAttrsSync: ['tabindex', 'opened'],
8849
- componentName: componentName$3,
8850
- })
8851
- );
9084
+ const image = {};
8852
9085
 
8853
- const globalRefs$4 = getThemeRefs(globals);
9086
+ var image$1 = /*#__PURE__*/Object.freeze({
9087
+ __proto__: null,
9088
+ default: image,
9089
+ vars: vars$c
9090
+ });
8854
9091
 
8855
- const compVars = ModalClass.cssVarList;
9092
+ const vars$b = PhoneFieldClass.cssVarList;
8856
9093
 
8857
- const modal = {
8858
- [compVars.overlayBackgroundColor]: globalRefs$4.colors.surface.light,
8859
- [compVars.overlayShadow]: 'none',
8860
- [compVars.overlayWidth]: '700px',
8861
- };
9094
+ const phoneField = {
9095
+ [vars$b.hostWidth]: refs.width,
9096
+ [vars$b.hostDirection]: refs.direction,
9097
+ [vars$b.fontSize]: refs.fontSize,
9098
+ [vars$b.fontFamily]: refs.fontFamily,
9099
+ [vars$b.labelTextColor]: refs.labelTextColor,
9100
+ [vars$b.labelRequiredIndicator]: refs.requiredIndicator,
9101
+ [vars$b.errorMessageTextColor]: refs.errorMessageTextColor,
9102
+ [vars$b.inputValueTextColor]: refs.valueTextColor,
9103
+ [vars$b.inputPlaceholderTextColor]: refs.placeholderTextColor,
9104
+ [vars$b.inputBorderStyle]: refs.borderStyle,
9105
+ [vars$b.inputBorderWidth]: refs.borderWidth,
9106
+ [vars$b.inputBorderColor]: refs.borderColor,
9107
+ [vars$b.inputBorderRadius]: refs.borderRadius,
9108
+ [vars$b.inputOutlineStyle]: refs.outlineStyle,
9109
+ [vars$b.inputOutlineWidth]: refs.outlineWidth,
9110
+ [vars$b.inputOutlineColor]: refs.outlineColor,
9111
+ [vars$b.inputOutlineOffset]: refs.outlineOffset,
9112
+ [vars$b.phoneInputWidth]: refs.minWidth,
9113
+ [vars$b.countryCodeInputWidth]: '5em',
9114
+ [vars$b.countryCodeDropdownWidth]: '20em',
8862
9115
 
8863
- const vars$5 = {
8864
- ...compVars,
9116
+ // '@overlay': {
9117
+ // overlayItemBackgroundColor: 'red'
9118
+ // }
8865
9119
  };
8866
9120
 
8867
- var modal$1 = /*#__PURE__*/Object.freeze({
9121
+ var phoneField$1 = /*#__PURE__*/Object.freeze({
8868
9122
  __proto__: null,
8869
- default: modal,
8870
- vars: vars$5
9123
+ default: phoneField,
9124
+ vars: vars$b
8871
9125
  });
8872
9126
 
8873
- const globalRefs$3 = getThemeRefs(globals);
8874
- const vars$4 = GridClass.cssVarList;
8875
-
8876
- const grid = {
8877
- [vars$4.hostWidth]: '100%',
8878
- [vars$4.hostHeight]: '100%',
8879
- [vars$4.hostMinHeight]: '400px',
8880
- [vars$4.backgroundColor]: globalRefs$3.colors.surface.light,
8881
-
8882
- [vars$4.fontSize]: refs.fontSize,
8883
- [vars$4.fontFamily]: refs.fontFamily,
8884
-
8885
- [vars$4.sortIndicatorsColor]: globalRefs$3.colors.surface.main,
8886
- [vars$4.activeSortIndicator]: globalRefs$3.colors.surface.dark,
8887
- [vars$4.resizeHandleColor]: globalRefs$3.colors.surface.main,
8888
-
8889
- [vars$4.inputBorderWidth]: refs.borderWidth,
8890
- [vars$4.inputBorderStyle]: refs.borderStyle,
8891
- [vars$4.inputBorderRadius]: refs.borderRadius,
8892
- [vars$4.inputBorderColor]: 'transparent',
8893
-
8894
- [vars$4.headerRowTextColor]: globalRefs$3.colors.surface.dark,
8895
- [vars$4.separatorColor]: globalRefs$3.colors.surface.main,
8896
-
8897
- [vars$4.valueTextColor]: globalRefs$3.colors.surface.contrast,
8898
- [vars$4.selectedBackgroundColor]: globalRefs$3.colors.primary.contrast,
9127
+ const vars$a = PhoneFieldInputBoxClass.cssVarList;
8899
9128
 
8900
- _bordered: {
8901
- [vars$4.inputBorderColor]: refs.borderColor,
9129
+ const phoneInputBoxField = {
9130
+ [vars$a.hostWidth]: '16em',
9131
+ [vars$a.hostMinWidth]: refs.minWidth,
9132
+ [vars$a.hostDirection]: refs.direction,
9133
+ [vars$a.fontSize]: refs.fontSize,
9134
+ [vars$a.fontFamily]: refs.fontFamily,
9135
+ [vars$a.labelTextColor]: refs.labelTextColor,
9136
+ [vars$a.labelRequiredIndicator]: refs.requiredIndicator,
9137
+ [vars$a.errorMessageTextColor]: refs.errorMessageTextColor,
9138
+ [vars$a.inputValueTextColor]: refs.valueTextColor,
9139
+ [vars$a.inputPlaceholderTextColor]: refs.placeholderTextColor,
9140
+ [vars$a.inputBorderStyle]: refs.borderStyle,
9141
+ [vars$a.inputBorderWidth]: refs.borderWidth,
9142
+ [vars$a.inputBorderColor]: refs.borderColor,
9143
+ [vars$a.inputBorderRadius]: refs.borderRadius,
9144
+ [vars$a.inputOutlineStyle]: refs.outlineStyle,
9145
+ [vars$a.inputOutlineWidth]: refs.outlineWidth,
9146
+ [vars$a.inputOutlineColor]: refs.outlineColor,
9147
+ [vars$a.inputOutlineOffset]: refs.outlineOffset,
9148
+ _fullWidth: {
9149
+ [vars$a.hostWidth]: refs.width,
8902
9150
  },
8903
9151
  };
8904
9152
 
8905
- var grid$1 = /*#__PURE__*/Object.freeze({
9153
+ var phoneInputBoxField$1 = /*#__PURE__*/Object.freeze({
8906
9154
  __proto__: null,
8907
- default: grid,
8908
- grid: grid,
8909
- vars: vars$4
9155
+ default: phoneInputBoxField,
9156
+ vars: vars$a
8910
9157
  });
8911
9158
 
8912
- const componentName$2 = getComponentName('notification-card');
8913
-
8914
- const notificationCardMixin = (superclass) =>
8915
- class NotificationCardMixinClass extends superclass {
8916
- close() {
8917
- // if animation is not applied to the element, the node will not be removed
8918
- // from the DOM. We should avoid that. So, if in any case we allow
8919
- // customizing the animation - we should check if animation is applied
8920
- // and if it's not applied - remove the element from the DOM and dispatch
8921
- // `card-closed` event.
8922
- this.baseElement.addEventListener('animationend', () => {
8923
- this.remove();
8924
- this.dispatchEvent(new Event('card-closed'));
8925
- });
8926
-
8927
- this.setAttribute('opened', 'false');
8928
- }
8929
-
8930
- constructor() {
8931
- super();
8932
-
8933
- this.baseElement.innerHTML = `
8934
- <div part="root">
8935
- <div part="content">
8936
- <slot></slot>
8937
- </div>
8938
- <div part="close">
8939
- <slot name="close"></slot>
8940
- </div>
8941
- </div>
8942
- `;
8943
-
8944
- this.closeEle = this.shadowRoot.querySelector('[part="close"]');
8945
- }
8946
-
8947
- init() {
8948
- super.init?.();
9159
+ const vars$9 = NewPasswordClass.cssVarList;
8949
9160
 
8950
- this.closeEle.onclick = () => {
8951
- this.close();
8952
- };
8953
- }
8954
- };
9161
+ const newPassword = {
9162
+ [vars$9.hostWidth]: refs.width,
9163
+ [vars$9.hostMinWidth]: refs.minWidth,
9164
+ [vars$9.hostDirection]: refs.direction,
9165
+ [vars$9.fontSize]: refs.fontSize,
9166
+ [vars$9.fontFamily]: refs.fontFamily,
9167
+ [vars$9.spaceBetweenInputs]: '1em',
9168
+ [vars$9.errorMessageTextColor]: refs.errorMessageTextColor,
8955
9169
 
8956
- const selectors = {
8957
- content: () => 'vaadin-notification-card::part(content)',
8958
- overlay: () => 'vaadin-notification-card::part(overlay)',
9170
+ _required: {
9171
+ // NewPassword doesn't pass `required` attribute to its Password components.
9172
+ // That's why we fake the required indicator on each input.
9173
+ // We do that by injecting `::after` element, and populating it with requiredIndicator content.
9174
+ [vars$9.inputsRequiredIndicator]: refs.requiredIndicator, // used to populate required content for NewPassword input fields outside the theme
9175
+ },
8959
9176
  };
8960
9177
 
8961
- const NotificationCardClass = compose(
8962
- createStyleMixin({
8963
- mappings: {
8964
- hostMinWidth: { selector: selectors.content, property: 'min-width' },
8965
- fontFamily: {},
8966
- fontSize: {},
8967
- backgroundColor: { selector: selectors.content },
8968
- textColor: { property: 'color' },
8969
- boxShadow: {},
8970
- borderWidth: { selector: selectors.content, property: 'border-width' },
8971
- borderColor: { selector: selectors.content, property: 'border-color' },
8972
- borderStyle: { selector: selectors.content, property: 'border-style' },
8973
- borderRadius: [
8974
- { selector: selectors.content, property: 'border-radius' },
8975
- { selector: selectors.overlay, property: 'border-radius' },
8976
- ],
8977
- verticalPadding: [
8978
- { selector: selectors.content, property: 'padding-top' },
8979
- { selector: selectors.content, property: 'padding-bottom' },
8980
- ],
8981
- horizontalPadding: [
8982
- { selector: selectors.content, property: 'padding-right' },
8983
- { selector: selectors.content, property: 'padding-left' },
8984
- ],
8985
- },
8986
- }),
8987
- notificationCardMixin
8988
- )(
8989
- createProxy({
8990
- slots: [],
8991
- wrappedEleName: 'vaadin-notification-card',
8992
- style: () => `
8993
- vaadin-notification-card {
8994
- box-shadow: none;
8995
- }
8996
- ::part(overlay) {
8997
- box-shadow: none;
8998
- background: none;
8999
- }
9178
+ var newPassword$1 = /*#__PURE__*/Object.freeze({
9179
+ __proto__: null,
9180
+ default: newPassword,
9181
+ vars: vars$9
9182
+ });
9000
9183
 
9001
- [part="close"] {
9002
- cursor: pointer;
9003
- display: flex;
9004
- }
9184
+ const vars$8 = UploadFileClass.cssVarList;
9005
9185
 
9006
- [part="content"] {
9007
- display: flex;
9008
- align-items: center;
9009
- flex-grow: 1;
9010
- }
9186
+ const uploadFile = {
9187
+ [vars$8.hostDirection]: refs.direction,
9188
+ [vars$8.labelTextColor]: refs.labelTextColor,
9189
+ [vars$8.fontFamily]: refs.fontFamily,
9011
9190
 
9012
- [part="root"] {
9013
- display: flex;
9014
- align-items: center;
9015
- justify-content: space-between;
9016
- width: 100%;
9017
- }
9018
- `,
9019
- excludeAttrsSync: ['tabindex'],
9020
- componentName: componentName$2,
9021
- })
9022
- );
9191
+ [vars$8.iconSize]: '2em',
9023
9192
 
9024
- const globalRefs$2 = getThemeRefs(globals);
9025
- const vars$3 = NotificationCardClass.cssVarList;
9193
+ [vars$8.hostPadding]: '0.75em',
9194
+ [vars$8.gap]: '0.5em',
9026
9195
 
9027
- const shadowColor = '#00000020';
9196
+ [vars$8.fontSize]: '16px',
9197
+ [vars$8.titleFontWeight]: '500',
9198
+ [vars$8.lineHeight]: '1em',
9028
9199
 
9029
- const notification = {
9030
- [vars$3.hostMinWidth]: '415px',
9031
- [vars$3.fontFamily]: globalRefs$2.fonts.font1.family,
9032
- [vars$3.fontSize]: globalRefs$2.typography.body1.size,
9033
- [vars$3.backgroundColor]: globalRefs$2.colors.surface.main,
9034
- [vars$3.textColor]: globalRefs$2.colors.surface.contrast,
9035
- [vars$3.boxShadow]: `${globalRefs$2.shadow.wide.xl} ${shadowColor}, ${globalRefs$2.shadow.narrow.xl} ${shadowColor}`,
9036
- [vars$3.verticalPadding]: '0.625em',
9037
- [vars$3.horizontalPadding]: '1.5em',
9038
- [vars$3.borderRadius]: globalRefs$2.radius.xs,
9200
+ [vars$8.borderWidth]: refs.borderWidth,
9201
+ [vars$8.borderColor]: refs.borderColor,
9202
+ [vars$8.borderRadius]: refs.borderRadius,
9203
+ [vars$8.borderStyle]: 'dashed',
9039
9204
 
9040
- _bordered: {
9041
- [vars$3.borderWidth]: globalRefs$2.border.sm,
9042
- [vars$3.borderStyle]: 'solid',
9043
- [vars$3.borderColor]: 'transparent',
9205
+ _required: {
9206
+ [vars$8.requiredIndicator]: refs.requiredIndicator,
9044
9207
  },
9045
9208
 
9046
9209
  size: {
9047
- xs: { [vars$3.fontSize]: '12px' },
9048
- sm: { [vars$3.fontSize]: '14px' },
9049
- md: { [vars$3.fontSize]: '16px' },
9050
- lg: { [vars$3.fontSize]: '18px' },
9051
- },
9052
-
9053
- mode: {
9054
- primary: {
9055
- [vars$3.backgroundColor]: globalRefs$2.colors.primary.main,
9056
- [vars$3.textColor]: globalRefs$2.colors.primary.contrast,
9057
- [vars$3.borderColor]: globalRefs$2.colors.primary.light,
9058
- },
9059
- success: {
9060
- [vars$3.backgroundColor]: globalRefs$2.colors.success.main,
9061
- [vars$3.textColor]: globalRefs$2.colors.success.contrast,
9062
- [vars$3.borderColor]: globalRefs$2.colors.success.light,
9210
+ xs: {
9211
+ [vars$8.hostHeight]: '196px',
9212
+ [vars$8.hostWidth]: '200px',
9213
+ [vars$8.titleFontSize]: '0.875em',
9214
+ [vars$8.descriptionFontSize]: '0.875em',
9215
+ [vars$8.lineHeight]: '1.25em',
9063
9216
  },
9064
- error: {
9065
- [vars$3.backgroundColor]: globalRefs$2.colors.error.main,
9066
- [vars$3.textColor]: globalRefs$2.colors.error.contrast,
9067
- [vars$3.borderColor]: globalRefs$2.colors.error.light,
9217
+ sm: {
9218
+ [vars$8.hostHeight]: '216px',
9219
+ [vars$8.hostWidth]: '230px',
9220
+ [vars$8.titleFontSize]: '1em',
9221
+ [vars$8.descriptionFontSize]: '0.875em',
9222
+ [vars$8.lineHeight]: '1.25em',
9068
9223
  },
9069
- },
9070
- };
9071
-
9072
- var notificationCard = /*#__PURE__*/Object.freeze({
9073
- __proto__: null,
9074
- default: notification,
9075
- vars: vars$3
9076
- });
9077
-
9078
- const componentName$1 = getComponentName('multi-select-combo-box');
9079
-
9080
- const MultiSelectComboBoxMixin = (superclass) =>
9081
- class MultiSelectComboBoxMixinClass extends superclass {
9082
- // eslint-disable-next-line class-methods-use-this
9083
- #renderItem = ({ displayName, value, label }) => {
9084
- return `<span data-name="${label}" data-id="${value}">${displayName || label}</span>`;
9085
- };
9086
-
9087
- #data;
9088
-
9089
- get defaultValues() {
9090
- const defaultValuesAttr = this.getAttribute('default-values');
9091
- if (defaultValuesAttr) {
9092
- try {
9093
- const defaultValues = JSON.parse(defaultValuesAttr);
9094
- if (this.isValidDataType(defaultValues)) {
9095
- return defaultValues;
9096
- }
9097
- } catch (e) {
9098
- // eslint-disable-next-line no-console
9099
- console.error('could not parse data string from attribute "default-values" -', e.message);
9100
- }
9101
- }
9102
- return [];
9103
- }
9104
-
9105
- get renderItem() {
9106
- return this.#renderItem;
9107
- }
9224
+ md: {
9225
+ [vars$8.hostHeight]: '256px',
9226
+ [vars$8.hostWidth]: '312px',
9227
+ [vars$8.titleFontSize]: '1.125em',
9228
+ [vars$8.descriptionFontSize]: '1em',
9229
+ [vars$8.lineHeight]: '1.5em',
9230
+ },
9231
+ lg: {
9232
+ [vars$8.hostHeight]: '280px',
9233
+ [vars$8.hostWidth]: '336px',
9234
+ [vars$8.titleFontSize]: '1.125em',
9235
+ [vars$8.descriptionFontSize]: '1.125em',
9236
+ [vars$8.lineHeight]: '1.75em',
9237
+ },
9238
+ },
9108
9239
 
9109
- set renderItem(renderFn) {
9110
- this.#renderItem = renderFn;
9111
- this.renderItems();
9112
- }
9240
+ _fullWidth: {
9241
+ [vars$8.hostWidth]: refs.width,
9242
+ },
9243
+ };
9113
9244
 
9114
- get data() {
9115
- if (this.#data) return this.#data;
9245
+ var uploadFile$1 = /*#__PURE__*/Object.freeze({
9246
+ __proto__: null,
9247
+ default: uploadFile,
9248
+ vars: vars$8
9249
+ });
9116
9250
 
9117
- const dataAttr = this.getAttribute('data');
9251
+ const globalRefs$6 = getThemeRefs(globals);
9118
9252
 
9119
- if (dataAttr) {
9120
- try {
9121
- const data = JSON.parse(dataAttr);
9122
- if (this.isValidDataType(data)) {
9123
- return data;
9124
- }
9125
- } catch (e) {
9126
- // eslint-disable-next-line no-console
9127
- console.error('could not parse data string from attribute "data" -', e.message);
9128
- }
9129
- }
9253
+ const vars$7 = ButtonSelectionGroupItemClass.cssVarList;
9130
9254
 
9131
- return [];
9132
- }
9255
+ const buttonSelectionGroupItem = {
9256
+ [vars$7.hostDirection]: 'inherit',
9257
+ [vars$7.backgroundColor]: globalRefs$6.colors.surface.light,
9258
+ [vars$7.labelTextColor]: globalRefs$6.colors.surface.contrast,
9259
+ [vars$7.borderColor]: globalRefs$6.colors.surface.main,
9260
+ [vars$7.borderStyle]: 'solid',
9261
+ [vars$7.borderRadius]: globalRefs$6.radius.sm,
9133
9262
 
9134
- set data(data) {
9135
- if (this.isValidDataType(data)) {
9136
- this.#data = data;
9137
- this.renderItems();
9138
- }
9139
- }
9263
+ _hover: {
9264
+ [vars$7.backgroundColor]: '#f4f5f5', // can we take it from the palette?
9265
+ },
9140
9266
 
9141
- get allowCustomValue() {
9142
- return this.getAttribute('allow-custom-value') === 'true';
9143
- }
9267
+ _selected: {
9268
+ [vars$7.borderColor]: globalRefs$6.colors.surface.contrast,
9269
+ [vars$7.backgroundColor]: globalRefs$6.colors.surface.contrast,
9270
+ [vars$7.labelTextColor]: globalRefs$6.colors.surface.light,
9271
+ },
9272
+ };
9144
9273
 
9145
- get minItemsSelection() {
9146
- return parseInt(this.getAttribute('min-items-selection'), 10) || 0;
9147
- }
9274
+ var buttonSelectionGroupItem$1 = /*#__PURE__*/Object.freeze({
9275
+ __proto__: null,
9276
+ default: buttonSelectionGroupItem,
9277
+ vars: vars$7
9278
+ });
9148
9279
 
9149
- get maxItemsSelection() {
9150
- return parseInt(this.getAttribute('max-items-selection'), 10) || 0;
9151
- }
9280
+ const globalRefs$5 = getThemeRefs(globals);
9281
+ const vars$6 = ButtonSelectionGroupClass.cssVarList;
9152
9282
 
9153
- // eslint-disable-next-line class-methods-use-this
9154
- isValidDataType(data) {
9155
- const isValid = Array.isArray(data);
9156
- if (!isValid) {
9157
- // eslint-disable-next-line no-console
9158
- console.error('data and default-values must be an array, received:', data);
9159
- }
9283
+ const buttonSelectionGroup = {
9284
+ [vars$6.hostDirection]: refs.direction,
9285
+ [vars$6.fontFamily]: refs.fontFamily,
9286
+ [vars$6.labelTextColor]: refs.labelTextColor,
9287
+ [vars$6.labelRequiredIndicator]: refs.requiredIndicator,
9288
+ [vars$6.errorMessageTextColor]: refs.errorMessageTextColor,
9289
+ [vars$6.itemsSpacing]: globalRefs$5.spacing.sm,
9290
+ [vars$6.hostWidth]: refs.width,
9291
+ };
9160
9292
 
9161
- return isValid;
9162
- }
9293
+ var buttonSelectionGroup$1 = /*#__PURE__*/Object.freeze({
9294
+ __proto__: null,
9295
+ default: buttonSelectionGroup,
9296
+ vars: vars$6
9297
+ });
9163
9298
 
9164
- getItemsTemplate() {
9165
- return this.data?.reduce?.((acc, item) => acc + (this.renderItem?.(item || {}) || ''), '');
9166
- }
9299
+ const componentName$1 = getComponentName('modal');
9167
9300
 
9168
- renderItems() {
9169
- const template = this.getItemsTemplate();
9170
- if (template) this.innerHTML = template;
9301
+ const customMixin = (superclass) =>
9302
+ class ModalMixinClass extends superclass {
9303
+ get opened() {
9304
+ return this.getAttribute('opened') === 'true';
9171
9305
  }
9172
9306
 
9173
- handleSelectedItems() {
9174
- const currentSelected =
9175
- this.baseElement.selectedItems?.map((item) => item.getAttribute('data-id')) || [];
9176
-
9177
- this.baseElement.selectedItems = [];
9178
-
9179
- // if previously selected item ID exists in current children, set it as selected
9180
- if (currentSelected.length > 0) {
9181
- this.value = currentSelected;
9182
- }
9183
-
9184
- // otherwise, if default value is specified, set default value as selected item
9185
- if (this.value.length === 0) {
9186
- this.setDefaultValues();
9307
+ handleOpened() {
9308
+ forwardAttrs(this, this.baseElement, { includeAttrs: ['opened'] });
9309
+ if (this.opened) {
9310
+ this.style.display = '';
9311
+ } else {
9312
+ this.style.display = 'none';
9187
9313
  }
9188
9314
  }
9189
9315
 
9190
- // eslint-disable-next-line class-methods-use-this
9191
- customValueTransformFn(val) {
9192
- return val;
9193
- }
9194
-
9195
- // We want to override Vaadin's Combo Box value setter. This is needed since Vaadin couples between the
9196
- // field that it searches the value, and the finaly display value of the input.
9197
- // We provide a custom transform function to override that behavior.
9198
- setComboBoxDescriptor() {
9199
- const valueDescriptor = Object.getOwnPropertyDescriptor(
9200
- this.inputElement.constructor.prototype,
9201
- 'value'
9202
- );
9203
-
9204
- const comboBox = this;
9316
+ init() {
9317
+ super.init?.();
9318
+ this.style.display = 'none';
9205
9319
 
9206
- Object.defineProperties(this.inputElement, {
9207
- value: {
9208
- ...valueDescriptor,
9209
- set(val) {
9210
- const transformedValue = comboBox.customValueTransformFn(val) || '';
9320
+ // vaadin-dialog might not be loaded in time
9321
+ // in order to make sure it's loaded before this block is running
9322
+ // we are wrapping it with setTimeout
9323
+ setTimeout(() => {
9324
+ // we want to sync descope-modal content through vaadin-dialog into the overlay
9325
+ // so we are adding a slot to the overlay, which allows us to forward the content from
9326
+ // vaadin-dialog to vaadin-dialog-overlay
9327
+ this.baseElement.shadowRoot
9328
+ .querySelector('vaadin-dialog-overlay')
9329
+ .appendChild(document.createElement('slot'));
9211
9330
 
9212
- if (transformedValue === this.value) {
9213
- return;
9214
- }
9331
+ this.#overrideOverlaySettings();
9215
9332
 
9216
- valueDescriptor.set.call(this, transformedValue);
9217
- },
9218
- },
9333
+ // we need to always open the modal in `opened=false`
9334
+ // to prevent it from rendering outside the dialog
9335
+ // first, we have to run `overrideOverlaySettings` to setup
9336
+ // the component.
9337
+ this.handleOpened();
9219
9338
  });
9220
9339
  }
9221
9340
 
9222
- // vaadin api is to set props on their combo box node,
9223
- // in order to avoid it, we are passing the children of this component
9224
- // to the items & renderer props, so it will be used as the combo box items
9225
- #onChildrenChange() {
9226
- const items = Array.from(this.children);
9341
+ // the default vaadin behavior is to attach the overlay to the body when opened
9342
+ // we do not want that because it's difficult to style the overlay in this way
9343
+ // so we override it to open inside the shadow DOM
9344
+ #overrideOverlaySettings() {
9345
+ const overlay = this.baseElement.shadowRoot.querySelector('vaadin-dialog-overlay');
9227
9346
 
9228
- // we want the data-name attribute to be accessible as an object attribute
9229
- if (items.length) {
9230
- this.removeAttribute('has-no-options');
9347
+ overlay._attachOverlay = () => {
9348
+ overlay.bringToFront();
9349
+ this.baseElement.setAttribute('style', 'display:flex!important;');
9350
+ };
9351
+ overlay._detachOverlay = () => {
9352
+ this.baseElement.style.display = 'none';
9353
+ };
9354
+ overlay._enterModalState = () => {};
9231
9355
 
9232
- items.forEach((node) => {
9233
- Object.defineProperty(node, 'data-name', {
9234
- value: node.getAttribute('data-name'),
9235
- configurable: true,
9236
- writable: true,
9237
- });
9238
- Object.defineProperty(node, 'data-id', {
9239
- value: node.getAttribute('data-id'),
9240
- configurable: true,
9241
- writable: true,
9242
- });
9243
- });
9356
+ overlay.close = () => false;
9357
+ }
9358
+ };
9359
+
9360
+ const ModalClass = compose(
9361
+ createStyleMixin({
9362
+ mappings: {
9363
+ overlayBackgroundColor: { property: () => ModalClass.cssVarList.overlay.backgroundColor },
9364
+ overlayShadow: { property: () => ModalClass.cssVarList.overlay.shadow },
9365
+ overlayWidth: { property: () => ModalClass.cssVarList.overlay.width },
9366
+ },
9367
+ }),
9368
+ portalMixin({
9369
+ name: 'overlay',
9370
+ selector: '',
9371
+ mappings: {
9372
+ hostDisplay: {
9373
+ selector: () => ':host(.descope-modal)',
9374
+ property: 'display',
9375
+ important: true,
9376
+ },
9377
+ backgroundColor: [
9378
+ { selector: () => '::part(content)', property: 'background-color' },
9379
+ { selector: () => '::part(overlay)', property: 'background-color' },
9380
+ ],
9381
+ width: { selector: () => '::part(overlay)', property: 'width' },
9382
+ shadow: { selector: () => '::part(overlay)', property: 'box-shadow' },
9383
+ },
9384
+ forward: {
9385
+ include: false,
9386
+ attributes: ['opened'],
9387
+ },
9388
+ }),
9389
+ draggableMixin,
9390
+ componentNameValidationMixin,
9391
+ customMixin
9392
+ )(
9393
+ createProxy({
9394
+ slots: [''],
9395
+ wrappedEleName: 'vaadin-dialog',
9396
+ style: () => ``,
9397
+ excludeAttrsSync: ['tabindex', 'opened'],
9398
+ componentName: componentName$1,
9399
+ })
9400
+ );
9244
9401
 
9245
- this.baseElement.items = items;
9402
+ const globalRefs$4 = getThemeRefs(globals);
9246
9403
 
9247
- setTimeout(() => {
9248
- // set timeout to ensure this runs after customValueTransformFn had the chance to be overriden
9249
- this.handleSelectedItems();
9250
- }, 0);
9251
- } else {
9252
- this.baseElement.items = [];
9253
- this.setAttribute('has-no-options', '');
9254
- }
9404
+ const compVars = ModalClass.cssVarList;
9255
9405
 
9256
- // use vaadin combobox custom renderer to render options as HTML
9257
- // and not via default renderer, which renders only the data-name's value
9258
- // in its own HTML template
9259
- this.baseElement.renderer = (root, combo, model) => {
9260
- // eslint-disable-next-line no-param-reassign
9261
- root.innerHTML = model.item.outerHTML;
9262
- };
9263
- }
9406
+ const modal = {
9407
+ [compVars.overlayBackgroundColor]: globalRefs$4.colors.surface.light,
9408
+ [compVars.overlayShadow]: 'none',
9409
+ [compVars.overlayWidth]: '700px',
9410
+ };
9264
9411
 
9265
- // the default vaadin behavior is to attach the overlay to the body when opened
9266
- // we do not want that because it's difficult to style the overlay in this way
9267
- // so we override it to open inside the shadow DOM
9268
- #overrideOverlaySettings() {
9269
- const overlay = this.baseElement.shadowRoot
9270
- .querySelector('vaadin-multi-select-combo-box-internal')
9271
- .shadowRoot.querySelector('vaadin-multi-select-combo-box-overlay');
9272
- overlay._attachOverlay = () => {
9273
- overlay.bringToFront();
9274
- };
9275
- overlay._detachOverlay = () => {};
9276
- overlay._enterModalState = () => {};
9277
- }
9412
+ const vars$5 = {
9413
+ ...compVars,
9414
+ };
9278
9415
 
9279
- #handleCustomValues() {
9280
- if (this.allowCustomValue) {
9281
- this.baseElement.addEventListener('custom-value-set', (e) => {
9282
- const newItemHtml = this.#renderItem({
9283
- label: e.detail,
9284
- displayName: e.detail,
9285
- value: e.detail,
9286
- });
9287
- this.innerHTML += newItemHtml;
9288
- // The value needs to be set with a timeout because it needs to execute after
9289
- // the custom value is added to items by the children change observer
9290
- setTimeout(() => {
9291
- this.value = [...this.value, e.detail];
9292
- }, 0);
9293
- });
9294
- }
9295
- }
9416
+ var modal$1 = /*#__PURE__*/Object.freeze({
9417
+ __proto__: null,
9418
+ default: modal,
9419
+ vars: vars$5
9420
+ });
9296
9421
 
9297
- setGetValidity() {
9298
- // eslint-disable-next-line func-names
9299
- this.getValidity = function () {
9300
- if (this.isRequired && !this.value.length) {
9301
- return {
9302
- valueMissing: true,
9303
- };
9304
- }
9305
- // If the field is not required, no minimum selection can be set
9306
- if (
9307
- this.isRequired &&
9308
- this.minItemsSelection &&
9309
- this.value.length < this.minItemsSelection
9310
- ) {
9311
- return {
9312
- rangeUnderflow: true,
9313
- };
9314
- }
9315
- if (this.maxItemsSelection && this.value.length > this.maxItemsSelection) {
9316
- return {
9317
- rangeOverflow: true,
9318
- };
9319
- }
9320
- return {};
9321
- };
9322
- }
9422
+ const globalRefs$3 = getThemeRefs(globals);
9423
+ const vars$4 = GridClass.cssVarList;
9323
9424
 
9324
- init() {
9325
- super.init?.();
9425
+ const grid = {
9426
+ [vars$4.hostWidth]: '100%',
9427
+ [vars$4.hostHeight]: '100%',
9428
+ [vars$4.hostMinHeight]: '400px',
9429
+ [vars$4.backgroundColor]: globalRefs$3.colors.surface.light,
9326
9430
 
9327
- this.setGetValidity();
9431
+ [vars$4.fontSize]: refs.fontSize,
9432
+ [vars$4.fontFamily]: refs.fontFamily,
9328
9433
 
9329
- this.setComboBoxDescriptor();
9434
+ [vars$4.sortIndicatorsColor]: globalRefs$3.colors.surface.main,
9435
+ [vars$4.activeSortIndicator]: globalRefs$3.colors.surface.dark,
9436
+ [vars$4.resizeHandleColor]: globalRefs$3.colors.surface.main,
9330
9437
 
9331
- this.#overrideOverlaySettings();
9438
+ [vars$4.inputBorderWidth]: refs.borderWidth,
9439
+ [vars$4.inputBorderStyle]: refs.borderStyle,
9440
+ [vars$4.inputBorderRadius]: refs.borderRadius,
9441
+ [vars$4.inputBorderColor]: 'transparent',
9332
9442
 
9333
- this.#handleCustomValues();
9443
+ [vars$4.headerRowTextColor]: globalRefs$3.colors.surface.dark,
9444
+ [vars$4.separatorColor]: globalRefs$3.colors.surface.main,
9334
9445
 
9335
- this.renderItems();
9446
+ [vars$4.valueTextColor]: globalRefs$3.colors.surface.contrast,
9447
+ [vars$4.selectedBackgroundColor]: globalRefs$3.colors.primary.contrast,
9336
9448
 
9337
- observeAttributes(this, this.renderItems.bind(this), { includeAttrs: ['data'] });
9449
+ _bordered: {
9450
+ [vars$4.inputBorderColor]: refs.borderColor,
9451
+ },
9452
+ };
9338
9453
 
9339
- observeChildren(this, this.#onChildrenChange.bind(this));
9454
+ var grid$1 = /*#__PURE__*/Object.freeze({
9455
+ __proto__: null,
9456
+ default: grid,
9457
+ grid: grid,
9458
+ vars: vars$4
9459
+ });
9340
9460
 
9341
- // Note: we need to forward the `placeholder` because the vaadin component observes it and
9342
- // tries to override it, causing us to lose the user set placeholder.
9343
- forwardAttrs(this, this.baseElement, { includeAttrs: ['placeholder'] });
9461
+ const componentName = getComponentName('notification-card');
9344
9462
 
9345
- this.setDefaultValues();
9346
- }
9463
+ const notificationCardMixin = (superclass) =>
9464
+ class NotificationCardMixinClass extends superclass {
9465
+ close() {
9466
+ // if animation is not applied to the element, the node will not be removed
9467
+ // from the DOM. We should avoid that. So, if in any case we allow
9468
+ // customizing the animation - we should check if animation is applied
9469
+ // and if it's not applied - remove the element from the DOM and dispatch
9470
+ // `card-closed` event.
9471
+ this.baseElement.addEventListener('animationend', () => {
9472
+ this.remove();
9473
+ this.dispatchEvent(new Event('card-closed'));
9474
+ });
9347
9475
 
9348
- setDefaultValues() {
9349
- this.value = this.defaultValues;
9476
+ this.setAttribute('opened', 'false');
9350
9477
  }
9351
9478
 
9352
- set value(vals) {
9353
- if (vals && vals.length > 0) {
9354
- const children = this.baseElement.items?.filter((item) => vals.includes(item['data-id']));
9479
+ constructor() {
9480
+ super();
9355
9481
 
9356
- if (children?.length > 0) {
9357
- this.baseElement.selectedItems = children;
9358
- }
9359
- } else {
9360
- this.baseElement.selectedItems = [];
9361
- }
9482
+ this.baseElement.innerHTML = `
9483
+ <div part="root">
9484
+ <div part="content">
9485
+ <slot></slot>
9486
+ </div>
9487
+ <div part="close">
9488
+ <slot name="close"></slot>
9489
+ </div>
9490
+ </div>
9491
+ `;
9492
+
9493
+ this.closeEle = this.shadowRoot.querySelector('[part="close"]');
9362
9494
  }
9363
9495
 
9364
- get value() {
9365
- return this.baseElement.selectedItems.map((elem) => elem.getAttribute('data-id')) || [];
9496
+ init() {
9497
+ super.init?.();
9498
+
9499
+ this.closeEle.onclick = () => {
9500
+ this.close();
9501
+ };
9366
9502
  }
9367
9503
  };
9368
9504
 
9369
- const {
9370
- host,
9371
- inputField,
9372
- inputElement,
9373
- placeholder,
9374
- toggle,
9375
- label,
9376
- requiredIndicator,
9377
- helperText,
9378
- errorMessage,
9379
- chip,
9380
- chipLabel,
9381
- overflowChipFirstBorder,
9382
- overflowChipSecondBorder,
9383
- } = {
9384
- host: { selector: () => ':host' },
9385
- inputField: { selector: '::part(input-field)' },
9386
- inputElement: { selector: 'input' },
9387
- placeholder: { selector: '> input:placeholder-shown' },
9388
- toggle: { selector: '::part(toggle-button)' },
9389
- label: { selector: '::part(label)' },
9390
- requiredIndicator: { selector: '[required]::part(required-indicator)::after' },
9391
- helperText: { selector: '::part(helper-text)' },
9392
- errorMessage: { selector: '::part(error-message)' },
9393
- chip: { selector: 'vaadin-multi-select-combo-box-chip' },
9394
- chipLabel: { selector: 'vaadin-multi-select-combo-box-chip::part(label)' },
9395
- overflowChipFirstBorder: {
9396
- selector: "vaadin-multi-select-combo-box-chip[slot='overflow']::before",
9397
- },
9398
- overflowChipSecondBorder: {
9399
- selector: "vaadin-multi-select-combo-box-chip[slot='overflow']::after",
9400
- },
9505
+ const selectors = {
9506
+ content: () => 'vaadin-notification-card::part(content)',
9507
+ overlay: () => 'vaadin-notification-card::part(overlay)',
9401
9508
  };
9402
9509
 
9403
- const MultiSelectComboBoxClass = compose(
9510
+ const NotificationCardClass = compose(
9404
9511
  createStyleMixin({
9405
9512
  mappings: {
9406
- hostWidth: { ...host, property: 'width' },
9407
- hostDirection: { ...host, property: 'direction' },
9408
- // we apply font-size also on the host so we can set its width with em
9409
- fontSize: [{}, host],
9410
- chipFontSize: { ...chipLabel, property: 'font-size' },
9411
- fontFamily: [label, placeholder, inputField, helperText, errorMessage, chipLabel],
9412
- labelTextColor: [
9413
- { ...label, property: 'color' },
9414
- { ...requiredIndicator, property: 'color' },
9415
- ],
9416
- errorMessageTextColor: { ...errorMessage, property: 'color' },
9417
- inputHeight: { ...inputField, property: 'min-height' },
9418
- inputBackgroundColor: { ...inputField, property: 'background-color' },
9419
- inputBorderColor: { ...inputField, property: 'border-color' },
9420
- inputBorderWidth: { ...inputField, property: 'border-width' },
9421
- inputBorderStyle: { ...inputField, property: 'border-style' },
9422
- inputBorderRadius: { ...inputField, property: 'border-radius' },
9423
- labelRequiredIndicator: { ...requiredIndicator, property: 'content' },
9424
- inputValueTextColor: { ...inputField, property: 'color' },
9425
- inputPlaceholderTextColor: { ...placeholder, property: 'color' },
9426
- inputDropdownButtonCursor: { ...toggle, property: 'cursor' },
9427
- inputDropdownButtonColor: { ...toggle, property: 'color' },
9428
- inputDropdownButtonSize: { ...toggle, property: 'font-size' },
9429
- inputDropdownButtonOffset: [
9430
- { ...toggle, property: 'margin-right' },
9431
- { ...toggle, property: 'margin-left' },
9432
- ],
9433
- inputOutlineColor: { ...inputField, property: 'outline-color' },
9434
- inputOutlineWidth: { ...inputField, property: 'outline-width' },
9435
- inputOutlineStyle: { ...inputField, property: 'outline-style' },
9436
- inputOutlineOffset: { ...inputField, property: 'outline-offset' },
9437
- inputHorizontalPadding: [
9438
- { ...inputElement, property: 'padding-left' },
9439
- { ...inputElement, property: 'padding-right' },
9440
- { ...inputField, property: 'padding-inline-start' },
9513
+ hostMinWidth: { selector: selectors.content, property: 'min-width' },
9514
+ fontFamily: {},
9515
+ fontSize: {},
9516
+ backgroundColor: { selector: selectors.content },
9517
+ textColor: { property: 'color' },
9518
+ boxShadow: {},
9519
+ borderWidth: { selector: selectors.content, property: 'border-width' },
9520
+ borderColor: { selector: selectors.content, property: 'border-color' },
9521
+ borderStyle: { selector: selectors.content, property: 'border-style' },
9522
+ borderRadius: [
9523
+ { selector: selectors.content, property: 'border-radius' },
9524
+ { selector: selectors.overlay, property: 'border-radius' },
9441
9525
  ],
9442
- inputVerticalPadding: [
9443
- { ...inputField, property: 'padding-top' },
9444
- { ...inputField, property: 'padding-bottom' },
9526
+ verticalPadding: [
9527
+ { selector: selectors.content, property: 'padding-top' },
9528
+ { selector: selectors.content, property: 'padding-bottom' },
9445
9529
  ],
9446
- chipTextColor: { ...chipLabel, property: 'color' },
9447
- chipBackgroundColor: [
9448
- { ...chip, property: 'background-color' },
9449
- { ...overflowChipFirstBorder, property: 'border-color' },
9450
- { ...overflowChipSecondBorder, property: 'border-color' },
9530
+ horizontalPadding: [
9531
+ { selector: selectors.content, property: 'padding-right' },
9532
+ { selector: selectors.content, property: 'padding-left' },
9451
9533
  ],
9452
-
9453
- // we need to use the variables from the portal mixin
9454
- // so we need to use an arrow function on the selector
9455
- // for that to work, because ComboBox is not available
9456
- // at this time.
9457
- overlayBackground: {
9458
- property: () => MultiSelectComboBoxClass.cssVarList.overlay.backgroundColor,
9459
- },
9460
- overlayBorder: { property: () => MultiSelectComboBoxClass.cssVarList.overlay.border },
9461
- overlayFontSize: { property: () => MultiSelectComboBoxClass.cssVarList.overlay.fontSize },
9462
- overlayFontFamily: { property: () => MultiSelectComboBoxClass.cssVarList.overlay.fontFamily },
9463
- overlayCursor: { property: () => MultiSelectComboBoxClass.cssVarList.overlay.cursor },
9464
- overlayItemBoxShadow: {
9465
- property: () => MultiSelectComboBoxClass.cssVarList.overlay.itemBoxShadow,
9466
- },
9467
- overlayItemPaddingInlineStart: {
9468
- property: () => MultiSelectComboBoxClass.cssVarList.overlay.itemPaddingInlineStart,
9469
- },
9470
- overlayItemPaddingInlineEnd: {
9471
- property: () => MultiSelectComboBoxClass.cssVarList.overlay.itemPaddingInlineEnd,
9472
- },
9473
- },
9474
- }),
9475
- draggableMixin,
9476
- portalMixin({
9477
- name: 'overlay',
9478
- selector: 'vaadin-multi-select-combo-box-internal',
9479
- mappings: {
9480
- backgroundColor: { selector: 'vaadin-multi-select-combo-box-scroller' },
9481
- minHeight: { selector: 'vaadin-multi-select-combo-box-overlay' },
9482
- margin: { selector: 'vaadin-multi-select-combo-box-overlay' },
9483
- cursor: { selector: 'vaadin-multi-select-combo-box-item' },
9484
- fontFamily: { selector: 'vaadin-multi-select-combo-box-item' },
9485
- fontSize: { selector: 'vaadin-multi-select-combo-box-item' },
9486
- itemBoxShadow: { selector: 'vaadin-multi-select-combo-box-item', property: 'box-shadow' },
9487
- itemPaddingInlineStart: {
9488
- selector: 'vaadin-multi-select-combo-box-item',
9489
- property: 'padding-inline-start',
9490
- },
9491
- itemPaddingInlineEnd: {
9492
- selector: 'vaadin-multi-select-combo-box-item',
9493
- property: 'padding-inline-end',
9494
- },
9495
- },
9496
- forward: {
9497
- include: false,
9498
- attributes: ['size'],
9499
9534
  },
9500
9535
  }),
9501
- composedProxyInputMixin({ proxyProps: ['selectionStart'], inputEvent: 'selected-items-changed' }),
9502
- componentNameValidationMixin,
9503
- MultiSelectComboBoxMixin
9536
+ notificationCardMixin
9504
9537
  )(
9505
9538
  createProxy({
9506
- slots: ['', 'prefix'],
9507
- wrappedEleName: 'vaadin-multi-select-combo-box',
9539
+ slots: [],
9540
+ wrappedEleName: 'vaadin-notification-card',
9508
9541
  style: () => `
9509
- :host {
9510
- display: inline-flex;
9511
- box-sizing: border-box;
9512
- -webkit-mask-image: none;
9513
- }
9514
- ${useHostExternalPadding(MultiSelectComboBoxClass.cssVarList)}
9515
- ${resetInputReadonlyStyle('vaadin-multi-select-combo-box')}
9516
- ${resetInputPlaceholder('vaadin-multi-select-combo-box')}
9517
- ${resetInputCursor('vaadin-multi-select-combo-box')}
9518
-
9519
- vaadin-multi-select-combo-box {
9520
- padding: 0;
9521
- width: 100%;
9522
- }
9523
- vaadin-multi-select-combo-box::before {
9524
- height: initial;
9525
- }
9526
- vaadin-multi-select-combo-box [slot="input"] {
9527
- -webkit-mask-image: none;
9528
- min-height: 0;
9529
- align-self: center;
9530
- box-sizing: border-box;
9531
- }
9532
-
9533
- ::part(input-field) {
9534
- padding: 0;
9535
- box-shadow: none;
9536
- }
9537
- ${resetInputLabelPosition('vaadin-multi-select-combo-box')}
9538
- :host([has-label]) vaadin-multi-select-combo-box-chip::part(label) {
9539
- display: block;
9542
+ vaadin-notification-card {
9543
+ box-shadow: none;
9544
+ }
9545
+ ::part(overlay) {
9546
+ box-shadow: none;
9547
+ background: none;
9540
9548
  }
9541
9549
 
9542
- vaadin-multi-select-combo-box vaadin-multi-select-combo-box-chip[slot='overflow']::before,
9543
- vaadin-multi-select-combo-box vaadin-multi-select-combo-box-chip[slot='overflow']::after {
9544
- left: -4px;
9545
- right: -4px;
9546
- border-left-width: 0;
9547
- border-inline-start-style: solid;
9548
- border-inline-start-width: 2px;
9550
+ [part="close"] {
9551
+ cursor: pointer;
9552
+ display: flex;
9549
9553
  }
9550
- vaadin-multi-select-combo-box vaadin-multi-select-combo-box-chip[slot='overflow']::after {
9551
- left: -8px;
9552
- right: -8px;
9554
+
9555
+ [part="content"] {
9556
+ display: flex;
9557
+ align-items: center;
9558
+ flex-grow: 1;
9553
9559
  }
9554
9560
 
9555
- :host([has-no-options][allow-custom-value='true']) ::part(toggle-button) {
9556
- display: none;
9561
+ [part="root"] {
9562
+ display: flex;
9563
+ align-items: center;
9564
+ justify-content: space-between;
9565
+ width: 100%;
9557
9566
  }
9558
- `,
9559
- // Note: we exclude `size` to avoid overriding Vaadin's ComboBox property
9560
- // with the same name. Including it will cause Vaadin to calculate NaN size,
9561
- // and reset items to an empty array, and opening the list box with no items
9562
- // to display.
9563
- // Note: we exclude `placeholder` because the vaadin component observes it and
9564
- // tries to override it, causing us to lose the user set placeholder.
9565
- excludeAttrsSync: ['tabindex', 'size', 'data', 'placeholder'],
9566
- componentName: componentName$1,
9567
- includeForwardProps: ['items', 'renderer', 'selectedItems'],
9567
+ `,
9568
+ excludeAttrsSync: ['tabindex'],
9569
+ componentName,
9568
9570
  })
9569
9571
  );
9570
9572
 
9573
+ const globalRefs$2 = getThemeRefs(globals);
9574
+ const vars$3 = NotificationCardClass.cssVarList;
9575
+
9576
+ const shadowColor = '#00000020';
9577
+
9578
+ const notification = {
9579
+ [vars$3.hostMinWidth]: '415px',
9580
+ [vars$3.fontFamily]: globalRefs$2.fonts.font1.family,
9581
+ [vars$3.fontSize]: globalRefs$2.typography.body1.size,
9582
+ [vars$3.backgroundColor]: globalRefs$2.colors.surface.main,
9583
+ [vars$3.textColor]: globalRefs$2.colors.surface.contrast,
9584
+ [vars$3.boxShadow]: `${globalRefs$2.shadow.wide.xl} ${shadowColor}, ${globalRefs$2.shadow.narrow.xl} ${shadowColor}`,
9585
+ [vars$3.verticalPadding]: '0.625em',
9586
+ [vars$3.horizontalPadding]: '1.5em',
9587
+ [vars$3.borderRadius]: globalRefs$2.radius.xs,
9588
+
9589
+ _bordered: {
9590
+ [vars$3.borderWidth]: globalRefs$2.border.sm,
9591
+ [vars$3.borderStyle]: 'solid',
9592
+ [vars$3.borderColor]: 'transparent',
9593
+ },
9594
+
9595
+ size: {
9596
+ xs: { [vars$3.fontSize]: '12px' },
9597
+ sm: { [vars$3.fontSize]: '14px' },
9598
+ md: { [vars$3.fontSize]: '16px' },
9599
+ lg: { [vars$3.fontSize]: '18px' },
9600
+ },
9601
+
9602
+ mode: {
9603
+ primary: {
9604
+ [vars$3.backgroundColor]: globalRefs$2.colors.primary.main,
9605
+ [vars$3.textColor]: globalRefs$2.colors.primary.contrast,
9606
+ [vars$3.borderColor]: globalRefs$2.colors.primary.light,
9607
+ },
9608
+ success: {
9609
+ [vars$3.backgroundColor]: globalRefs$2.colors.success.main,
9610
+ [vars$3.textColor]: globalRefs$2.colors.success.contrast,
9611
+ [vars$3.borderColor]: globalRefs$2.colors.success.light,
9612
+ },
9613
+ error: {
9614
+ [vars$3.backgroundColor]: globalRefs$2.colors.error.main,
9615
+ [vars$3.textColor]: globalRefs$2.colors.error.contrast,
9616
+ [vars$3.borderColor]: globalRefs$2.colors.error.light,
9617
+ },
9618
+ },
9619
+ };
9620
+
9621
+ var notificationCard = /*#__PURE__*/Object.freeze({
9622
+ __proto__: null,
9623
+ default: notification,
9624
+ vars: vars$3
9625
+ });
9626
+
9571
9627
  const globalRefs$1 = getThemeRefs(globals);
9572
9628
  const vars$2 = MultiSelectComboBoxClass.cssVarList;
9573
9629
 
@@ -9625,56 +9681,6 @@ var multiSelectComboBox$1 = /*#__PURE__*/Object.freeze({
9625
9681
  vars: vars$2
9626
9682
  });
9627
9683
 
9628
- const componentName = getComponentName('badge');
9629
-
9630
- class RawBadge extends createBaseClass({ componentName, baseSelector: ':host > div' }) {
9631
- constructor() {
9632
- super();
9633
-
9634
- this.attachShadow({ mode: 'open' }).innerHTML = `
9635
- <style>
9636
- :host {
9637
- display: inline-flex;
9638
- }
9639
- :host > div {
9640
- width: 100%;
9641
- }
9642
- </style>
9643
- <div>
9644
- <slot></slot>
9645
- </div>
9646
- `;
9647
- }
9648
- }
9649
-
9650
- const BadgeClass = compose(
9651
- createStyleMixin({
9652
- mappings: {
9653
- hostWidth: [{ selector: () => ':host', property: 'width' }],
9654
- hostDirection: { property: 'direction' },
9655
-
9656
- fontFamily: {},
9657
- fontSize: {},
9658
- fontWeight: {},
9659
- textTransform: {},
9660
- verticalPadding: [{ property: 'padding-top' }, { property: 'padding-bottom' }],
9661
- horizontalPadding: [{ property: 'padding-left' }, { property: 'padding-right' }],
9662
-
9663
- borderWidth: {},
9664
- borderStyle: {},
9665
- borderColor: {},
9666
- borderRadius: {},
9667
-
9668
- backgroundColor: {},
9669
-
9670
- textColor: { property: 'color' },
9671
- textAlign: {},
9672
- },
9673
- }),
9674
- draggableMixin,
9675
- componentNameValidationMixin
9676
- )(RawBadge);
9677
-
9678
9684
  const globalRefs = getThemeRefs(globals);
9679
9685
  const vars$1 = BadgeClass.cssVarList;
9680
9686
 
@@ -9792,5 +9798,5 @@ const vars = Object.keys(components).reduce(
9792
9798
  const defaultTheme = { globals, components: theme };
9793
9799
  const themeVars = { globals: vars$w, components: vars };
9794
9800
 
9795
- export { ButtonClass, ButtonSelectionGroupClass, ButtonSelectionGroupItemClass, CheckboxClass, ContainerClass, DividerClass, EmailFieldClass, GridClass, ImageClass, LinkClass, LoaderLinearClass, LoaderRadialClass, LogoClass, NewPasswordClass, NumberFieldClass, PasscodeClass, PasswordClass, PhoneFieldClass, PhoneFieldInputBoxClass, RecaptchaClass, SwitchToggleClass, TextAreaClass, TextClass, TextFieldClass, TotpImageClass, UploadFileClass, componentsThemeManager, createComponentsTheme, defaultTheme, genColor, globalsThemeToStyle, themeToStyle, themeVars };
9801
+ export { BadgeClass, ButtonClass, ButtonSelectionGroupClass, CheckboxClass, ContainerClass, DividerClass, EmailFieldClass, GridClass, ImageClass, LinkClass, LoaderLinearClass, LoaderRadialClass, LogoClass, MultiSelectComboBoxClass, NewPasswordClass, NumberFieldClass, PasscodeClass, PasswordClass, PhoneFieldClass, PhoneFieldInputBoxClass, RecaptchaClass, SwitchToggleClass, TextAreaClass, TextClass, TextFieldClass, TotpImageClass, UploadFileClass, componentsThemeManager, createComponentsTheme, defaultTheme, genColor, globalsThemeToStyle, themeToStyle, themeVars };
9796
9802
  //# sourceMappingURL=index.esm.js.map