@descope/web-components-ui 1.0.425 → 1.0.426

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/cjs/index.cjs.js +1855 -910
  2. package/dist/cjs/index.cjs.js.map +1 -1
  3. package/dist/index.esm.js +4441 -3497
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/umd/1484.js +1 -1
  6. package/dist/umd/2159.js +1 -1
  7. package/dist/umd/404.js +1 -1
  8. package/dist/umd/4127.js +1 -1
  9. package/dist/umd/{2755.js → 5459.js} +1 -1
  10. package/dist/umd/8823.js +1 -1
  11. package/dist/umd/DescopeDev.js +1 -1
  12. package/dist/umd/descope-combo-box.js +113 -0
  13. package/dist/umd/descope-date-field-descope-calendar-index-js.js +1 -1
  14. package/dist/umd/descope-hybrid-field-index-js.js +3 -3
  15. package/dist/umd/descope-security-questions-setup-index-js.js +1 -1
  16. package/dist/umd/index.js +1 -1
  17. package/dist/umd/mapping-fields-descope-mappings-field-index-js.js +1 -1
  18. package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js +1 -1
  19. package/dist/umd/phone-fields-descope-phone-field-descope-phone-field-internal-index-js.js +1 -1
  20. package/dist/umd/phone-fields-descope-phone-field-index-js.js +1 -1
  21. package/dist/umd/phone-fields-descope-phone-input-box-field-descope-phone-input-box-internal-index-js.js +2 -2
  22. package/dist/umd/phone-fields-descope-phone-input-box-field-index-js.js +8 -8
  23. package/node_modules/common/package.json +3 -0
  24. package/node_modules/common/src/componentsMixins/mixins/normalizeBooleanAttributesMixin.js +2 -0
  25. package/node_modules/common/src/sbHelpers.js +53 -0
  26. package/node_modules/common/src/themeHelpers/index.js +26 -11
  27. package/node_modules/common/src/themeHelpers/resetHelpers.js +144 -0
  28. package/node_modules/descope-combo-box/e2e/descope-combo-box.spec.ts +462 -0
  29. package/node_modules/descope-combo-box/package.json +34 -0
  30. package/node_modules/descope-combo-box/project.json +7 -0
  31. package/{src/components/descope-combo-box → node_modules/descope-combo-box/src/component}/ComboBoxClass.js +114 -38
  32. package/{src/theme/components/comboBox.js → node_modules/descope-combo-box/src/theme.js} +6 -6
  33. package/node_modules/descope-combo-box/stories/descope-combo-box.stories.js +180 -0
  34. package/node_modules/theme-input-wrapper/package.json +17 -0
  35. package/node_modules/theme-input-wrapper/project.json +7 -0
  36. package/node_modules/theme-input-wrapper/src/index.js +130 -0
  37. package/package.json +10 -6
  38. package/src/components/descope-date-field/descope-calendar/index.js +1 -1
  39. package/src/components/descope-security-questions-setup/SecurityQuestionsSetupClass.js +1 -1
  40. package/src/components/descope-security-questions-setup/index.js +1 -1
  41. package/src/components/mapping-fields/descope-mappings-field/index.js +1 -1
  42. package/src/components/phone-fields/descope-phone-field/PhoneFieldClass.js +1 -1
  43. package/src/components/phone-fields/descope-phone-field/descope-phone-field-internal/index.js +1 -1
  44. package/src/components/phone-fields/descope-phone-field/index.js +1 -1
  45. package/src/components/phone-fields/descope-phone-input-box-field/index.js +1 -1
  46. package/src/index.js +0 -1
  47. package/src/theme/components/index.js +1 -1
  48. package/dist/umd/4480.js +0 -1
  49. package/dist/umd/descope-combo-box-index-js.js +0 -113
  50. /package/dist/umd/{descope-combo-box-index-js.js.LICENSE.txt → descope-combo-box.js.LICENSE.txt} +0 -0
  51. /package/{src/components/descope-combo-box → node_modules/descope-combo-box/src/component}/index.js +0 -0
