@descope/web-components-ui 1.0.246 → 1.0.247

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. package/dist/cjs/index.cjs.js +877 -658
  2. package/dist/cjs/index.cjs.js.map +1 -1
  3. package/dist/index.d.ts +2 -1
  4. package/dist/index.esm.js +888 -666
  5. package/dist/index.esm.js.map +1 -1
  6. package/dist/umd/1000.js +1 -1
  7. package/dist/umd/9214.js +1 -0
  8. package/dist/umd/9434.js +1 -0
  9. package/dist/umd/button-selection-group-fields-descope-button-multi-selection-group-index-js.js +1 -0
  10. package/dist/umd/button-selection-group-fields-descope-button-multi-selection-group-internal-index-js.js +1 -0
  11. package/dist/umd/button-selection-group-fields-descope-button-selection-group-index-js.js +1 -0
  12. package/dist/umd/button-selection-group-fields-descope-button-selection-group-internal-index-js.js +1 -0
  13. package/dist/umd/button-selection-group-fields-descope-button-selection-group-item-index-js.js +1 -0
  14. package/dist/umd/index.js +1 -1
  15. package/package.json +1 -1
  16. package/src/components/{descope-button-selection-group/ButtonSelectionGroupClass.js → button-selection-group-fields/baseButtonSelectionGroup.js} +19 -70
  17. package/src/components/button-selection-group-fields/createBaseButtonSelectionGroupInternalClass.js +101 -0
  18. package/src/components/button-selection-group-fields/descope-button-multi-selection-group/ButtonMultiSelectionGroupClass.js +67 -0
  19. package/src/components/button-selection-group-fields/descope-button-multi-selection-group/index.js +7 -0
  20. package/src/components/button-selection-group-fields/descope-button-multi-selection-group-internal/ButtonMultiSelectionGroupInternalClass.js +106 -0
  21. package/src/components/button-selection-group-fields/descope-button-multi-selection-group-internal/index.js +8 -0
  22. package/src/components/button-selection-group-fields/descope-button-selection-group/ButtonSelectionGroupClass.js +67 -0
  23. package/src/components/{descope-button-selection-group → button-selection-group-fields/descope-button-selection-group}/index.js +2 -2
  24. package/src/components/button-selection-group-fields/descope-button-selection-group-internal/ButtonSelectionGroupInternalClass.js +77 -0
  25. package/src/index.cjs.js +3 -2
  26. package/src/index.d.ts +2 -1
  27. package/src/index.js +2 -1
  28. package/src/mixins/inputValidationMixin.js +2 -2
  29. package/src/theme/components/buttonSelectionGroup/baseButtonSelectionGroup.js +15 -0
  30. package/src/theme/components/buttonSelectionGroup/buttonMultiSelectionGroup.js +11 -0
  31. package/src/theme/components/buttonSelectionGroup/buttonSelectionGroup.js +3 -12
  32. package/src/theme/components/buttonSelectionGroup/buttonSelectionGroupItem.js +1 -1
  33. package/src/theme/components/index.js +2 -0
  34. package/dist/umd/descope-button-selection-group-descope-button-selection-group-internal-index-js.js +0 -1
  35. package/dist/umd/descope-button-selection-group-descope-button-selection-group-item-index-js.js +0 -1
  36. package/dist/umd/descope-button-selection-group-index-js.js +0 -1
  37. package/src/components/descope-button-selection-group/descope-button-selection-group-internal/ButtonSelectionGroupInternalClass.js +0 -145
  38. /package/src/components/{descope-button-selection-group → button-selection-group-fields}/descope-button-selection-group-internal/index.js +0 -0
  39. /package/src/components/{descope-button-selection-group → button-selection-group-fields}/descope-button-selection-group-item/ButtonSelectionGroupItemClass.js +0 -0
  40. /package/src/components/{descope-button-selection-group → button-selection-group-fields}/descope-button-selection-group-item/index.js +0 -0
