@descope/web-components-ui 1.0.243 → 1.0.245

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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