@@ -1,9 +1,9 @@
1
- import { compose } from '../../helpers';
1
+ import { compose } from 'common/utils';
2
2
  import {
3
3
  getComponentName,
4
4
  observeAttributes,
5
5
  observeChildren,
6
- } from '../../helpers/componentHelpers';
6
+ } from 'common/components-helpers';
7
7
  import {
8
8
  resetInputLabelPosition,
9
9
  resetInputCursor,
@@ -11,7 +11,7 @@ import {
11
11
  resetInputReadonlyStyle,
12
12
  useHostExternalPadding,
13
13
  inputFloatingLabelStyle,
14
- } from '../../helpers/themeHelpers/resetHelpers';
14
+ } from 'common/theme-helpers';
15
15
  import {
16
16
  createStyleMixin,
17
17
  draggableMixin,
@@ -19,7 +19,7 @@ import {
19
19
  componentNameValidationMixin,
20
20
  portalMixin,
21
21
  proxyInputMixin,
22
- } from '../../mixins';
22
+ } from 'common/components-mixins';
23
23
 
24
24
  export const componentName = getComponentName('combo-box');
25
25
 
@@ -31,7 +31,9 @@ const ComboBoxMixin = (superclass) =>
31
31
 
32
32
  // eslint-disable-next-line class-methods-use-this
33
33
  #renderItem = ({ displayName, value, label }) => {
34
- return `<span data-name="${label}" data-id="${value}">${displayName || label}</span>`;
34
+ return `<span data-name="${label}" data-id="${value}">${
35
+ displayName || label
36
+ }</span>`;
35
37
  };
36
38
 
37
39
  #data;
@@ -79,7 +81,10 @@ const ComboBoxMixin = (superclass) =>
79
81
  }
80
82
  } catch (e) {
81
83
  // eslint-disable-next-line no-console
82
- console.error('could not parse data string from attribute "data" -', e.message);
84
+ console.error(
85
+ 'could not parse data string from attribute "data" -',
86
+ e.message,
87
+ );
83
88
  }
84
89
  }
85
90
 
@@ -105,7 +110,10 @@ const ComboBoxMixin = (superclass) =>
105
110
  }
106
111
 
107
112
  getItemsTemplate() {
108
- return this.data?.reduce?.((acc, item) => acc + (this.renderItem?.(item || {}) || ''), '');
113
+ return this.data?.reduce?.(
114
+ (acc, item) => acc + (this.renderItem?.(item || {}) || ''),
115
+ '',
116
+ );
109
117
  }
110
118
 
111
119
  renderItems() {
@@ -146,7 +154,7 @@ const ComboBoxMixin = (superclass) =>
146
154
  setComboBoxDescriptor() {
147
155
  const valueDescriptor = Object.getOwnPropertyDescriptor(
148
156
  this.inputElement.constructor.prototype,
149
- 'value'
157
+ 'value',
150
158
  );
151
159
 
152
160
  const comboBox = this;
@@ -155,7 +163,10 @@ const ComboBoxMixin = (superclass) =>
155
163
  value: {
156
164
  ...valueDescriptor,
157
165
  set(val) {
158
- if (!comboBox.baseElement.items?.length && !comboBox.allowCustomValue) {
166
+ if (
167
+ !comboBox.baseElement.items?.length &&
168
+ !comboBox.allowCustomValue
169
+ ) {
159
170
  return;
160
171
  }
161
172
 
@@ -202,7 +213,9 @@ const ComboBoxMixin = (superclass) =>
202
213
  // we do not want that because it's difficult to style the overlay in this way
203
214
  // so we override it to open inside the shadow DOM
204
215
  #overrideOverlaySettings() {
205
- const overlay = this.baseElement.shadowRoot.querySelector('vaadin-combo-box-overlay');
216
+ const overlay = this.baseElement.shadowRoot.querySelector(
217
+ 'vaadin-combo-box-overlay',
218
+ );
206
219
  overlay._attachOverlay = () => {
207
220
  overlay.bringToFront();
208
221
  };
@@ -238,13 +251,17 @@ const ComboBoxMixin = (superclass) =>
238
251
  this.#overrideRenderer();
239
252
 
240
253
  // Set up observers - order matters here since renderItems can clear innerHTML
241
- observeAttributes(this, this.renderItems.bind(this), { includeAttrs: ['data'] });
254
+ observeAttributes(this, this.renderItems.bind(this), {
255
+ includeAttrs: ['data'],
256
+ });
242
257
  observeChildren(this, this.#onChildrenChange.bind(this));
243
258
 
244
259
  this.setDefaultValue();
245
260
 
246
261
  this.baseElement.addEventListener('selected-item-changed', () => {
247
- this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));
262
+ this.dispatchEvent(
263
+ new Event('input', { bubbles: true, composed: true }),
264
+ );
248
265
  });
249
266
  }
250
267
 
@@ -291,7 +308,7 @@ const ComboBoxMixin = (superclass) =>
291
308
  (e) => {
292
309
  e.stopImmediatePropagation();
293
310
  },
294
- { once: true, capture: true }
311
+ { once: true, capture: true },
295
312
  );
296
313
  }
297
314
  }
