selective-ui 1.4.1 → 1.4.2
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/selective-ui.css +8 -2
- package/dist/selective-ui.css.map +1 -1
- package/dist/selective-ui.esm.js +158 -23
- package/dist/selective-ui.esm.js.map +1 -1
- package/dist/selective-ui.esm.min.js +2 -2
- package/dist/selective-ui.esm.min.js.br +0 -0
- package/dist/selective-ui.min.css +1 -1
- package/dist/selective-ui.min.css.br +0 -0
- package/dist/selective-ui.min.js +2 -2
- package/dist/selective-ui.min.js.br +0 -0
- package/dist/selective-ui.umd.js +159 -24
- package/dist/selective-ui.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/css/views/option-view.css +2 -2
- package/src/ts/adapter/mixed-adapter.ts +2 -3
- package/src/ts/components/selectbox.ts +19 -4
- package/src/ts/core/base/adapter.ts +24 -2
- package/src/ts/core/base/virtual-recyclerview.ts +89 -8
- package/src/ts/models/option-model.ts +28 -1
- package/src/ts/services/refresher.ts +7 -1
package/dist/selective-ui.css
CHANGED
|
@@ -75,6 +75,7 @@
|
|
|
75
75
|
}
|
|
76
76
|
.seui-MAIN {
|
|
77
77
|
display: inline-block;
|
|
78
|
+
max-width: -webkit-min-content;
|
|
78
79
|
max-width: min-content;
|
|
79
80
|
}
|
|
80
81
|
.seui-MAIN, .seui-MAIN * {
|
|
@@ -170,6 +171,8 @@
|
|
|
170
171
|
border-radius: var(--seui-option-border-radius);
|
|
171
172
|
min-height: 60px;
|
|
172
173
|
|
|
174
|
+
position: -webkit-sticky;
|
|
175
|
+
|
|
173
176
|
position: sticky;
|
|
174
177
|
bottom: 0;
|
|
175
178
|
}
|
|
@@ -196,6 +199,8 @@
|
|
|
196
199
|
border-radius: var(--seui-option-border-radius);
|
|
197
200
|
min-height: 60px;
|
|
198
201
|
|
|
202
|
+
position: -webkit-sticky;
|
|
203
|
+
|
|
199
204
|
position: sticky;
|
|
200
205
|
bottom: 0;
|
|
201
206
|
}
|
|
@@ -355,6 +360,7 @@
|
|
|
355
360
|
font-size: var(--seui-option-crtl-text-size);
|
|
356
361
|
font-family: var(--seui-view-text-style);
|
|
357
362
|
width: unset;
|
|
363
|
+
position: -webkit-sticky;
|
|
358
364
|
position: sticky;
|
|
359
365
|
top: 0px;
|
|
360
366
|
padding: var(--seui-option-padding);
|
|
@@ -437,9 +443,9 @@
|
|
|
437
443
|
|
|
438
444
|
.seui-option-view > label > div {
|
|
439
445
|
width: 100%;
|
|
440
|
-
height: 100%;
|
|
446
|
+
/* height: 100%; */
|
|
441
447
|
|
|
442
|
-
display: flex;
|
|
448
|
+
/* display: flex; */
|
|
443
449
|
overflow: hidden;
|
|
444
450
|
text-overflow: ellipsis;
|
|
445
451
|
white-space: nowrap;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.css","selectbox.css","placeholder.css","directive.css","empty-state.css","loading-state.css","group-view.css","popup.css","searchbox.css","option-handle.css","option-view.css","accessorybox.css"],"names":[],"mappings":"AAAA;IACI,mCAAmC;;IAEnC,+BAA+B;IAC/B,kCAAkC;IAClC,oDAAoD;IACpD,2BAA2B;IAC3B,kCAAkC;IAClC,qCAAqC;IACrC,0CAA0C;IAC1C,8CAA8C;IAC9C,iCAAiC;IACjC,oCAAoC;IACpC,4BAA4B;IAC5B,+BAA+B;IAC/B,8BAA8B;;IAE9B,+BAA+B;IAC/B,kCAAkC;;IAElC,sCAAsC;IACtC,4CAA4C;IAC5C,4CAA4C;IAC5C,wCAAwC;IACxC,kCAAkC;;IAElC,0BAA0B;IAC1B,gCAAgC;;IAEhC,gCAAgC;IAChC,iCAAiC;IACjC,+BAA+B;IAC/B,2CAA2C;IAC3C,yCAAyC;IACzC,uCAAuC;IACvC,wCAAwC;IACxC,yCAAyC;IACzC,qCAAqC;IACrC,kCAAkC;IAClC,8BAA8B;IAC9B,2CAA2C;IAC3C,wCAAwC;IACxC,yCAAyC;IACzC,kDAAkD;IAClD,gDAAgD;IAChD,8CAA8C;IAC9C,+CAA+C;IAC/C,4CAA4C;IAC5C,6CAA6C;IAC7C,kDAAkD;;IAElD,sCAAsC;IACtC,kCAAkC;IAClC,gCAAgC;IAChC,8BAA8B;IAC9B,+BAA+B;;IAE/B,uCAAuC;IACvC,mCAAmC;;IAEnC,6CAA6C;IAC7C,yCAAyC;;IAEzC,+CAA+C;IAC/C,2CAA2C;;IAE3C,qDAAqD;IACrD,iDAAiD;;IAEjD,oCAAoC;;IAEpC,iCAAiC;IACjC,sCAAsC;IACtC,oCAAoC;AACxC;AC1EA;IACI,qBAAqB;IACrB,sBAAsB;AAC1B;AACA;IAGI,sBAAsB;IAGtB,0BAA0B;;IAE1B,SAAS;IACT,UAAU;;IAEV,mBAAmB;AACvB;AACA;IACI,aAAa;AACjB;AACA;IACI,kBAAkB;IAClB,WAAW;IACX,YAAY;;IAEZ,aAAa;IACb,mBAAmB;IACnB,mBAAmB;;IAEnB,mDAAmD;IACnD,gGAAgG;IAChG,6CAA6C;AACjD;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,kEAAkE;IAClE,0DAA0D;IAC1D,sDAAsD;IACtD,sDAAsD;AAC1D;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI;QACI,wDAAwD;IAC5D;AACJ;ACrDA;IACI,mBAAmB;;IAEnB,iBAAiB;IACjB,4BAA4B;IAC5B,uBAAuB;IACvB,mBAAmB;IACnB,oBAAoB;IACpB,gBAAgB;;IAEhB,wCAAwC;IACxC,gDAAgD;IAChD,kCAAkC;AACtC;ACbA;IACI,YAAY;IACZ,kBAAkB;IAClB,qBAAqB;IACrB,sBAAsB;IACtB,4BAA4B;IAC5B,iDAAiD;IACjD,mCAAmC;IACnC,kCAAkC;IAClC,QAAQ;IACR,SAAS;IACT,WAAW;IACX,QAAQ;IACR,wCAAwC;IACxC,UAAU;IACV,oBAAoB;AACxB;AACA;IACI,0CAA0C;AAC9C;ACnBA;IACI,aAAa;IACb,mBAAmB;IACnB,uBAAuB;IACvB,8CAA8C;IAC9C,kBAAkB;IAClB,wCAAwC;IACxC,qCAAqC;IACrC,0CAA0C;IAC1C,iEAAiE;IACjE,+CAA+C;IAC/C,gBAAgB;;IAEhB,gBAAgB;IAChB,SAAS;AACb;;AAEA;IACI,gBAAgB;IAChB,2BAA2B;IAC3B,gBAAgB;AACpB;;AAEA;IACI,aAAa;AACjB;ACzBA;IACI,aAAa;IACb,mBAAmB;IACnB,uBAAuB;IACvB,8CAA8C;IAC9C,kBAAkB;IAClB,wCAAwC;IACxC,qCAAqC;IACrC,0CAA0C;IAC1C,iEAAiE;IACjE,+CAA+C;IAC/C,gBAAgB;;IAEhB,gBAAgB;IAChB,SAAS;AACb;;AAEA;IACI,gBAAgB;IAChB,2BAA2B;IAC3B,gBAAgB;AACpB;;AAEA;IACI,aAAa;AACjB;ACzBA;IACI,aAAa;IACb,sBAAsB;IACtB,QAAQ;AACZ;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,wCAAwC;IACxC,qCAAqC;IACrC,gBAAgB;IAChB,kCAAkC;IAClC,iBAAiB;IACjB,4DAA4D;IAC5D,+CAA+C;IAC/C,sBAAsB;IACtB,YAAY;IACZ,UAAU;IACV,eAAe;IACf,yBAAiB;YAAjB,iBAAiB;;IAEjB,aAAa;IACb,mBAAmB;IACnB,QAAQ;AACZ;;AAEA;IACI,WAAW;IACX,qBAAqB;IACrB,QAAQ;IACR,SAAS;IACT,iCAAiC;IACjC,oCAAoC;IACpC,mCAAmC;IACnC,gCAAgC;IAChC,wBAAwB;AAC5B;;AAEA;IACI,uBAAuB;AAC3B;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,QAAQ;IACR,kBAAkB;AACtB;;AAEA;IACI,aAAa;AACjB;;AAEA,yCAAyC;AACzC;IACI,kBAAkB;IAClB,8BAA8B;IAC9B,gBAAgB;AACpB;AC7DA;IAGI,sBAAsB;;IAEtB,mBAAmB;AACvB;;AAEA;IACI,aAAa;IACb,eAAe;IACf,aAAa;IACb,gBAAgB;IAChB,sBAAsB;;IAEtB,WAAW;IACX,YAAY;IACZ,QAAQ;;IAER,oDAAoD;IACpD,4CAA4C;IAC5C,4CAA4C;IAC5C,4CAA4C;IAC5C,8CAA8C;;IAE9C,gBAAgB;AACpB;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,WAAW;;IAEX,iCAAiC;IACjC,mBAAmB;AACvB;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,WAAW;IACX,QAAQ;AACZ;AC9CA;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;;IAElB,mDAAmD;IACnD,kBAAkB;IAClB,UAAU;IACV,wBAAwB;IACxB,YAAY;AAChB;;AAEA;IACI,WAAW;IACX,yBAAyB;IACzB,SAAS;IACT,wBAAwB;IACxB,yCAAyC;IACzC,kCAAkC;IAClC,qBAAqB;IACrB,iBAAiB;IACjB,gBAAgB;IAChB,wCAAwC;IACxC,gDAAgD;IAChD,gBAAgB;IAChB,uBAAuB;IACvB,mBAAmB;AACvB;AC5BA;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;;IAE9B,4CAA4C;IAC5C,wCAAwC;IACxC,YAAY;IACZ,gBAAgB;IAChB,QAAQ;IACR,mCAAmC;IACnC,UAAU;IACV,0DAA0D;IAC1D,sDAAsD;IACtD,+CAA+C;AACnD;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,qBAAqB;IACrB,eAAe;IACf,yCAAyC;IACzC,gBAAgB;IAChB,uBAAuB;IACvB,mBAAmB;AACvB;;AAEA;IACI,+CAA+C;AACnD;ACjCA;IACI,aAAa;IACb,WAAW;IACX,mBAAmB;IACnB,8BAA8B;IAC9B,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,YAAY;IACZ,QAAQ;IACR,qBAAqB;;IAErB,+CAA+C;IAC/C,+CAA+C;AACnD;;AAEA;IACI,6DAA6D;IAC7D,qDAAqD;AACzD;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,WAAW;IACX,YAAY;IACZ,aAAa;IACb,QAAQ;IACR,wCAAwC;IACxC,qCAAqC;IACrC,kCAAkC;IAClC,mBAAmB;AACvB;;AAEA;IACI,WAAW;IACX,cAAc;IACd,WAAW;IACX,eAAe;IACf,YAAY;IACZ,gBAAgB;IAChB,+CAA+C;IAC/C,iDAAiD;IACjD,oBAAoB;IAEpB,mDAAmD;AACvD;;AAEA;IACI,wCAAwC;IACxC,00BAA00B;IAC10B,kDAAkD;AACtD;;AAEA;IACI,WAAW;IACX,YAAY;;IAEZ,aAAa;IACb,gBAAgB;IAChB,uBAAuB;IACvB,mBAAmB;AACvB;;AAEA;IACI,2BAA2B;AAC/B;;AAEA;IACI,uBAAuB;AAC3B;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;IACI,uBAAuB;AAC3B;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,2DAA2D;IAC3D,mDAAmD;AACvD;;AAEA;IACI,mEAAmE;IACnE,2DAA2D;AAC/D;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,sBAAsB;IACtB,mBAAmB;IACnB,kBAAkB;AACtB;;AAEA;IACI,2BAA2B;AAC/B;;AAEA;IACI,8BAA8B;AAClC;;AAEA;IACI,iBAAiB;IACjB,cAAc;AAClB;;AAEA;IACI,SAAS;IACT,aAAa;AACjB;AClIA;IACI,aAAa;IACb,mBAAmB;IACnB,eAAe;;IAEf,QAAQ;IACR,sCAAsC;IACtC,0CAA0C;IAC1C,4CAA4C;IAC5C,kBAAkB;AACtB;;AAEA;IACI,aAAa;QACT,mBAAmB;;IAEvB,gBAAgB;IAChB,qDAAqD;IACrD,qDAAqD;IACrD,qDAAqD;IACrD,uDAAuD;;IAEvD,iDAAiD;IACjD,+CAA+C;IAC/C,2CAA2C;IAC3C,mCAAmC;AACvC;;AAEA;IACI,kBAAkB;IAClB,eAAe;IACf,8CAA8C;IAC9C,iBAAiB;;IAEjB,4DAA4D;IAC5D,4DAA4D;IAC5D,4DAA4D;IAC5D,8DAA8D;;IAE9D,8CAA8C;IAC9C,kDAAkD;IAClD,gDAAgD;IAChD,oDAAoD;AACxD;;AAEA;IACI,8fAA8f;IAC9f,cAAc;IACd,WAAW;IACX,kBAAkB;IAClB,4BAA4B;IAC5B,kCAAkC;IAClC,WAAW;IACX,YAAY;AAChB;;AAEA;IACI,+CAA+C;IAC/C,uDAAuD;IACvD,mDAAmD;IACnD,gBAAgB;IAChB,uBAAuB;IACvB,mBAAmB;AACvB","file":"selective-ui.css","sourcesContent":[":root {\n --seui-transparent-color: #00000000;\n\n --seui-view-text-color: #121212;\n --seui-view-ro-text-color: #a3a3a3;\n --seui-view-text-style: Arial, Helvetica, sans-serif;\n --seui-view-text-size: 13px;\n --seui-view-mobile-text-size: 16px;\n --seui-view-background-color: #ffffff;\n --seui-view-ro-background-color: #00000029;\n --seui-view-optgroup-background-color: #a3c6e9;\n --seui-view-border-color: #a3a3a3;\n --seui-view-ro-border-color: #bdbdbd;\n --seui-view-border-size: 1px;\n --seui-view-border-style: solid;\n --seui-view-border-radius: 5px;\n\n --seui-directive-color: #000000;\n --seui-directive-ro-color: #a3a3a3;\n\n --seui-option-crtl-text-color: #307ecc;\n --seui-option-crtl-text-color-hover: #ff0000;\n --seui-option-crtl-background-color: #f3f3f3;\n --seui-option-crtl-border-color: #cccccc;\n --seui-option-crtl-text-size: 13px;\n\n --seui-option-padding: 5px;\n --seui-option-border-radius: 5px;\n\n --seui-accessory-max-width: 100%;\n --seui-accessory-max-height: 50px;\n --seui-accessory-padding: 2px 0;\n --seui-accessory-item-border-color: #a3a3a3;\n --seui-accessory-item-border-style: solid;\n --seui-accessory-item-border-width: 1px;\n --seui-accessory-item-border-radius: 3px;\n --seui-accessory-item-background: #f7f7f9;\n --seui-accessory-item-font-size: 11px;\n --seui-accessory-item-padding: 2px;\n --seui-accessory-item-gap: 3px;\n --seui-accessory-item-button-color: #757575;\n --seui-accessory-item-button-width: 16px;\n --seui-accessory-item-button-height: 16px;\n --seui-accessory-item-button-border-color: #a3a3a3;\n --seui-accessory-item-button-border-style: solid;\n --seui-accessory-item-button-border-width: 1px;\n --seui-accessory-item-button-border-radius: 2px;\n --seui-accessory-item-content-color: #307ecc;\n --seui-accessory-item-content-font-size: 11px;\n --seui-accessory-item-content-padding: 0 4px 0 2px;\n\n --seui-popup-background-color: #fbfbfb;\n --seui-popup-border-color: #a3a3a3;\n --seui-popup-border-style: solid;\n --seui-popup-border-width: 1px;\n --seui-popup-border-radius: 6px;\n\n --seui-chkbox-background-color: #ffffff;\n --seui-chkbox-border-color: #8f9194;\n\n --seui-chkbox-hover-background-color: #dbdbdb;\n --seui-chkbox-hover-border-color: #b7b7b7;\n\n --seui-chkbox-checked-background-color: #9dcff8;\n --seui-chkbox-checked-border-color: #9dcff8;\n\n --seui-chkbox-checked-hover-background-color: #9dcff8;\n --seui-chkbox-checked-hover-border-color: #007eff;\n\n --seui-chkbox-checked-color: #0075FF;\n\n --seui-empty-state-color: #999999;\n --seui-empty-state-background: #f9f9f9;\n --seui-empty-state-padding: 10px 5px;\n}",".seui-MAIN {\n display: inline-block;\n max-width: min-content;\n}\n.seui-MAIN, .seui-MAIN * {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n\n margin: 0;\n padding: 0;\n\n line-height: normal;\n}\n.seui-MAIN > select.init {\n display: none;\n}\n.seui-MAIN > .seui-view {\n position: relative;\n width: 100%;\n height: 100%;\n\n display: flex;\n flex-direction: row;\n align-items: center;\n\n background-color: var(--seui-view-background-color);\n border: var(--seui-view-border-style) var(--seui-view-border-size) var(--seui-view-border-color);\n border-radius: var(--seui-view-border-radius);\n}\n\n.seui-MAIN.invisible {\n display: none;\n}\n\n.seui-MAIN.disabled {\n --seui-view-background-color: var(--seui-view-ro-background-color);\n --seui-view-border-color: var(--seui-view-ro-border-color);\n --seui-view-text-color: var(--seui-view-ro-text-color);\n --seui-directive-color: var(--seui-directive-ro-color);\n}\n\n.seui-MAIN .hide {\n display: none;\n}\n\n@supports (-webkit-touch-callout: none) {\n :root {\n --seui-view-text-size: var(--seui-view-mobile-text-size);\n }\n}",".seui-placeholder {\n align-items: center;\n \n margin-left: 10px;\n max-width: calc(100% - 40px);\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n overflow: hidden;\n\n font-family: var(--seui-view-text-style);\n font-size: var(--seui-view-text-size) !important;\n color: var(--seui-view-text-color);\n}",".seui-directive {\n content: \" \";\n position: absolute;\n display: inline-block;\n vertical-align: middle;\n transition: all linear 200ms;\n border-top: 4px solid var(--seui-directive-color);\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n width: 0;\n height: 0;\n right: 10px;\n top: 50%;\n transform: translateY(-50%) rotate(0deg);\n z-index: 1;\n pointer-events: none;\n}\n.seui-directive.drop-down {\n transform: translateY(-50%) rotate(180deg);\n}",".seui-empty-state {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--seui-empty-state-padding, 20px);\n text-align: center;\n font-family: var(--seui-view-text-style);\n font-size: var(--seui-view-text-size);\n color: var(--seui-empty-state-color, #999);\n background-color: var(--seui-empty-state-background, transparent);\n border-radius: var(--seui-option-border-radius);\n min-height: 60px;\n\n position: sticky;\n bottom: 0;\n}\n\n.seui-empty-state.small {\n text-align: left;\n justify-content: flex-start;\n min-height: 30px;\n}\n\n.seui-empty-state.hide {\n display: none;\n}",".seui-loading-state {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--seui-empty-state-padding, 20px);\n text-align: center;\n font-family: var(--seui-view-text-style);\n font-size: var(--seui-view-text-size);\n color: var(--seui-empty-state-color, #999);\n background-color: var(--seui-empty-state-background, transparent);\n border-radius: var(--seui-option-border-radius);\n min-height: 60px;\n\n position: sticky;\n bottom: 0;\n}\n\n.seui-loading-state.small {\n text-align: left;\n justify-content: flex-start;\n min-height: 30px;\n}\n\n.seui-loading-state.hide {\n display: none;\n}",".seui-group {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.seui-group.hide {\n display: none;\n}\n\n.seui-group-header {\n font-family: var(--seui-view-text-style);\n font-size: var(--seui-view-text-size);\n font-weight: 600;\n color: var(--seui-view-text-color);\n padding: 8px 12px;\n background-color: var(--seui-view-optgroup-background-color);\n border-radius: var(--seui-option-border-radius);\n /* position: sticky; */\n /* top: 0; */\n z-index: 1;\n cursor: pointer;\n user-select: none;\n \n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.seui-group-header::before {\n content: \"\";\n display: inline-block;\n width: 0;\n height: 0;\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n border-left: 7px solid currentColor;\n transition: transform 200ms ease;\n transform: rotate(90deg);\n}\n\n.seui-group.collapsed .seui-group-header::before {\n transform: rotate(0deg);\n}\n\n.seui-group-items {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding-left: 16px;\n}\n\n.seui-group.collapsed .seui-group-items {\n display: none;\n}\n\n/* Option trong group có indent nhẹ hơn */\n.seui-group-items .seui-option-view {\n padding-left: 12px;\n border-left: 2px solid #e0e0e0;\n margin-left: 4px;\n}",".seui-popup, .seui-popup * {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n\n line-height: normal;\n}\n\n.seui-popup {\n display: none;\n position: fixed;\n z-index: 9999;\n overflow: hidden;\n flex-direction: column;\n \n height: 0px;\n padding: 2px;\n gap: 2px;\n\n background-color: var(--seui-popup-background-color);\n border-color: var(--seui-popup-border-color);\n border-style: var(--seui-popup-border-style);\n border-width: var(--seui-popup-border-width);\n border-radius: var(--seui-popup-border-radius);\n\n transition: none;\n}\n\n.seui-options-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n\n -webkit-overflow-scrolling: touch;\n touch-action: pan-y;\n}\n\n.seui-options-container.hide {\n display: none;\n}\n\n.seui-options-container .seui-virtual-items {\n display: flex;\n flex-direction: column;\n width: 100%;\n gap: 2px;\n}",".seui-searchbox {\n display: flex;\n flex-direction: row;\n align-items: center;\n position: absolute;\n \n background-color: var(--seui-view-background-color);\n border-radius: 5px;\n z-index: 2;\n width: calc(100% - 30px);\n height: 100%;\n}\n\n.seui-searchbox-input {\n width: 100%;\n height: calc(100% - 10px);\n border: 0;\n outline: none !important;\n background: var(--seui-transparent-color);\n color: var(--seui-view-text-color);\n padding: 0 !important;\n margin-left: 10px;\n text-indent: 0px;\n font-family: var(--seui-view-text-style);\n font-size: var(--seui-view-text-size) !important;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}",".seui-option-handle {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n \n font-size: var(--seui-option-crtl-text-size);\n font-family: var(--seui-view-text-style);\n width: unset;\n position: sticky;\n top: 0px;\n padding: var(--seui-option-padding);\n z-index: 2;\n background-color: var(--seui-option-crtl-background-color);\n border: 1px solid var(--seui-option-crtl-border-color);\n border-radius: var(--seui-option-border-radius);\n}\n\n.seui-option-handle.hide {\n display: none;\n}\n\n.seui-option-handle-item {\n text-decoration: none;\n cursor: pointer;\n color: var(--seui-option-crtl-text-color);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.seui-option-handle-item:hover {\n color: var(--seui-option-crtl-text-color-hover);\n}",".seui-option-view {\n display: flex;\n width: auto;\n flex-direction: row;\n align-items: center !important;\n position: relative;\n border-radius: 4px;\n line-height: normal;\n padding: 5px;\n gap: 7px;\n transition: all 180ms;\n\n background-color: var(--seui-transparent-color);\n border: solid 1px var(--seui-transparent-color);\n}\n\n.seui-option-view.checked {\n background-color: var(--seui-chkbox-checked-background-color);\n border-color: var(--seui-chkbox-checked-border-color);\n}\n\n.seui-option-view > input {\n display: none;\n}\n\n.seui-option-view > label {\n width: 100%;\n height: 100%;\n display: flex;\n gap: 7px;\n font-family: var(--seui-view-text-style);\n font-size: var(--seui-view-text-size);\n color: var(--seui-view-text-color);\n align-items: center;\n}\n\n.seui-option-view.multiple > label::before {\n content: \"\";\n display: block;\n width: 17px;\n min-width: 17px;\n height: 17px;\n min-height: 17px;\n background: var(--seui-chkbox-background-color);\n border: 1px solid var(--seui-chkbox-border-color);\n border-radius: 0.2em;\n -webkit-transition: all 200ms, background 200ms ease-in-out;\n transition: all 200ms, background 200ms ease-in-out;\n}\n\n.seui-option-view.multiple.checked > label::before {\n color: var(--seui-view-background-color);\n background: var(--seui-chkbox-checked-color) url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTciIGhlaWdodD0iMTciIHZpZXdCb3g9IjAgMCAxNyAxNyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjE2ODQ3IDEyLjM4MDhDNy43Nzc3OCAxMi43NzIyIDcuMTQzNTMgMTIuNzcyMiA2Ljc1Mjg0IDEyLjM4MDhMMi43NDQ5OCA4LjM2NDlDMi4zNTU0IDcuOTc0NTQgMi4zNTU0IDcuMzQyNDcgMi43NDQ5OCA2Ljk1MjFMMy4xNjQ1MiA2LjUzMTczQzMuNTU1MiA2LjE0MDI3IDQuMTg5NDYgNi4xNDAyNyA0LjU4MDE0IDYuNTMxNzNMNi43NTI4NCA4LjcwODc4QzcuMTQzNTIgOS4xMDAyNCA3Ljc3Nzc4IDkuMTAwMjQgOC4xNjg0NiA4LjcwODc4TDEyLjI0OTggNC42MTkyM0MxMi42NDA1IDQuMjI3NzcgMTMuMjc0OCA0LjIyNzc3IDEzLjY2NTUgNC42MTkyM0wxNC4wODUgNS4wMzk2QzE0LjQ3NDYgNS40Mjk5NyAxNC40NzQ2IDYuMDYyMDQgMTQuMDg1IDYuNDUyNEw4LjE2ODQ3IDEyLjM4MDhaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K) 50% 40% no-repeat;\n border: 1px solid var(--seui-chkbox-checked-color);\n}\n\n.seui-option-view > label > div {\n width: 100%;\n height: 100%;\n\n display: flex;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.seui-option-view > label.align-horizontal-left > div {\n justify-content: flex-start;\n}\n\n.seui-option-view > label.align-horizontal-center > div {\n justify-content: center;\n}\n\n.seui-option-view > label.align-horizontal-right > div {\n justify-content: flex-end;\n}\n\n.seui-option-view > label.align-vertical-left > div {\n align-items: flex-start;\n}\n\n.seui-option-view > label.align-vertical-center > div {\n align-items: center;\n}\n\n.seui-option-view > label.align-vertical-right > div {\n align-items: flex-end;\n}\n\n.seui-option-view.hide {\n display: none;\n}\n\n.seui-option-view.highlight {\n background-color: var(--seui-chkbox-hover-background-color);\n border-color: var(--seui-chkbox-hover-border-color);\n}\n\n.seui-option-view.highlight.checked {\n background-color: var(--seui-chkbox-checked-hover-background-color);\n border-color: var(--seui-chkbox-checked-hover-border-color);\n}\n\n.seui-option-view.has-image {\n gap: 10px;\n}\n\n.seui-option-view.has-image.image-top {\n flex-direction: column;\n align-items: center;\n text-align: center;\n}\n\n.seui-option-view.has-image.image-right {\n flex-direction: row-reverse;\n}\n\n.seui-option-view.has-image.image-bottom {\n flex-direction: column-reverse;\n}\n\n.seui-option-view .option-image {\n object-fit: cover;\n flex-shrink: 0;\n}\n\n.seui-option-view.multiple.has-image > label::before {\n order: -1;\n display: none;\n}",".seui-accessorybox {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n gap: 2px;\n padding: var(--seui-accessory-padding);\n max-width: var(--seui-accessory-max-width);\n max-height: var(--seui-accessory-max-height);\n overflow-y: scroll;\n}\n\n.accessory-item {\n display: flex;\n align-items: center;\n\n overflow: hidden;\n border-color: var(--seui-accessory-item-border-color);\n border-style: var(--seui-accessory-item-border-style);\n border-width: var(--seui-accessory-item-border-width);\n border-radius: var(--seui-accessory-item-border-radius);\n\n background: var(--seui-accessory-item-background);\n font-size: var(--seui-accessory-item-font-size);\n padding: var(--seui-accessory-item-padding);\n gap: var(--seui-accessory-item-gap);\n}\n\n.accessory-item > .accessory-item-button {\n position: relative;\n cursor: pointer;\n color: var(--seui-accessory-item-button-color);\n font-weight: bold;\n\n border-color: var(--seui-accessory-item-button-border-color);\n border-style: var(--seui-accessory-item-button-border-style);\n border-width: var(--seui-accessory-item-button-border-width);\n border-radius: var(--seui-accessory-item-button-border-radius);\n\n width: var(--seui-accessory-item-button-width);\n min-width: var(--seui-accessory-item-button-width);\n height: var(--seui-accessory-item-button-height);\n min-height: var(--seui-accessory-item-button-height);\n}\n\n.accessory-item > .accessory-item-button::after {\n background: url('data:image/svg+xml,<svg width=\"16\" height=\"16\" xmlns=\"http://www.w3.org/2000/svg\"><g><title>Layer 1</title><g transform=\"rotate(45 8 8)\" stroke=\"null\" id=\"svg_28\"><rect stroke=\"%23000\" rx=\"1\" id=\"svg_20\" height=\"1.41129\" width=\"7.76211\" y=\"7.29435\" x=\"4.11895\" stroke-width=\"0\" fill=\"%234c4c4c\"/><rect stroke=\"%23000\" transform=\"matrix(0 0.705646 -0.705646 0 12.0262 3.97378)\" rx=\"1\" id=\"svg_27\" height=\"2\" width=\"11\" y=\"4.70572\" x=\"0.20572\" stroke-width=\"0\" fill=\"%234c4c4c\"/></g></g></svg>');\n display: block;\n content: \"\";\n position: absolute;\n background-repeat: no-repeat;\n background-position: center center;\n width: 100%;\n height: 100%;\n}\n\n.accessory-item > .accessory-item-content {\n color: var(--seui-accessory-item-content-color);\n font-size: var(--seui-accessory-item-content-font-size);\n padding: var(--seui-accessory-item-content-padding);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}"]}
|
|
1
|
+
{"version":3,"sources":["index.css","selectbox.css","placeholder.css","directive.css","empty-state.css","loading-state.css","group-view.css","popup.css","searchbox.css","option-handle.css","option-view.css","accessorybox.css"],"names":[],"mappings":"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","file":"selective-ui.css","sourcesContent":[":root {\n --seui-transparent-color: #00000000;\n\n --seui-view-text-color: #121212;\n --seui-view-ro-text-color: #a3a3a3;\n --seui-view-text-style: Arial, Helvetica, sans-serif;\n --seui-view-text-size: 13px;\n --seui-view-mobile-text-size: 16px;\n --seui-view-background-color: #ffffff;\n --seui-view-ro-background-color: #00000029;\n --seui-view-optgroup-background-color: #a3c6e9;\n --seui-view-border-color: #a3a3a3;\n --seui-view-ro-border-color: #bdbdbd;\n --seui-view-border-size: 1px;\n --seui-view-border-style: solid;\n --seui-view-border-radius: 5px;\n\n --seui-directive-color: #000000;\n --seui-directive-ro-color: #a3a3a3;\n\n --seui-option-crtl-text-color: #307ecc;\n --seui-option-crtl-text-color-hover: #ff0000;\n --seui-option-crtl-background-color: #f3f3f3;\n --seui-option-crtl-border-color: #cccccc;\n --seui-option-crtl-text-size: 13px;\n\n --seui-option-padding: 5px;\n --seui-option-border-radius: 5px;\n\n --seui-accessory-max-width: 100%;\n --seui-accessory-max-height: 50px;\n --seui-accessory-padding: 2px 0;\n --seui-accessory-item-border-color: #a3a3a3;\n --seui-accessory-item-border-style: solid;\n --seui-accessory-item-border-width: 1px;\n --seui-accessory-item-border-radius: 3px;\n --seui-accessory-item-background: #f7f7f9;\n --seui-accessory-item-font-size: 11px;\n --seui-accessory-item-padding: 2px;\n --seui-accessory-item-gap: 3px;\n --seui-accessory-item-button-color: #757575;\n --seui-accessory-item-button-width: 16px;\n --seui-accessory-item-button-height: 16px;\n --seui-accessory-item-button-border-color: #a3a3a3;\n --seui-accessory-item-button-border-style: solid;\n --seui-accessory-item-button-border-width: 1px;\n --seui-accessory-item-button-border-radius: 2px;\n --seui-accessory-item-content-color: #307ecc;\n --seui-accessory-item-content-font-size: 11px;\n --seui-accessory-item-content-padding: 0 4px 0 2px;\n\n --seui-popup-background-color: #fbfbfb;\n --seui-popup-border-color: #a3a3a3;\n --seui-popup-border-style: solid;\n --seui-popup-border-width: 1px;\n --seui-popup-border-radius: 6px;\n\n --seui-chkbox-background-color: #ffffff;\n --seui-chkbox-border-color: #8f9194;\n\n --seui-chkbox-hover-background-color: #dbdbdb;\n --seui-chkbox-hover-border-color: #b7b7b7;\n\n --seui-chkbox-checked-background-color: #9dcff8;\n --seui-chkbox-checked-border-color: #9dcff8;\n\n --seui-chkbox-checked-hover-background-color: #9dcff8;\n --seui-chkbox-checked-hover-border-color: #007eff;\n\n --seui-chkbox-checked-color: #0075FF;\n\n --seui-empty-state-color: #999999;\n --seui-empty-state-background: #f9f9f9;\n --seui-empty-state-padding: 10px 5px;\n}",".seui-MAIN {\n display: inline-block;\n max-width: min-content;\n}\n.seui-MAIN, .seui-MAIN * {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n\n margin: 0;\n padding: 0;\n\n line-height: normal;\n}\n.seui-MAIN > select.init {\n display: none;\n}\n.seui-MAIN > .seui-view {\n position: relative;\n width: 100%;\n height: 100%;\n\n display: flex;\n flex-direction: row;\n align-items: center;\n\n background-color: var(--seui-view-background-color);\n border: var(--seui-view-border-style) var(--seui-view-border-size) var(--seui-view-border-color);\n border-radius: var(--seui-view-border-radius);\n}\n\n.seui-MAIN.invisible {\n display: none;\n}\n\n.seui-MAIN.disabled {\n --seui-view-background-color: var(--seui-view-ro-background-color);\n --seui-view-border-color: var(--seui-view-ro-border-color);\n --seui-view-text-color: var(--seui-view-ro-text-color);\n --seui-directive-color: var(--seui-directive-ro-color);\n}\n\n.seui-MAIN .hide {\n display: none;\n}\n\n@supports (-webkit-touch-callout: none) {\n :root {\n --seui-view-text-size: var(--seui-view-mobile-text-size);\n }\n}",".seui-placeholder {\n align-items: center;\n \n margin-left: 10px;\n max-width: calc(100% - 40px);\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n overflow: hidden;\n\n font-family: var(--seui-view-text-style);\n font-size: var(--seui-view-text-size) !important;\n color: var(--seui-view-text-color);\n}",".seui-directive {\n content: \" \";\n position: absolute;\n display: inline-block;\n vertical-align: middle;\n transition: all linear 200ms;\n border-top: 4px solid var(--seui-directive-color);\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n width: 0;\n height: 0;\n right: 10px;\n top: 50%;\n transform: translateY(-50%) rotate(0deg);\n z-index: 1;\n pointer-events: none;\n}\n.seui-directive.drop-down {\n transform: translateY(-50%) rotate(180deg);\n}",".seui-empty-state {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--seui-empty-state-padding, 20px);\n text-align: center;\n font-family: var(--seui-view-text-style);\n font-size: var(--seui-view-text-size);\n color: var(--seui-empty-state-color, #999);\n background-color: var(--seui-empty-state-background, transparent);\n border-radius: var(--seui-option-border-radius);\n min-height: 60px;\n\n position: sticky;\n bottom: 0;\n}\n\n.seui-empty-state.small {\n text-align: left;\n justify-content: flex-start;\n min-height: 30px;\n}\n\n.seui-empty-state.hide {\n display: none;\n}",".seui-loading-state {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--seui-empty-state-padding, 20px);\n text-align: center;\n font-family: var(--seui-view-text-style);\n font-size: var(--seui-view-text-size);\n color: var(--seui-empty-state-color, #999);\n background-color: var(--seui-empty-state-background, transparent);\n border-radius: var(--seui-option-border-radius);\n min-height: 60px;\n\n position: sticky;\n bottom: 0;\n}\n\n.seui-loading-state.small {\n text-align: left;\n justify-content: flex-start;\n min-height: 30px;\n}\n\n.seui-loading-state.hide {\n display: none;\n}",".seui-group {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.seui-group.hide {\n display: none;\n}\n\n.seui-group-header {\n font-family: var(--seui-view-text-style);\n font-size: var(--seui-view-text-size);\n font-weight: 600;\n color: var(--seui-view-text-color);\n padding: 8px 12px;\n background-color: var(--seui-view-optgroup-background-color);\n border-radius: var(--seui-option-border-radius);\n /* position: sticky; */\n /* top: 0; */\n z-index: 1;\n cursor: pointer;\n user-select: none;\n \n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.seui-group-header::before {\n content: \"\";\n display: inline-block;\n width: 0;\n height: 0;\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n border-left: 7px solid currentColor;\n transition: transform 200ms ease;\n transform: rotate(90deg);\n}\n\n.seui-group.collapsed .seui-group-header::before {\n transform: rotate(0deg);\n}\n\n.seui-group-items {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding-left: 16px;\n}\n\n.seui-group.collapsed .seui-group-items {\n display: none;\n}\n\n/* Option trong group có indent nhẹ hơn */\n.seui-group-items .seui-option-view {\n padding-left: 12px;\n border-left: 2px solid #e0e0e0;\n margin-left: 4px;\n}",".seui-popup, .seui-popup * {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n\n line-height: normal;\n}\n\n.seui-popup {\n display: none;\n position: fixed;\n z-index: 9999;\n overflow: hidden;\n flex-direction: column;\n \n height: 0px;\n padding: 2px;\n gap: 2px;\n\n background-color: var(--seui-popup-background-color);\n border-color: var(--seui-popup-border-color);\n border-style: var(--seui-popup-border-style);\n border-width: var(--seui-popup-border-width);\n border-radius: var(--seui-popup-border-radius);\n\n transition: none;\n}\n\n.seui-options-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n\n -webkit-overflow-scrolling: touch;\n touch-action: pan-y;\n}\n\n.seui-options-container.hide {\n display: none;\n}\n\n.seui-options-container .seui-virtual-items {\n display: flex;\n flex-direction: column;\n width: 100%;\n gap: 2px;\n}",".seui-searchbox {\n display: flex;\n flex-direction: row;\n align-items: center;\n position: absolute;\n \n background-color: var(--seui-view-background-color);\n border-radius: 5px;\n z-index: 2;\n width: calc(100% - 30px);\n height: 100%;\n}\n\n.seui-searchbox-input {\n width: 100%;\n height: calc(100% - 10px);\n border: 0;\n outline: none !important;\n background: var(--seui-transparent-color);\n color: var(--seui-view-text-color);\n padding: 0 !important;\n margin-left: 10px;\n text-indent: 0px;\n font-family: var(--seui-view-text-style);\n font-size: var(--seui-view-text-size) !important;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}",".seui-option-handle {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n \n font-size: var(--seui-option-crtl-text-size);\n font-family: var(--seui-view-text-style);\n width: unset;\n position: sticky;\n top: 0px;\n padding: var(--seui-option-padding);\n z-index: 2;\n background-color: var(--seui-option-crtl-background-color);\n border: 1px solid var(--seui-option-crtl-border-color);\n border-radius: var(--seui-option-border-radius);\n}\n\n.seui-option-handle.hide {\n display: none;\n}\n\n.seui-option-handle-item {\n text-decoration: none;\n cursor: pointer;\n color: var(--seui-option-crtl-text-color);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.seui-option-handle-item:hover {\n color: var(--seui-option-crtl-text-color-hover);\n}",".seui-option-view {\n display: flex;\n width: auto;\n flex-direction: row;\n align-items: center !important;\n position: relative;\n border-radius: 4px;\n line-height: normal;\n padding: 5px;\n gap: 7px;\n transition: all 180ms;\n\n background-color: var(--seui-transparent-color);\n border: solid 1px var(--seui-transparent-color);\n}\n\n.seui-option-view.checked {\n background-color: var(--seui-chkbox-checked-background-color);\n border-color: var(--seui-chkbox-checked-border-color);\n}\n\n.seui-option-view > input {\n display: none;\n}\n\n.seui-option-view > label {\n width: 100%;\n height: 100%;\n display: flex;\n gap: 7px;\n font-family: var(--seui-view-text-style);\n font-size: var(--seui-view-text-size);\n color: var(--seui-view-text-color);\n align-items: center;\n}\n\n.seui-option-view.multiple > label::before {\n content: \"\";\n display: block;\n width: 17px;\n min-width: 17px;\n height: 17px;\n min-height: 17px;\n background: var(--seui-chkbox-background-color);\n border: 1px solid var(--seui-chkbox-border-color);\n border-radius: 0.2em;\n -webkit-transition: all 200ms, background 200ms ease-in-out;\n transition: all 200ms, background 200ms ease-in-out;\n}\n\n.seui-option-view.multiple.checked > label::before {\n color: var(--seui-view-background-color);\n background: var(--seui-chkbox-checked-color) url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTciIGhlaWdodD0iMTciIHZpZXdCb3g9IjAgMCAxNyAxNyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjE2ODQ3IDEyLjM4MDhDNy43Nzc3OCAxMi43NzIyIDcuMTQzNTMgMTIuNzcyMiA2Ljc1Mjg0IDEyLjM4MDhMMi43NDQ5OCA4LjM2NDlDMi4zNTU0IDcuOTc0NTQgMi4zNTU0IDcuMzQyNDcgMi43NDQ5OCA2Ljk1MjFMMy4xNjQ1MiA2LjUzMTczQzMuNTU1MiA2LjE0MDI3IDQuMTg5NDYgNi4xNDAyNyA0LjU4MDE0IDYuNTMxNzNMNi43NTI4NCA4LjcwODc4QzcuMTQzNTIgOS4xMDAyNCA3Ljc3Nzc4IDkuMTAwMjQgOC4xNjg0NiA4LjcwODc4TDEyLjI0OTggNC42MTkyM0MxMi42NDA1IDQuMjI3NzcgMTMuMjc0OCA0LjIyNzc3IDEzLjY2NTUgNC42MTkyM0wxNC4wODUgNS4wMzk2QzE0LjQ3NDYgNS40Mjk5NyAxNC40NzQ2IDYuMDYyMDQgMTQuMDg1IDYuNDUyNEw4LjE2ODQ3IDEyLjM4MDhaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K) 50% 40% no-repeat;\n border: 1px solid var(--seui-chkbox-checked-color);\n}\n\n.seui-option-view > label > div {\n width: 100%;\n /* height: 100%; */\n\n /* display: flex; */\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.seui-option-view > label.align-horizontal-left > div {\n justify-content: flex-start;\n}\n\n.seui-option-view > label.align-horizontal-center > div {\n justify-content: center;\n}\n\n.seui-option-view > label.align-horizontal-right > div {\n justify-content: flex-end;\n}\n\n.seui-option-view > label.align-vertical-left > div {\n align-items: flex-start;\n}\n\n.seui-option-view > label.align-vertical-center > div {\n align-items: center;\n}\n\n.seui-option-view > label.align-vertical-right > div {\n align-items: flex-end;\n}\n\n.seui-option-view.hide {\n display: none;\n}\n\n.seui-option-view.highlight {\n background-color: var(--seui-chkbox-hover-background-color);\n border-color: var(--seui-chkbox-hover-border-color);\n}\n\n.seui-option-view.highlight.checked {\n background-color: var(--seui-chkbox-checked-hover-background-color);\n border-color: var(--seui-chkbox-checked-hover-border-color);\n}\n\n.seui-option-view.has-image {\n gap: 10px;\n}\n\n.seui-option-view.has-image.image-top {\n flex-direction: column;\n align-items: center;\n text-align: center;\n}\n\n.seui-option-view.has-image.image-right {\n flex-direction: row-reverse;\n}\n\n.seui-option-view.has-image.image-bottom {\n flex-direction: column-reverse;\n}\n\n.seui-option-view .option-image {\n object-fit: cover;\n flex-shrink: 0;\n}\n\n.seui-option-view.multiple.has-image > label::before {\n order: -1;\n display: none;\n}",".seui-accessorybox {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n gap: 2px;\n padding: var(--seui-accessory-padding);\n max-width: var(--seui-accessory-max-width);\n max-height: var(--seui-accessory-max-height);\n overflow-y: scroll;\n}\n\n.accessory-item {\n display: flex;\n align-items: center;\n\n overflow: hidden;\n border-color: var(--seui-accessory-item-border-color);\n border-style: var(--seui-accessory-item-border-style);\n border-width: var(--seui-accessory-item-border-width);\n border-radius: var(--seui-accessory-item-border-radius);\n\n background: var(--seui-accessory-item-background);\n font-size: var(--seui-accessory-item-font-size);\n padding: var(--seui-accessory-item-padding);\n gap: var(--seui-accessory-item-gap);\n}\n\n.accessory-item > .accessory-item-button {\n position: relative;\n cursor: pointer;\n color: var(--seui-accessory-item-button-color);\n font-weight: bold;\n\n border-color: var(--seui-accessory-item-button-border-color);\n border-style: var(--seui-accessory-item-button-border-style);\n border-width: var(--seui-accessory-item-button-border-width);\n border-radius: var(--seui-accessory-item-button-border-radius);\n\n width: var(--seui-accessory-item-button-width);\n min-width: var(--seui-accessory-item-button-width);\n height: var(--seui-accessory-item-button-height);\n min-height: var(--seui-accessory-item-button-height);\n}\n\n.accessory-item > .accessory-item-button::after {\n background: url('data:image/svg+xml,<svg width=\"16\" height=\"16\" xmlns=\"http://www.w3.org/2000/svg\"><g><title>Layer 1</title><g transform=\"rotate(45 8 8)\" stroke=\"null\" id=\"svg_28\"><rect stroke=\"%23000\" rx=\"1\" id=\"svg_20\" height=\"1.41129\" width=\"7.76211\" y=\"7.29435\" x=\"4.11895\" stroke-width=\"0\" fill=\"%234c4c4c\"/><rect stroke=\"%23000\" transform=\"matrix(0 0.705646 -0.705646 0 12.0262 3.97378)\" rx=\"1\" id=\"svg_27\" height=\"2\" width=\"11\" y=\"4.70572\" x=\"0.20572\" stroke-width=\"0\" fill=\"%234c4c4c\"/></g></g></svg>');\n display: block;\n content: \"\";\n position: absolute;\n background-repeat: no-repeat;\n background-position: center center;\n width: 100%;\n height: 100%;\n}\n\n.accessory-item > .accessory-item-content {\n color: var(--seui-accessory-item-content-color);\n font-size: var(--seui-accessory-item-content-font-size);\n padding: var(--seui-accessory-item-content-padding);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}"]}
|
package/dist/selective-ui.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Selective UI v1.4.
|
|
1
|
+
/*! Selective UI v1.4.2 | MIT License */
|
|
2
2
|
/**
|
|
3
3
|
* @class
|
|
4
4
|
*/
|
|
@@ -972,8 +972,9 @@ class Refresher {
|
|
|
972
972
|
*
|
|
973
973
|
* @param select - Native `<select>` element used as the sizing reference and option source.
|
|
974
974
|
* @param view - View panel element whose inline styles will be updated.
|
|
975
|
+
* @param isWidthOnly - If true, only the width will be updated; height will be left unchanged.
|
|
975
976
|
*/
|
|
976
|
-
static resizeBox(select, view) {
|
|
977
|
+
static resizeBox(select, view, isWidthOnly = false) {
|
|
977
978
|
const bindedMap = Libs.getBinderMap(select);
|
|
978
979
|
if (!bindedMap?.options)
|
|
979
980
|
return;
|
|
@@ -993,7 +994,12 @@ class Refresher {
|
|
|
993
994
|
width = options.width;
|
|
994
995
|
if (cfgHeight > 0)
|
|
995
996
|
height = options.height;
|
|
996
|
-
|
|
997
|
+
if (isWidthOnly) {
|
|
998
|
+
Object.assign(view.style, { width, maxWidth: width, minWidth });
|
|
999
|
+
}
|
|
1000
|
+
else {
|
|
1001
|
+
Object.assign(view.style, { width, height, maxWidth: width, minWidth, minHeight });
|
|
1002
|
+
}
|
|
997
1003
|
}
|
|
998
1004
|
}
|
|
999
1005
|
|
|
@@ -4017,6 +4023,32 @@ class OptionModel extends Model {
|
|
|
4017
4023
|
}
|
|
4018
4024
|
iEvents.callEvent([this, value], ...this.privOnInternalSelected);
|
|
4019
4025
|
}
|
|
4026
|
+
/**
|
|
4027
|
+
* Resolved display mask for this option.
|
|
4028
|
+
*
|
|
4029
|
+
* The mask is the primary render label used by the UI layer and supports
|
|
4030
|
+
* optional inline tag translation / rich HTML rendering.
|
|
4031
|
+
*
|
|
4032
|
+
* Source priority:
|
|
4033
|
+
* 1. `data-mask` (`dataset.mask`)
|
|
4034
|
+
* 2. Native `<option>` text content (`targetElement.text`)
|
|
4035
|
+
*
|
|
4036
|
+
* Processing pipeline:
|
|
4037
|
+
* - Raw content is first passed through {@link Libs.tagTranslate}.
|
|
4038
|
+
* - When `options.allowHtml === true`, translated HTML is preserved.
|
|
4039
|
+
* - Otherwise, all markup is stripped via {@link Libs.stripHtml}.
|
|
4040
|
+
*
|
|
4041
|
+
* Unlike {@link text}, this getter prioritizes the custom dataset mask,
|
|
4042
|
+
* making it suitable for display overrides without mutating the native
|
|
4043
|
+
* `<option>` label.
|
|
4044
|
+
*
|
|
4045
|
+
* @returns {string} Render-ready option label.
|
|
4046
|
+
*/
|
|
4047
|
+
get mask() {
|
|
4048
|
+
const raw = this.dataset?.mask ?? this.targetElement?.text ?? "";
|
|
4049
|
+
const translated = Libs.tagTranslate(raw);
|
|
4050
|
+
return this.options.allowHtml ? translated : Libs.stripHtml(translated);
|
|
4051
|
+
}
|
|
4020
4052
|
/**
|
|
4021
4053
|
* Display label for rendering (with tag translation and HTML policy).
|
|
4022
4054
|
*
|
|
@@ -4030,7 +4062,7 @@ class OptionModel extends Model {
|
|
|
4030
4062
|
* @returns {string}
|
|
4031
4063
|
*/
|
|
4032
4064
|
get text() {
|
|
4033
|
-
const raw = this.
|
|
4065
|
+
const raw = this.targetElement?.text ?? this.dataset?.mask ?? "";
|
|
4034
4066
|
const translated = Libs.tagTranslate(raw);
|
|
4035
4067
|
return this.options.allowHtml ? translated : Libs.stripHtml(translated);
|
|
4036
4068
|
}
|
|
@@ -5938,6 +5970,16 @@ class Adapter extends Lifecycle {
|
|
|
5938
5970
|
* This flag is intentionally generic and is coordinated by higher-level components.
|
|
5939
5971
|
*/
|
|
5940
5972
|
this.isSkipEvent = false;
|
|
5973
|
+
/**
|
|
5974
|
+
* Tracks all scheduler keys registered by this adapter instance via
|
|
5975
|
+
* {@link onPropChanging} and {@link onPropChanged}.
|
|
5976
|
+
*
|
|
5977
|
+
* Used during {@link destroy} to clean up all associated pipelines
|
|
5978
|
+
* from the global {@link Libs.callbackScheduler}.
|
|
5979
|
+
*
|
|
5980
|
+
* Keys are deduplicated automatically by Set semantics.
|
|
5981
|
+
*/
|
|
5982
|
+
this.callbackSchedulerList = new Set();
|
|
5941
5983
|
this.items = items;
|
|
5942
5984
|
this.init();
|
|
5943
5985
|
}
|
|
@@ -5979,7 +6021,9 @@ class Adapter extends Lifecycle {
|
|
|
5979
6021
|
* @see {@link changingProp}
|
|
5980
6022
|
*/
|
|
5981
6023
|
onPropChanging(propName, callback) {
|
|
5982
|
-
|
|
6024
|
+
const key = `${propName}ing_${this.adapterKey}`;
|
|
6025
|
+
Libs.callbackScheduler.on(key, callback, { debounce: 0 });
|
|
6026
|
+
this.callbackSchedulerList.add(key);
|
|
5983
6027
|
}
|
|
5984
6028
|
/**
|
|
5985
6029
|
* Registers a **post-change** callback for a property pipeline.
|
|
@@ -5995,9 +6039,11 @@ class Adapter extends Lifecycle {
|
|
|
5995
6039
|
* @see {@link changeProp}
|
|
5996
6040
|
*/
|
|
5997
6041
|
onPropChanged(propName, callback) {
|
|
5998
|
-
|
|
6042
|
+
const key = `${propName}_${this.adapterKey}`;
|
|
6043
|
+
Libs.callbackScheduler.on(key, callback, {
|
|
5999
6044
|
debounce: 0,
|
|
6000
6045
|
});
|
|
6046
|
+
this.callbackSchedulerList.add(key);
|
|
6001
6047
|
}
|
|
6002
6048
|
/**
|
|
6003
6049
|
* Triggers the **post-change** pipeline for a given property.
|
|
@@ -6138,11 +6184,16 @@ class Adapter extends Lifecycle {
|
|
|
6138
6184
|
if (this.is(LifecycleState.DESTROYED)) {
|
|
6139
6185
|
return;
|
|
6140
6186
|
}
|
|
6187
|
+
this.callbackSchedulerList.forEach((key) => {
|
|
6188
|
+
Libs.callbackScheduler.off(key);
|
|
6189
|
+
});
|
|
6190
|
+
this.callbackSchedulerList.clear();
|
|
6141
6191
|
this.recyclerView = null;
|
|
6142
6192
|
this.items.forEach((item) => {
|
|
6143
6193
|
item?.destroy?.();
|
|
6144
6194
|
});
|
|
6145
6195
|
this.items = [];
|
|
6196
|
+
super.destroy();
|
|
6146
6197
|
}
|
|
6147
6198
|
}
|
|
6148
6199
|
|
|
@@ -7442,7 +7493,7 @@ class MixedAdapter extends Adapter {
|
|
|
7442
7493
|
* @returns {void}
|
|
7443
7494
|
*/
|
|
7444
7495
|
resetHighlight() {
|
|
7445
|
-
this.setHighlight(0);
|
|
7496
|
+
this.setHighlight(0, false);
|
|
7446
7497
|
}
|
|
7447
7498
|
/**
|
|
7448
7499
|
* Moves highlight among **visible** options and optionally scrolls the new target into view.
|
|
@@ -7535,11 +7586,10 @@ class MixedAdapter extends Adapter {
|
|
|
7535
7586
|
this.currentHighlightIndex = i;
|
|
7536
7587
|
if (isScrollToView) {
|
|
7537
7588
|
const el = item.view?.getView?.();
|
|
7538
|
-
if (el) {
|
|
7589
|
+
if (el?.isConnected) {
|
|
7539
7590
|
el.scrollIntoView({ block: "center", behavior: "smooth" });
|
|
7540
7591
|
}
|
|
7541
7592
|
else {
|
|
7542
|
-
// If virtualized, ensure the item is rendered before trying to scroll.
|
|
7543
7593
|
this.recyclerView?.ensureRendered?.(i, {
|
|
7544
7594
|
scrollIntoView: true,
|
|
7545
7595
|
});
|
|
@@ -7815,6 +7865,12 @@ class VirtualRecyclerView extends RecyclerView {
|
|
|
7815
7865
|
this.lastRenderCount = 0;
|
|
7816
7866
|
this.suspended = false;
|
|
7817
7867
|
this.resumeResizeAfter = false;
|
|
7868
|
+
/**
|
|
7869
|
+
* When set, scrollToIndex() will be called after the next measureVisibleAndUpdate()
|
|
7870
|
+
* completes and Fenwick has been updated with real heights.
|
|
7871
|
+
* Set by ensureRendered() and cleared after the corrective scroll fires.
|
|
7872
|
+
*/
|
|
7873
|
+
this.pendingScrollToIndex = null;
|
|
7818
7874
|
/** Small cache for sticky header height (≈16ms TTL) to limit layout reads. */
|
|
7819
7875
|
this.stickyCacheTick = 0;
|
|
7820
7876
|
this.stickyCacheVal = 0;
|
|
@@ -7981,9 +8037,19 @@ class VirtualRecyclerView extends RecyclerView {
|
|
|
7981
8037
|
* @returns {void}
|
|
7982
8038
|
*/
|
|
7983
8039
|
ensureRendered(index, opt) {
|
|
7984
|
-
|
|
7985
|
-
|
|
7986
|
-
this.
|
|
8040
|
+
if (!opt?.scrollIntoView) {
|
|
8041
|
+
// No scroll requested — mount only (legacy path, used by probes).
|
|
8042
|
+
this.mountRange(index, index);
|
|
8043
|
+
return;
|
|
8044
|
+
}
|
|
8045
|
+
// Pass 1: instant — brings window to vicinity, triggers measure.
|
|
8046
|
+
// Must be instant so Pass 2 smooth scroll isn't interrupted mid-animation.
|
|
8047
|
+
this.scrollToIndex(index, "instant");
|
|
8048
|
+
// Pass 2: measureVisibleAndUpdate() will consume this and fire a corrective
|
|
8049
|
+
// smooth scroll after Fenwick has been updated with real heights.
|
|
8050
|
+
// rv.resume() is guaranteed to run before this callback (popup.open onComplete
|
|
8051
|
+
// calls rv.resume() first), so the window is already rendered when we arrive here.
|
|
8052
|
+
this.pendingScrollToIndex = index;
|
|
7987
8053
|
}
|
|
7988
8054
|
/**
|
|
7989
8055
|
* Scrolls the scroll container to align the item at `index` into view.
|
|
@@ -7997,15 +8063,25 @@ class VirtualRecyclerView extends RecyclerView {
|
|
|
7997
8063
|
* @param {number} index - Item index to bring into view.
|
|
7998
8064
|
* @returns {void}
|
|
7999
8065
|
*/
|
|
8000
|
-
scrollToIndex(index) {
|
|
8066
|
+
scrollToIndex(index, behavior = "smooth") {
|
|
8001
8067
|
const count = this.adapter?.itemCount?.() ?? 0;
|
|
8002
8068
|
if (count <= 0)
|
|
8003
8069
|
return;
|
|
8004
8070
|
const topInContainer = this.offsetTopOf(index);
|
|
8005
8071
|
const containerTop = this.containerTopInScroll();
|
|
8006
|
-
const
|
|
8072
|
+
const stickyH = this.stickyTopHeight();
|
|
8073
|
+
const viewportH = Math.max(0, this.scrollEl.clientHeight - stickyH);
|
|
8074
|
+
// item height from cache, or current estimate for unmeasured items
|
|
8075
|
+
const est = this.getEstimate();
|
|
8076
|
+
const itemH = this.heightCache[index] ?? est;
|
|
8077
|
+
// Align item center to viewport center (below any sticky header).
|
|
8078
|
+
// viewportH already excludes stickyH, so no further offset needed.
|
|
8079
|
+
// Equivalent to scrollIntoView({ block: "center" }).
|
|
8080
|
+
const centeredTarget = containerTop + topInContainer
|
|
8081
|
+
- (viewportH - itemH) / 3;
|
|
8007
8082
|
const maxScroll = Math.max(0, this.scrollEl.scrollHeight - this.scrollEl.clientHeight);
|
|
8008
|
-
|
|
8083
|
+
const clamped = Math.min(Math.max(0, centeredTarget), maxScroll);
|
|
8084
|
+
this.scrollEl.scrollTo({ top: clamped, behavior });
|
|
8009
8085
|
}
|
|
8010
8086
|
/**
|
|
8011
8087
|
* Disposes runtime resources without destroying the instance.
|
|
@@ -8072,9 +8148,22 @@ class VirtualRecyclerView extends RecyclerView {
|
|
|
8072
8148
|
if (count <= 0)
|
|
8073
8149
|
return;
|
|
8074
8150
|
this.suspend();
|
|
8075
|
-
this.
|
|
8151
|
+
this.pendingScrollToIndex = null;
|
|
8152
|
+
// When visibility changes (search filter applied or cleared), heightCache may
|
|
8153
|
+
// contain heights measured while only a subset of items was visible. Re-using
|
|
8154
|
+
// these partial measurements in rebuildFenwick() causes incorrect prefix sums
|
|
8155
|
+
// (e.g. items measured while scrolled into a filtered window have real heights,
|
|
8156
|
+
// while surrounding items still use estimates — creating an uneven Fenwick).
|
|
8157
|
+
//
|
|
8158
|
+
// Safe fix: clear heightCache entirely on visibility change. The adaptive
|
|
8159
|
+
// estimator will re-seed from probeInitialHeight() on the next render, and
|
|
8160
|
+
// items will be re-measured as they scroll into view.
|
|
8161
|
+
this.heightCache = [];
|
|
8162
|
+
this.measuredSum = 0;
|
|
8163
|
+
this.measuredCount = 0;
|
|
8164
|
+
this.firstMeasured = false;
|
|
8165
|
+
this.resetDOM();
|
|
8076
8166
|
this.cleanupInvisibleItems();
|
|
8077
|
-
this.recomputeMeasuredStats(count);
|
|
8078
8167
|
this.rebuildFenwick(count);
|
|
8079
8168
|
this.start = 0;
|
|
8080
8169
|
this.end = -1;
|
|
@@ -8092,7 +8181,30 @@ class VirtualRecyclerView extends RecyclerView {
|
|
|
8092
8181
|
}
|
|
8093
8182
|
}
|
|
8094
8183
|
/**
|
|
8095
|
-
* Resets
|
|
8184
|
+
* Resets DOM nodes, Fenwick sums, padding, and estimator stats — but preserves {@link heightCache}.
|
|
8185
|
+
*
|
|
8186
|
+
* Use this inside {@link refreshItem} so that {@link recomputeMeasuredStats} can still
|
|
8187
|
+
* read previously measured heights before the Fenwick tree is rebuilt.
|
|
8188
|
+
*
|
|
8189
|
+
* DOM side effects:
|
|
8190
|
+
* - Removes all currently mounted item elements tracked in {@link created}.
|
|
8191
|
+
* - Resets pad heights to `0px`.
|
|
8192
|
+
*
|
|
8193
|
+
* @returns {void}
|
|
8194
|
+
*/
|
|
8195
|
+
resetDOM() {
|
|
8196
|
+
this.created.forEach((el) => el.remove());
|
|
8197
|
+
this.created.clear();
|
|
8198
|
+
this.fenwick.reset(0);
|
|
8199
|
+
this.PadTop.style.height = "0px";
|
|
8200
|
+
this.PadBottom.style.height = "0px";
|
|
8201
|
+
this.firstMeasured = false;
|
|
8202
|
+
}
|
|
8203
|
+
/**
|
|
8204
|
+
* Full reset: clears DOM nodes, Fenwick sums, padding, estimator stats, AND {@link heightCache}.
|
|
8205
|
+
*
|
|
8206
|
+
* Use this for complete teardown (e.g., adapter swap, destroy sequence) where all
|
|
8207
|
+
* cached measurements should be discarded.
|
|
8096
8208
|
*
|
|
8097
8209
|
* DOM side effects:
|
|
8098
8210
|
* - Removes all currently mounted item elements tracked in {@link created}.
|
|
@@ -8446,6 +8558,15 @@ class VirtualRecyclerView extends RecyclerView {
|
|
|
8446
8558
|
this.rebuildFenwick(count);
|
|
8447
8559
|
this.scheduleUpdateWindow();
|
|
8448
8560
|
}
|
|
8561
|
+
// Corrective scroll: if ensureRendered() registered a target index, fire
|
|
8562
|
+
// scrollToIndex() now that real heights are in Fenwick. Clear the target
|
|
8563
|
+
// first to prevent infinite re-triggering (scrollToIndex may cause another
|
|
8564
|
+
// measure cycle, but heights won't change so changed === false next time).
|
|
8565
|
+
if (this.pendingScrollToIndex !== null) {
|
|
8566
|
+
const target = this.pendingScrollToIndex;
|
|
8567
|
+
this.pendingScrollToIndex = null;
|
|
8568
|
+
this.scrollToIndex(target, "smooth");
|
|
8569
|
+
}
|
|
8449
8570
|
}
|
|
8450
8571
|
/**
|
|
8451
8572
|
* Scroll event handler. Schedules a window update on the next frame.
|
|
@@ -9001,6 +9122,7 @@ class SelectBox extends Lifecycle {
|
|
|
9001
9122
|
e.preventDefault();
|
|
9002
9123
|
});
|
|
9003
9124
|
Refresher.resizeBox(select, container.tags.ViewPanel);
|
|
9125
|
+
Refresher.resizeBox(select, this.node, true);
|
|
9004
9126
|
select.classList.add("init");
|
|
9005
9127
|
// initial mask
|
|
9006
9128
|
const action = this.getAction();
|
|
@@ -9316,7 +9438,7 @@ class SelectBox extends Lifecycle {
|
|
|
9316
9438
|
get mask() {
|
|
9317
9439
|
const item_list = [];
|
|
9318
9440
|
superThis.getModelOption(true).forEach((m) => {
|
|
9319
|
-
item_list.push(m.
|
|
9441
|
+
item_list.push(m.mask);
|
|
9320
9442
|
});
|
|
9321
9443
|
return item_list;
|
|
9322
9444
|
},
|
|
@@ -9423,13 +9545,14 @@ class SelectBox extends Lifecycle {
|
|
|
9423
9545
|
return;
|
|
9424
9546
|
// AJAX: load missing values
|
|
9425
9547
|
if (container.searchController?.isAjax?.()) {
|
|
9548
|
+
container.searchController.resetPagination();
|
|
9549
|
+
superThis.hasLoadedOnce = false;
|
|
9426
9550
|
const { missing } = container.searchController.checkMissingValues(value);
|
|
9427
9551
|
if (missing.length > 0) {
|
|
9428
9552
|
(async () => {
|
|
9429
9553
|
if (bindedOptions.loadingfield)
|
|
9430
9554
|
container.popup?.showLoading?.();
|
|
9431
9555
|
try {
|
|
9432
|
-
container.searchController.resetPagination();
|
|
9433
9556
|
const result = await container.searchController.loadByValues(missing);
|
|
9434
9557
|
if (result.success && result.items.length > 0) {
|
|
9435
9558
|
result.items.forEach((it) => {
|
|
@@ -9445,6 +9568,10 @@ class SelectBox extends Lifecycle {
|
|
|
9445
9568
|
}
|
|
9446
9569
|
else if (missing.length > 0) {
|
|
9447
9570
|
console.warn(`Could not load ${missing.length} values:`, missing);
|
|
9571
|
+
setTimeout(() => {
|
|
9572
|
+
container.searchController.resetPagination();
|
|
9573
|
+
this.change(false, trigger);
|
|
9574
|
+
}, 200);
|
|
9448
9575
|
}
|
|
9449
9576
|
}
|
|
9450
9577
|
catch (error) {
|
|
@@ -9520,7 +9647,13 @@ class SelectBox extends Lifecycle {
|
|
|
9520
9647
|
adapter.resetHighlight();
|
|
9521
9648
|
}
|
|
9522
9649
|
this.load();
|
|
9523
|
-
container.popup.open(
|
|
9650
|
+
container.popup.open(() => {
|
|
9651
|
+
setTimeout(() => {
|
|
9652
|
+
if (selectedOption) {
|
|
9653
|
+
adapter.setHighlight(selectedOption, bindedOptions.autoscroll);
|
|
9654
|
+
}
|
|
9655
|
+
}, 100);
|
|
9656
|
+
}, !container.popup.loadingState.isVisible);
|
|
9524
9657
|
container.searchbox.show();
|
|
9525
9658
|
const ViewPanel = container.tags.ViewPanel;
|
|
9526
9659
|
ViewPanel.setAttribute("aria-expanded", "true");
|
|
@@ -9632,7 +9765,9 @@ class SelectBox extends Lifecycle {
|
|
|
9632
9765
|
.search("")
|
|
9633
9766
|
.then(() => {
|
|
9634
9767
|
container.popup?.triggerResize?.();
|
|
9635
|
-
|
|
9768
|
+
setTimeout(() => {
|
|
9769
|
+
resove(getInstance());
|
|
9770
|
+
}, 60);
|
|
9636
9771
|
})
|
|
9637
9772
|
.catch((err) => {
|
|
9638
9773
|
console.error("Initial ajax load error:", err);
|
|
@@ -10604,7 +10739,7 @@ const SECLASS = new Selective();
|
|
|
10604
10739
|
*
|
|
10605
10740
|
* Declared as `const` literal type to enable strict typing and easy tree-shaking.
|
|
10606
10741
|
*/
|
|
10607
|
-
const version = "1.4.
|
|
10742
|
+
const version = "1.4.2";
|
|
10608
10743
|
/**
|
|
10609
10744
|
* Library name identifier.
|
|
10610
10745
|
*
|