@descope/web-components-ui 1.0.347 → 1.0.349
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/cjs/index.cjs.js +208 -13
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.esm.js +393 -159
- package/dist/index.esm.js.map +1 -1
- package/dist/umd/1000.js +1 -0
- package/dist/umd/1612.js +116 -4
- package/dist/umd/1765.js +1 -0
- package/dist/umd/3227.js +17 -0
- package/dist/umd/4024.js +116 -4
- package/dist/umd/4028.js +121 -9
- package/dist/umd/4052.js +116 -4
- package/dist/umd/4392.js +1 -1
- package/dist/umd/5135.js +2 -2
- package/dist/umd/602.js +114 -2
- package/dist/umd/9562.js +116 -4
- package/dist/umd/DescopeDev.js +1 -1
- package/dist/umd/boolean-fields-descope-boolean-field-internal-index-js.js +1 -1
- package/dist/umd/boolean-fields-descope-checkbox-index-js.js +1 -1
- package/dist/umd/boolean-fields-descope-switch-toggle-index-js.js +1 -1
- package/dist/umd/button-selection-group-fields-descope-button-multi-selection-group-index-js.js +1 -1
- package/dist/umd/button-selection-group-fields-descope-button-multi-selection-group-internal-index-js.js +1 -1
- package/dist/umd/button-selection-group-fields-descope-button-selection-group-index-js.js +1 -1
- package/dist/umd/button-selection-group-fields-descope-button-selection-group-internal-index-js.js +1 -1
- package/dist/umd/button-selection-group-fields-descope-button-selection-group-item-index-js.js +1 -1
- package/dist/umd/descope-avatar-index-js.js +1 -1
- package/dist/umd/descope-badge-index-js.js +1 -1
- package/dist/umd/descope-button-index-js.js +116 -4
- package/dist/umd/descope-code-snippet-index-js.js +1 -1
- package/dist/umd/descope-combo-box-index-js.js +1 -1
- package/dist/umd/descope-container-index-js.js +1 -1
- package/dist/umd/descope-date-picker-index-js.js +1 -1
- package/dist/umd/descope-divider-index-js.js +1 -1
- package/dist/umd/descope-email-field-index-js.js +1 -1
- package/dist/umd/descope-enriched-text-index-js.js +1 -1
- package/dist/umd/descope-grid-descope-grid-custom-column-index-js.js +3 -3
- package/dist/umd/descope-grid-descope-grid-item-details-column-index-js.js +90 -0
- package/dist/umd/descope-grid-descope-grid-item-details-column-index-js.js.LICENSE.txt +17 -0
- package/dist/umd/descope-grid-descope-grid-selection-column-index-js.js +1 -1
- package/dist/umd/descope-grid-descope-grid-text-column-index-js.js +1 -1
- package/dist/umd/descope-grid-index-js.js +1 -1
- package/dist/umd/descope-icon-index-js.js +1 -1
- package/dist/umd/descope-image-index-js.js +1 -1
- package/dist/umd/descope-link-index-js.js +1 -1
- package/dist/umd/descope-loader-linear-index-js.js +1 -1
- package/dist/umd/descope-loader-radial-index-js.js +1 -1
- package/dist/umd/descope-logo-index-js.js +1 -1
- package/dist/umd/descope-modal-index-js.js +1 -1
- package/dist/umd/descope-multi-select-combo-box-index-js.js +1 -1
- package/dist/umd/descope-new-password-descope-new-password-internal-index-js.js +1 -1
- package/dist/umd/descope-new-password-index-js.js +1 -1
- package/dist/umd/descope-notification-descope-notification-card-index-js.js +1 -1
- package/dist/umd/descope-notification-index-js.js +1 -1
- package/dist/umd/descope-notp-image-index-js.js +1 -1
- package/dist/umd/descope-number-field-index-js.js +1 -1
- package/dist/umd/descope-passcode-descope-passcode-internal-index-js.js +1 -1
- package/dist/umd/descope-passcode-index-js.js +1 -1
- package/dist/umd/descope-password-index-js.js +1 -1
- package/dist/umd/descope-policy-validation-index-js.js +1 -1
- package/dist/umd/descope-radio-group-index-js.js +1 -1
- package/dist/umd/descope-recaptcha-index-js.js +1 -1
- package/dist/umd/descope-text-area-index-js.js +1 -1
- package/dist/umd/descope-text-field-index-js.js +1 -1
- package/dist/umd/descope-text-index-js.js +1 -1
- package/dist/umd/descope-totp-image-index-js.js +1 -1
- package/dist/umd/descope-upload-file-index-js.js +1 -1
- package/dist/umd/descope-user-attribute-index-js.js +1 -1
- package/dist/umd/descope-user-auth-method-index-js.js +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/mapping-fields-descope-mappings-field-descope-mapping-item-index-js.js +1 -1
- package/dist/umd/mapping-fields-descope-mappings-field-descope-mappings-field-internal-index-js.js +1 -1
- package/dist/umd/mapping-fields-descope-mappings-field-index-js.js +1 -1
- package/dist/umd/mapping-fields-descope-saml-group-mappings-descope-saml-group-mappings-internal-index-js.js +1 -1
- package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js +1 -1
- package/dist/umd/phone-fields-descope-phone-field-descope-phone-field-internal-index-js.js +1 -1
- package/dist/umd/phone-fields-descope-phone-field-index-js.js +1 -1
- package/dist/umd/phone-fields-descope-phone-input-box-field-index-js.js +1 -1
- package/package.json +1 -1
- package/src/components/descope-enriched-text/EnrichedTextClass.js +2 -4
- package/src/components/descope-grid/GridClass.js +116 -6
- package/src/components/descope-grid/descope-grid-item-details-column/GridItemDetailsColumnClass.js +37 -0
- package/src/components/descope-grid/descope-grid-item-details-column/index.js +8 -0
- package/src/components/descope-grid/helpers.js +54 -0
- package/src/components/descope-grid/index.js +1 -0
- package/src/components/descope-link/LinkClass.js +3 -5
- package/src/components/descope-radio-group/RadioButtonClass.js +3 -0
- package/src/helpers/index.js +8 -0
- package/src/mixins/createProxy.js +1 -1
- package/src/theme/components/enrichedText.js +2 -0
- package/src/theme/components/grid.js +11 -0
- package/src/theme/components/link.js +4 -0
- package/src/theme/components/radioGroup/radioButton.js +2 -0
- package/dist/umd/2362.js +0 -129
- package/dist/umd/4978.js +0 -1
- /package/dist/umd/{2362.js.LICENSE.txt → 3227.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
|
|
1
|
-
"use strict";(self.webpackChunk_descope_web_components_ui=self.webpackChunk_descope_web_components_ui||[]).push([[5119],{84049:(e,t,r)=>{r.d(t,{H:()=>f,f:()=>l});var o=r(2061),n=r(54567),i=r(54201),a=r(94978);const l=(0,n.iY)("combo-box"),{host:s,inputField:p,inputElement:d,placeholder:u,toggle:c,clearButton:h,label:b,requiredIndicator:m,helperText:y,errorMessage:g}={host:{selector:()=>":host"},inputField:{selector:"::part(input-field)"},inputElement:{selector:"input"},placeholder:{selector:"> input:placeholder-shown"},toggle:{selector:"::part(toggle-button)"},clearButton:{selector:"::part(clear-button)"},label:{selector:"::part(label)"},requiredIndicator:{selector:"[required]::part(required-indicator)::after"},helperText:{selector:"::part(helper-text)"},errorMessage:{selector:"::part(error-message)"}},f=(0,o.qC)((0,a.yk)({mappings:{hostWidth:{...s,property:"width"},hostDirection:{...s,property:"direction"},fontSize:[{},s],fontFamily:[b,u,p,y,g],labelFontSize:{...b,property:"font-size"},labelFontWeight:{...b,property:"font-weight"},labelTextColor:[{...b,property:"color"},{...m,property:"color"}],errorMessageTextColor:{...g,property:"color"},inputHeight:{...p,property:"height"},inputBackgroundColor:{...p,property:"background-color"},inputBorderColor:{...p,property:"border-color"},inputBorderWidth:{...p,property:"border-width"},inputBorderStyle:{...p,property:"border-style"},inputBorderRadius:{...p,property:"border-radius"},labelRequiredIndicator:{...m,property:"content"},inputValueTextColor:{...p,property:"color"},inputPlaceholderTextColor:{...u,property:"color"},inputDropdownButtonCursor:[{...c,property:"cursor"},{...h,property:"cursor"}],inputDropdownButtonColor:[{...c,property:"color"},{...h,property:"color"}],inputDropdownButtonSize:[{...c,property:"font-size"},{...h,property:"font-size"}],inputDropdownButtonOffset:[{...c,property:"margin-right"},{...c,property:"margin-left"}],inputOutlineColor:{...p,property:"outline-color"},inputOutlineWidth:{...p,property:"outline-width"},inputOutlineStyle:{...p,property:"outline-style"},inputOutlineOffset:{...p,property:"outline-offset"},inputHorizontalPadding:[{...d,property:"padding-left"},{...d,property:"padding-right"}],labelPosition:{...b,property:"position"},labelTopPosition:{...b,property:"top"},labelHorizontalPosition:[{...b,property:"left"},{...b,property:"right"}],inputTransformY:{...b,property:"transform"},inputTransition:{...b,property:"transition"},marginInlineStart:{...b,property:"margin-inline-start"},placeholderOpacity:{...u,property:"opacity"},inputVerticalAlignment:{...p,property:"align-items"},valueInputHeight:{...d,property:"height"},valueInputMarginBottom:{...d,property:"margin-bottom"},overlayBackground:{property:()=>f.cssVarList.overlay.backgroundColor},overlayTextColor:{property:()=>f.cssVarList.overlay.textColor},overlayBorder:{property:()=>f.cssVarList.overlay.border},overlayFontSize:{property:()=>f.cssVarList.overlay.fontSize},overlayFontFamily:{property:()=>f.cssVarList.overlay.fontFamily},overlayCursor:{property:()=>f.cssVarList.overlay.cursor},overlayItemBoxShadow:{property:()=>f.cssVarList.overlay.itemBoxShadow},overlayItemPaddingInlineStart:{property:()=>f.cssVarList.overlay.itemPaddingInlineStart},overlayItemPaddingInlineEnd:{property:()=>f.cssVarList.overlay.itemPaddingInlineEnd}}}),a.e4,(0,a.Iw)({name:"overlay",selector:"",mappings:{backgroundColor:{selector:"vaadin-combo-box-scroller"},minHeight:{selector:"vaadin-combo-box-overlay"},margin:{selector:"vaadin-combo-box-overlay"},cursor:{selector:"vaadin-combo-box-item"},fontFamily:{selector:"vaadin-combo-box-item"},textColor:{selector:"vaadin-combo-box-item",property:"color"},fontSize:{selector:"vaadin-combo-box-item"},itemBoxShadow:{selector:"vaadin-combo-box-item",property:"box-shadow"},itemPaddingInlineStart:{selector:"vaadin-combo-box-item",property:"padding-inline-start"},itemPaddingInlineEnd:{selector:"vaadin-combo-box-item",property:"padding-inline-end"}},forward:{include:!1,attributes:["size"]}}),(0,a.dj)({proxyProps:["selectionStart"],inputEvent:"selected-item-changed"}),a.Ae,(e=>class extends e{static get observedAttributes(){return["label-type"]}#e=({displayName:e,value:t,label:r})=>`<span data-name="${r}" data-id="${t}">${e||r}</span>`;#t;get defaultValue(){return this.getAttribute("default-value")}get renderItem(){return this.#e}set renderItem(e){this.#e=e,this.renderItems()}get data(){if(this.#t)return this.#t;const e=this.getAttribute("data");if(e)try{const t=JSON.parse(e);if(this.isValidDataType(t))return t}catch(e){console.error('could not parse data string from attribute "data" -',e.message)}return[]}set data(e){this.isValidDataType(e)&&(this.#t=e,this.renderItems())}isValidDataType(e){const t=Array.isArray(e);return t||console.error("data must be an array, received:",e),t}getItemsTemplate(){return this.data?.reduce?.(((e,t)=>e+(this.renderItem?.(t||{})||"")),"")}renderItems(){const e=this.getItemsTemplate();e&&(this.innerHTML=e)}handleSelectedItem(){const e=this.baseElement.selectedItem?.["data-id"];this.baseElement.selectedItem=void 0,e&&(this.value=e),this.value||this.setDefaultValue()}customValueTransformFn(e){return e}setComboBoxDescriptor(){const e=Object.getOwnPropertyDescriptor(this.inputElement.constructor.prototype,"value"),t=this;Object.defineProperties(this.inputElement,{value:{...e,set(r){if(!t.baseElement.items?.length)return;const o=t.customValueTransformFn(r)||"";o!==this.value&&e.set.call(this,o)}}})}#r(){const e=this.shadowRoot.querySelector(this.baseSelector),t=Array.from(this.children);t.length&&(t.forEach((e=>{Object.defineProperty(e,"data-name",{value:e.getAttribute("data-name"),configurable:!0,writable:!0}),Object.defineProperty(e,"data-id",{value:e.getAttribute("data-id"),configurable:!0,writable:!0})})),e.items=t,setTimeout((()=>{this.handleSelectedItem()}),0)),e.renderer=(e,t,r)=>{e.innerHTML=r.item.outerHTML}}#o(){const e=this.baseElement.shadowRoot.querySelector("vaadin-combo-box-overlay");e._attachOverlay=()=>{e.bringToFront()},e._detachOverlay=()=>{},e._enterModalState=()=>{}}init(){super.init?.(),this.getValidity=function(){return!this.value&&this.isRequired?{valueMissing:!0}:{}},this.setComboBoxDescriptor(),this.#o(),this.renderItems(),(0,n.FX)(this,this.renderItems.bind(this),{includeAttrs:["data"]}),(0,n.P$)(this,this.#r.bind(this)),this.setDefaultValue(),this.baseElement.addEventListener("selected-item-changed",(()=>{this.dispatchEvent(new Event("input",{bubbles:!0,composed:!0}))}))}onLabelClick(){this.isReadOnly||this.isDisabled||(this.focus(),this.setAttribute("opened","true"))}attributeChangedCallback(e,t,r){super.attributeChangedCallback?.(e,t,r),t!==r&&"label-type"===e&&("floating"===r?this.addEventListener("click",this.onLabelClick):this.removeEventListener("click",this.onLabelClick))}setDefaultValue(){this.value=this.defaultValue}set value(e){if(e){const t=this.baseElement.items?.find((t=>t["data-id"]===e));t&&(this.baseElement.selectedItem=t)}else this.baseElement.selectedItem=void 0}get value(){return this.baseElement.selectedItem?.["data-id"]||""}}))((0,a.DM)({slots:["","prefix"],wrappedEleName:"vaadin-combo-box",style:()=>`\n\t\t:host {\n\t\t\tdisplay: inline-flex;\n\t\t\tbox-sizing: border-box;\n\t\t\t-webkit-mask-image: none;\n\t\t}\n\t\t${(0,i.bi)(f.cssVarList)}\n\t\t${(0,i.PH)("vaadin-combo-box")}\n\t\t${(0,i.jI)("vaadin-combo-box")}\n\t\t${(0,i.Pd)("vaadin-combo-box")}\n\n\t\tvaadin-combo-box {\n\t\t\tpadding: 0;\n\t\t\twidth: 100%;\n\t\t}\n\t\tvaadin-combo-box::before {\n\t\t\theight: initial;\n\t\t}\n\t\tvaadin-combo-box [slot="input"] {\n\t\t\t-webkit-mask-image: none;\n\t\t\tmin-height: 0;\n\t\t\tbox-sizing: border-box;\n\t\t}\n\n\t\tvaadin-combo-box::part(input-field) {\n\t\t\tpadding: 0;\n\t\t\tbox-shadow: none;\n\t\t}\n\n vaadin-combo-box::part(toggle-button),\n vaadin-combo-box::part(clear-button) {\n align-self: center;\n }\n\n vaadin-combo-box[label-type="floating"]:not([focused])[readonly] > input:placeholder-shown {\n opacity: 0;\n }\n vaadin-combo-box[label-type="floating"]:not([focused])[disabled] > input:placeholder-shown {\n opacity: 0;\n }\n \n ${(0,i.Wf)("vaadin-combo-box")}\n ${(0,i.bz)()}\n\t\t`,excludeAttrsSync:["tabindex","size","data"],componentName:l,includeForwardProps:["items","renderer","selectedItem"]}))},21294:(e,t,r)=>{r.r(t),r.d(t,{ComboBoxClass:()=>o.H}),r(47583);var o=r(84049);customElements.define(o.f,o.H)},41377:(e,t,r)=>{r.d(t,{Z:()=>d,f:()=>a});var o=r(73878),n=r(54567),i=r(16418);const a=(0,n.iY)("phone-field-internal-input-box"),l=["disabled","size","bordered","invalid","readonly","phone-input-placeholder","name","autocomplete","label-type"],s={"phone-input-placeholder":"placeholder"},p=(0,o.P)({componentName:a,baseSelector:"div"}),d=class extends p{static get observedAttributes(){return[].concat(p.observedAttributes||[],l)}constructor(){super(),this.innerHTML='\n <div>\n <descope-text-field tabindex="1"></descope-text-field>\n </div>\n ',this.phoneNumberInput=this.querySelector("descope-text-field")}get defaultCountryCode(){return(0,i.g)(this.getAttribute("default-code"))}get hasDefaultCode(){return!!this.getAttribute("default-code")}get value(){if(!this.phoneNumberValue)return"";if(this.hasDefaultCode){const e=new RegExp(`\\+?${parseInt(this.defaultCountryCode,10)}--?`);return`${this.defaultCountryCode}-${this.phoneNumberInput.value.replace(e,"")}`}return this.phoneNumberInput.value}set value(e){this.phoneNumberInput.value=e}get phoneNumberValue(){return this.phoneNumberInput.value}get minLength(){return parseInt(this.getAttribute("minlength"),10)||0}get maxLength(){return parseInt(this.getAttribute("maxlength"),10)||50}getValidity(){const e=this.value.replace(/\D/g,"");return this.isRequired&&!this.value?{valueMissing:!0}:e.length<this.minLength?{tooShort:!0}:e.length>this.maxLength?{tooLong:!0}:/^\+?\d{1,4}-?(?:\d-?){1,15}$/.test(this.value)?{}:{patternMismatch:!0}}init(){this.addEventListener("focus",(e=>{e.isTrusted&&this.phoneNumberInput.focus()})),super.init?.(),this.initInputs()}getCountryByDialCode(e){return this.countryCodeInput.items?.find((t=>t.getAttribute("data-country-code")===e))}initInputs(){this.phoneNumberInput.addEventListener("input",(e=>{1===e.target.value.length&&"-"===e.target.value&&(e.target.value=""),e.target.value=e.target.value.replace(/(?!^)\+/g,"").replace("--","-").replace("+-","+");const t=/^[+\d-]+$/,r=e.target.value.split("").filter((e=>t.test(e))).join("");e.target.value=r})),this.handleFocusEventsDispatching([this.phoneNumberInput]),this.handleInputEventDispatching()}attributeChangedCallback(e,t,r){if(super.attributeChangedCallback(e,t,r),t!==r&&l.includes(e)){const t=s[e]||e;this.phoneNumberInput.setAttribute(t,r)}}}},83067:(e,t,r)=>{r.r(t),r(19357);var o=r(41377);customElements.define(o.f,o.Z)},69423:(e,t,r)=>{r.r(t),r.d(t,{PhoneFieldInputBoxClass:()=>x}),r(83067),r(21294),r(19357);var o=r(41377),n=r(54567),i=r(2061),a=r(94978),l=r(56417),s=r(87262),p=r(54201);const d=l.z.cssVarList,u=(0,n.iY)("phone-input-box-field"),{host:c,label:h,inputElement:b,requiredIndicator:m,inputField:y,phoneInput:g,errorMessage:f,helperText:v}={host:{selector:()=>":host"},label:{selector:"::part(label)"},placeholder:{selector:"> input:placeholder-shown"},inputElement:{selector:"input"},requiredIndicator:{selector:"[required]::part(required-indicator)::after"},inputField:{selector:"::part(input-field)"},phoneInput:{selector:()=>"descope-text-field"},helperText:{selector:"::part(helper-text)"},errorMessage:{selector:"::part(error-message)"}},x=(0,i.qC)((0,a.yk)({mappings:{fontSize:[c,y,{selector:l.z.componentName,property:l.z.cssVarList.fontSize}],fontFamily:[h,f,v],hostWidth:{...c,property:"width"},hostMinWidth:{...c,property:"min-width"},hostDirection:{...c,property:"direction"},inputBorderStyle:{...y,property:"border-style"},inputBorderWidth:{...y,property:"border-width"},inputBorderColor:{...y,property:"border-color"},inputBorderRadius:{...y,property:"border-radius"},inputHorizontalPadding:[{...g,property:"padding-left"},{...g,property:"padding-right"}],labelFontSize:{...h,property:"font-size"},labelFontWeight:{...h,property:"font-weight"},labelTextColor:[{...h,property:"color"},{...m,property:"color"}],labelRequiredIndicator:{...m,property:"content"},errorMessageTextColor:{...f,property:"color"},inputValueTextColor:{...g,property:d.inputValueTextColor},inputPlaceholderTextColor:{...g,property:d.inputPlaceholderColor},inputOutlineStyle:{...y,property:"outline-style"},inputOutlineColor:{...y,property:"outline-color"},inputOutlineWidth:{...y,property:"outline-width"},inputOutlineOffset:{...y,property:"outline-offset"},labelPosition:{...h,property:"position"},labelTopPosition:{...h,property:"top"},labelHorizontalPosition:[{...h,property:"left"},{...h,property:"right"}],inputTransformY:{...h,property:"transform"},inputTransition:{...h,property:"transition"},marginInlineStart:{...h,property:"margin-inline-start"},valueInputHeight:{...b,property:"height"},valueInputMarginBottom:{selector:l.z.componentName,property:d.valueInputMarginBottom}}}),a.e4,(0,a.dj)({proxyProps:["value","selectionStart"]}),(e=>class extends e{static get CountryCodes(){return s.Z}init(){super.init?.();const e=document.createElement("template");e.innerHTML=`\n\t\t\t\t<${o.f}\n\t\t\t\t\ttabindex="-1"\n\t\t\t\t\tslot="input"\n\t\t\t\t></${o.f}>\n `,this.baseElement.appendChild(e.content.cloneNode(!0)),this.inputElement=this.shadowRoot.querySelector(o.f),(0,n.oP)(this.shadowRoot.host,this.inputElement,{includeAttrs:["size","bordered","invalid","minlength","maxlength","default-code","disabled","phone-input-placeholder","label","label-type"]})}}))((0,a.DM)({slots:[],wrappedEleName:"vaadin-text-field",style:()=>`\n :host {\n display: inline-flex;\n max-width: 100%;\n box-sizing: border-box;\n }\n ${(0,p.bi)(x.cssVarList)}\n ${(0,p.Pd)("vaadin-text-field")}\n ${(0,p.B)("vaadin-text-field")}\n ${(0,p.DY)()}\n\n vaadin-text-field {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n padding: 0;\n }\n vaadin-text-field[focus-ring]::part(input-field) {\n box-shadow: none;\n }\n vaadin-text-field::before {\n height: 0;\n }\n vaadin-text-field::part(input-field) {\n padding: 0;\n background: transparent;\n overflow: hidden;\n -webkit-mask-image: none;\n }\n descope-phone-field-internal-input-box {\n -webkit-mask-image: none;\n padding: 0;\n width: 100%;\n height: 100%;\n }\n descope-phone-field-internal-input-box > div {\n width: 100%;\n height: 100%;\n }\n descope-phone-field-internal-input-box .separator {\n flex: 0;\n border: none;\n }\n descope-text-field {\n flex-grow: 1;\n width: 100%;\n ${d.inputOutlineWidth}: 0;\n ${d.inputOutlineOffset}: 0;\n ${d.inputBorderWidth}: 0;\n ${d.inputBorderRadius}: 0;\n direction: ltr;\n }\n vaadin-text-field[readonly] > input:placeholder-shown {\n opacity: 1;\n }\n vaadin-text-field::part(input-field)::after {\n border: none;\n }\n\n vaadin-text-field[label-type="floating"]:not([focused])[readonly] input:placeholder-shown {\n opacity: 0;\n }\n vaadin-text-field[label-type="floating"]:not([focused])[disabled] input:placeholder-shown {\n opacity: 0;\n }\n\n ${(0,p.Wf)("vaadin-text-field")}\n ${(0,p.bz)()}\n\t\t`,excludeAttrsSync:["tabindex"],componentName:u}));customElements.define(u,x)},16418:(e,t,r)=>{r.d(t,{g:()=>n});var o=r(87262);const n=e=>o.Z.find((t=>t.code===e))?.dialCode}}]);
|
1
|
+
"use strict";(self.webpackChunk_descope_web_components_ui=self.webpackChunk_descope_web_components_ui||[]).push([[5119],{84049:(e,t,r)=>{r.d(t,{H:()=>f,f:()=>l});var o=r(2061),n=r(54567),i=r(54201),a=r(21e3);const l=(0,n.iY)("combo-box"),{host:s,inputField:p,inputElement:d,placeholder:u,toggle:c,clearButton:h,label:b,requiredIndicator:m,helperText:y,errorMessage:g}={host:{selector:()=>":host"},inputField:{selector:"::part(input-field)"},inputElement:{selector:"input"},placeholder:{selector:"> input:placeholder-shown"},toggle:{selector:"::part(toggle-button)"},clearButton:{selector:"::part(clear-button)"},label:{selector:"::part(label)"},requiredIndicator:{selector:"[required]::part(required-indicator)::after"},helperText:{selector:"::part(helper-text)"},errorMessage:{selector:"::part(error-message)"}},f=(0,o.qC)((0,a.yk)({mappings:{hostWidth:{...s,property:"width"},hostDirection:{...s,property:"direction"},fontSize:[{},s],fontFamily:[b,u,p,y,g],labelFontSize:{...b,property:"font-size"},labelFontWeight:{...b,property:"font-weight"},labelTextColor:[{...b,property:"color"},{...m,property:"color"}],errorMessageTextColor:{...g,property:"color"},inputHeight:{...p,property:"height"},inputBackgroundColor:{...p,property:"background-color"},inputBorderColor:{...p,property:"border-color"},inputBorderWidth:{...p,property:"border-width"},inputBorderStyle:{...p,property:"border-style"},inputBorderRadius:{...p,property:"border-radius"},labelRequiredIndicator:{...m,property:"content"},inputValueTextColor:{...p,property:"color"},inputPlaceholderTextColor:{...u,property:"color"},inputDropdownButtonCursor:[{...c,property:"cursor"},{...h,property:"cursor"}],inputDropdownButtonColor:[{...c,property:"color"},{...h,property:"color"}],inputDropdownButtonSize:[{...c,property:"font-size"},{...h,property:"font-size"}],inputDropdownButtonOffset:[{...c,property:"margin-right"},{...c,property:"margin-left"}],inputOutlineColor:{...p,property:"outline-color"},inputOutlineWidth:{...p,property:"outline-width"},inputOutlineStyle:{...p,property:"outline-style"},inputOutlineOffset:{...p,property:"outline-offset"},inputHorizontalPadding:[{...d,property:"padding-left"},{...d,property:"padding-right"}],labelPosition:{...b,property:"position"},labelTopPosition:{...b,property:"top"},labelHorizontalPosition:[{...b,property:"left"},{...b,property:"right"}],inputTransformY:{...b,property:"transform"},inputTransition:{...b,property:"transition"},marginInlineStart:{...b,property:"margin-inline-start"},placeholderOpacity:{...u,property:"opacity"},inputVerticalAlignment:{...p,property:"align-items"},valueInputHeight:{...d,property:"height"},valueInputMarginBottom:{...d,property:"margin-bottom"},overlayBackground:{property:()=>f.cssVarList.overlay.backgroundColor},overlayTextColor:{property:()=>f.cssVarList.overlay.textColor},overlayBorder:{property:()=>f.cssVarList.overlay.border},overlayFontSize:{property:()=>f.cssVarList.overlay.fontSize},overlayFontFamily:{property:()=>f.cssVarList.overlay.fontFamily},overlayCursor:{property:()=>f.cssVarList.overlay.cursor},overlayItemBoxShadow:{property:()=>f.cssVarList.overlay.itemBoxShadow},overlayItemPaddingInlineStart:{property:()=>f.cssVarList.overlay.itemPaddingInlineStart},overlayItemPaddingInlineEnd:{property:()=>f.cssVarList.overlay.itemPaddingInlineEnd}}}),a.e4,(0,a.Iw)({name:"overlay",selector:"",mappings:{backgroundColor:{selector:"vaadin-combo-box-scroller"},minHeight:{selector:"vaadin-combo-box-overlay"},margin:{selector:"vaadin-combo-box-overlay"},cursor:{selector:"vaadin-combo-box-item"},fontFamily:{selector:"vaadin-combo-box-item"},textColor:{selector:"vaadin-combo-box-item",property:"color"},fontSize:{selector:"vaadin-combo-box-item"},itemBoxShadow:{selector:"vaadin-combo-box-item",property:"box-shadow"},itemPaddingInlineStart:{selector:"vaadin-combo-box-item",property:"padding-inline-start"},itemPaddingInlineEnd:{selector:"vaadin-combo-box-item",property:"padding-inline-end"}},forward:{include:!1,attributes:["size"]}}),(0,a.dj)({proxyProps:["selectionStart"],inputEvent:"selected-item-changed"}),a.Ae,(e=>class extends e{static get observedAttributes(){return["label-type"]}#e=({displayName:e,value:t,label:r})=>`<span data-name="${r}" data-id="${t}">${e||r}</span>`;#t;get defaultValue(){return this.getAttribute("default-value")}get renderItem(){return this.#e}set renderItem(e){this.#e=e,this.renderItems()}get data(){if(this.#t)return this.#t;const e=this.getAttribute("data");if(e)try{const t=JSON.parse(e);if(this.isValidDataType(t))return t}catch(e){console.error('could not parse data string from attribute "data" -',e.message)}return[]}set data(e){this.isValidDataType(e)&&(this.#t=e,this.renderItems())}isValidDataType(e){const t=Array.isArray(e);return t||console.error("data must be an array, received:",e),t}getItemsTemplate(){return this.data?.reduce?.(((e,t)=>e+(this.renderItem?.(t||{})||"")),"")}renderItems(){const e=this.getItemsTemplate();e&&(this.innerHTML=e)}handleSelectedItem(){const e=this.baseElement.selectedItem?.["data-id"];this.baseElement.selectedItem=void 0,e&&(this.value=e),this.value||this.setDefaultValue()}customValueTransformFn(e){return e}setComboBoxDescriptor(){const e=Object.getOwnPropertyDescriptor(this.inputElement.constructor.prototype,"value"),t=this;Object.defineProperties(this.inputElement,{value:{...e,set(r){if(!t.baseElement.items?.length)return;const o=t.customValueTransformFn(r)||"";o!==this.value&&e.set.call(this,o)}}})}#r(){const e=this.shadowRoot.querySelector(this.baseSelector),t=Array.from(this.children);t.length&&(t.forEach((e=>{Object.defineProperty(e,"data-name",{value:e.getAttribute("data-name"),configurable:!0,writable:!0}),Object.defineProperty(e,"data-id",{value:e.getAttribute("data-id"),configurable:!0,writable:!0})})),e.items=t,setTimeout((()=>{this.handleSelectedItem()}),0)),e.renderer=(e,t,r)=>{e.innerHTML=r.item.outerHTML}}#o(){const e=this.baseElement.shadowRoot.querySelector("vaadin-combo-box-overlay");e._attachOverlay=()=>{e.bringToFront()},e._detachOverlay=()=>{},e._enterModalState=()=>{}}init(){super.init?.(),this.getValidity=function(){return!this.value&&this.isRequired?{valueMissing:!0}:{}},this.setComboBoxDescriptor(),this.#o(),this.renderItems(),(0,n.FX)(this,this.renderItems.bind(this),{includeAttrs:["data"]}),(0,n.P$)(this,this.#r.bind(this)),this.setDefaultValue(),this.baseElement.addEventListener("selected-item-changed",(()=>{this.dispatchEvent(new Event("input",{bubbles:!0,composed:!0}))}))}onLabelClick(){this.isReadOnly||this.isDisabled||(this.focus(),this.setAttribute("opened","true"))}attributeChangedCallback(e,t,r){super.attributeChangedCallback?.(e,t,r),t!==r&&"label-type"===e&&("floating"===r?this.addEventListener("click",this.onLabelClick):this.removeEventListener("click",this.onLabelClick))}setDefaultValue(){this.value=this.defaultValue}set value(e){if(e){const t=this.baseElement.items?.find((t=>t["data-id"]===e));t&&(this.baseElement.selectedItem=t)}else this.baseElement.selectedItem=void 0}get value(){return this.baseElement.selectedItem?.["data-id"]||""}}))((0,a.DM)({slots:["","prefix"],wrappedEleName:"vaadin-combo-box",style:()=>`\n\t\t:host {\n\t\t\tdisplay: inline-flex;\n\t\t\tbox-sizing: border-box;\n\t\t\t-webkit-mask-image: none;\n\t\t}\n\t\t${(0,i.bi)(f.cssVarList)}\n\t\t${(0,i.PH)("vaadin-combo-box")}\n\t\t${(0,i.jI)("vaadin-combo-box")}\n\t\t${(0,i.Pd)("vaadin-combo-box")}\n\n\t\tvaadin-combo-box {\n\t\t\tpadding: 0;\n\t\t\twidth: 100%;\n\t\t}\n\t\tvaadin-combo-box::before {\n\t\t\theight: initial;\n\t\t}\n\t\tvaadin-combo-box [slot="input"] {\n\t\t\t-webkit-mask-image: none;\n\t\t\tmin-height: 0;\n\t\t\tbox-sizing: border-box;\n\t\t}\n\n\t\tvaadin-combo-box::part(input-field) {\n\t\t\tpadding: 0;\n\t\t\tbox-shadow: none;\n\t\t}\n\n vaadin-combo-box::part(toggle-button),\n vaadin-combo-box::part(clear-button) {\n align-self: center;\n }\n\n vaadin-combo-box[label-type="floating"]:not([focused])[readonly] > input:placeholder-shown {\n opacity: 0;\n }\n vaadin-combo-box[label-type="floating"]:not([focused])[disabled] > input:placeholder-shown {\n opacity: 0;\n }\n \n ${(0,i.Wf)("vaadin-combo-box")}\n ${(0,i.bz)()}\n\t\t`,excludeAttrsSync:["tabindex","size","data"],componentName:l,includeForwardProps:["items","renderer","selectedItem"]}))},21294:(e,t,r)=>{r.r(t),r.d(t,{ComboBoxClass:()=>o.H}),r(47583);var o=r(84049);customElements.define(o.f,o.H)},41377:(e,t,r)=>{r.d(t,{Z:()=>d,f:()=>a});var o=r(73878),n=r(54567),i=r(16418);const a=(0,n.iY)("phone-field-internal-input-box"),l=["disabled","size","bordered","invalid","readonly","phone-input-placeholder","name","autocomplete","label-type"],s={"phone-input-placeholder":"placeholder"},p=(0,o.P)({componentName:a,baseSelector:"div"}),d=class extends p{static get observedAttributes(){return[].concat(p.observedAttributes||[],l)}constructor(){super(),this.innerHTML='\n <div>\n <descope-text-field tabindex="1"></descope-text-field>\n </div>\n ',this.phoneNumberInput=this.querySelector("descope-text-field")}get defaultCountryCode(){return(0,i.g)(this.getAttribute("default-code"))}get hasDefaultCode(){return!!this.getAttribute("default-code")}get value(){if(!this.phoneNumberValue)return"";if(this.hasDefaultCode){const e=new RegExp(`\\+?${parseInt(this.defaultCountryCode,10)}--?`);return`${this.defaultCountryCode}-${this.phoneNumberInput.value.replace(e,"")}`}return this.phoneNumberInput.value}set value(e){this.phoneNumberInput.value=e}get phoneNumberValue(){return this.phoneNumberInput.value}get minLength(){return parseInt(this.getAttribute("minlength"),10)||0}get maxLength(){return parseInt(this.getAttribute("maxlength"),10)||50}getValidity(){const e=this.value.replace(/\D/g,"");return this.isRequired&&!this.value?{valueMissing:!0}:e.length<this.minLength?{tooShort:!0}:e.length>this.maxLength?{tooLong:!0}:/^\+?\d{1,4}-?(?:\d-?){1,15}$/.test(this.value)?{}:{patternMismatch:!0}}init(){this.addEventListener("focus",(e=>{e.isTrusted&&this.phoneNumberInput.focus()})),super.init?.(),this.initInputs()}getCountryByDialCode(e){return this.countryCodeInput.items?.find((t=>t.getAttribute("data-country-code")===e))}initInputs(){this.phoneNumberInput.addEventListener("input",(e=>{1===e.target.value.length&&"-"===e.target.value&&(e.target.value=""),e.target.value=e.target.value.replace(/(?!^)\+/g,"").replace("--","-").replace("+-","+");const t=/^[+\d-]+$/,r=e.target.value.split("").filter((e=>t.test(e))).join("");e.target.value=r})),this.handleFocusEventsDispatching([this.phoneNumberInput]),this.handleInputEventDispatching()}attributeChangedCallback(e,t,r){if(super.attributeChangedCallback(e,t,r),t!==r&&l.includes(e)){const t=s[e]||e;this.phoneNumberInput.setAttribute(t,r)}}}},83067:(e,t,r)=>{r.r(t),r(19357);var o=r(41377);customElements.define(o.f,o.Z)},69423:(e,t,r)=>{r.r(t),r.d(t,{PhoneFieldInputBoxClass:()=>x}),r(83067),r(21294),r(19357);var o=r(41377),n=r(54567),i=r(2061),a=r(21e3),l=r(56417),s=r(87262),p=r(54201);const d=l.z.cssVarList,u=(0,n.iY)("phone-input-box-field"),{host:c,label:h,inputElement:b,requiredIndicator:m,inputField:y,phoneInput:g,errorMessage:f,helperText:v}={host:{selector:()=>":host"},label:{selector:"::part(label)"},placeholder:{selector:"> input:placeholder-shown"},inputElement:{selector:"input"},requiredIndicator:{selector:"[required]::part(required-indicator)::after"},inputField:{selector:"::part(input-field)"},phoneInput:{selector:()=>"descope-text-field"},helperText:{selector:"::part(helper-text)"},errorMessage:{selector:"::part(error-message)"}},x=(0,i.qC)((0,a.yk)({mappings:{fontSize:[c,y,{selector:l.z.componentName,property:l.z.cssVarList.fontSize}],fontFamily:[h,f,v],hostWidth:{...c,property:"width"},hostMinWidth:{...c,property:"min-width"},hostDirection:{...c,property:"direction"},inputBorderStyle:{...y,property:"border-style"},inputBorderWidth:{...y,property:"border-width"},inputBorderColor:{...y,property:"border-color"},inputBorderRadius:{...y,property:"border-radius"},inputHorizontalPadding:[{...g,property:"padding-left"},{...g,property:"padding-right"}],labelFontSize:{...h,property:"font-size"},labelFontWeight:{...h,property:"font-weight"},labelTextColor:[{...h,property:"color"},{...m,property:"color"}],labelRequiredIndicator:{...m,property:"content"},errorMessageTextColor:{...f,property:"color"},inputValueTextColor:{...g,property:d.inputValueTextColor},inputPlaceholderTextColor:{...g,property:d.inputPlaceholderColor},inputOutlineStyle:{...y,property:"outline-style"},inputOutlineColor:{...y,property:"outline-color"},inputOutlineWidth:{...y,property:"outline-width"},inputOutlineOffset:{...y,property:"outline-offset"},labelPosition:{...h,property:"position"},labelTopPosition:{...h,property:"top"},labelHorizontalPosition:[{...h,property:"left"},{...h,property:"right"}],inputTransformY:{...h,property:"transform"},inputTransition:{...h,property:"transition"},marginInlineStart:{...h,property:"margin-inline-start"},valueInputHeight:{...b,property:"height"},valueInputMarginBottom:{selector:l.z.componentName,property:d.valueInputMarginBottom}}}),a.e4,(0,a.dj)({proxyProps:["value","selectionStart"]}),(e=>class extends e{static get CountryCodes(){return s.Z}init(){super.init?.();const e=document.createElement("template");e.innerHTML=`\n\t\t\t\t<${o.f}\n\t\t\t\t\ttabindex="-1"\n\t\t\t\t\tslot="input"\n\t\t\t\t></${o.f}>\n `,this.baseElement.appendChild(e.content.cloneNode(!0)),this.inputElement=this.shadowRoot.querySelector(o.f),(0,n.oP)(this.shadowRoot.host,this.inputElement,{includeAttrs:["size","bordered","invalid","minlength","maxlength","default-code","disabled","phone-input-placeholder","label","label-type"]})}}))((0,a.DM)({slots:[],wrappedEleName:"vaadin-text-field",style:()=>`\n :host {\n display: inline-flex;\n max-width: 100%;\n box-sizing: border-box;\n }\n ${(0,p.bi)(x.cssVarList)}\n ${(0,p.Pd)("vaadin-text-field")}\n ${(0,p.B)("vaadin-text-field")}\n ${(0,p.DY)()}\n\n vaadin-text-field {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n padding: 0;\n }\n vaadin-text-field[focus-ring]::part(input-field) {\n box-shadow: none;\n }\n vaadin-text-field::before {\n height: 0;\n }\n vaadin-text-field::part(input-field) {\n padding: 0;\n background: transparent;\n overflow: hidden;\n -webkit-mask-image: none;\n }\n descope-phone-field-internal-input-box {\n -webkit-mask-image: none;\n padding: 0;\n width: 100%;\n height: 100%;\n }\n descope-phone-field-internal-input-box > div {\n width: 100%;\n height: 100%;\n }\n descope-phone-field-internal-input-box .separator {\n flex: 0;\n border: none;\n }\n descope-text-field {\n flex-grow: 1;\n width: 100%;\n ${d.inputOutlineWidth}: 0;\n ${d.inputOutlineOffset}: 0;\n ${d.inputBorderWidth}: 0;\n ${d.inputBorderRadius}: 0;\n direction: ltr;\n }\n vaadin-text-field[readonly] > input:placeholder-shown {\n opacity: 1;\n }\n vaadin-text-field::part(input-field)::after {\n border: none;\n }\n\n vaadin-text-field[label-type="floating"]:not([focused])[readonly] input:placeholder-shown {\n opacity: 0;\n }\n vaadin-text-field[label-type="floating"]:not([focused])[disabled] input:placeholder-shown {\n opacity: 0;\n }\n\n ${(0,p.Wf)("vaadin-text-field")}\n ${(0,p.bz)()}\n\t\t`,excludeAttrsSync:["tabindex"],componentName:u}));customElements.define(u,x)},16418:(e,t,r)=>{r.d(t,{g:()=>n});var o=r(87262);const n=e=>o.Z.find((t=>t.code===e))?.dialCode}}]);
|
package/package.json
CHANGED
@@ -42,12 +42,8 @@ class EnrichedText extends createBaseClass({ componentName, baseSelector: ':host
|
|
42
42
|
margin-bottom: 1em;
|
43
43
|
}
|
44
44
|
a {
|
45
|
-
text-decoration: none;
|
46
45
|
cursor: pointer;
|
47
46
|
}
|
48
|
-
a:hover {
|
49
|
-
text-decoration: underline;
|
50
|
-
}
|
51
47
|
blockquote {
|
52
48
|
padding: 0 2em;
|
53
49
|
}
|
@@ -192,6 +188,8 @@ export const EnrichedTextClass = compose(
|
|
192
188
|
textLineHeight: { property: 'line-height' },
|
193
189
|
textAlign: {},
|
194
190
|
linkColor: { selector: 'a', property: 'color' },
|
191
|
+
linkTextDecoration: { selector: 'a', property: 'text-decoration' },
|
192
|
+
linkHoverTextDecoration: { selector: 'a:hover', property: 'text-decoration' },
|
195
193
|
minHeight: {},
|
196
194
|
minWidth: {},
|
197
195
|
},
|
@@ -1,13 +1,13 @@
|
|
1
1
|
import { compose } from '../../helpers';
|
2
2
|
import { getComponentName } from '../../helpers/componentHelpers';
|
3
3
|
import {
|
4
|
+
componentNameValidationMixin,
|
5
|
+
createProxy,
|
4
6
|
createStyleMixin,
|
5
7
|
draggableMixin,
|
6
|
-
createProxy,
|
7
|
-
componentNameValidationMixin,
|
8
8
|
} from '../../mixins';
|
9
9
|
|
10
|
-
import { isValidDataType } from './helpers';
|
10
|
+
import { defaultRowDetailsRenderer, isValidDataType } from './helpers';
|
11
11
|
|
12
12
|
export const componentName = getComponentName('grid');
|
13
13
|
|
@@ -22,6 +22,41 @@ const GridMixin = (superclass) =>
|
|
22
22
|
|
23
23
|
// disable the grid sort
|
24
24
|
this.baseElement._mapSorters = () => {};
|
25
|
+
|
26
|
+
this.baseElement.rowDetailsRenderer = this.#rowDetailsRenderer.bind(this);
|
27
|
+
}
|
28
|
+
|
29
|
+
// this renders the details panel content
|
30
|
+
// in order to open it, the descope-grid-item-details-column should be used
|
31
|
+
#rowDetailsRenderer = async (cell, _col, model) => {
|
32
|
+
await import('../descope-code-snippet');
|
33
|
+
// prevent details panel from being scrolled into view when clicked
|
34
|
+
cell.addEventListener('mousedown', (e) => e.stopImmediatePropagation(), true);
|
35
|
+
|
36
|
+
const template = this.getRowDetailsTemplate(model.item);
|
37
|
+
|
38
|
+
// eslint-disable-next-line no-param-reassign
|
39
|
+
cell.innerHTML = '';
|
40
|
+
cell.append(template.content.cloneNode(true));
|
41
|
+
};
|
42
|
+
|
43
|
+
getRowDetailsTemplate(item) {
|
44
|
+
const itemLabelsMapping = this.#columns.reduce(
|
45
|
+
(acc, { path, header }) => (!path || !header ? acc : { ...acc, [path]: header }),
|
46
|
+
{}
|
47
|
+
);
|
48
|
+
const template =
|
49
|
+
this.rowDetailsRenderer?.(item, itemLabelsMapping) ??
|
50
|
+
defaultRowDetailsRenderer(item, itemLabelsMapping);
|
51
|
+
|
52
|
+
switch (true) {
|
53
|
+
case template instanceof HTMLTemplateElement:
|
54
|
+
return template;
|
55
|
+
case typeof template === 'string':
|
56
|
+
return Object.assign(document.createElement('template'), { innerHTML: template });
|
57
|
+
default:
|
58
|
+
throw new Error('rowDetailsRenderer should return a string or a template');
|
59
|
+
}
|
25
60
|
}
|
26
61
|
|
27
62
|
forwardSelectedItemsChange() {
|
@@ -115,9 +150,20 @@ const GridMixin = (superclass) =>
|
|
115
150
|
);
|
116
151
|
}
|
117
152
|
|
153
|
+
// there is an issue in vaadin-grid, when rowDetailsRenderer is set, it renders an empty details panel
|
154
|
+
reassignRowDetailsRenderer() {
|
155
|
+
this.baseElement.rowDetailsRenderer = null;
|
156
|
+
setTimeout(() => {
|
157
|
+
this.baseElement.rowDetailsRenderer = this.#rowDetailsRenderer.bind(this);
|
158
|
+
}, 0);
|
159
|
+
}
|
160
|
+
|
118
161
|
renderColumns() {
|
119
162
|
const template = this.getColumnsTemplate();
|
120
|
-
if (template)
|
163
|
+
if (template) {
|
164
|
+
this.reassignRowDetailsRenderer();
|
165
|
+
this.innerHTML = template;
|
166
|
+
}
|
121
167
|
}
|
122
168
|
|
123
169
|
get grid() {
|
@@ -179,17 +225,35 @@ const {
|
|
179
225
|
selectedRow,
|
180
226
|
rowSeparator,
|
181
227
|
resizeHandle,
|
228
|
+
toggleDetailsPanelButton,
|
229
|
+
toggleDetailsPanelButtonOpened,
|
230
|
+
toggleDetailsPanelButtonClosed,
|
231
|
+
detailsPanel,
|
232
|
+
detailsPanelLabels,
|
233
|
+
selectedRowCell,
|
234
|
+
detailsPanelContent,
|
182
235
|
} = {
|
183
236
|
host: { selector: () => 'vaadin-grid' },
|
184
237
|
headerRow: { selector: () => '::part(header-cell)' },
|
185
238
|
headerRowCell: { selector: () => 'vaadin-grid::part(header-cell)' },
|
186
239
|
contentRow: { selector: () => '::part(cell)' },
|
187
240
|
firstRow: { selector: () => '::part(first-header-row-cell)' },
|
188
|
-
selectedRow: { selector: () => '::part(selected-row
|
241
|
+
selectedRow: { selector: () => '::part(selected-row)' },
|
242
|
+
selectedRowCell: { selector: () => '::part(selected-row-cell)' },
|
189
243
|
sortIndicators: { selector: () => 'vaadin-grid-sorter::part(indicators)' },
|
190
244
|
activeSortIndicator: { selector: () => 'vaadin-grid-sorter[direction]' },
|
191
245
|
rowSeparator: { selector: () => 'vaadin-grid::part(body-cell)' },
|
192
246
|
resizeHandle: { selector: () => '::part(resize-handle)' },
|
247
|
+
toggleDetailsPanelButton: { selector: () => 'vaadin-grid vaadin-icon.toggle-details-button' },
|
248
|
+
toggleDetailsPanelButtonOpened: {
|
249
|
+
selector: () => 'vaadin-grid vaadin-icon.toggle-details-button.opened',
|
250
|
+
},
|
251
|
+
toggleDetailsPanelButtonClosed: {
|
252
|
+
selector: () => 'vaadin-grid vaadin-icon.toggle-details-button.closed',
|
253
|
+
},
|
254
|
+
detailsPanel: { selector: () => 'vaadin-grid::part(details-cell)' },
|
255
|
+
detailsPanelLabels: { selector: () => 'vaadin-grid .row-details__label' },
|
256
|
+
detailsPanelContent: { selector: () => 'vaadin-grid .row-details' },
|
193
257
|
};
|
194
258
|
|
195
259
|
export const GridClass = compose(
|
@@ -213,7 +277,10 @@ export const GridClass = compose(
|
|
213
277
|
borderWidth: { ...host, property: 'border-width' },
|
214
278
|
borderStyle: { ...host, property: 'border-style' },
|
215
279
|
borderRadius: { ...host, property: 'border-radius' },
|
216
|
-
selectedBackgroundColor:
|
280
|
+
selectedBackgroundColor: [
|
281
|
+
{ ...selectedRow, property: 'background-color' },
|
282
|
+
{ ...selectedRowCell, property: 'background-color' },
|
283
|
+
],
|
217
284
|
headerRowTextColor: { ...headerRowCell, property: 'color' },
|
218
285
|
separatorColor: [
|
219
286
|
{ ...firstRow, property: 'border-bottom-color' },
|
@@ -221,6 +288,19 @@ export const GridClass = compose(
|
|
221
288
|
],
|
222
289
|
resizeHandleColor: { ...resizeHandle, property: 'background-color' },
|
223
290
|
hostDirection: { ...host, property: 'direction', fallback: 'ltr' },
|
291
|
+
toggleDetailsPanelButtonSize: [
|
292
|
+
{ ...toggleDetailsPanelButton, property: 'width' },
|
293
|
+
{ ...toggleDetailsPanelButton, property: 'height' },
|
294
|
+
],
|
295
|
+
toggleDetailsPanelButtonOpenedColor: { ...toggleDetailsPanelButtonOpened, property: 'color' },
|
296
|
+
toggleDetailsPanelButtonClosedColor: { ...toggleDetailsPanelButtonClosed, property: 'color' },
|
297
|
+
toggleDetailsPanelButtonCursor: { ...toggleDetailsPanelButton, property: 'cursor' },
|
298
|
+
detailsPanelBackgroundColor: { ...detailsPanel, property: 'background-color' },
|
299
|
+
detailsPanelBorderTopColor: { ...detailsPanel, property: 'border-top-color' },
|
300
|
+
detailsPanelLabelsColor: { ...detailsPanelLabels, property: 'color' },
|
301
|
+
detailsPanelLabelsFontSize: { ...detailsPanelLabels, property: 'font-size' },
|
302
|
+
detailsPanelItemsGap: { ...detailsPanelContent, property: 'grid-gap' },
|
303
|
+
detailsPanelPadding: { ...detailsPanelContent, property: 'padding' },
|
224
304
|
},
|
225
305
|
}),
|
226
306
|
draggableMixin,
|
@@ -232,6 +312,7 @@ export const GridClass = compose(
|
|
232
312
|
slots: [''],
|
233
313
|
wrappedEleName: 'vaadin-grid',
|
234
314
|
style: () => `
|
315
|
+
/*css*/
|
235
316
|
vaadin-grid {
|
236
317
|
overflow: hidden;
|
237
318
|
height: 100%;
|
@@ -243,7 +324,36 @@ export const GridClass = compose(
|
|
243
324
|
vaadin-grid::part(selected-row-cell) {
|
244
325
|
background-image: none;
|
245
326
|
box-shadow: none;
|
327
|
+
background-color: inherit;
|
328
|
+
}
|
329
|
+
vaadin-grid::part(details-cell) {
|
330
|
+
border-top-style: dashed;
|
331
|
+
border-top-width: 1px;
|
332
|
+
}
|
333
|
+
vaadin-grid .row-details {
|
334
|
+
display: grid;
|
335
|
+
grid-template-columns: repeat(auto-fit, minmax(max(200px, calc(100%/4 - var(${GridClass.cssVarList.detailsPanelItemsGap}))), 1fr));
|
336
|
+
width: 100%;
|
337
|
+
}
|
338
|
+
vaadin-grid .row-details__item:has(.row-details__value.json) {
|
339
|
+
grid-column: 1 / -1;
|
340
|
+
order: 2;
|
341
|
+
}
|
342
|
+
vaadin-grid .row-details__value.text {
|
343
|
+
overflow: hidden;
|
344
|
+
text-overflow: ellipsis;
|
345
|
+
white-space: pre;
|
346
|
+
}
|
347
|
+
vaadin-grid .row-details__value.json {
|
348
|
+
margin-top: 5px;
|
349
|
+
max-height: 120px;
|
350
|
+
overflow: scroll;
|
351
|
+
font-size: 0.85em;
|
352
|
+
}
|
353
|
+
vaadin-grid vaadin-icon.toggle-details-button {
|
354
|
+
margin: auto;
|
246
355
|
}
|
356
|
+
/*!css*/
|
247
357
|
`,
|
248
358
|
excludeAttrsSync: ['columns', 'tabindex'],
|
249
359
|
componentName,
|
package/src/components/descope-grid/descope-grid-item-details-column/GridItemDetailsColumnClass.js
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
/* eslint-disable no-param-reassign */
|
2
|
+
import { GridSortColumn } from '@vaadin/grid/vaadin-grid-sort-column';
|
3
|
+
|
4
|
+
export class GridItemDetailsColumnClass extends GridSortColumn {
|
5
|
+
get sortable() {
|
6
|
+
return this.getAttribute('sortable') === 'true';
|
7
|
+
}
|
8
|
+
|
9
|
+
// eslint-disable-next-line class-methods-use-this
|
10
|
+
_defaultRenderer(cell, _col, model) {
|
11
|
+
const grid = _col._gridValue;
|
12
|
+
const itemIdx = grid.detailsOpenedItems?.indexOf(model.item) ?? -1;
|
13
|
+
const isOpened = itemIdx !== -1;
|
14
|
+
|
15
|
+
const toggleIcon = document.createElement('vaadin-icon');
|
16
|
+
toggleIcon.icon = isOpened ? 'vaadin:angle-up' : 'vaadin:angle-down';
|
17
|
+
toggleIcon.classList.add('toggle-details-button', isOpened ? 'opened' : 'closed');
|
18
|
+
cell.innerHTML = '';
|
19
|
+
cell.append(toggleIcon);
|
20
|
+
|
21
|
+
toggleIcon.onclick = () => {
|
22
|
+
grid.detailsOpenedItems = isOpened
|
23
|
+
? grid.detailsOpenedItems.toSpliced(itemIdx, 1)
|
24
|
+
: [...grid.detailsOpenedItems, model.item];
|
25
|
+
};
|
26
|
+
}
|
27
|
+
|
28
|
+
_defaultHeaderRenderer(root, _column) {
|
29
|
+
if (this.sortable) {
|
30
|
+
super._defaultHeaderRenderer(root, _column);
|
31
|
+
|
32
|
+
return;
|
33
|
+
}
|
34
|
+
|
35
|
+
this.__setTextContent(root, this.__getHeader(this.header, this.path));
|
36
|
+
}
|
37
|
+
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { getComponentName } from '../../../helpers/componentHelpers';
|
2
|
+
import { GridItemDetailsColumnClass } from './GridItemDetailsColumnClass';
|
3
|
+
import '@vaadin/icon';
|
4
|
+
import '@vaadin/icons';
|
5
|
+
|
6
|
+
export const componentName = getComponentName('grid-item-details-column');
|
7
|
+
|
8
|
+
customElements.define(componentName, GridItemDetailsColumnClass);
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import { toTitle } from '../../helpers';
|
2
|
+
|
1
3
|
export const isValidDataType = (data) => {
|
2
4
|
const isValid = Array.isArray(data);
|
3
5
|
if (!isValid) {
|
@@ -7,3 +9,55 @@ export const isValidDataType = (data) => {
|
|
7
9
|
|
8
10
|
return isValid;
|
9
11
|
};
|
12
|
+
|
13
|
+
export const isPlainObject = (value) => value?.constructor === Object;
|
14
|
+
|
15
|
+
export const getValueType = (value) => {
|
16
|
+
if (isPlainObject(value)) return 'object';
|
17
|
+
if (Array.isArray(value)) return 'array';
|
18
|
+
|
19
|
+
return 'text';
|
20
|
+
};
|
21
|
+
|
22
|
+
export const renderCodeSnippet = (value) =>
|
23
|
+
`<descope-code-snippet lang="json" class="row-details__value json">${JSON.stringify(
|
24
|
+
value,
|
25
|
+
null,
|
26
|
+
2
|
27
|
+
)}</descope-code-snippet>`;
|
28
|
+
|
29
|
+
export const renderText = (text) =>
|
30
|
+
`<div class="row-details__value text" title="${text}">${text}</div>`;
|
31
|
+
|
32
|
+
const defaultRowDetailsValueRenderer = (value) => {
|
33
|
+
const valueType = getValueType(value);
|
34
|
+
|
35
|
+
if (valueType === 'object') {
|
36
|
+
return renderCodeSnippet(value);
|
37
|
+
}
|
38
|
+
|
39
|
+
if (valueType === 'array') {
|
40
|
+
if (value.some((v) => getValueType(v) === 'object')) {
|
41
|
+
return renderCodeSnippet(value);
|
42
|
+
}
|
43
|
+
return renderText(value.join(',\n'));
|
44
|
+
}
|
45
|
+
|
46
|
+
return renderText(value);
|
47
|
+
};
|
48
|
+
|
49
|
+
export const defaultRowDetailsRenderer = (item, itemLabelsMapping) => {
|
50
|
+
return `
|
51
|
+
<div class="row-details">
|
52
|
+
${Object.entries(item)
|
53
|
+
.map(
|
54
|
+
([key, value]) =>
|
55
|
+
`<div class="row-details__item" >
|
56
|
+
<div class="row-details__label">${itemLabelsMapping[key] || toTitle(key)}</div>
|
57
|
+
${defaultRowDetailsValueRenderer(value)}
|
58
|
+
</div>`
|
59
|
+
)
|
60
|
+
.join('\n')}
|
61
|
+
</div>
|
62
|
+
`;
|
63
|
+
};
|
@@ -18,10 +18,6 @@ class RawLink extends createBaseClass({ componentName, baseSelector: ':host a' }
|
|
18
18
|
}
|
19
19
|
:host a {
|
20
20
|
display: inline;
|
21
|
-
text-decoration: none;
|
22
|
-
}
|
23
|
-
:host a:hover {
|
24
|
-
text-decoration: underline;
|
25
21
|
}
|
26
22
|
</style>
|
27
23
|
<div>
|
@@ -48,12 +44,13 @@ class RawLink extends createBaseClass({ componentName, baseSelector: ':host a' }
|
|
48
44
|
|
49
45
|
const selectors = {
|
50
46
|
host: { selector: () => ':host' },
|
47
|
+
link: { selector: () => ':host a' },
|
51
48
|
anchor: {},
|
52
49
|
wrapper: { selector: () => ':host > div' },
|
53
50
|
text: { selector: () => TextClass.componentName },
|
54
51
|
};
|
55
52
|
|
56
|
-
const { anchor, text, host, wrapper } = selectors;
|
53
|
+
const { anchor, text, host, wrapper, link } = selectors;
|
57
54
|
|
58
55
|
export const LinkClass = compose(
|
59
56
|
createStyleMixin({
|
@@ -61,6 +58,7 @@ export const LinkClass = compose(
|
|
61
58
|
hostWidth: { ...host, property: 'width' },
|
62
59
|
hostDirection: { ...text, property: 'direction' },
|
63
60
|
textAlign: wrapper,
|
61
|
+
textDecoration: { ...link, property: 'text-decoration', fallback: 'none' },
|
64
62
|
textColor: [
|
65
63
|
{ ...anchor, property: 'color' },
|
66
64
|
{ ...text, property: TextClass.cssVarList.textColor },
|
@@ -58,6 +58,9 @@ export const RadioButtonClass = compose(
|
|
58
58
|
radioMargin: { selector: '::part(radio)', property: 'margin' },
|
59
59
|
radioCheckedSize: { selector: '::part(radio)::after', property: 'border-width' },
|
60
60
|
radioCheckedColor: { selector: '::part(radio)::after', property: 'border-color' },
|
61
|
+
radioBorderColor: { selector: '::part(radio)', property: 'border-color', fallback: 'none' },
|
62
|
+
radioBorderWidth: { selector: '::part(radio)', property: 'border-width', fallback: 0 },
|
63
|
+
radioBorderStyle: { selector: '::part(radio)', property: 'border-style', fallback: 'solid' },
|
61
64
|
},
|
62
65
|
}),
|
63
66
|
proxyInputMixin({ proxyProps: ['setSelectionRange'] }),
|
package/src/helpers/index.js
CHANGED
@@ -52,3 +52,11 @@ export const compareArraysUnordered = (arr1, arr2) => {
|
|
52
52
|
|
53
53
|
return true;
|
54
54
|
};
|
55
|
+
|
56
|
+
export const toTitle = (str) =>
|
57
|
+
str
|
58
|
+
.replace(/([A-Z])/g, ' $1')
|
59
|
+
.trim()
|
60
|
+
.split(' ')
|
61
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
62
|
+
.join(' ');
|
@@ -20,7 +20,7 @@ export const createProxy = ({
|
|
20
20
|
|
21
21
|
constructor() {
|
22
22
|
super().attachShadow({ mode: 'open', delegatesFocus }).innerHTML = `
|
23
|
-
<style id="create-proxy">${isFunction(style) ? style() : style}</style>
|
23
|
+
<style id="create-proxy">${(isFunction(style) ? style() : style) || ''}</style>
|
24
24
|
<${wrappedEleName}>
|
25
25
|
${slots
|
26
26
|
.map(
|
@@ -19,6 +19,8 @@ const EnrichedText = {
|
|
19
19
|
[vars.textColor]: globalRefs.colors.surface.dark,
|
20
20
|
|
21
21
|
[vars.linkColor]: `var(${LinkClass.cssVarList.textColor})`,
|
22
|
+
[vars.linkTextDecoration]: 'none',
|
23
|
+
[vars.linkHoverTextDecoration]: 'underline',
|
22
24
|
|
23
25
|
[vars.minWidth]: '0.25em',
|
24
26
|
[vars.minHeight]: '1.35em',
|
@@ -32,6 +32,17 @@ export const grid = {
|
|
32
32
|
[vars.selectedBackgroundColor]: globalRefs.colors.surface.highlight,
|
33
33
|
[vars.hostDirection]: globalRefs.direction,
|
34
34
|
|
35
|
+
[vars.toggleDetailsPanelButtonSize]: '1em',
|
36
|
+
[vars.toggleDetailsPanelButtonOpenedColor]: globalRefs.colors.surface.contrast,
|
37
|
+
[vars.toggleDetailsPanelButtonClosedColor]: globalRefs.colors.surface.light,
|
38
|
+
[vars.toggleDetailsPanelButtonCursor]: 'pointer',
|
39
|
+
[vars.detailsPanelBackgroundColor]: globalRefs.colors.surface.highlight,
|
40
|
+
[vars.detailsPanelBorderTopColor]: globalRefs.colors.surface.light,
|
41
|
+
[vars.detailsPanelLabelsColor]: globalRefs.colors.surface.dark,
|
42
|
+
[vars.detailsPanelLabelsFontSize]: '0.8em',
|
43
|
+
[vars.detailsPanelItemsGap]: '2em',
|
44
|
+
[vars.detailsPanelPadding]: '12px 0',
|
45
|
+
|
35
46
|
_bordered: {
|
36
47
|
[vars.borderColor]: refs.borderColor,
|
37
48
|
},
|
@@ -13,6 +13,8 @@ export const radioButton = {
|
|
13
13
|
[vars.radioCheckedSize]: `calc(var(${vars.radioSize})/5)`,
|
14
14
|
[vars.radioCheckedColor]: globalRefs.colors.surface.light,
|
15
15
|
[vars.radioBackgroundColor]: globalRefs.colors.surface.light,
|
16
|
+
[vars.radioBorderColor]: 'none',
|
17
|
+
[vars.radioBorderWidth]: 0,
|
16
18
|
|
17
19
|
_checked: {
|
18
20
|
[vars.radioBackgroundColor]: globalRefs.colors.surface.contrast,
|