selectic 3.1.5 → 3.2.1
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/selectic.common.js +38 -7
- package/dist/selectic.esm.js +38 -7
- package/doc/params.md +17 -3
- package/package.json +3 -3
- package/src/Icon.tsx +3 -0
- package/src/List.tsx +3 -0
- package/src/Store.tsx +10 -2
- package/src/css/selectic.css +19 -0
- package/src/icons/dot.tsx +17 -0
- package/src/index.tsx +25 -3
- package/types/Store.d.ts +10 -3
- package/types/icons/dot.d.ts +6 -0
- package/types/index.d.ts +9 -2
package/dist/selectic.common.js
CHANGED
|
@@ -32,7 +32,7 @@ function styleInject(css, ref) {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
var css_248z = "/* {{{ Variables */\n\n:root {\n --selectic-font-size: 14px;\n --selectic-cursor-disabled: not-allowed;\n\n /* The main element */\n --selectic-color: #555555;\n --selectic-bg: #ffffff;\n\n /* The main element (when disabled) */\n --selectic-color-disabled: #787878;\n --selectic-bg-disabled: #eeeeee;\n\n /* The list */\n --selectic-panel-bg: #f0f0f0;\n --selectic-separator-bordercolor: #cccccc;\n /* --selectic-item-color: var(--selectic-color); /* Can be set in any CSS configuration */\n\n /* The current selected item */\n --selectic-selected-item-color: #428bca;\n\n /* When mouse is over items or by selecting with key arrows */\n --selectic-active-item-color: #ffffff;\n --selectic-active-item-bg: #66afe9;\n\n /* Selected values in main element */\n --selectic-value-bg: #f0f0f0;\n /* --selectic-more-items-bg: var(--selectic-info-bg); /* can be set in any CSS configuration */\n /* --selectic-more-items-color: var(--selectic-info-color); /* can be set in any CSS configuration */\n --selectic-more-items-bg-disabled: #cccccc;\n\n /* Information message */\n --selectic-info-bg: #5bc0de;\n --selectic-info-color: #ffffff;\n\n /* Error message */\n --selectic-error-bg: #b72c29;\n --selectic-error-color: #ffffff;\n\n /* XXX: Currently it is important to keep this size for a correct scroll\n * height estimation */\n --selectic-input-height: 30px;\n}\n\n/* }}} */\n/* {{{ Bootstrap equivalent style */\n\n.selectic .form-control {\n display: block;\n width: 100%;\n height: calc(var(--selectic-input-height) - 2px);\n font-size: var(--selectic-font-size);\n line-height: 1.42857143;\n color: var(--selectic-color);\n background-color: var(--selectic-bg);\n background-image: none;\n border: 1px solid var(--selectic-separator-bordercolor); /* should use a better variable */\n border-radius: 4px;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n.selectic .has-feedback {\n position: relative;\n}\n.selectic .has-feedback .form-control {\n padding-right: calc(var(--selectic-input-height) + 4px);\n}\n\n.selectic .form-control-feedback.fa,\n.selectic .form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: calc(var(--selectic-input-height) + 4px);\n height: calc(var(--selectic-input-height) + 4px);\n line-height: var(--selectic-input-height);\n text-align: center;\n pointer-events: none;\n}\n\n.selectic .alert-info {\n background-color: var(--selectic-info-bg);\n color: var(--selectic-info-color);\n}\n\n.selectic .alert-danger {\n background-color: var(--selectic-error-bg);\n color: var(--selectic-error-color);\n}\n\n/* }}} */\n\n.selectic * {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n.selectic.form-control {\n display: inline-block;\n padding: 0;\n cursor: pointer;\n border: unset;\n}\n\n.has-feedback .selectic__icon-container.form-control-feedback {\n right: 0;\n}\n\n/* The input which contains the selected value\n * XXX: This input should stay hidden behind other elements, but is \"visible\"\n * (in term of DOM point of view) in order to get and to trigger the `focus`\n * DOM event. */\n.selectic__input-value {\n position: fixed;\n opacity: 0;\n z-index: -1000;\n top: -100px;\n}\n\n/* XXX: .form-control has been added to this selector to improve priority and\n * override some rules of the original .form-control */\n.selectic-input.form-control {\n display: inline-flex;\n justify-content: space-between;\n overflow: hidden;\n width: 100%;\n min-height: var(--selectic-input-height);\n padding-top: 0;\n padding-bottom: 0;\n padding-left: 5px;\n line-height: calc(var(--selectic-input-height) - 4px);\n color: var(--selectic-color);\n}\n\n.selectic-input__reverse-icon {\n align-self: center;\n margin-right: 3px;\n cursor: default;\n}\n.selectic-input__clear-icon {\n align-self: center;\n margin-left: 3px;\n cursor: pointer;\n}\n.selectic-input__clear-icon:hover {\n color: var(--selectic-selected-item-color);\n}\n\n.selectic-input.focused {\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n}\n\n.selectic-input.disabled {\n cursor: var(--selectic-cursor-disabled);\n background-color: var(--selectic-bg-disabled);\n}\n.selectic-input.disabled .more-items {\n\tbackground-color: var(--selectic-more-items-bg-disabled);\n}\n\n.selectic-input__selected-items {\n display: inline-flex;\n flex-wrap: nowrap;\n align-items: center;\n white-space: nowrap;\n}\n\n.selectic-input__selected-items__placeholder {\n font-style: italic;\n opacity: 0.7;\n white-space: nowrap;\n}\n\n.selectic-icon {\n color: var(--selectic-color);\n text-align: center;\n vertical-align: middle;\n}\n\n.selectic__extended-list {\n position: fixed;\n top: var(--top-position, 0);\n z-index: 2000;\n height: auto;\n max-height: var(--availableSpace);\n background-color: var(--selectic-bg, #ffffff);\n box-shadow: 2px 5px 12px 0px #888888;\n border-radius: 0 0 4px 4px;\n padding: 0;\n width: var(--list-width, 200px);\n min-width: 200px;\n display: grid;\n grid-template-rows: minmax(0, max-content) 1fr;\n}\n.selectic__extended-list.selectic-position-top {\n box-shadow: 2px -3px 12px 0px #888888;\n}\n.selectic__extended-list__list-container{\n overflow: auto;\n}\n.selectic__extended-list__list-items {\n max-height: calc(var(--selectic-input-height) * 10);\n min-width: max-content;\n padding-left: 0;\n}\n\n.selectic-item {\n display: block;\n position: relative;\n box-sizing: border-box;\n padding: 2px 8px;\n color: var(--selectic-item-color, var(--selectic-color));\n min-height: calc(var(--selectic-input-height) - 3px);\n list-style-type: none;\n white-space: nowrap;\n cursor: pointer;\n}\n\n.selectic-item_text {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.selectic-item:not(.selected) .selectic-item_icon {\n opacity: 0;\n}\n\n.selectic-item_text {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.selectic-item__active {\n background-color: var(--selectic-active-item-bg);\n color: var(--selectic-active-item-color);\n}\n.selectic-item__active:not(.selected) .selectic-item_icon {\n opacity: 0.2;\n}\n.selectic-item__active.selectic-item__disabled:not(.selected) .selectic-item_icon {\n opacity: 0;\n}\n\n.selectic-item__disabled {\n color: var(--selectic-color-disabled);\n background-color: var(--selectic-bg-disabled);\n}\n\n.selectic-item__is-in-group {\n padding-left: 2em;\n}\n\n.selectic-item__is-group {\n font-weight: bold;\n cursor: default;\n}\n\n.selectic-item__is-group.selectable {\n cursor: pointer;\n}\n\n.selectic-item.selected {\n color: var(--selectic-selected-item-color);\n}\n.selectic-search-scope {\n color: #e0e0e0;\n left: auto;\n right: 10px;\n}\n.selectic .form-control-feedback.fa.selectic-search-scope {\n width: calc(var(--selectic-input-height) * 0.75);\n height: calc(var(--selectic-input-height) * 0.75);\n line-height: calc(var(--selectic-input-height) * 0.75);\n}\n\n.selectic__message {\n text-align: center;\n padding: 3px;\n}\n\n.selectic .filter-panel {\n padding: 3px;\n margin-left: 0px;\n margin-right: 0px;\n background-color: var(--selectic-panel-bg);\n border-bottom: 1px solid var(--selectic-separator-bordercolor);\n}\n\n.selectic .panelclosed {\n max-height: 0px;\n transition: max-height 0.3s ease-out;\n overflow: hidden;\n}\n\n.panelopened {\n max-height: 200px;\n transition: max-height 0.3s ease-in;\n overflow: hidden;\n}\n\n.selectic .filter-panel__input {\n padding-left: 0px;\n padding-right: 0px;\n padding-bottom: 10px;\n margin-bottom: 0px;\n}\n.selectic .filter-input {\n height: calc(var(--selectic-input-height) * 0.75);\n}\n\n.selectic .checkbox-filter {\n padding: 5px;\n text-align: center;\n}\n\n.selectic .curtain-handler {\n text-align: center;\n}\n\n.selectic .toggle-selectic {\n margin: 5px;\n padding-left: 0px;\n padding-right: 0px;\n}\n\n.selectic .toggle-boolean-select-all-toggle {\n display: inline;\n margin-right: 15px;\n}\n\n.selectic .toggle-boolean-excluding-toggle {\n display: inline;\n margin-right: 15px;\n}\n\n.selectic .single-value {\n display: grid;\n grid-template: \"value icon\" 1fr / max-content max-content;\n\n padding: 2px;\n padding-left: 5px;\n margin-left: 0;\n margin-right: 5px;\n /* margin top/bottom are mainly to create a gutter in multilines */\n margin-top: 2px;\n margin-bottom: 2px;\n\n border-radius: 3px;\n background-color: var(--selectic-value-bg);\n max-height: calc(var(--selectic-input-height) - 10px);\n max-width: 100%;\n min-width: 30px;\n\n overflow: hidden;\n white-space: nowrap;\n line-height: initial;\n vertical-align: middle;\n}\n\n.selectic .more-items {\n display: inline-block;\n\n padding-left: 5px;\n padding-right: 5px;\n border-radius: 10px;\n\n background-color: var(--selectic-more-items-bg, var(--selectic-info-bg));\n color: var(--selectic-more-items-color, var(--selectic-info-color));\n cursor: help;\n}\n.selectic-input__selected-items__value {\n grid-area: value;\n align-self: center;\n justify-self: normal;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.selectic-input__selected-items__icon {\n grid-area: icon;\n align-self: center;\n justify-self: center;\n margin-left: 5px;\n}\n.selectic-input__selected-items__icon:hover {\n color: var(--selectic-selected-item-color);\n}\n\n.selectic__label-disabled {\n opacity: 0.5;\n transition: opacity 400ms;\n}\n\n/* XXX: override padding of bootstrap input-sm.\n * This padding introduce a line shift. */\n.selectic.input-sm {\n padding: 0;\n}\n\n/* {{{ overflow multiline */\n\n.selectic--overflow-multiline,\n.selectic--overflow-multiline.form-control,\n.selectic--overflow-multiline .form-control {\n height: unset;\n}\n\n.selectic--overflow-multiline .selectic-input {\n overflow: unset;\n}\n\n.selectic--overflow-multiline .selectic-input__selected-items {\n flex-wrap: wrap;\n}\n\n/* {{{ icons */\n\n@keyframes selectic-animation-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(359deg);\n }\n}\n\n.selectic__icon {\n height: 1em;\n fill: currentColor;\n}\n\n.selectic-spin {\n animation: selectic-animation-spin 2s infinite linear;\n}\n\n/* }}} */\n";
|
|
35
|
+
var css_248z = "/* {{{ Variables */\n\n:root {\n --selectic-font-size: 14px;\n --selectic-cursor-disabled: not-allowed;\n\n /* The main element */\n --selectic-color: #555555;\n --selectic-bg: #ffffff;\n\n /* The main element (when disabled) */\n --selectic-color-disabled: #787878;\n --selectic-bg-disabled: #eeeeee;\n\n /* The list */\n --selectic-panel-bg: #f0f0f0;\n --selectic-separator-bordercolor: #cccccc;\n /* --selectic-item-color: var(--selectic-color); /* Can be set in any CSS configuration */\n\n /* The current selected item */\n --selectic-selected-item-color: #428bca;\n\n /* When mouse is over items or by selecting with key arrows */\n --selectic-active-item-color: #ffffff;\n --selectic-active-item-bg: #66afe9;\n\n /* Selected values in main element */\n --selectic-value-bg: #f0f0f0;\n /* --selectic-more-items-bg: var(--selectic-info-bg); /* can be set in any CSS configuration */\n /* --selectic-more-items-color: var(--selectic-info-color); /* can be set in any CSS configuration */\n --selectic-more-items-bg-disabled: #cccccc;\n\n /* Information message */\n --selectic-info-bg: #5bc0de;\n --selectic-info-color: #ffffff;\n\n /* Error message */\n --selectic-error-bg: #b72c29;\n --selectic-error-color: #ffffff;\n\n /* XXX: Currently it is important to keep this size for a correct scroll\n * height estimation */\n --selectic-input-height: 30px;\n}\n\n/* }}} */\n/* {{{ Bootstrap equivalent style */\n\n.selectic .form-control {\n display: block;\n width: 100%;\n height: calc(var(--selectic-input-height) - 2px);\n font-size: var(--selectic-font-size);\n line-height: 1.42857143;\n color: var(--selectic-color);\n background-color: var(--selectic-bg);\n background-image: none;\n border: 1px solid var(--selectic-separator-bordercolor); /* should use a better variable */\n border-radius: 4px;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n\n.selectic .has-feedback {\n position: relative;\n}\n\n.selectic .has-feedback .form-control {\n padding-right: calc(var(--selectic-input-height) + 4px);\n}\n\n.selectic .form-control-feedback.fa,\n.selectic .form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: calc(var(--selectic-input-height) + 4px);\n height: calc(var(--selectic-input-height) + 4px);\n line-height: var(--selectic-input-height);\n text-align: center;\n pointer-events: none;\n}\n\n.selectic .alert-info {\n background-color: var(--selectic-info-bg);\n color: var(--selectic-info-color);\n}\n\n.selectic .alert-danger {\n background-color: var(--selectic-error-bg);\n color: var(--selectic-error-color);\n}\n\n/* }}} */\n\n.selectic * {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n.selectic.form-control {\n display: inline-block;\n padding: 0;\n cursor: pointer;\n border: unset;\n}\n\n.has-feedback .selectic__icon-container.form-control-feedback {\n right: 0;\n}\n\n/* The input which contains the selected value\n * XXX: This input should stay hidden behind other elements, but is \"visible\"\n * (in term of DOM point of view) in order to get and to trigger the `focus`\n * DOM event. */\n.selectic__input-value {\n position: fixed;\n opacity: 0;\n z-index: -1000;\n top: -100px;\n}\n\n/* XXX: .form-control has been added to this selector to improve priority and\n * override some rules of the original .form-control */\n.selectic-input.form-control {\n display: inline-flex;\n justify-content: space-between;\n overflow: hidden;\n width: 100%;\n min-height: var(--selectic-input-height);\n padding-top: 0;\n padding-bottom: 0;\n padding-left: 5px;\n line-height: calc(var(--selectic-input-height) - 4px);\n color: var(--selectic-color);\n}\n\n.selectic-input__reverse-icon {\n align-self: center;\n margin-right: 3px;\n cursor: default;\n}\n\n.selectic-input__clear-icon {\n align-self: center;\n margin-left: 3px;\n cursor: pointer;\n}\n\n.selectic-input__clear-icon:hover {\n color: var(--selectic-selected-item-color);\n}\n\n.selectic-input.focused {\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n}\n\n.selectic-input.disabled {\n cursor: var(--selectic-cursor-disabled);\n background-color: var(--selectic-bg-disabled);\n}\n\n.selectic-input.disabled .more-items {\n\tbackground-color: var(--selectic-more-items-bg-disabled);\n}\n\n.selectic-input__selected-items {\n display: inline-flex;\n flex-wrap: nowrap;\n align-items: center;\n white-space: nowrap;\n}\n\n.selectic-input__selected-items__placeholder {\n font-style: italic;\n opacity: 0.7;\n white-space: nowrap;\n}\n\n.selectic-icon {\n color: var(--selectic-color);\n text-align: center;\n vertical-align: middle;\n}\n\n.selectic__extended-list {\n position: fixed;\n top: var(--top-position, 0);\n z-index: 2000;\n height: auto;\n max-height: var(--availableSpace);\n background-color: var(--selectic-bg, #ffffff);\n box-shadow: 2px 5px 12px 0px #888888;\n border-radius: 0 0 4px 4px;\n padding: 0;\n width: var(--list-width, 200px);\n min-width: 200px;\n display: grid;\n grid-template-rows: minmax(0, max-content) 1fr;\n}\n\n.selectic__extended-list.selectic-position-top {\n box-shadow: 2px -3px 12px 0px #888888;\n}\n\n.selectic__extended-list__list-container{\n overflow: auto;\n}\n\n.selectic__extended-list__list-items {\n max-height: calc(var(--selectic-input-height) * 10);\n min-width: max-content;\n padding-left: 0;\n}\n\n.selectic-item {\n display: block;\n position: relative;\n box-sizing: border-box;\n padding: 2px 8px;\n color: var(--selectic-item-color, var(--selectic-color));\n min-height: calc(var(--selectic-input-height) - 3px);\n list-style-type: none;\n white-space: nowrap;\n cursor: pointer;\n}\n\n.selectic-item_text {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.selectic-item:not(.selected) .selectic-item_icon {\n opacity: 0;\n}\n\n.selectic-item_text {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.selectic-item__active {\n background-color: var(--selectic-active-item-bg);\n color: var(--selectic-active-item-color);\n}\n\n.selectic-item__active:not(.selected) .selectic-item_icon {\n opacity: 0.2;\n}\n\n.selectic-item__active:not(.selected) .single-select_icon {\n opacity: 0;\n}\n\n.selectic-item__active.selectic-item__disabled:not(.selected) .selectic-item_icon {\n opacity: 0;\n}\n\n.selectic-item__disabled {\n color: var(--selectic-color-disabled);\n background-color: var(--selectic-bg-disabled);\n}\n\n.selectic-item__is-in-group {\n padding-left: 2em;\n}\n\n.selectic-item__is-group {\n font-weight: bold;\n cursor: default;\n}\n\n.selectic-item__is-group.selectable {\n cursor: pointer;\n}\n\n.selectic-item.selected {\n color: var(--selectic-selected-item-color);\n}\n\n.selectic-search-scope {\n color: #e0e0e0;\n left: auto;\n right: 10px;\n}\n\n.selectic .form-control-feedback.fa.selectic-search-scope {\n width: calc(var(--selectic-input-height) * 0.75);\n height: calc(var(--selectic-input-height) * 0.75);\n line-height: calc(var(--selectic-input-height) * 0.75);\n}\n\n.selectic__message {\n text-align: center;\n padding: 3px;\n}\n\n.selectic .filter-panel {\n padding: 3px;\n margin-left: 0px;\n margin-right: 0px;\n background-color: var(--selectic-panel-bg);\n border-bottom: 1px solid var(--selectic-separator-bordercolor);\n}\n\n.selectic .panelclosed {\n max-height: 0px;\n transition: max-height 0.3s ease-out;\n overflow: hidden;\n}\n\n.panelopened {\n max-height: 200px;\n transition: max-height 0.3s ease-in;\n overflow: hidden;\n}\n\n.selectic .filter-panel__input {\n padding-left: 0px;\n padding-right: 0px;\n padding-bottom: 10px;\n margin-bottom: 0px;\n}\n\n.selectic .filter-input {\n height: calc(var(--selectic-input-height) * 0.75);\n}\n\n.selectic .checkbox-filter {\n padding: 5px;\n text-align: center;\n}\n\n.selectic .curtain-handler {\n text-align: center;\n}\n\n.selectic .toggle-selectic {\n margin: 5px;\n padding-left: 0px;\n padding-right: 0px;\n}\n\n.selectic .toggle-boolean-select-all-toggle {\n display: inline;\n margin-right: 15px;\n}\n\n.selectic .toggle-boolean-excluding-toggle {\n display: inline;\n margin-right: 15px;\n}\n\n.selectic .single-value {\n display: grid;\n grid-template: \"value icon\" 1fr / max-content max-content;\n\n padding: 2px;\n padding-left: 5px;\n margin-left: 0;\n margin-right: 5px;\n /* margin top/bottom are mainly to create a gutter in multilines */\n margin-top: 2px;\n margin-bottom: 2px;\n\n border-radius: 3px;\n background-color: var(--selectic-value-bg);\n max-height: calc(var(--selectic-input-height) - 10px);\n max-width: 100%;\n min-width: 30px;\n\n overflow: hidden;\n white-space: nowrap;\n line-height: initial;\n vertical-align: middle;\n}\n\n.selectic .more-items {\n display: inline-block;\n\n padding-left: 5px;\n padding-right: 5px;\n border-radius: 10px;\n\n background-color: var(--selectic-more-items-bg, var(--selectic-info-bg));\n color: var(--selectic-more-items-color, var(--selectic-info-color));\n cursor: help;\n}\n\n.selectic-input__selected-items__value {\n grid-area: value;\n align-self: center;\n justify-self: normal;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.selectic-input__selected-items__icon {\n grid-area: icon;\n align-self: center;\n justify-self: center;\n margin-left: 5px;\n}\n\n.selectic-input__selected-items__icon:hover {\n color: var(--selectic-selected-item-color);\n}\n\n.selectic__label-disabled {\n opacity: 0.5;\n transition: opacity 400ms;\n}\n\n/* XXX: override padding of bootstrap input-sm.\n * This padding introduce a line shift. */\n.selectic.input-sm {\n padding: 0;\n}\n\n/* {{{ overflow multiline */\n\n.selectic--overflow-multiline,\n.selectic--overflow-multiline.form-control,\n.selectic--overflow-multiline .form-control {\n height: unset;\n}\n\n.selectic--overflow-multiline .selectic-input {\n overflow: unset;\n}\n\n.selectic--overflow-multiline .selectic-input__selected-items {\n flex-wrap: wrap;\n}\n\n/* {{{ icons */\n\n@keyframes selectic-animation-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(359deg);\n }\n}\n\n.selectic__icon {\n height: 1em;\n fill: currentColor;\n}\n\n.selectic-spin {\n animation: selectic-animation-spin 2s infinite linear;\n}\n\n/* }}} */\n";
|
|
36
36
|
styleInject(css_248z);
|
|
37
37
|
|
|
38
38
|
/**
|
|
@@ -1537,7 +1537,7 @@ class SelecticStore {
|
|
|
1537
1537
|
/* This icon is from <https://github.com/Templarian/MaterialDesign>,
|
|
1538
1538
|
* distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license
|
|
1539
1539
|
*/
|
|
1540
|
-
var __decorate$
|
|
1540
|
+
var __decorate$e = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
1541
1541
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1542
1542
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1543
1543
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -1549,7 +1549,7 @@ let IconCaretDown = class IconCaretDown extends vtyx.Vue {
|
|
|
1549
1549
|
vtyx.h("path", { d: "M7,10L12,15L17,10H7Z" })));
|
|
1550
1550
|
}
|
|
1551
1551
|
};
|
|
1552
|
-
IconCaretDown = __decorate$
|
|
1552
|
+
IconCaretDown = __decorate$e([
|
|
1553
1553
|
vtyx.Component
|
|
1554
1554
|
], IconCaretDown);
|
|
1555
1555
|
var IconCaretDown$1 = IconCaretDown;
|
|
@@ -1557,7 +1557,7 @@ var IconCaretDown$1 = IconCaretDown;
|
|
|
1557
1557
|
/* This icon is from <https://github.com/Templarian/MaterialDesign>,
|
|
1558
1558
|
* distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license
|
|
1559
1559
|
*/
|
|
1560
|
-
var __decorate$
|
|
1560
|
+
var __decorate$d = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
1561
1561
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1562
1562
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1563
1563
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -1569,7 +1569,7 @@ let IconCaretUp = class IconCaretUp extends vtyx.Vue {
|
|
|
1569
1569
|
vtyx.h("path", { d: "M7,15L12,10L17,15H7Z" })));
|
|
1570
1570
|
}
|
|
1571
1571
|
};
|
|
1572
|
-
IconCaretUp = __decorate$
|
|
1572
|
+
IconCaretUp = __decorate$d([
|
|
1573
1573
|
vtyx.Component
|
|
1574
1574
|
], IconCaretUp);
|
|
1575
1575
|
var IconCaretUp$1 = IconCaretUp;
|
|
@@ -1577,7 +1577,7 @@ var IconCaretUp$1 = IconCaretUp;
|
|
|
1577
1577
|
/* This icon is from <https://github.com/Templarian/MaterialDesign>,
|
|
1578
1578
|
* distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license
|
|
1579
1579
|
*/
|
|
1580
|
-
var __decorate$
|
|
1580
|
+
var __decorate$c = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
1581
1581
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1582
1582
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1583
1583
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -1589,11 +1589,28 @@ let IconCheck = class IconCheck extends vtyx.Vue {
|
|
|
1589
1589
|
vtyx.h("path", { d: "M9,20.42L2.79,14.21L5.62,11.38L9,14.77L18.88,4.88L21.71,7.71L9,20.42Z" })));
|
|
1590
1590
|
}
|
|
1591
1591
|
};
|
|
1592
|
-
IconCheck = __decorate$
|
|
1592
|
+
IconCheck = __decorate$c([
|
|
1593
1593
|
vtyx.Component
|
|
1594
1594
|
], IconCheck);
|
|
1595
1595
|
var IconCheck$1 = IconCheck;
|
|
1596
1596
|
|
|
1597
|
+
var __decorate$b = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
1598
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1599
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1600
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1601
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1602
|
+
};
|
|
1603
|
+
let IconDot = class IconDot extends vtyx.Vue {
|
|
1604
|
+
render() {
|
|
1605
|
+
return (vtyx.h("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" },
|
|
1606
|
+
vtyx.h("circle", { cx: "8", cy: "16", r: "3.5" })));
|
|
1607
|
+
}
|
|
1608
|
+
};
|
|
1609
|
+
IconDot = __decorate$b([
|
|
1610
|
+
vtyx.Component
|
|
1611
|
+
], IconDot);
|
|
1612
|
+
var IconDot$1 = IconDot;
|
|
1613
|
+
|
|
1597
1614
|
/* This icon is from <https://github.com/Templarian/MaterialDesign>,
|
|
1598
1615
|
* distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license
|
|
1599
1616
|
*/
|
|
@@ -1742,6 +1759,8 @@ let Icon = class Icon extends vtyx.Vue {
|
|
|
1742
1759
|
return IconCaretUp$1;
|
|
1743
1760
|
case 'check':
|
|
1744
1761
|
return IconCheck$1;
|
|
1762
|
+
case 'dot':
|
|
1763
|
+
return IconDot$1;
|
|
1745
1764
|
case 'search':
|
|
1746
1765
|
return IconSearch$1;
|
|
1747
1766
|
case 'spinner':
|
|
@@ -2529,6 +2548,7 @@ let List = class List extends vtyx.Vue {
|
|
|
2529
2548
|
'selectic-item__is-group': option.isGroup,
|
|
2530
2549
|
}], style: option.style, title: option.title, key: 'selectic-item-' + (idx + this.startIndex) },
|
|
2531
2550
|
this.isMultiple && (vtyx.h(Icon$1, { icon: "check", store: this.store, class: "selectic-item_icon" })),
|
|
2551
|
+
!this.isMultiple && (vtyx.h(Icon$1, { icon: "dot", store: this.store, class: "selectic-item_icon single-select_icon" })),
|
|
2532
2552
|
option.icon && (option.icon.includes(':')
|
|
2533
2553
|
? vtyx.h(Icon$1, { icon: option.icon, store: this.store })
|
|
2534
2554
|
: vtyx.h(Icon$1, { icon: `raw:${option.icon}`, store: this.store })),
|
|
@@ -2901,6 +2921,17 @@ let Selectic = class Selectic extends vtyx.Vue {
|
|
|
2901
2921
|
}
|
|
2902
2922
|
const target = evt.target;
|
|
2903
2923
|
if (!extendedListEl.contains(target) && !this.$el.contains(target)) {
|
|
2924
|
+
if (keepOpenWithOtherSelectic) {
|
|
2925
|
+
let classSelector = '.selectic';
|
|
2926
|
+
if (typeof keepOpenWithOtherSelectic === 'string') {
|
|
2927
|
+
classSelector += keepOpenWithOtherSelectic;
|
|
2928
|
+
}
|
|
2929
|
+
const parentIsSelectic = target === null || target === void 0 ? void 0 : target.closest(classSelector);
|
|
2930
|
+
if (parentIsSelectic) {
|
|
2931
|
+
/* Do not close current Selectic */
|
|
2932
|
+
return;
|
|
2933
|
+
}
|
|
2934
|
+
}
|
|
2904
2935
|
store.commit('isOpen', false);
|
|
2905
2936
|
}
|
|
2906
2937
|
};
|
package/dist/selectic.esm.js
CHANGED
|
@@ -28,7 +28,7 @@ function styleInject(css, ref) {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
var css_248z = "/* {{{ Variables */\n\n:root {\n --selectic-font-size: 14px;\n --selectic-cursor-disabled: not-allowed;\n\n /* The main element */\n --selectic-color: #555555;\n --selectic-bg: #ffffff;\n\n /* The main element (when disabled) */\n --selectic-color-disabled: #787878;\n --selectic-bg-disabled: #eeeeee;\n\n /* The list */\n --selectic-panel-bg: #f0f0f0;\n --selectic-separator-bordercolor: #cccccc;\n /* --selectic-item-color: var(--selectic-color); /* Can be set in any CSS configuration */\n\n /* The current selected item */\n --selectic-selected-item-color: #428bca;\n\n /* When mouse is over items or by selecting with key arrows */\n --selectic-active-item-color: #ffffff;\n --selectic-active-item-bg: #66afe9;\n\n /* Selected values in main element */\n --selectic-value-bg: #f0f0f0;\n /* --selectic-more-items-bg: var(--selectic-info-bg); /* can be set in any CSS configuration */\n /* --selectic-more-items-color: var(--selectic-info-color); /* can be set in any CSS configuration */\n --selectic-more-items-bg-disabled: #cccccc;\n\n /* Information message */\n --selectic-info-bg: #5bc0de;\n --selectic-info-color: #ffffff;\n\n /* Error message */\n --selectic-error-bg: #b72c29;\n --selectic-error-color: #ffffff;\n\n /* XXX: Currently it is important to keep this size for a correct scroll\n * height estimation */\n --selectic-input-height: 30px;\n}\n\n/* }}} */\n/* {{{ Bootstrap equivalent style */\n\n.selectic .form-control {\n display: block;\n width: 100%;\n height: calc(var(--selectic-input-height) - 2px);\n font-size: var(--selectic-font-size);\n line-height: 1.42857143;\n color: var(--selectic-color);\n background-color: var(--selectic-bg);\n background-image: none;\n border: 1px solid var(--selectic-separator-bordercolor); /* should use a better variable */\n border-radius: 4px;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n.selectic .has-feedback {\n position: relative;\n}\n.selectic .has-feedback .form-control {\n padding-right: calc(var(--selectic-input-height) + 4px);\n}\n\n.selectic .form-control-feedback.fa,\n.selectic .form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: calc(var(--selectic-input-height) + 4px);\n height: calc(var(--selectic-input-height) + 4px);\n line-height: var(--selectic-input-height);\n text-align: center;\n pointer-events: none;\n}\n\n.selectic .alert-info {\n background-color: var(--selectic-info-bg);\n color: var(--selectic-info-color);\n}\n\n.selectic .alert-danger {\n background-color: var(--selectic-error-bg);\n color: var(--selectic-error-color);\n}\n\n/* }}} */\n\n.selectic * {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n.selectic.form-control {\n display: inline-block;\n padding: 0;\n cursor: pointer;\n border: unset;\n}\n\n.has-feedback .selectic__icon-container.form-control-feedback {\n right: 0;\n}\n\n/* The input which contains the selected value\n * XXX: This input should stay hidden behind other elements, but is \"visible\"\n * (in term of DOM point of view) in order to get and to trigger the `focus`\n * DOM event. */\n.selectic__input-value {\n position: fixed;\n opacity: 0;\n z-index: -1000;\n top: -100px;\n}\n\n/* XXX: .form-control has been added to this selector to improve priority and\n * override some rules of the original .form-control */\n.selectic-input.form-control {\n display: inline-flex;\n justify-content: space-between;\n overflow: hidden;\n width: 100%;\n min-height: var(--selectic-input-height);\n padding-top: 0;\n padding-bottom: 0;\n padding-left: 5px;\n line-height: calc(var(--selectic-input-height) - 4px);\n color: var(--selectic-color);\n}\n\n.selectic-input__reverse-icon {\n align-self: center;\n margin-right: 3px;\n cursor: default;\n}\n.selectic-input__clear-icon {\n align-self: center;\n margin-left: 3px;\n cursor: pointer;\n}\n.selectic-input__clear-icon:hover {\n color: var(--selectic-selected-item-color);\n}\n\n.selectic-input.focused {\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n}\n\n.selectic-input.disabled {\n cursor: var(--selectic-cursor-disabled);\n background-color: var(--selectic-bg-disabled);\n}\n.selectic-input.disabled .more-items {\n\tbackground-color: var(--selectic-more-items-bg-disabled);\n}\n\n.selectic-input__selected-items {\n display: inline-flex;\n flex-wrap: nowrap;\n align-items: center;\n white-space: nowrap;\n}\n\n.selectic-input__selected-items__placeholder {\n font-style: italic;\n opacity: 0.7;\n white-space: nowrap;\n}\n\n.selectic-icon {\n color: var(--selectic-color);\n text-align: center;\n vertical-align: middle;\n}\n\n.selectic__extended-list {\n position: fixed;\n top: var(--top-position, 0);\n z-index: 2000;\n height: auto;\n max-height: var(--availableSpace);\n background-color: var(--selectic-bg, #ffffff);\n box-shadow: 2px 5px 12px 0px #888888;\n border-radius: 0 0 4px 4px;\n padding: 0;\n width: var(--list-width, 200px);\n min-width: 200px;\n display: grid;\n grid-template-rows: minmax(0, max-content) 1fr;\n}\n.selectic__extended-list.selectic-position-top {\n box-shadow: 2px -3px 12px 0px #888888;\n}\n.selectic__extended-list__list-container{\n overflow: auto;\n}\n.selectic__extended-list__list-items {\n max-height: calc(var(--selectic-input-height) * 10);\n min-width: max-content;\n padding-left: 0;\n}\n\n.selectic-item {\n display: block;\n position: relative;\n box-sizing: border-box;\n padding: 2px 8px;\n color: var(--selectic-item-color, var(--selectic-color));\n min-height: calc(var(--selectic-input-height) - 3px);\n list-style-type: none;\n white-space: nowrap;\n cursor: pointer;\n}\n\n.selectic-item_text {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.selectic-item:not(.selected) .selectic-item_icon {\n opacity: 0;\n}\n\n.selectic-item_text {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.selectic-item__active {\n background-color: var(--selectic-active-item-bg);\n color: var(--selectic-active-item-color);\n}\n.selectic-item__active:not(.selected) .selectic-item_icon {\n opacity: 0.2;\n}\n.selectic-item__active.selectic-item__disabled:not(.selected) .selectic-item_icon {\n opacity: 0;\n}\n\n.selectic-item__disabled {\n color: var(--selectic-color-disabled);\n background-color: var(--selectic-bg-disabled);\n}\n\n.selectic-item__is-in-group {\n padding-left: 2em;\n}\n\n.selectic-item__is-group {\n font-weight: bold;\n cursor: default;\n}\n\n.selectic-item__is-group.selectable {\n cursor: pointer;\n}\n\n.selectic-item.selected {\n color: var(--selectic-selected-item-color);\n}\n.selectic-search-scope {\n color: #e0e0e0;\n left: auto;\n right: 10px;\n}\n.selectic .form-control-feedback.fa.selectic-search-scope {\n width: calc(var(--selectic-input-height) * 0.75);\n height: calc(var(--selectic-input-height) * 0.75);\n line-height: calc(var(--selectic-input-height) * 0.75);\n}\n\n.selectic__message {\n text-align: center;\n padding: 3px;\n}\n\n.selectic .filter-panel {\n padding: 3px;\n margin-left: 0px;\n margin-right: 0px;\n background-color: var(--selectic-panel-bg);\n border-bottom: 1px solid var(--selectic-separator-bordercolor);\n}\n\n.selectic .panelclosed {\n max-height: 0px;\n transition: max-height 0.3s ease-out;\n overflow: hidden;\n}\n\n.panelopened {\n max-height: 200px;\n transition: max-height 0.3s ease-in;\n overflow: hidden;\n}\n\n.selectic .filter-panel__input {\n padding-left: 0px;\n padding-right: 0px;\n padding-bottom: 10px;\n margin-bottom: 0px;\n}\n.selectic .filter-input {\n height: calc(var(--selectic-input-height) * 0.75);\n}\n\n.selectic .checkbox-filter {\n padding: 5px;\n text-align: center;\n}\n\n.selectic .curtain-handler {\n text-align: center;\n}\n\n.selectic .toggle-selectic {\n margin: 5px;\n padding-left: 0px;\n padding-right: 0px;\n}\n\n.selectic .toggle-boolean-select-all-toggle {\n display: inline;\n margin-right: 15px;\n}\n\n.selectic .toggle-boolean-excluding-toggle {\n display: inline;\n margin-right: 15px;\n}\n\n.selectic .single-value {\n display: grid;\n grid-template: \"value icon\" 1fr / max-content max-content;\n\n padding: 2px;\n padding-left: 5px;\n margin-left: 0;\n margin-right: 5px;\n /* margin top/bottom are mainly to create a gutter in multilines */\n margin-top: 2px;\n margin-bottom: 2px;\n\n border-radius: 3px;\n background-color: var(--selectic-value-bg);\n max-height: calc(var(--selectic-input-height) - 10px);\n max-width: 100%;\n min-width: 30px;\n\n overflow: hidden;\n white-space: nowrap;\n line-height: initial;\n vertical-align: middle;\n}\n\n.selectic .more-items {\n display: inline-block;\n\n padding-left: 5px;\n padding-right: 5px;\n border-radius: 10px;\n\n background-color: var(--selectic-more-items-bg, var(--selectic-info-bg));\n color: var(--selectic-more-items-color, var(--selectic-info-color));\n cursor: help;\n}\n.selectic-input__selected-items__value {\n grid-area: value;\n align-self: center;\n justify-self: normal;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.selectic-input__selected-items__icon {\n grid-area: icon;\n align-self: center;\n justify-self: center;\n margin-left: 5px;\n}\n.selectic-input__selected-items__icon:hover {\n color: var(--selectic-selected-item-color);\n}\n\n.selectic__label-disabled {\n opacity: 0.5;\n transition: opacity 400ms;\n}\n\n/* XXX: override padding of bootstrap input-sm.\n * This padding introduce a line shift. */\n.selectic.input-sm {\n padding: 0;\n}\n\n/* {{{ overflow multiline */\n\n.selectic--overflow-multiline,\n.selectic--overflow-multiline.form-control,\n.selectic--overflow-multiline .form-control {\n height: unset;\n}\n\n.selectic--overflow-multiline .selectic-input {\n overflow: unset;\n}\n\n.selectic--overflow-multiline .selectic-input__selected-items {\n flex-wrap: wrap;\n}\n\n/* {{{ icons */\n\n@keyframes selectic-animation-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(359deg);\n }\n}\n\n.selectic__icon {\n height: 1em;\n fill: currentColor;\n}\n\n.selectic-spin {\n animation: selectic-animation-spin 2s infinite linear;\n}\n\n/* }}} */\n";
|
|
31
|
+
var css_248z = "/* {{{ Variables */\n\n:root {\n --selectic-font-size: 14px;\n --selectic-cursor-disabled: not-allowed;\n\n /* The main element */\n --selectic-color: #555555;\n --selectic-bg: #ffffff;\n\n /* The main element (when disabled) */\n --selectic-color-disabled: #787878;\n --selectic-bg-disabled: #eeeeee;\n\n /* The list */\n --selectic-panel-bg: #f0f0f0;\n --selectic-separator-bordercolor: #cccccc;\n /* --selectic-item-color: var(--selectic-color); /* Can be set in any CSS configuration */\n\n /* The current selected item */\n --selectic-selected-item-color: #428bca;\n\n /* When mouse is over items or by selecting with key arrows */\n --selectic-active-item-color: #ffffff;\n --selectic-active-item-bg: #66afe9;\n\n /* Selected values in main element */\n --selectic-value-bg: #f0f0f0;\n /* --selectic-more-items-bg: var(--selectic-info-bg); /* can be set in any CSS configuration */\n /* --selectic-more-items-color: var(--selectic-info-color); /* can be set in any CSS configuration */\n --selectic-more-items-bg-disabled: #cccccc;\n\n /* Information message */\n --selectic-info-bg: #5bc0de;\n --selectic-info-color: #ffffff;\n\n /* Error message */\n --selectic-error-bg: #b72c29;\n --selectic-error-color: #ffffff;\n\n /* XXX: Currently it is important to keep this size for a correct scroll\n * height estimation */\n --selectic-input-height: 30px;\n}\n\n/* }}} */\n/* {{{ Bootstrap equivalent style */\n\n.selectic .form-control {\n display: block;\n width: 100%;\n height: calc(var(--selectic-input-height) - 2px);\n font-size: var(--selectic-font-size);\n line-height: 1.42857143;\n color: var(--selectic-color);\n background-color: var(--selectic-bg);\n background-image: none;\n border: 1px solid var(--selectic-separator-bordercolor); /* should use a better variable */\n border-radius: 4px;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n\n.selectic .has-feedback {\n position: relative;\n}\n\n.selectic .has-feedback .form-control {\n padding-right: calc(var(--selectic-input-height) + 4px);\n}\n\n.selectic .form-control-feedback.fa,\n.selectic .form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: calc(var(--selectic-input-height) + 4px);\n height: calc(var(--selectic-input-height) + 4px);\n line-height: var(--selectic-input-height);\n text-align: center;\n pointer-events: none;\n}\n\n.selectic .alert-info {\n background-color: var(--selectic-info-bg);\n color: var(--selectic-info-color);\n}\n\n.selectic .alert-danger {\n background-color: var(--selectic-error-bg);\n color: var(--selectic-error-color);\n}\n\n/* }}} */\n\n.selectic * {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n.selectic.form-control {\n display: inline-block;\n padding: 0;\n cursor: pointer;\n border: unset;\n}\n\n.has-feedback .selectic__icon-container.form-control-feedback {\n right: 0;\n}\n\n/* The input which contains the selected value\n * XXX: This input should stay hidden behind other elements, but is \"visible\"\n * (in term of DOM point of view) in order to get and to trigger the `focus`\n * DOM event. */\n.selectic__input-value {\n position: fixed;\n opacity: 0;\n z-index: -1000;\n top: -100px;\n}\n\n/* XXX: .form-control has been added to this selector to improve priority and\n * override some rules of the original .form-control */\n.selectic-input.form-control {\n display: inline-flex;\n justify-content: space-between;\n overflow: hidden;\n width: 100%;\n min-height: var(--selectic-input-height);\n padding-top: 0;\n padding-bottom: 0;\n padding-left: 5px;\n line-height: calc(var(--selectic-input-height) - 4px);\n color: var(--selectic-color);\n}\n\n.selectic-input__reverse-icon {\n align-self: center;\n margin-right: 3px;\n cursor: default;\n}\n\n.selectic-input__clear-icon {\n align-self: center;\n margin-left: 3px;\n cursor: pointer;\n}\n\n.selectic-input__clear-icon:hover {\n color: var(--selectic-selected-item-color);\n}\n\n.selectic-input.focused {\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n}\n\n.selectic-input.disabled {\n cursor: var(--selectic-cursor-disabled);\n background-color: var(--selectic-bg-disabled);\n}\n\n.selectic-input.disabled .more-items {\n\tbackground-color: var(--selectic-more-items-bg-disabled);\n}\n\n.selectic-input__selected-items {\n display: inline-flex;\n flex-wrap: nowrap;\n align-items: center;\n white-space: nowrap;\n}\n\n.selectic-input__selected-items__placeholder {\n font-style: italic;\n opacity: 0.7;\n white-space: nowrap;\n}\n\n.selectic-icon {\n color: var(--selectic-color);\n text-align: center;\n vertical-align: middle;\n}\n\n.selectic__extended-list {\n position: fixed;\n top: var(--top-position, 0);\n z-index: 2000;\n height: auto;\n max-height: var(--availableSpace);\n background-color: var(--selectic-bg, #ffffff);\n box-shadow: 2px 5px 12px 0px #888888;\n border-radius: 0 0 4px 4px;\n padding: 0;\n width: var(--list-width, 200px);\n min-width: 200px;\n display: grid;\n grid-template-rows: minmax(0, max-content) 1fr;\n}\n\n.selectic__extended-list.selectic-position-top {\n box-shadow: 2px -3px 12px 0px #888888;\n}\n\n.selectic__extended-list__list-container{\n overflow: auto;\n}\n\n.selectic__extended-list__list-items {\n max-height: calc(var(--selectic-input-height) * 10);\n min-width: max-content;\n padding-left: 0;\n}\n\n.selectic-item {\n display: block;\n position: relative;\n box-sizing: border-box;\n padding: 2px 8px;\n color: var(--selectic-item-color, var(--selectic-color));\n min-height: calc(var(--selectic-input-height) - 3px);\n list-style-type: none;\n white-space: nowrap;\n cursor: pointer;\n}\n\n.selectic-item_text {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.selectic-item:not(.selected) .selectic-item_icon {\n opacity: 0;\n}\n\n.selectic-item_text {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.selectic-item__active {\n background-color: var(--selectic-active-item-bg);\n color: var(--selectic-active-item-color);\n}\n\n.selectic-item__active:not(.selected) .selectic-item_icon {\n opacity: 0.2;\n}\n\n.selectic-item__active:not(.selected) .single-select_icon {\n opacity: 0;\n}\n\n.selectic-item__active.selectic-item__disabled:not(.selected) .selectic-item_icon {\n opacity: 0;\n}\n\n.selectic-item__disabled {\n color: var(--selectic-color-disabled);\n background-color: var(--selectic-bg-disabled);\n}\n\n.selectic-item__is-in-group {\n padding-left: 2em;\n}\n\n.selectic-item__is-group {\n font-weight: bold;\n cursor: default;\n}\n\n.selectic-item__is-group.selectable {\n cursor: pointer;\n}\n\n.selectic-item.selected {\n color: var(--selectic-selected-item-color);\n}\n\n.selectic-search-scope {\n color: #e0e0e0;\n left: auto;\n right: 10px;\n}\n\n.selectic .form-control-feedback.fa.selectic-search-scope {\n width: calc(var(--selectic-input-height) * 0.75);\n height: calc(var(--selectic-input-height) * 0.75);\n line-height: calc(var(--selectic-input-height) * 0.75);\n}\n\n.selectic__message {\n text-align: center;\n padding: 3px;\n}\n\n.selectic .filter-panel {\n padding: 3px;\n margin-left: 0px;\n margin-right: 0px;\n background-color: var(--selectic-panel-bg);\n border-bottom: 1px solid var(--selectic-separator-bordercolor);\n}\n\n.selectic .panelclosed {\n max-height: 0px;\n transition: max-height 0.3s ease-out;\n overflow: hidden;\n}\n\n.panelopened {\n max-height: 200px;\n transition: max-height 0.3s ease-in;\n overflow: hidden;\n}\n\n.selectic .filter-panel__input {\n padding-left: 0px;\n padding-right: 0px;\n padding-bottom: 10px;\n margin-bottom: 0px;\n}\n\n.selectic .filter-input {\n height: calc(var(--selectic-input-height) * 0.75);\n}\n\n.selectic .checkbox-filter {\n padding: 5px;\n text-align: center;\n}\n\n.selectic .curtain-handler {\n text-align: center;\n}\n\n.selectic .toggle-selectic {\n margin: 5px;\n padding-left: 0px;\n padding-right: 0px;\n}\n\n.selectic .toggle-boolean-select-all-toggle {\n display: inline;\n margin-right: 15px;\n}\n\n.selectic .toggle-boolean-excluding-toggle {\n display: inline;\n margin-right: 15px;\n}\n\n.selectic .single-value {\n display: grid;\n grid-template: \"value icon\" 1fr / max-content max-content;\n\n padding: 2px;\n padding-left: 5px;\n margin-left: 0;\n margin-right: 5px;\n /* margin top/bottom are mainly to create a gutter in multilines */\n margin-top: 2px;\n margin-bottom: 2px;\n\n border-radius: 3px;\n background-color: var(--selectic-value-bg);\n max-height: calc(var(--selectic-input-height) - 10px);\n max-width: 100%;\n min-width: 30px;\n\n overflow: hidden;\n white-space: nowrap;\n line-height: initial;\n vertical-align: middle;\n}\n\n.selectic .more-items {\n display: inline-block;\n\n padding-left: 5px;\n padding-right: 5px;\n border-radius: 10px;\n\n background-color: var(--selectic-more-items-bg, var(--selectic-info-bg));\n color: var(--selectic-more-items-color, var(--selectic-info-color));\n cursor: help;\n}\n\n.selectic-input__selected-items__value {\n grid-area: value;\n align-self: center;\n justify-self: normal;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.selectic-input__selected-items__icon {\n grid-area: icon;\n align-self: center;\n justify-self: center;\n margin-left: 5px;\n}\n\n.selectic-input__selected-items__icon:hover {\n color: var(--selectic-selected-item-color);\n}\n\n.selectic__label-disabled {\n opacity: 0.5;\n transition: opacity 400ms;\n}\n\n/* XXX: override padding of bootstrap input-sm.\n * This padding introduce a line shift. */\n.selectic.input-sm {\n padding: 0;\n}\n\n/* {{{ overflow multiline */\n\n.selectic--overflow-multiline,\n.selectic--overflow-multiline.form-control,\n.selectic--overflow-multiline .form-control {\n height: unset;\n}\n\n.selectic--overflow-multiline .selectic-input {\n overflow: unset;\n}\n\n.selectic--overflow-multiline .selectic-input__selected-items {\n flex-wrap: wrap;\n}\n\n/* {{{ icons */\n\n@keyframes selectic-animation-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(359deg);\n }\n}\n\n.selectic__icon {\n height: 1em;\n fill: currentColor;\n}\n\n.selectic-spin {\n animation: selectic-animation-spin 2s infinite linear;\n}\n\n/* }}} */\n";
|
|
32
32
|
styleInject(css_248z);
|
|
33
33
|
|
|
34
34
|
/**
|
|
@@ -1533,7 +1533,7 @@ class SelecticStore {
|
|
|
1533
1533
|
/* This icon is from <https://github.com/Templarian/MaterialDesign>,
|
|
1534
1534
|
* distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license
|
|
1535
1535
|
*/
|
|
1536
|
-
var __decorate$
|
|
1536
|
+
var __decorate$e = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
1537
1537
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1538
1538
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1539
1539
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -1545,7 +1545,7 @@ let IconCaretDown = class IconCaretDown extends Vue {
|
|
|
1545
1545
|
h("path", { d: "M7,10L12,15L17,10H7Z" })));
|
|
1546
1546
|
}
|
|
1547
1547
|
};
|
|
1548
|
-
IconCaretDown = __decorate$
|
|
1548
|
+
IconCaretDown = __decorate$e([
|
|
1549
1549
|
Component
|
|
1550
1550
|
], IconCaretDown);
|
|
1551
1551
|
var IconCaretDown$1 = IconCaretDown;
|
|
@@ -1553,7 +1553,7 @@ var IconCaretDown$1 = IconCaretDown;
|
|
|
1553
1553
|
/* This icon is from <https://github.com/Templarian/MaterialDesign>,
|
|
1554
1554
|
* distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license
|
|
1555
1555
|
*/
|
|
1556
|
-
var __decorate$
|
|
1556
|
+
var __decorate$d = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
1557
1557
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1558
1558
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1559
1559
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -1565,7 +1565,7 @@ let IconCaretUp = class IconCaretUp extends Vue {
|
|
|
1565
1565
|
h("path", { d: "M7,15L12,10L17,15H7Z" })));
|
|
1566
1566
|
}
|
|
1567
1567
|
};
|
|
1568
|
-
IconCaretUp = __decorate$
|
|
1568
|
+
IconCaretUp = __decorate$d([
|
|
1569
1569
|
Component
|
|
1570
1570
|
], IconCaretUp);
|
|
1571
1571
|
var IconCaretUp$1 = IconCaretUp;
|
|
@@ -1573,7 +1573,7 @@ var IconCaretUp$1 = IconCaretUp;
|
|
|
1573
1573
|
/* This icon is from <https://github.com/Templarian/MaterialDesign>,
|
|
1574
1574
|
* distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license
|
|
1575
1575
|
*/
|
|
1576
|
-
var __decorate$
|
|
1576
|
+
var __decorate$c = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
1577
1577
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1578
1578
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1579
1579
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -1585,11 +1585,28 @@ let IconCheck = class IconCheck extends Vue {
|
|
|
1585
1585
|
h("path", { d: "M9,20.42L2.79,14.21L5.62,11.38L9,14.77L18.88,4.88L21.71,7.71L9,20.42Z" })));
|
|
1586
1586
|
}
|
|
1587
1587
|
};
|
|
1588
|
-
IconCheck = __decorate$
|
|
1588
|
+
IconCheck = __decorate$c([
|
|
1589
1589
|
Component
|
|
1590
1590
|
], IconCheck);
|
|
1591
1591
|
var IconCheck$1 = IconCheck;
|
|
1592
1592
|
|
|
1593
|
+
var __decorate$b = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
1594
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1595
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1596
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1597
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1598
|
+
};
|
|
1599
|
+
let IconDot = class IconDot extends Vue {
|
|
1600
|
+
render() {
|
|
1601
|
+
return (h("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" },
|
|
1602
|
+
h("circle", { cx: "8", cy: "16", r: "3.5" })));
|
|
1603
|
+
}
|
|
1604
|
+
};
|
|
1605
|
+
IconDot = __decorate$b([
|
|
1606
|
+
Component
|
|
1607
|
+
], IconDot);
|
|
1608
|
+
var IconDot$1 = IconDot;
|
|
1609
|
+
|
|
1593
1610
|
/* This icon is from <https://github.com/Templarian/MaterialDesign>,
|
|
1594
1611
|
* distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license
|
|
1595
1612
|
*/
|
|
@@ -1738,6 +1755,8 @@ let Icon = class Icon extends Vue {
|
|
|
1738
1755
|
return IconCaretUp$1;
|
|
1739
1756
|
case 'check':
|
|
1740
1757
|
return IconCheck$1;
|
|
1758
|
+
case 'dot':
|
|
1759
|
+
return IconDot$1;
|
|
1741
1760
|
case 'search':
|
|
1742
1761
|
return IconSearch$1;
|
|
1743
1762
|
case 'spinner':
|
|
@@ -2525,6 +2544,7 @@ let List = class List extends Vue {
|
|
|
2525
2544
|
'selectic-item__is-group': option.isGroup,
|
|
2526
2545
|
}], style: option.style, title: option.title, key: 'selectic-item-' + (idx + this.startIndex) },
|
|
2527
2546
|
this.isMultiple && (h(Icon$1, { icon: "check", store: this.store, class: "selectic-item_icon" })),
|
|
2547
|
+
!this.isMultiple && (h(Icon$1, { icon: "dot", store: this.store, class: "selectic-item_icon single-select_icon" })),
|
|
2528
2548
|
option.icon && (option.icon.includes(':')
|
|
2529
2549
|
? h(Icon$1, { icon: option.icon, store: this.store })
|
|
2530
2550
|
: h(Icon$1, { icon: `raw:${option.icon}`, store: this.store })),
|
|
@@ -2897,6 +2917,17 @@ let Selectic = class Selectic extends Vue {
|
|
|
2897
2917
|
}
|
|
2898
2918
|
const target = evt.target;
|
|
2899
2919
|
if (!extendedListEl.contains(target) && !this.$el.contains(target)) {
|
|
2920
|
+
if (keepOpenWithOtherSelectic) {
|
|
2921
|
+
let classSelector = '.selectic';
|
|
2922
|
+
if (typeof keepOpenWithOtherSelectic === 'string') {
|
|
2923
|
+
classSelector += keepOpenWithOtherSelectic;
|
|
2924
|
+
}
|
|
2925
|
+
const parentIsSelectic = target === null || target === void 0 ? void 0 : target.closest(classSelector);
|
|
2926
|
+
if (parentIsSelectic) {
|
|
2927
|
+
/* Do not close current Selectic */
|
|
2928
|
+
return;
|
|
2929
|
+
}
|
|
2930
|
+
}
|
|
2900
2931
|
store.commit('isOpen', false);
|
|
2901
2932
|
}
|
|
2902
2933
|
};
|
package/doc/params.md
CHANGED
|
@@ -312,12 +312,17 @@ will not be displayed and the filter panel is always open.
|
|
|
312
312
|
|
|
313
313
|
## keepOpenWithOtherSelectic
|
|
314
314
|
|
|
315
|
-
Type: `boolean`
|
|
315
|
+
Type: `boolean | string`
|
|
316
316
|
|
|
317
317
|
Default value: `false`
|
|
318
318
|
|
|
319
|
-
By default, only one selectic component can be open at the same time. So if another Selectic component is open
|
|
320
|
-
|
|
319
|
+
By default, only one selectic component can be open at the same time. So if another Selectic component is open then any previously open component is closed.
|
|
320
|
+
|
|
321
|
+
When `keepOpenWithOtherSelectic` is set to `true`, this component stays open when any other Selectic component opens.
|
|
322
|
+
|
|
323
|
+
When it is set to a `non-empty string`, this component stays open only when another Selectic component that matches the given CSS selector opens.
|
|
324
|
+
|
|
325
|
+
For falsy values, the component always closes when another Selectic opens.
|
|
321
326
|
|
|
322
327
|
Note: This attribute does not prevent closing when user clicks outside the component.
|
|
323
328
|
|
|
@@ -330,6 +335,15 @@ Note: This attribute does not prevent closing when user clicks outside the compo
|
|
|
330
335
|
/>
|
|
331
336
|
```
|
|
332
337
|
|
|
338
|
+
```html
|
|
339
|
+
<selectic
|
|
340
|
+
:params="{
|
|
341
|
+
keepOpenWithOtherSelectic: '.class-name',
|
|
342
|
+
}"
|
|
343
|
+
:options="optionList"
|
|
344
|
+
/>
|
|
345
|
+
```
|
|
346
|
+
|
|
333
347
|
## listPosition
|
|
334
348
|
|
|
335
349
|
Type: `'auto' | 'bottom' | 'top'`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "selectic",
|
|
3
|
-
"version": "3.1
|
|
3
|
+
"version": "3.2.1",
|
|
4
4
|
"description": "Smart Select for VueJS 3.x",
|
|
5
5
|
"main": "dist/selectic.common.js",
|
|
6
6
|
"module": "dist/selectic.esm.js",
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
"vtyx": "4.2.1"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@babel/types": "^7.
|
|
46
|
-
"rollup": "^2.79.
|
|
45
|
+
"@babel/types": "^7.28.1",
|
|
46
|
+
"rollup": "^2.79.2",
|
|
47
47
|
"rollup-plugin-postcss": "^4.0.2",
|
|
48
48
|
"tape": "^4.17.0",
|
|
49
49
|
"typescript": "~4.8"
|
package/src/Icon.tsx
CHANGED
|
@@ -8,6 +8,7 @@ import Store, { IconFamily, IconKey, IconValue } from './Store';
|
|
|
8
8
|
import IconCaretDown from './icons/caret-down';
|
|
9
9
|
import IconCaretUp from './icons/caret-up';
|
|
10
10
|
import IconCheck from './icons/check';
|
|
11
|
+
import IconDot from './icons/dot';
|
|
11
12
|
import IconQuestion from './icons/question';
|
|
12
13
|
import IconSearch from './icons/search';
|
|
13
14
|
import IconSpinner from './icons/spinner';
|
|
@@ -87,6 +88,8 @@ export default class Icon extends Vue<Props> {
|
|
|
87
88
|
return IconCaretUp;
|
|
88
89
|
case 'check':
|
|
89
90
|
return IconCheck;
|
|
91
|
+
case 'dot':
|
|
92
|
+
return IconDot;
|
|
90
93
|
case 'search':
|
|
91
94
|
return IconSearch;
|
|
92
95
|
case 'spinner':
|
package/src/List.tsx
CHANGED
|
@@ -283,6 +283,9 @@ export default class List extends Vue<Props> {
|
|
|
283
283
|
{this.isMultiple && (
|
|
284
284
|
<Icon icon="check" store={this.store} class="selectic-item_icon" />
|
|
285
285
|
)}
|
|
286
|
+
{!this.isMultiple && (
|
|
287
|
+
<Icon icon="dot" store={this.store} class="selectic-item_icon single-select_icon" />
|
|
288
|
+
)}
|
|
286
289
|
{option.icon && (
|
|
287
290
|
option.icon.includes(':')
|
|
288
291
|
? <Icon icon={option.icon} store={this.store} />
|
package/src/Store.tsx
CHANGED
|
@@ -208,8 +208,15 @@ export interface Props {
|
|
|
208
208
|
/** Overwrite default icon family */
|
|
209
209
|
iconFamily?: IconFamily | null;
|
|
210
210
|
|
|
211
|
-
/** Keep this component open if another Selectic component opens
|
|
212
|
-
|
|
211
|
+
/** Keep this component open if another Selectic component opens.
|
|
212
|
+
*
|
|
213
|
+
* - `true` → Keep open for **any** Selectic component.
|
|
214
|
+
* - `string` → Keep open only when the other Selectic matches the given CSS selector.
|
|
215
|
+
* - `false` (default) → Always close when another Selectic opens.
|
|
216
|
+
*
|
|
217
|
+
* An empty string is treated the same as `false`.
|
|
218
|
+
*/
|
|
219
|
+
keepOpenWithOtherSelectic?: boolean | string;
|
|
213
220
|
|
|
214
221
|
/** Selectic configuration */
|
|
215
222
|
params?: SelecticStoreStateParams;
|
|
@@ -378,6 +385,7 @@ export type IconKey =
|
|
|
378
385
|
| 'caret-down'
|
|
379
386
|
| 'caret-up'
|
|
380
387
|
| 'check'
|
|
388
|
+
| 'dot'
|
|
381
389
|
| 'search'
|
|
382
390
|
| 'spinner'
|
|
383
391
|
| 'strikethrough'
|
package/src/css/selectic.css
CHANGED
|
@@ -60,9 +60,11 @@
|
|
|
60
60
|
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
|
61
61
|
transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
|
|
62
62
|
}
|
|
63
|
+
|
|
63
64
|
.selectic .has-feedback {
|
|
64
65
|
position: relative;
|
|
65
66
|
}
|
|
67
|
+
|
|
66
68
|
.selectic .has-feedback .form-control {
|
|
67
69
|
padding-right: calc(var(--selectic-input-height) + 4px);
|
|
68
70
|
}
|
|
@@ -141,11 +143,13 @@
|
|
|
141
143
|
margin-right: 3px;
|
|
142
144
|
cursor: default;
|
|
143
145
|
}
|
|
146
|
+
|
|
144
147
|
.selectic-input__clear-icon {
|
|
145
148
|
align-self: center;
|
|
146
149
|
margin-left: 3px;
|
|
147
150
|
cursor: pointer;
|
|
148
151
|
}
|
|
152
|
+
|
|
149
153
|
.selectic-input__clear-icon:hover {
|
|
150
154
|
color: var(--selectic-selected-item-color);
|
|
151
155
|
}
|
|
@@ -159,6 +163,7 @@
|
|
|
159
163
|
cursor: var(--selectic-cursor-disabled);
|
|
160
164
|
background-color: var(--selectic-bg-disabled);
|
|
161
165
|
}
|
|
166
|
+
|
|
162
167
|
.selectic-input.disabled .more-items {
|
|
163
168
|
background-color: var(--selectic-more-items-bg-disabled);
|
|
164
169
|
}
|
|
@@ -197,12 +202,15 @@
|
|
|
197
202
|
display: grid;
|
|
198
203
|
grid-template-rows: minmax(0, max-content) 1fr;
|
|
199
204
|
}
|
|
205
|
+
|
|
200
206
|
.selectic__extended-list.selectic-position-top {
|
|
201
207
|
box-shadow: 2px -3px 12px 0px #888888;
|
|
202
208
|
}
|
|
209
|
+
|
|
203
210
|
.selectic__extended-list__list-container{
|
|
204
211
|
overflow: auto;
|
|
205
212
|
}
|
|
213
|
+
|
|
206
214
|
.selectic__extended-list__list-items {
|
|
207
215
|
max-height: calc(var(--selectic-input-height) * 10);
|
|
208
216
|
min-width: max-content;
|
|
@@ -241,9 +249,15 @@
|
|
|
241
249
|
background-color: var(--selectic-active-item-bg);
|
|
242
250
|
color: var(--selectic-active-item-color);
|
|
243
251
|
}
|
|
252
|
+
|
|
244
253
|
.selectic-item__active:not(.selected) .selectic-item_icon {
|
|
245
254
|
opacity: 0.2;
|
|
246
255
|
}
|
|
256
|
+
|
|
257
|
+
.selectic-item__active:not(.selected) .single-select_icon {
|
|
258
|
+
opacity: 0;
|
|
259
|
+
}
|
|
260
|
+
|
|
247
261
|
.selectic-item__active.selectic-item__disabled:not(.selected) .selectic-item_icon {
|
|
248
262
|
opacity: 0;
|
|
249
263
|
}
|
|
@@ -269,11 +283,13 @@
|
|
|
269
283
|
.selectic-item.selected {
|
|
270
284
|
color: var(--selectic-selected-item-color);
|
|
271
285
|
}
|
|
286
|
+
|
|
272
287
|
.selectic-search-scope {
|
|
273
288
|
color: #e0e0e0;
|
|
274
289
|
left: auto;
|
|
275
290
|
right: 10px;
|
|
276
291
|
}
|
|
292
|
+
|
|
277
293
|
.selectic .form-control-feedback.fa.selectic-search-scope {
|
|
278
294
|
width: calc(var(--selectic-input-height) * 0.75);
|
|
279
295
|
height: calc(var(--selectic-input-height) * 0.75);
|
|
@@ -311,6 +327,7 @@
|
|
|
311
327
|
padding-bottom: 10px;
|
|
312
328
|
margin-bottom: 0px;
|
|
313
329
|
}
|
|
330
|
+
|
|
314
331
|
.selectic .filter-input {
|
|
315
332
|
height: calc(var(--selectic-input-height) * 0.75);
|
|
316
333
|
}
|
|
@@ -375,6 +392,7 @@
|
|
|
375
392
|
color: var(--selectic-more-items-color, var(--selectic-info-color));
|
|
376
393
|
cursor: help;
|
|
377
394
|
}
|
|
395
|
+
|
|
378
396
|
.selectic-input__selected-items__value {
|
|
379
397
|
grid-area: value;
|
|
380
398
|
align-self: center;
|
|
@@ -390,6 +408,7 @@
|
|
|
390
408
|
justify-self: center;
|
|
391
409
|
margin-left: 5px;
|
|
392
410
|
}
|
|
411
|
+
|
|
393
412
|
.selectic-input__selected-items__icon:hover {
|
|
394
413
|
color: var(--selectic-selected-item-color);
|
|
395
414
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {Vue, Component, h} from 'vtyx';
|
|
2
|
+
|
|
3
|
+
export interface Props {}
|
|
4
|
+
|
|
5
|
+
@Component
|
|
6
|
+
export default class IconDot extends Vue<Props> {
|
|
7
|
+
public render() {
|
|
8
|
+
return (
|
|
9
|
+
<svg
|
|
10
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
>
|
|
13
|
+
<circle cx="8" cy="16" r="3.5" />
|
|
14
|
+
</svg>
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
}
|
package/src/index.tsx
CHANGED
|
@@ -146,8 +146,15 @@ export interface ParamProps {
|
|
|
146
146
|
*/
|
|
147
147
|
optionBehavior?: string;
|
|
148
148
|
|
|
149
|
-
/** Keep this component open if another Selectic component opens
|
|
150
|
-
|
|
149
|
+
/** Keep this component open if another Selectic component opens.
|
|
150
|
+
*
|
|
151
|
+
* - `true` → Keep open for **any** Selectic component.
|
|
152
|
+
* - `string` → Keep open only when the other Selectic matches the given CSS selector.
|
|
153
|
+
* - `false` (default) → Always close when another Selectic opens.
|
|
154
|
+
*
|
|
155
|
+
* An empty string is treated the same as `false`.
|
|
156
|
+
*/
|
|
157
|
+
keepOpenWithOtherSelectic?: boolean | string;
|
|
151
158
|
|
|
152
159
|
/** Avoid click on group name to select all items in this group. */
|
|
153
160
|
disableGroupSelection?: boolean;
|
|
@@ -361,9 +368,24 @@ export default class Selectic extends Vue<Props> {
|
|
|
361
368
|
return;
|
|
362
369
|
}
|
|
363
370
|
|
|
364
|
-
const target = evt.target as
|
|
371
|
+
const target = evt.target as Element | null;
|
|
365
372
|
|
|
366
373
|
if (!extendedListEl.contains(target) && !this.$el.contains(target)) {
|
|
374
|
+
if (keepOpenWithOtherSelectic) {
|
|
375
|
+
let classSelector = '.selectic';
|
|
376
|
+
|
|
377
|
+
if (typeof keepOpenWithOtherSelectic === 'string') {
|
|
378
|
+
classSelector += keepOpenWithOtherSelectic;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
const parentIsSelectic = target?.closest(classSelector);
|
|
382
|
+
|
|
383
|
+
if (parentIsSelectic) {
|
|
384
|
+
/* Do not close current Selectic */
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
367
389
|
store.commit('isOpen', false);
|
|
368
390
|
}
|
|
369
391
|
};
|
package/types/Store.d.ts
CHANGED
|
@@ -135,8 +135,15 @@ export interface Props {
|
|
|
135
135
|
icons?: PartialIcons | null;
|
|
136
136
|
/** Overwrite default icon family */
|
|
137
137
|
iconFamily?: IconFamily | null;
|
|
138
|
-
/** Keep this component open if another Selectic component opens
|
|
139
|
-
|
|
138
|
+
/** Keep this component open if another Selectic component opens.
|
|
139
|
+
*
|
|
140
|
+
* - `true` → Keep open for **any** Selectic component.
|
|
141
|
+
* - `string` → Keep open only when the other Selectic matches the given CSS selector.
|
|
142
|
+
* - `false` (default) → Always close when another Selectic opens.
|
|
143
|
+
*
|
|
144
|
+
* An empty string is treated the same as `false`.
|
|
145
|
+
*/
|
|
146
|
+
keepOpenWithOtherSelectic?: boolean | string;
|
|
140
147
|
/** Selectic configuration */
|
|
141
148
|
params?: SelecticStoreStateParams;
|
|
142
149
|
/** Method to call to fetch extra data */
|
|
@@ -247,7 +254,7 @@ export interface SelecticStoreState {
|
|
|
247
254
|
};
|
|
248
255
|
}
|
|
249
256
|
export declare type IconFamily = '' | 'selectic' | 'font-awesome-4' | 'font-awesome-5' | 'font-awesome-6' | 'raw' | `prefix:${string}`;
|
|
250
|
-
export declare type IconKey = 'caret-down' | 'caret-up' | 'check' | 'search' | 'spinner' | 'strikethrough' | 'times' | 'question' | 'spin';
|
|
257
|
+
export declare type IconKey = 'caret-down' | 'caret-up' | 'check' | 'dot' | 'search' | 'spinner' | 'strikethrough' | 'times' | 'question' | 'spin';
|
|
251
258
|
export declare type IconValue = `selectic:${IconKey}${'' | ':spin'}` | `raw:${string}` | `current:${IconKey}${'' | ':spin'}` | string;
|
|
252
259
|
export declare type Icons = Record<IconKey, IconValue>;
|
|
253
260
|
export declare type PartialIcons = {
|
package/types/index.d.ts
CHANGED
|
@@ -65,8 +65,15 @@ export interface ParamProps {
|
|
|
65
65
|
* Example: "sort-ODE"
|
|
66
66
|
*/
|
|
67
67
|
optionBehavior?: string;
|
|
68
|
-
/** Keep this component open if another Selectic component opens
|
|
69
|
-
|
|
68
|
+
/** Keep this component open if another Selectic component opens.
|
|
69
|
+
*
|
|
70
|
+
* - `true` → Keep open for **any** Selectic component.
|
|
71
|
+
* - `string` → Keep open only when the other Selectic matches the given CSS selector.
|
|
72
|
+
* - `false` (default) → Always close when another Selectic opens.
|
|
73
|
+
*
|
|
74
|
+
* An empty string is treated the same as `false`.
|
|
75
|
+
*/
|
|
76
|
+
keepOpenWithOtherSelectic?: boolean | string;
|
|
70
77
|
/** Avoid click on group name to select all items in this group. */
|
|
71
78
|
disableGroupSelection?: boolean;
|
|
72
79
|
}
|