@@ -0,0 +1,67 @@
1
+ import {
2
+ createStyleMixin,
3
+ draggableMixin,
4
+ createProxy,
5
+ proxyInputMixin,
6
+ componentNameValidationMixin,
7
+ } from '../../../mixins';
8
+ import { componentName as descopeInternalComponentName } from '../descope-button-selection-group-internal/ButtonSelectionGroupInternalClass';
9
+ import { compose } from '../../../helpers';
10
+ import { forwardAttrs, getComponentName } from '../../../helpers/componentHelpers';
11
+ import {
12
+ buttonSelectionGroupBaseMixin,
13
+ buttonSelectionGroupMappings,
14
+ buttonSelectionGroupStyles,
15
+ } from '../baseButtonSelectionGroup';
16
+
17
+ export const componentName = getComponentName('button-selection-group');
18
+
19
+ const buttonSelectionGroupMixin = (superclass) =>
20
+ class ButtonMultiSelectionGroupMixinClass extends superclass {
21
+ init() {
22
+ super.init?.();
23
+ const template = document.createElement('template');
24
+
25
+ template.innerHTML = `
26
+ <${descopeInternalComponentName}
27
+ name="button-selection-group"
28
+ slot="input"
29
+ tabindex="-1"
30
+ part="internal-component"
31
+ >
32
+ <slot></slot>
33
+ </${descopeInternalComponentName}>
34
+ `;
35
+
36
+ this.baseElement.appendChild(template.content.cloneNode(true));
37
+
38
+ this.inputElement = this.shadowRoot.querySelector(descopeInternalComponentName);
39
+
40
+ forwardAttrs(this, this.inputElement, {
41
+ includeAttrs: ['size', 'default-value', 'allow-deselect'],
42
+ });
43
+ }
44
+ };
45
+
46
+ export const ButtonSelectionGroupClass = compose(
47
+ createStyleMixin({
48
+ mappings: {
49
+ ...buttonSelectionGroupMappings,
50
+ },
51
+ }),
52
+ draggableMixin,
53
+ proxyInputMixin({ proxyProps: ['value', 'selectionStart'] }),
54
+ componentNameValidationMixin,
55
+ buttonSelectionGroupBaseMixin,
56
+ buttonSelectionGroupMixin
57
+ )(
58
+ createProxy({
59
+ slots: [],
60
+ wrappedEleName: 'vaadin-text-field',
61
+ style: () => buttonSelectionGroupStyles,
62
+ excludeAttrsSync: ['tabindex'],
63
+ componentName,
64
+ })
65
+ );
66
+
67
+ export default ButtonSelectionGroupClass;
@@ -1,6 +1,6 @@
1
1
  import { componentName, ButtonSelectionGroupClass } from './ButtonSelectionGroupClass';
2
- import './descope-button-selection-group-internal';
3
- import './descope-button-selection-group-item';
2
+ import '../descope-button-selection-group-internal';
3
+ import '../descope-button-selection-group-item';
4
4
 
5
5
  customElements.define(componentName, ButtonSelectionGroupClass);
6
6
 
