@digital-realty/ix-multi-select 1.0.23 → 1.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ix-multi-select.min.js +5 -0
- package/package.json +13 -9
@@ -0,0 +1,5 @@
|
|
1
|
+
import{__decorate}from"tslib";import{css,LitElement,html,nothing}from"lit";import{query,property,state}from"lit/decorators.js";import{classMap}from"lit/directives/class-map.js";import{requestUpdateOnAriaChange}from"@material/web/internal/aria/delegate.js";import"@digital-realty/ix-chip/ix-chip-set.js";import"@digital-realty/ix-chip/ix-chip.js";import"@digital-realty/ix-field/ix-field.js";import"@digital-realty/ix-menu/ix-menu.js";import"@digital-realty/ix-menu/ix-menu-item.js";import"@digital-realty/ix-icon-button/ix-icon-button.js";const IxMultiSelectStyles=css`:host{display:block}:host([disabled]){pointer-events:none}ix-field{display:block}ix-field label{display:none}.field-content{display:flex;flex-wrap:wrap;min-height:var(--ix-custom-field-min-height,24px)}.menu{position:relative}.menu input,.menu label{cursor:pointer}input{border:none;background:0 0;outline:0;min-width:3rem;line-height:var(--_content-line-height)}#filter{min-width:30%;line-height:var(--_content-line-height);flex-grow:1}ix-chip-set{min-height:var(--_content-line-height);display:flex;padding-right:.5rem}ix-menu{--md-menu-container-color:#fff;max-height:500px}ix-menu-item{position:relative;min-height:var(--ix-menu-item-height,2.5rem)}ix-menu-item label{display:flex;align-items:center;position:absolute;top:0;left:0;right:0;bottom:0}ix-menu-item label input[type=checkbox]{margin:0 1rem 2px}ix-menu-item.selected{background:var(--md-menu-item-selected-container-color,--md-sys-color-tertiary-container)}ix-icon-button{--md-icon-button-icon-color:var(--md-sys-text-color-secondary);--md-icon-button-hover-icon-color:var(--md-sys-text-color-secondary);--md-icon-button-hover-state-layer-color:var(
|
2
|
+
--md-sys-text-color-secondary
|
3
|
+
);--md-icon-button-pressed-icon-color:var(--md-sys-text-color-secondary);--md-icon-button-pressed-state-layer-color:var(
|
4
|
+
--md-sys-text-color-secondary
|
5
|
+
)}.open-icon{margin-right:.5rem}.multi-select{position:relative}`;class IxMultiSelect extends LitElement{constructor(){super(...arguments),this.internals=this.attachInternals(),this.items=[],this.label="",this.errorText="Invalid error text",this.disabled=!1,this.tabIndex=0,this.error=!1,this.required=!1,this._items=[],this.filterValue="",this.menuOpen=!1,this.menuOpening=!1,this.focused=!1,this.noFilteredOptions="No options",this.optionSelect=(e,i)=>{let s;s=e instanceof KeyboardEvent?(e.preventDefault(),!this._items[i].selected):e.target.checked,this._items=this._items.map((e,t)=>i===t?{...e,selected:s,filtered:!1}:{...e,filtered:!1}),this.dispatchEvent(new CustomEvent("toggle-multi-select-item",{detail:{label:this._items[i].label,selected:s},bubbles:!0,composed:!0})),this.filterValue=""},this.chipRemove=i=>{this._items=this._items.map((e,t)=>i===t?{...e,selected:!1}:{...e}),this.dispatchEvent(new CustomEvent("remove-multi-select-item",{detail:this._items[i].label,bubbles:!0,composed:!0}))},this.filterOptions=e=>{const i=e.target.value.toLocaleLowerCase();this.filterValue=i,this._items=this._items.map(e=>{var t=-1===e.label.toLowerCase().indexOf(i);return{...e,filtered:t}})},this.focusin=()=>{this.focused=!0,this.menu.show(),this.setMenuPosition(),this.internals.setFormValue(this.value)},this.handleFocusin=e=>{"filter"!==e.target.id||this.disabled||this.menuOpen||this.menuOpening||this.focusin()},this.handleFocusout=()=>{this.focused=!1},this.handleMenuOpening=()=>{this.menuOpening=!0,this.menuOpen=!0,this.setMenuPosition(),this.internals.setFormValue(this.value)},this.menuOpened=()=>{this.setMenuPosition(),this.menuOpening=!1,this.focused=!0},this.setMenuPosition=()=>{var e=null==(e=null==(e=this.menu)?void 0:e.shadowRoot)?void 0:e.querySelector(".menu");e&&(e.style.width="100%",e.style.insetBlockStart="0")},this.handleMenuClosed=()=>{this.menuOpen=!1,this.menuOpening=!1},this.toggleOpen=e=>{e.stopPropagation(),this.menu.open?this.menuOpening||this.menu.close():(this.menu.show(),this.menuOpening=!0,this.menuOpen=!0,this.setMenuPosition())},this.clear=e=>{e.stopPropagation(),this._items=this._items.map(e=>({...e,selected:!1})),this.filterValue="",this.focused=!1,this.menuOpen=!1,this.menuOpening=!1,this.menu.close(),this.dispatchEvent(new CustomEvent("clear-multi-select",{bubbles:!0,composed:!0}))}}static get styles(){return[IxMultiSelectStyles]}get form(){return this.internals.form}get labels(){return this.internals.labels}get name(){var e;return null!=(e=this.getAttribute("name"))?e:""}get validationMessage(){return this.internals.validationMessage}get validity(){return this.internals.validity}get willValidate(){return this.internals.willValidate}checkValidity(){return this.internals.checkValidity()}reportValidity(){return this.internals.reportValidity()}get value(){return this._items.filter(e=>e.selected).map(e=>e.label).join(", ")}set value(e){const t=e.split(",").map(e=>e.trim());this._items=this._items.map(e=>({...e,selected:t.includes(e.label)}))}connectedCallback(){super.connectedCallback(),this._items=[...this.items],this.internals.setFormValue(this.value)}updated(e){e.has("disabled")&&(this.tabIndex=this.disabled?-1:0),this.setMenuPosition(),this.internals.setFormValue(this.value)}formResetCallback(){this.reset()}reset(){this._items=this._items.map(e=>({...e,selected:!1}))}render(){var e={disabled:this.disabled,error:!this.disabled&&this.error};return html`<div class="multi-select"><ix-field class="${classMap(e)}" id="anchor" ?focused="${this.focused}" ?disabled="${this.disabled}" ?required="${this.required}" ?error="${this.error}" error-text="${this.menuOpen||this.menuOpening?nothing:this.errorText}" label="${this.label}" @click="${this.handleFocusin}" @focusin="${this.handleFocusin}" @focusout="${this.handleFocusout}" ?populated="${this._items.find(e=>e.selected)||this.filterValue.length||this.menuOpen}"><div class="field-content">${this._items.filter(e=>e.selected).length?html`<ix-chip-set>${this._items.map((e,t)=>e.selected?html`<span><ix-chip @remove="${()=>this.chipRemove(t)}" label="${e.label}" appearance="input" removable remove-only></ix-chip></span>`:nothing)}</ix-chip-set>`:nothing} <input id="filter" @input="${this.filterOptions}" .value="${this.filterValue}" type="text" autocomplete="off"></div><slot name="end" slot="end">${this.value.length?html`<ix-icon-button @click="${this.clear}" icon="close" aria-label="clear"></ix-icon-button>`:nothing}<ix-icon-button @click="${this.toggleOpen}" class="open-icon" icon="${"arrow_drop_"+(this.menuOpen?"up":"down")}" aria-label="options"></ix-icon-button></slot></ix-field><div class="menu"><ix-menu anchor="anchor" quick @closed="${this.handleMenuClosed}" @opened="${this.menuOpened}" @opening="${this.handleMenuOpening}">${this._items.filter(e=>!e.filtered).length?this._items.map((e,t)=>html`${e.filtered?nothing:html`<ix-menu-item keep-open class="${e.selected?"selected":""}" @keydown="${e=>{[" ","Enter"].includes(e.key)&&this.optionSelect(e,t)}}"><div slot="headline"><label><input type="checkbox" @change="${e=>this.optionSelect(e,t)}" .checked="${e.selected}"> ${e.label}</label></div></ix-menu-item>`}`):html`<ix-menu-item>${this.noFilteredOptions}</ix-menu-item>`}</ix-menu></div></div>`}}requestUpdateOnAriaChange(IxMultiSelect),IxMultiSelect.shadowRootOptions={...LitElement.shadowRootOptions,delegatesFocus:!0},IxMultiSelect.formAssociated=!0,__decorate([query("ix-menu")],IxMultiSelect.prototype,"menu",void 0),__decorate([query("ix-chip-set")],IxMultiSelect.prototype,"chips",void 0),__decorate([query("#filter")],IxMultiSelect.prototype,"inputFilter",void 0),__decorate([property({type:Array})],IxMultiSelect.prototype,"items",void 0),__decorate([property({type:String})],IxMultiSelect.prototype,"label",void 0),__decorate([property({type:String,attribute:"error-text"})],IxMultiSelect.prototype,"errorText",void 0),__decorate([property({type:Boolean,reflect:!0})],IxMultiSelect.prototype,"disabled",void 0),__decorate([property({type:Number,reflect:!0})],IxMultiSelect.prototype,"tabIndex",void 0),__decorate([property({type:Boolean,reflect:!0})],IxMultiSelect.prototype,"error",void 0),__decorate([property({type:Boolean,reflect:!0})],IxMultiSelect.prototype,"required",void 0),__decorate([state()],IxMultiSelect.prototype,"_items",void 0),__decorate([state()],IxMultiSelect.prototype,"filterValue",void 0),__decorate([state()],IxMultiSelect.prototype,"menuOpen",void 0),__decorate([state()],IxMultiSelect.prototype,"menuOpening",void 0),__decorate([state()],IxMultiSelect.prototype,"focused",void 0),window.customElements.define("ix-multi-select",IxMultiSelect);
|
package/package.json
CHANGED
@@ -3,13 +3,14 @@
|
|
3
3
|
"description": "Webcomponent ix-multi-select following open-wc recommendations",
|
4
4
|
"license": "MIT",
|
5
5
|
"author": "Digital Realty",
|
6
|
-
"version": "1.0.
|
6
|
+
"version": "1.0.25",
|
7
7
|
"type": "module",
|
8
8
|
"main": "dist/index.js",
|
9
9
|
"module": "dist/index.js",
|
10
10
|
"exports": {
|
11
11
|
".": "./dist/index.js",
|
12
|
-
"./ix-multi-select.js": "./dist/ix-multi-select.js"
|
12
|
+
"./ix-multi-select.js": "./dist/ix-multi-select.js",
|
13
|
+
"./ix-multi-select.min.js": "./dist/ix-multi-select.min.js"
|
13
14
|
},
|
14
15
|
"publishConfig": {
|
15
16
|
"access": "public"
|
@@ -17,7 +18,7 @@
|
|
17
18
|
"scripts": {
|
18
19
|
"analyze": "cem analyze --litelement",
|
19
20
|
"start": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"",
|
20
|
-
"build": "tsc && npm run analyze -- --exclude dist",
|
21
|
+
"build": "tsc && npm run analyze -- --exclude dist && rollup -c",
|
21
22
|
"prepublish": "tsc && npm run analyze -- --exclude dist",
|
22
23
|
"lint": "eslint --ext .ts,.html . --ignore-path .gitignore && prettier \"**/*.ts\" --check --ignore-path .gitignore",
|
23
24
|
"format": "eslint --ext .ts,.html . --fix --ignore-path .gitignore && prettier \"**/*.ts\" --write --ignore-path .gitignore",
|
@@ -25,16 +26,16 @@
|
|
25
26
|
"test:watch": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wtr --watch\""
|
26
27
|
},
|
27
28
|
"dependencies": {
|
28
|
-
"@digital-realty/ix-chip": "^1.0.
|
29
|
-
"@digital-realty/ix-field": "^1.0.
|
30
|
-
"@digital-realty/ix-icon-button": "^1.0.
|
31
|
-
"@digital-realty/ix-menu": "^1.0.
|
29
|
+
"@digital-realty/ix-chip": "^1.0.23",
|
30
|
+
"@digital-realty/ix-field": "^1.0.5",
|
31
|
+
"@digital-realty/ix-icon-button": "^1.0.37",
|
32
|
+
"@digital-realty/ix-menu": "^1.0.4",
|
32
33
|
"@material/web": "1.2.0",
|
33
34
|
"lit": "^2.0.2"
|
34
35
|
},
|
35
36
|
"devDependencies": {
|
36
37
|
"@custom-elements-manifest/analyzer": "^0.4.17",
|
37
|
-
"@digital-realty/theme": "^1.0.
|
38
|
+
"@digital-realty/theme": "^1.0.27",
|
38
39
|
"@open-wc/eslint-config": "^9.2.1",
|
39
40
|
"@open-wc/testing": "^3.1.6",
|
40
41
|
"@typescript-eslint/eslint-plugin": "^5.48.0",
|
@@ -47,6 +48,9 @@
|
|
47
48
|
"husky": "^4.3.8",
|
48
49
|
"lint-staged": "^10.5.4",
|
49
50
|
"prettier": "^2.4.1",
|
51
|
+
"rollup-plugin-minify-html-literals": "^1.2.6",
|
52
|
+
"rollup-plugin-summary": "^2.0.0",
|
53
|
+
"rollup-plugin-uglify": "^6.0.4",
|
50
54
|
"tslib": "^2.3.1",
|
51
55
|
"typescript": "^4.5.2"
|
52
56
|
},
|
@@ -97,5 +101,5 @@
|
|
97
101
|
"README.md",
|
98
102
|
"LICENSE"
|
99
103
|
],
|
100
|
-
"gitHead": "
|
104
|
+
"gitHead": "c7668fda980293ca038c0dd061ebe350fa88ee60"
|
101
105
|
}
|