@@ -338,7 +355,9 @@ const {
338
355
  toggle: { selector: '::part(toggle-button)' },
339
356
  clearButton: { selector: '::part(clear-button)' },
340
357
  label: { selector: '::part(label)' },
341
- requiredIndicator: { selector: '[required]::part(required-indicator)::after' },
358
+ requiredIndicator: {
359
+ selector: '[required]::part(required-indicator)::after',
360
+ },
342
361
  helperText: { selector: '::part(helper-text)' },
343
362
  errorMessage: { selector: '::part(error-message)' },
344
363
  };
@@ -360,9 +379,18 @@ export const ComboBoxClass = compose(
360
379
  errorMessageTextColor: { ...errorMessage, property: 'color' },
361
380
  errorMessageIcon: { ...errorMessage, property: 'background-image' },
362
381
  errorMessageIconSize: { ...errorMessage, property: 'background-size' },
363
- errorMessageIconPadding: { ...errorMessage, property: 'padding-inline-start' },
364
- errorMessageIconRepeat: { ...errorMessage, property: 'background-repeat' },
365
- errorMessageIconPosition: { ...errorMessage, property: 'background-position' },
382
+ errorMessageIconPadding: {
383
+ ...errorMessage,
384
+ property: 'padding-inline-start',
385
+ },
386
+ errorMessageIconRepeat: {
387
+ ...errorMessage,
388
+ property: 'background-repeat',
389
+ },
390
+ errorMessageIconPosition: {
391
+ ...errorMessage,
392
+ property: 'background-position',
393
+ },
366
394
  inputHeight: { ...inputField, property: 'height' },
367
395
  inputBackgroundColor: { ...inputField, property: 'background-color' },
368
396
  inputBorderColor: { ...inputField, property: 'border-color' },
@@ -415,15 +443,27 @@ export const ComboBoxClass = compose(
415
443
  // so we need to use an arrow function on the selector
416
444
  // for that to work, because ComboBox is not available
417
445
  // at this time.
418
- overlayBackground: { property: () => ComboBoxClass.cssVarList.overlay.backgroundColor },
446
+ overlayBackground: {
447
+ property: () => ComboBoxClass.cssVarList.overlay.backgroundColor,
448
+ },
419
449
  overlayTextColor: {
420
450
  property: () => ComboBoxClass.cssVarList.overlay.textColor,
421
451
  },
422
- overlayBorder: { property: () => ComboBoxClass.cssVarList.overlay.border },
423
- overlayFontSize: { property: () => ComboBoxClass.cssVarList.overlay.fontSize },
424
- overlayFontFamily: { property: () => ComboBoxClass.cssVarList.overlay.fontFamily },
425
- overlayCursor: { property: () => ComboBoxClass.cssVarList.overlay.cursor },
426
- overlayItemBoxShadow: { property: () => ComboBoxClass.cssVarList.overlay.itemBoxShadow },
452
+ overlayBorder: {
453
+ property: () => ComboBoxClass.cssVarList.overlay.border,
454
+ },
455
+ overlayFontSize: {
456
+ property: () => ComboBoxClass.cssVarList.overlay.fontSize,
457
+ },
458
+ overlayFontFamily: {
459
+ property: () => ComboBoxClass.cssVarList.overlay.fontFamily,
460
+ },
461
+ overlayCursor: {
462
+ property: () => ComboBoxClass.cssVarList.overlay.cursor,
463
+ },
464
+ overlayItemBoxShadow: {
465
+ property: () => ComboBoxClass.cssVarList.overlay.itemBoxShadow,
466
+ },
427
467
  overlayItemPaddingInlineStart: {
428
468
  property: () => ComboBoxClass.cssVarList.overlay.itemPaddingInlineStart,
429
469
  },
@@ -447,20 +487,47 @@ export const ComboBoxClass = compose(
447
487
  fontFamily: { selector: 'vaadin-combo-box-item' },
448
488
  textColor: { selector: 'vaadin-combo-box-item', property: 'color' },
449
489
  fontSize: { selector: 'vaadin-combo-box-item' },
450
- itemBoxShadow: { selector: 'vaadin-combo-box-item', property: 'box-shadow' },
490
+ itemBoxShadow: {
491
+ selector: 'vaadin-combo-box-item',
492
+ property: 'box-shadow',
493
+ },
451
494
  itemPaddingInlineStart: {
452
495
  selector: 'vaadin-combo-box-item',
453
496
  property: 'padding-inline-start',
454
497
  },
455
- itemPaddingInlineEnd: { selector: 'vaadin-combo-box-item', property: 'padding-inline-end' },
456
-
457
- loaderTop: { selector: 'vaadin-combo-box-overlay::part(loader)', property: 'top' },
458
- loaderLeft: { selector: 'vaadin-combo-box-overlay::part(loader)', property: 'left' },
459
- loaderRight: { selector: 'vaadin-combo-box-overlay::part(loader)', property: 'right' },
460
- loaderMargin: { selector: 'vaadin-combo-box-overlay::part(loader)', property: 'margin' },
461
- loaderWidth: { selector: 'vaadin-combo-box-overlay::part(loader)', property: 'width' },
462
- loaderHeight: { selector: 'vaadin-combo-box-overlay::part(loader)', property: 'height' },
463
- loaderBorder: { selector: 'vaadin-combo-box-overlay::part(loader)', property: 'border' },
498
+ itemPaddingInlineEnd: {
499
+ selector: 'vaadin-combo-box-item',
500
+ property: 'padding-inline-end',
501
+ },
502
+
503
+ loaderTop: {
504
+ selector: 'vaadin-combo-box-overlay::part(loader)',
505
+ property: 'top',
506
+ },
507
+ loaderLeft: {
508
+ selector: 'vaadin-combo-box-overlay::part(loader)',
509
+ property: 'left',
510
+ },
511
+ loaderRight: {
512
+ selector: 'vaadin-combo-box-overlay::part(loader)',
513
+ property: 'right',
514
+ },
515
+ loaderMargin: {
516
+ selector: 'vaadin-combo-box-overlay::part(loader)',
517
+ property: 'margin',
518
+ },
519
+ loaderWidth: {
520
+ selector: 'vaadin-combo-box-overlay::part(loader)',
521
+ property: 'width',
522
+ },
523
+ loaderHeight: {
524
+ selector: 'vaadin-combo-box-overlay::part(loader)',
525
+ property: 'height',
526
+ },
527
+ loaderBorder: {
528
+ selector: 'vaadin-combo-box-overlay::part(loader)',
529
+ property: 'border',
530
+ },
464
531
  loaderBorderColor: {
465
532
  selector: 'vaadin-combo-box-overlay::part(loader)',
466
533
  property: 'border-color',
@@ -469,17 +536,26 @@ export const ComboBoxClass = compose(
469
536
  selector: 'vaadin-combo-box-overlay::part(loader)',
470
537
  property: 'border-radius',
471
538
  },
472
- contentHeight: { selector: 'vaadin-combo-box-overlay::part(content)', property: 'height' },
473
- contentOpacity: { selector: 'vaadin-combo-box-overlay::part(content)', property: 'opacity' },
539
+ contentHeight: {
540
+ selector: 'vaadin-combo-box-overlay::part(content)',
541
+ property: 'height',
542
+ },
543
+ contentOpacity: {
544
+ selector: 'vaadin-combo-box-overlay::part(content)',
545
+ property: 'opacity',
546
+ },
474
547
  },
475
548
  forward: {
476
549
  include: false,
477
550
  attributes: ['size'],
478
551
  },
479
552
  }),
480
- proxyInputMixin({ proxyProps: ['selectionStart'], inputEvent: 'selected-item-changed' }),
553
+ proxyInputMixin({
554
+ proxyProps: ['selectionStart'],
555
+ inputEvent: 'selected-item-changed',
556
+ }),
481
557
  componentNameValidationMixin,
482
- ComboBoxMixin
558
+ ComboBoxMixin,
483
559
  )(
484
560
  createProxy({
485
561
  slots: ['', 'prefix'],
@@ -539,5 +615,5 @@ export const ComboBoxClass = compose(
539
615
  excludeAttrsSync: ['tabindex', 'size', 'data', 'loading'],
540
616
  componentName,
541
617
  includeForwardProps: ['items', 'renderer', 'selectedItem'],
542
- })
618
+ }),
543
619
  );