@@ -0,0 +1,77 @@
1
+ import { getComponentName } from '../../../helpers/componentHelpers';
2
+ import { createBaseButtonSelectionGroupInternalClass } from '../createBaseButtonSelectionGroupInternalClass';
3
+
4
+ export const componentName = getComponentName('button-selection-group-internal');
5
+
6
+ export class ButtonSelectionGroupInternalClass extends createBaseButtonSelectionGroupInternalClass(
7
+ componentName
8
+ ) {
9
+ getSelectedNode() {
10
+ return this.items.find((item) => item.hasAttribute('selected'));
11
+ }
12
+
13
+ get allowDeselect() {
14
+ return this.getAttribute('allow-deselect') === 'true';
15
+ }
16
+
17
+ removeSelected() {
18
+ this.getSelectedNode()?.removeAttribute('selected');
19
+ }
20
+
21
+ onClick(e) {
22
+ if (e.target !== e.currentTarget) {
23
+ if (e.target === this.getSelectedNode() && this.allowDeselect) {
24
+ this.removeSelected();
25
+ } else {
26
+ this.setSelected(e.target);
27
+ }
28
+ this.dispatchChange();
29
+ }
30
+ }
31
+
32
+ setSelected(node) {
33
+ if (node !== this.getSelectedNode()) {
34
+ this.removeSelected();
35
+ node?.setAttribute('selected', 'true');
36
+ }
37
+ }
38
+
39
+ get defaultValue() {
40
+ return this.getAttribute('default-value');
41
+ }
42
+
43
+ setDefaultValue() {
44
+ // we want to defer this action until all attributes are synched
45
+ setTimeout(() => {
46
+ if (this.defaultValue) {
47
+ this.value = this.defaultValue;
48
+ this.setCustomValidity();
49
+ }
50
+ });
51
+ }
52
+
53
+ get value() {
54
+ return this.getSelectedNode()?.value || '';
55
+ }
56
+
57
+ set value(value) {
58
+ const node = this.items.find((child) => child.value === value);
59
+ this.setSelected(node);
60
+ }
61
+
62
+ getValidity() {
63
+ if (this.isRequired && !this.value) {
64
+ return { valueMissing: true };
65
+ }
66
+
67
+ return {};
68
+ }
69
+
70
+ init() {
71
+ super.init();
72
+
73
+ this.setDefaultValue();
74
+
75
+ this.querySelector('slot').addEventListener('click', this.onClick.bind(this));
76
+ }
77
+ }
package/src/index.cjs.js CHANGED
@@ -27,8 +27,9 @@ export { PhoneFieldInputBoxClass } from './components/phone-fields/descope-phone
27
27
  export { NewPasswordClass } from './components/descope-new-password/NewPasswordClass';
28
28
  export { RecaptchaClass } from './components/descope-recaptcha/RecaptchaClass';
29
29
  export { UploadFileClass } from './components/descope-upload-file/UploadFileClass';
30
- export { ButtonSelectionGroupClass } from './components/descope-button-selection-group/ButtonSelectionGroupClass';
31
- export { ButtonSelectionGroupItemClass } from './components/descope-button-selection-group/descope-button-selection-group-item/ButtonSelectionGroupItemClass';
30
+ export { ButtonSelectionGroupClass } from './components/button-selection-group-fields/descope-button-selection-group/ButtonSelectionGroupClass';
31
+ export { ButtonMultiSelectionGroupClass } from './components/button-selection-group-fields/descope-button-multi-selection-group/ButtonMultiSelectionGroupClass';
32
+ export { ButtonSelectionGroupItemClass } from './components/button-selection-group-fields/descope-button-selection-group-item/ButtonSelectionGroupItemClass';
32
33
  export { ModalClass } from './components/descope-modal/ModalClass';
33
34
  export { NotificationClass } from './components/descope-notification/NotificationClass';
34
35
  export { GridClass } from './components/descope-grid/GridClass';
package/src/index.d.ts CHANGED
@@ -32,7 +32,8 @@ export { PhoneFieldInputBoxClass } from './components/phone-fields/descope-phone
32
32
  export { NewPasswordClass } from './components/descope-new-password';
33
33
  export { RecaptchaClass } from './components/descope-recaptcha';
34
34
  export { UploadFileClass } from './components/descope-upload-file';
35
- export { ButtonSelectionGroupClass } from './components/descope-button-selection-group/ButtonSelectionGroupClass';
35
+ export { ButtonSelectionGroupClass } from './components/button-selection-group-fields/descope-button-selection-group/ButtonSelectionGroupClass';
36
+ export { ButtonMultiSelectionGroupClass } from './components/button-selection-group-fields/descope-button-multi-selection-group/ButtonMultiSelectionGroupClass';
36
37
  export { GridClass } from './components/descope-grid/GridClass';
37
38
  export { GridTextColumnClass } from './components/descope-grid/descope-grid-text-column/index';
38
39
  export { GridSelectionColumnClass } from './components/descope-grid/descope-grid-selection-column/index';
package/src/index.js CHANGED
@@ -22,7 +22,8 @@ export * from './components/phone-fields/descope-phone-input-box-field';
22
22
  export * from './components/descope-new-password';
23
23
  export * from './components/descope-recaptcha';
24
24
  export * from './components/descope-upload-file';
25
- export * from './components/descope-button-selection-group';
25
+ export * from './components/button-selection-group-fields/descope-button-selection-group';
26
+ export * from './components/button-selection-group-fields/descope-button-multi-selection-group';
26
27
  export * from './components/descope-grid';
27
28
  export * from './components/descope-multi-select-combo-box';
28
29
  export * from './components/descope-badge';
@@ -45,11 +45,11 @@ export const inputValidationMixin = (superclass) =>
45
45
  }
46
46
 
47
47
  get defaultErrorMsgRangeUnderflow() {
48
- return `At least ${this.minItemsSelection} items are required.`;
48
+ return `At least ${this.getAttribute('min-items-selection')} items are required.`;
49
49
  }
50
50
 
51
51
  get defaultErrorMsgRangeOverflow() {
52
- return `At most ${this.maxItemsSelection} items are allowed.`;
52
+ return `At most ${this.getAttribute('max-items-selection')} items are allowed.`;
53
53
  }
54
54
 