@@ -1,7 +1,7 @@
1
- import globals from '../globals';
2
- import { ComboBoxClass } from '../../components/descope-combo-box/ComboBoxClass';
3
- import { getThemeRefs } from '../../helpers/themeHelpers';
4
- import { refs } from './inputWrapper';
1
+ import globals from 'theme-globals';
2
+ import { ComboBoxClass } from './component/ComboBoxClass';
3
+ import { getThemeRefs } from 'common/theme-helpers';
4
+ import { refs } from 'theme-input-wrapper';
5
5
 
6
6
  const globalRefs = getThemeRefs(globals);
7
7
  const vars = ComboBoxClass.cssVarList;
@@ -81,8 +81,8 @@ export const comboBox = {
81
81
  [vars.overlay.loaderWidth]: '30px',
82
82
  [vars.overlay.loaderHeight]: '30px',
83
83
  [vars.overlay.loaderBorder]: '2px solid transparent',
84
- [vars.overlay.loaderBorderColor]:
85
- `${globalRefs.colors.primary.highlight} ${globalRefs.colors.primary.highlight} ${globalRefs.colors.primary.main} ${globalRefs.colors.primary.main}`,
84
+ [vars.overlay
85
+ .loaderBorderColor]: `${globalRefs.colors.primary.highlight} ${globalRefs.colors.primary.highlight} ${globalRefs.colors.primary.main} ${globalRefs.colors.primary.main}`,
86
86
  [vars.overlay.loaderBorderRadius]: '50%',
87
87
  [vars.overlay.contentHeight]: '100px',
88
88
  [vars.overlay.contentOpacity]: '0',
@@ -0,0 +1,180 @@
1
+ /* eslint no-param-reassign: 0 */
2
+
3
+ import { componentName } from '../src/component/ComboBoxClass';
4
+ import { withForm } from 'common/sb-helpers';
5
+ import {
6
+ labelControl,
7
+ placeholderControl,
8
+ sizeControl,
9
+ fullWidthControl,
10
+ directionControl,
11
+ disabledControl,
12
+ readOnlyControl,
13
+ requiredControl,
14
+ borderedControl,
15
+ loadingControl,
16
+ errorMissingValueControl,
17
+ overrideRenderItemControl,
18
+ itemsSourceControl,
19
+ inputLabelTypeControl,
20
+ errorMessageIconControl,
21
+ errorMessageIconAttrs,
22
+ } from 'common/sb-controls';
23
+
24
+ const Template = ({
25
+ label,
26
+ placeholder,
27
+ size,
28
+ bordered,
29
+ 'full-width': fullWidth,
30
+ readonly,
31
+ required,
32
+ direction,
33
+ disabled,
34
+ data,
35
+ overrideRenderItem,
36
+ itemsSource,
37
+ loading,
38
+ 'default-value': defaultValue,
39
+ 'data-errormessage-value-missing': customErrorMissingValue,
40
+ 'label-type': labelType,
41
+ 'hide-toggle-button': hideToggleButton,
42
+ 'allow-custom-value': allowCustomValue,
43
+ overrideRenderer,
44
+ errorMsgIcon,
45
+ }) => {
46
+ let serializedData;
47
+
48
+ try {
49
+ serializedData = JSON.stringify(data);
50
+ } catch (e) {
51
+ // do nothing
52
+ }
53
+
54
+ // this is another way to pass data to the component (prop instead of attr)
55
+ const dataFromPropScript = `
56
+ <script>
57
+ document.querySelector("descope-combo-box").data = ${serializedData.replace(
58
+ /\n/g,
59
+ '',
60
+ )}
61
+ </script>`;
62
+
63
+ // eslint-disable-next-line no-shadow
64
+ const altRenderItem = ({ displayName, label, value }) =>
65
+ `<span data-name="${displayName}" data-value="${value}">${label}</span>`;
66
+
67
+ // this allows us to update the render item function
68
+ const overrideRenderItemScript = `
69
+ <script>
70
+ document.querySelector("descope-combo-box").renderItem = ${altRenderItem
71
+ .toString()
72
+ .replace(/\n/g, '')}
73
+ </script>`;
74
+
75
+ const altRenderer = (root, combo, model) => {
76
+ if (model.index === 1) {
77
+ root.style.backgroundColor = '#008000';
78
+ root.style.color = '#ffffff';
79
+ }
80
+ root.innerHTML = model.item.outerHTML;
81
+ };
82
+
83
+ const overrideRendererScript = `
84
+ <script>
85
+ document.querySelector("descope-combo-box").renderer = ${altRenderer
86
+ .toString()
87
+ .replace(/\n/g, '')}
88
+ </script>`;
89
+
90
+ return withForm(`
91
+ <descope-combo-box
92
+ clear-button-visible
93
+ data='${(itemsSource === 'attr' && serializedData) || ''}'
94
+ size="${size}"
95
+ bordered="${bordered}"
96
+ item-label-path="data-name"
97
+ item-value-path="data-id"
98
+ label="${label || ''}"
99
+ placeholder="${placeholder || ''}"
100
+ default-value="${defaultValue || ''}"
101
+ required="${required || false}"
102
+ full-width="${fullWidth || false}"
103
+ readonly="${readonly || false}"
104
+ disabled="${disabled || false}"
105
+ loading="${loading || false}"
106
+ data-errormessage-value-missing="${customErrorMissingValue || ''}"
107
+ st-host-direction="${direction ?? ''}"
108
+ label-type="${labelType || ''}"
109
+ hide-toggle-button="${hideToggleButton || false}"
110
+ allow-custom-value="${allowCustomValue || false}"
111
+ ${errorMsgIcon ? errorMessageIconAttrs : ''}
112
+ >
113
+ <span data-name="ItemName1" data-id="itemId1">Trojan War Heroes' Valor</span>
114
+ <span data-name="ItemName2" data-id="itemId2">Achilles' Fateful Wrath</span>
115
+ <span data-name="ItemName3" data-id="itemId3">Epic Battle of Gods</span>
116
+ <span data-name="ItemName4" data-id="itemId4">Hector's Brave Sacrifice</span>
117
+ <span data-name="ItemName5" data-id="itemId5">Trojan Horse Deception</span>
118
+ <span data-name="ItemName6" data-id="itemId6">Agamemnon's Royal Command</span>
119
+ <span data-name="ItemName7" data-id="itemId7">Odysseus' Cunning Strategy</span>
120
+ <span data-name="ItemName8" data-id="itemId8">Helen's Beauty's Curse</span>
121
+ <span data-name="ItemName9" data-id="itemId9">Achilles' Heel Weakness</span>
122
+ <span data-name="ItemName10" data-id="itemId10">Epic Poem of Ancient</span>
123
+ </descope-combo-box>
124
+ ${itemsSource === 'prop' ? dataFromPropScript : ''}
125
+ ${overrideRenderItem ? overrideRenderItemScript : ''}
126
+ ${overrideRenderer ? overrideRendererScript : ''}
127
+ `);
128
+ };
129
+
130
+ export default {
131
+ component: componentName,
132
+ title: 'descope-combo-box',
133
+ argTypes: {
134
+ ...labelControl,
135
+ ...placeholderControl,
136
+ ...inputLabelTypeControl,
137
+ ...sizeControl,
138
+ ...fullWidthControl,
139
+ ...disabledControl,
140
+ ...readOnlyControl,
141
+ ...requiredControl,
142
+ ...borderedControl,
143
+ ...errorMissingValueControl,
144
+ ...overrideRenderItemControl,
145
+ ...itemsSourceControl,
146
+ ...directionControl,
147
+ ...loadingControl,
148
+ ...errorMessageIconControl,
149
+ 'default-value': {
150
+ name: 'Default Value',
151
+ control: { type: 'text' },
152
+ },
153
+ 'hide-toggle-button': {
154
+ name: 'Hide Toggle Button',
155
+ control: { type: 'boolean' },
156
+ },
157
+ 'allow-custom-value': {
158
+ name: 'Allow Custom Value',
159
+ control: { type: 'boolean' },
160
+ },
161
+ overrideRenderer: {
162
+ name: 'Override the default renderer function',
163
+ control: { type: 'boolean' },
164
+ },
165
+ },
166
+ };
167
+
168
+ export const Default = Template.bind({});
169
+
170
+ Default.args = {
171
+ size: 'md',
172
+ bordered: true,
173
+ loading: false,
174
+ data: [
175
+ { displayName: 'Item1', value: '1', label: 'data item 1' },
176
+ { displayName: 'Item2', value: 'itemId2', label: 'data item 2' },
177
+ { displayName: 'Item3', value: '3', label: 'data item 3' },
178
+ { displayName: 'Item4', value: '4', label: 'data item 4' },
179
+ ],
180
+ };
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "theme-input-wrapper",
3
+ "version": "0.0.1",
4
+ "main": "./src/index.js",
5
+ "scripts": {
6
+ "test": "echo 'No tests defined' && exit 0",
7
+ "test:e2e": "echo 'No e2e tests defined' && exit 0"
8
+ },
9
+ "dependencies": {
10
+ "common": "0.0.1",
11
+ "theme-globals": "0.0.1"
12
+ },
13
+ "private": true,
14
+ "publishConfig": {
15
+ "link-workspace-packages": false
16
+ }
17
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "theme-input-wrapper",
3
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
4
+ "sourceRoot": "packages/web-components/components/theme-input-wrapper/src",
5
+ "projectType": "library",
6
+ "tags": []
7
+ }
@@ -0,0 +1,130 @@
1
+ import globals from 'theme-globals';
2
+ import { getThemeRefs, createHelperVars } from 'common/theme-helpers';
3
+ import { getComponentName } from 'common/components-helpers';
4
+
5
+ const componentName = getComponentName('input-wrapper');
6
+ const globalRefs = getThemeRefs(globals);
7
+
8
+ const [theme, refs, vars] = createHelperVars(
9
+ {
10
+ labelTextColor: globalRefs.colors.surface.dark,
11
+ labelFontSize: '14px', // not taken from globals as it is fixed in all inputs
12
+ labelFontWeight: '500', // not taken from globals as it is fixed in all inputs
13
+ valueTextColor: globalRefs.colors.surface.contrast,
14
+ placeholderTextColor: globalRefs.colors.surface.dark,
15
+ requiredIndicator: "'*'",
16
+ helperTextColor: globalRefs.colors.surface.dark,
17
+ errorMessageTextColor: globalRefs.colors.error.main,
18
+ successMessageTextColor: globalRefs.colors.success.main,
19
+
20
+ borderWidth: globalRefs.border.xs,
21
+ borderRadius: globalRefs.radius.xs,
22
+ borderColor: 'transparent',
23
+
24
+ outlineWidth: globalRefs.border.sm,
25
+ outlineStyle: 'solid',
26
+ outlineColor: 'transparent',
27
+ outlineOffset: '0px', // we need to keep the px unit even for 0 value, as this var is used for calc in different component classes
28
+
29
+ minWidth: '10em',
30
+ toggleButtonSize: '1.5em',
31
+ inputIconSize: '1em',
32
+ inputHeight: '3em',
33
+ horizontalPadding: '0.5em',
34
+ verticalPadding: '0.5em',
35
+
36
+ textAlign: 'start',
37
+
38
+ backgroundColor: globalRefs.colors.surface.main,
39
+
40
+ fontFamily: globalRefs.fonts.font1.family,
41
+
42
+ direction: globalRefs.direction,
43
+
44
+ overlayOpacity: '0.3',
45
+
46
+ errorMessageIcon: '',
47
+ errorMessageIconSize: '0',
48
+ errorMessageIconPadding: '0',
49
+ errorMessageIconPosition: '0 0.4em',
50
+ errorMessageIconRepeat: 'no-repeat',
51
+
52
+ size: {
53
+ xs: { fontSize: '12px', chipFontSize: '10px' },
54
+ sm: { fontSize: '14px', chipFontSize: '12px' },
55
+ md: { fontSize: '16px', chipFontSize: '14px' },
56
+ lg: { fontSize: '18px', chipFontSize: '16px' },
57
+ },
58
+
59
+ labelType: {
60
+ static: {
61
+ valueInputHeight: '3em',
62
+ valueInputMarginBottom: 'auto',
63
+ },
64
+ floating: {
65
+ labelPosition: 'absolute',
66
+ labelTopPosition: '0',
67
+ labelHorizontalPosition: '0.9em',
68
+ labelFontSize: '1em',
69
+ placeholderOpacity: 0,
70
+ inputHeight: '3.5em',
71
+ inputVerticalAlignment: 'flex-end',
72
+ inputTransformY: 'translateY(1.55em)',
73
+ inputTransition: 'all 75ms ease-in-out',
74
+ marginInlineStart: '0',
75
+ valueInputHeight: '1.5702em',
76
+ valueInputMarginBottom: '0.5em',
77
+
78
+ _focused: {
79
+ labelFontSize: '0.75em',
80
+ inputTransformY: 'translateY(1.05em)',
81
+ labelFontWeight: '400',
82
+ placeholderOpacity: 1,
83
+ },
84
+
85
+ _readOnly: {
86
+ placeholderOpacity: 0,
87
+ },
88
+
89
+ _hasValue: {
90
+ inputTransformY: 'translateY(1.05em)',
91
+ labelFontSize: '0.75em',
92
+ labelFontWeight: '400',
93
+ },
94
+ },
95
+ },
96
+
97
+ _fullWidth: {
98
+ width: '100%',
99
+ },
100
+
101
+ _focused: {
102
+ outlineColor: globalRefs.colors.surface.light,
103
+ _invalid: {
104
+ outlineColor: globalRefs.colors.error.main,
105
+ },
106
+ },
107
+
108
+ _bordered: {
109
+ outlineWidth: globalRefs.border.xs,
110
+ borderColor: globalRefs.colors.surface.light,
111
+ borderStyle: 'solid',
112
+ _invalid: {
113
+ borderColor: globalRefs.colors.error.main,
114
+ },
115
+ },
116
+
117
+ _disabled: {
118
+ labelTextColor: globalRefs.colors.surface.light,
119
+ borderColor: globalRefs.colors.surface.light,
120
+ valueTextColor: globalRefs.colors.surface.light,
121
+ placeholderTextColor: globalRefs.colors.surface.light,
122
+ helperTextColor: globalRefs.colors.surface.light,
123
+ backgroundColor: globalRefs.colors.surface.main,
124
+ },
125
+ },
126
+ componentName,
127
+ );
128
+
129
+ export { refs, vars };
130
+ export default theme;