55
55
  getErrorMessage(flags) {
@@ -0,0 +1,15 @@
1
+ import { getThemeRefs } from '../../../helpers/themeHelpers';
2
+ import globals from '../../globals';
3
+ import { refs } from '../inputWrapper';
4
+
5
+ const globalRefs = getThemeRefs(globals);
6
+
7
+ export const createBaseButtonSelectionGroupMappings = (vars) => ({
8
+ [vars.hostDirection]: refs.direction,
9
+ [vars.fontFamily]: refs.fontFamily,
10
+ [vars.labelTextColor]: refs.labelTextColor,
11
+ [vars.labelRequiredIndicator]: refs.requiredIndicator,
12
+ [vars.errorMessageTextColor]: refs.errorMessageTextColor,
13
+ [vars.itemsSpacing]: globalRefs.spacing.sm,
14
+ [vars.hostWidth]: refs.width,
15
+ });
@@ -0,0 +1,11 @@
1
+ import { ButtonMultiSelectionGroupClass } from '../../../components/button-selection-group-fields/descope-button-multi-selection-group/ButtonMultiSelectionGroupClass';
2
+ import { createBaseButtonSelectionGroupMappings } from './baseButtonSelectionGroup';
3
+
4
+ const vars = ButtonMultiSelectionGroupClass.cssVarList;
5
+
6
+ const buttonMultiSelectionGroup = {
7
+ ...createBaseButtonSelectionGroupMappings(vars),
8
+ };
9
+
10
+ export default buttonMultiSelectionGroup;
11
+ export { vars };
@@ -1,19 +1,10 @@
1
- import { ButtonSelectionGroupClass } from '../../../components/descope-button-selection-group/ButtonSelectionGroupClass';
2
- import { getThemeRefs } from '../../../helpers/themeHelpers';
3
- import globals from '../../globals';
4
- import { refs } from '../inputWrapper';
1
+ import { ButtonSelectionGroupClass } from '../../../components/button-selection-group-fields/descope-button-selection-group/ButtonSelectionGroupClass';
2
+ import { createBaseButtonSelectionGroupMappings } from './baseButtonSelectionGroup';
5
3
 
6
- const globalRefs = getThemeRefs(globals);
7
4
  const vars = ButtonSelectionGroupClass.cssVarList;
8
5
 
9
6
  const buttonSelectionGroup = {
10
- [vars.hostDirection]: refs.direction,
11
- [vars.fontFamily]: refs.fontFamily,
12
- [vars.labelTextColor]: refs.labelTextColor,
13
- [vars.labelRequiredIndicator]: refs.requiredIndicator,
14
- [vars.errorMessageTextColor]: refs.errorMessageTextColor,
15
- [vars.itemsSpacing]: globalRefs.spacing.sm,
16
- [vars.hostWidth]: refs.width,
7
+ ...createBaseButtonSelectionGroupMappings(vars),
17
8
  };
18
9
 
19
10
  export default buttonSelectionGroup;
@@ -1,4 +1,4 @@
1
- import { ButtonSelectionGroupItemClass } from '../../../components/descope-button-selection-group/descope-button-selection-group-item/ButtonSelectionGroupItemClass';
1
+ import { ButtonSelectionGroupItemClass } from '../../../components/button-selection-group-fields/descope-button-selection-group-item/ButtonSelectionGroupItemClass';
2
2
  import { getThemeRefs } from '../../../helpers/themeHelpers';
3
3
  import globals from '../../globals';
4
4
 
@@ -23,6 +23,7 @@ import * as inputWrapper from './inputWrapper';
23
23
  import * as uploadFile from './uploadFile';
24
24
  import * as buttonSelectionGroupItem from './buttonSelectionGroup/buttonSelectionGroupItem';
25
25
  import * as buttonSelectionGroup from './buttonSelectionGroup/buttonSelectionGroup';
26
+ import * as buttonMultiSelectionGroup from './buttonSelectionGroup/buttonMultiSelectionGroup';
26
27
  import * as modal from './modal';
27
28
  import * as grid from './grid';
28
29
  import * as notificationCard from './notificationCard';
@@ -56,6 +57,7 @@ const components = {
56
57
  uploadFile,
57
58
  buttonSelectionGroupItem,
58
59
  buttonSelectionGroup,
60
+ buttonMultiSelectionGroup,
59
61
  modal,
60
62
  grid,
61
63
  notificationCard,
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunkDescopeUI=self.webpackChunkDescopeUI||[]).push([[1348],{3547:(e,t,s)=>{s.d(t,{B:()=>a,f:()=>n});var i=s(3878),l=s(4567),r=s(7878);const n=(0,l.iY)("button-selection-group-internal");class a extends((0,i.P)({componentName:n,baseSelector:"slot"})){constructor(){super(),this.innerHTML='\n <style>\n slot {\n box-sizing: border-box;\n width: 100%;\n display: flex;\n flex-wrap: wrap;\n }\n </style>\n <slot part="wrapper"></slot>\n\t\t'}#e=r.C.bind(this,"change");get items(){return this.querySelector("slot").assignedElements()}get isReadonly(){return"true"===this.getAttribute("readonly")}getSelectedNode(){return this.items.find((e=>e.hasAttribute("selected")))}get size(){return this.getAttribute("size")||"md"}get allowDeselect(){return"true"===this.getAttribute("allow-deselect")}removeSelected(){this.getSelectedNode()?.removeAttribute("selected")}onClick(e){e.target!==e.currentTarget&&(e.target===this.getSelectedNode()&&this.allowDeselect?this.removeSelected():this.setSelected(e.target),this.#e())}setSelected(e){e!==this.getSelectedNode()&&(this.removeSelected(),e?.setAttribute("selected","true"))}get value(){return this.getSelectedNode()?.value||""}set value(e){const t=this.items.find((t=>t.value===e));this.setSelected(t)}get defaultValue(){return this.getAttribute("default-value")}setDefaultValue(){setTimeout((()=>{this.defaultValue&&(this.value=this.defaultValue,this.setCustomValidity())}))}onSizeChange(){this.items.forEach((e=>{e.setAttribute("size",this.size)}))}onReadOnlyChange(){this.querySelector("slot").toggleAttribute("inert",this.isReadonly)}getValidity(){return this.isRequired&&!this.value?{valueMissing:!0}:{}}onObservedAttributeChange(e){e.forEach((e=>{switch(e){case"size":this.onSizeChange();break;case"readonly":this.onReadOnlyChange()}}))}init(){this.addEventListener("focus",(e=>{e.isTrusted&&this.items[0]?.focus()})),super.init?.(),this.setDefaultValue(),(0,l.FX)(this,this.onObservedAttributeChange.bind(this),{includeAttrs:["size","readonly"]}),this.querySelector("slot").addEventListener("click",this.onClick.bind(this))}}},8460:(e,t,s)=>{s.r(t),s.d(t,{ButtonSelectionGroupInternalClass:()=>i.B});var i=s(3547);customElements.define(i.f,i.B)}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunkDescopeUI=self.webpackChunkDescopeUI||[]).push([[206],{7901:(t,e,o)=>{o.r(e),o.d(e,{ButtonSelectionGroupItemClass:()=>u});var s=o(1e3),n=o(2561),r=o(2061),i=o(4567),a=o(9690);const c=(0,i.iY)("button-selection-group-item");class l extends((0,n.s)({componentName:c,baseSelector:":host > descope-button"})){get size(){return this.getAttribute("size")||"md"}get variant(){return this.getAttribute("variant")||"contained"}get value(){return this.getAttribute("value")||""}set value(t){this.setAttribute("value",t)}constructor(){super(),this.attachShadow({mode:"open"}).innerHTML=`\n\t\t<style>\n descope-button {\n max-width: 100%;\n }\n\t\t\tdescope-button > slot {\n\t\t\t\twidth: 100%;\n\t\t\t\toverflow: hidden;\n text-overflow: ellipsis;\n display: inline-block;\n\t\t\t}\n\t\t\t:host {\n\t\t\t\tdisplay: inline-block;\n max-width: 100%\n\t\t\t}\n\t\t</style>\n <descope-button variant="${this.variant}" size="${this.size}" mode="primary">\n <slot></slot>\n </descope-button>\n\t`,(0,i.oP)(this,this.baseElement,{includeAttrs:["size","variant"]})}handleFocus(){this.shadowRoot.querySelector("descope-button")?.focus()}focus(){this.handleFocus()}init(){super.init(),this.addEventListener("focus",(t=>{t.isTrusted&&this.handleFocus()}))}}const u=(0,r.qC)((0,s.yk)({mappings:{hostDirection:{selector:()=>a.n.componentName,property:a.n.cssVarList.hostDirection},backgroundColor:{selector:()=>a.n.componentName,property:a.n.cssVarList.backgroundColor},labelTextColor:{selector:()=>a.n.componentName,property:a.n.cssVarList.labelTextColor},borderColor:{selector:()=>a.n.componentName,property:a.n.cssVarList.borderColor},borderStyle:{selector:()=>a.n.componentName,property:a.n.cssVarList.borderStyle},borderRadius:{selector:()=>a.n.componentName,property:a.n.cssVarList.borderRadius}}}),s.e4,s.Ae)(l);o(2018),customElements.define(c,u)}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunkDescopeUI=self.webpackChunkDescopeUI||[]).push([[6699],{8086:(t,e,n)=>{n.r(e),n.d(e,{ButtonSelectionGroupClass:()=>m});var r=n(1e3),i=n(3547),a=n(2061),s=n(4567),o=n(4201);const d=(0,s.iY)("button-selection-group"),{host:l,label:p,requiredIndicator:c,internalWrapper:u,errorMessage:h}={host:{selector:()=>":host"},label:{selector:"::part(label)"},requiredIndicator:{selector:"[required]::part(required-indicator)::after"},internalWrapper:{selector:"descope-button-selection-group-internal slot"},errorMessage:{selector:"::part(error-message)"}},m=(0,a.qC)((0,r.yk)({mappings:{hostWidth:{...l,property:"width"},hostDirection:{...l,property:"direction"},fontFamily:l,labelTextColor:[{...p,property:"color"},{...c,property:"color"}],labelRequiredIndicator:{...c,property:"content"},errorMessageTextColor:{...h,property:"color"},itemsSpacing:{...u,property:"gap"}}}),r.e4,(0,r.dj)({proxyProps:["value","selectionStart"]}),r.Ae,(t=>class extends t{#t=({value:t,label:e})=>`<descope-button-selection-group-item value="${t}">${e}</descope-button-selection-group-item>`;#e;get renderItem(){return this.#t}set renderItem(t){this.#t=t,this.renderItems()}get size(){return this.inputElement?.size}get data(){if(this.#e)return this.#e;const t=this.getAttribute("data");if(t)try{const e=JSON.parse(t);if(this.isValidDataType(e))return e}catch(t){console.error('could not parse data string from attribute "data" - ',t.message)}return[]}set data(t){this.isValidDataType(t)&&(this.#e=t,this.renderItems())}isValidDataType(t){const e=Array.isArray(t);return e||console.error("data must be an array, received:",t),e}getItemsTemplate(){return this.data?.reduce?.(((t,e)=>t+(this.renderItem?.(e||{})||"")),"")}renderItems(){const t=this.getItemsTemplate();t&&(this.innerHTML=t)}init(){super.init?.();const t=document.createElement("template");t.innerHTML=`\n\t\t\t<${i.f}\n\t\t\t\tname="button-selection-group"\n\t\t\t\tslot="input"\n tabindex="-1"\n\t\t\t>\n <slot></slot>\n </${i.f}>\n\t\t\t`,this.baseElement.appendChild(t.content.cloneNode(!0)),this.inputElement=this.shadowRoot.querySelector(i.f),(0,s.oP)(this,this.inputElement,{includeAttrs:["size","default-value","allow-deselect"]}),this.renderItems(),(0,s.FX)(this,this.renderItems.bind(this),{includeAttrs:["data"]}),(0,s.P$)(this,(({addedNodes:t})=>{t.forEach((t=>{t.setAttribute("size",this.size)}))}))}}))((0,r.DM)({slots:[],wrappedEleName:"vaadin-text-field",style:()=>`\n\t\t\t:host {\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\tmax-width: 100%;\n\t\t\t}\n\t\t\t${(0,o.DY)()}\n\t\t\t:host::after {\n\t\t\t\tbackground-color: transparent;\n\t\t\t}\n\t\t\t:host::part(input-field)::after {\n\t\t\t\tbackground-color: transparent;\n\t\t\t}\n\n\t\t\tdescope-button-selection-group-internal {\n\t\t\t\t-webkit-mask-image: none;\n\t\t\t\tpadding: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n display: inline-block;\n\t\t\t\tmin-height: initial;\n\t\t\t}\n\n\t\t\tvaadin-text-field::part(input-field) {\n\t\t\t\tbackground-color: transparent;\n\t\t\t\tpadding: 0;\n\t\t\t\toverflow: hidden;\n\t\t\t\t-webkit-mask-image: none;\n\t\t\t}\n\n\t\t\tvaadin-text-field {\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\t\t\t\twidth: 100%\n\t\t\t}\n\n\t\t\tvaadin-text-field::before {\n\t\t\t\theight: 0;\n\t\t\t}\n\n\t\t\tvaadin-text-field[readonly] > input:placeholder-shown {\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\tvaadin-text-field[readonly]::part(input-field)::after {\n\t\t\t\tborder: 0 solid;\n\t\t\t}\n\n\t\t\tvaadin-text-field::part(input-field) {\n\t\t\t\tbox-shadow: none;\n\t\t\t}\n\n ${(0,o.Wf)("vaadin-text-field")}\n\t\t\t${(0,o.Pd)("vaadin-text-field")}\n `,excludeAttrsSync:["tabindex"],componentName:d}));n(8460),n(7901),customElements.define(d,m)}}]);
@@ -1,145 +0,0 @@
1
- import { createBaseInputClass } from '../../../baseClasses/createBaseInputClass';
2
- import { getComponentName, observeAttributes } from '../../../helpers/componentHelpers';
3
- import { createDispatchEvent } from '../../../helpers/mixinsHelpers';
4
-
5
- export const componentName = getComponentName('button-selection-group-internal');
6
-
7
- export class ButtonSelectionGroupInternalClass extends createBaseInputClass({
8
- componentName,
9
- baseSelector: 'slot',
10
- }) {
11
- constructor() {
12
- super();
13
-
14
- this.innerHTML = `
15
- <style>
16
- slot {
17
- box-sizing: border-box;
18
- width: 100%;
19
- display: flex;
20
- flex-wrap: wrap;
21
- }
22
- </style>
23
- <slot part="wrapper"></slot>
24
- `;
25
- }
26
-
27
- #dispatchChange = createDispatchEvent.bind(this, 'change');
28
-
29
- get items() {
30
- return this.querySelector('slot').assignedElements();
31
- }
32
-
33
- get isReadonly() {
34
- return this.getAttribute('readonly') === 'true';
35
- }
36
-
37
- getSelectedNode() {
38
- return this.items.find((item) => item.hasAttribute('selected'));
39
- }
40
-
41
- get size() {
42
- return this.getAttribute('size') || 'md';
43
- }
44
-
45
- get allowDeselect() {
46
- return this.getAttribute('allow-deselect') === 'true';
47
- }
48
-
49
- removeSelected() {
50
- this.getSelectedNode()?.removeAttribute('selected');
51
- }
52
-
53
- onClick(e) {
54
- if (e.target !== e.currentTarget) {
55
- if (e.target === this.getSelectedNode() && this.allowDeselect) {
56
- this.removeSelected();
57
- } else {
58
- this.setSelected(e.target);
59
- }
60
- this.#dispatchChange();
61
- }
62
- }
63
-
64
- setSelected(node) {
65
- if (node !== this.getSelectedNode()) {
66
- this.removeSelected();
67
- node?.setAttribute('selected', 'true');
68
- }
69
- }
70
-
71
- get value() {
72
- return this.getSelectedNode()?.value || '';
73
- }
74
-
75
- set value(value) {
76
- const node = this.items.find((child) => child.value === value);
77
- this.setSelected(node);
78
- }
79
-
80
- get defaultValue() {
81
- return this.getAttribute('default-value');
82
- }
83
-
84
- setDefaultValue() {
85
- // we want to defer this action until all attributes are synched
86
- setTimeout(() => {
87
- if (this.defaultValue) {
88
- this.value = this.defaultValue;
89
- this.setCustomValidity();
90
- }
91
- });
92
- }
93
-
94
- onSizeChange() {
95
- this.items.forEach((item) => {
96
- item.setAttribute('size', this.size);
97
- });
98
- }
99
-
100
- onReadOnlyChange() {
101
- this.querySelector('slot').toggleAttribute('inert', this.isReadonly);
102
- }
103
-
104
- getValidity() {
105
- if (this.isRequired && !this.value) {
106
- return { valueMissing: true };
107
- }
108
-
109
- return {};
110
- }
111
-
112
- onObservedAttributeChange(attrs) {
113
- attrs.forEach((attr) => {
114
- switch (attr) {
115
- case 'size':
116
- this.onSizeChange();
117
- break;
118
- case 'readonly':
119
- this.onReadOnlyChange();
120
- break;
121
- default:
122
- break;
123
- }
124
- });
125
- }
126
-
127
- init() {
128
- // we are adding listeners before calling to super because it's stopping the events
129
- this.addEventListener('focus', (e) => {
130
- // we want to ignore focus events we are dispatching
131
- if (e.isTrusted) {
132
- this.items[0]?.focus();
133
- }
134
- });
135
-
136
- super.init?.();
137
- this.setDefaultValue();
138
-
139
- observeAttributes(this, this.onObservedAttributeChange.bind(this), {
140
- includeAttrs: ['size', 'readonly'],
141
- });
142
-
143
- this.querySelector('slot').addEventListener('click', this.onClick.bind(this));
144
- }
145
- }