@regcheq/ui-vue-2 1.11.0 → 1.12.0
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/index.esm.js +64 -6
- package/dist/index.js +64 -6
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -39174,6 +39174,52 @@ const __vue_component__$1 = /*#__PURE__*/normalizeComponent({
|
|
|
39174
39174
|
//
|
|
39175
39175
|
//
|
|
39176
39176
|
|
|
39177
|
+
|
|
39178
|
+
// Registro de bloqueos compartido entre todas las instancias: guarda cuántos
|
|
39179
|
+
// drawers abiertos dependen de cada contenedor y cuál era su overflow original.
|
|
39180
|
+
// Sin el contador, cerrar un drawer devolvería el scroll aunque siguiera otro
|
|
39181
|
+
// abierto sobre el mismo contenedor.
|
|
39182
|
+
const scrollLocks = new Map();
|
|
39183
|
+
|
|
39184
|
+
// El scroll de fondo no siempre vive en el body: muchas apps scrollean en un
|
|
39185
|
+
// contenedor interno. Se bloquean todos los ancestros scrolleables más el body.
|
|
39186
|
+
function scrollableAncestors(node) {
|
|
39187
|
+
const targets = [];
|
|
39188
|
+
let el = node;
|
|
39189
|
+
while (el && el !== document.body && el.nodeType === 1) {
|
|
39190
|
+
const {
|
|
39191
|
+
overflowY
|
|
39192
|
+
} = window.getComputedStyle(el);
|
|
39193
|
+
if (overflowY === 'auto' || overflowY === 'scroll') targets.push(el);
|
|
39194
|
+
el = el.parentElement;
|
|
39195
|
+
}
|
|
39196
|
+
targets.push(document.body);
|
|
39197
|
+
return targets;
|
|
39198
|
+
}
|
|
39199
|
+
function lockScroll(targets) {
|
|
39200
|
+
targets.forEach(el => {
|
|
39201
|
+
const lock = scrollLocks.get(el);
|
|
39202
|
+
if (lock) {
|
|
39203
|
+
lock.count += 1;
|
|
39204
|
+
return;
|
|
39205
|
+
}
|
|
39206
|
+
scrollLocks.set(el, {
|
|
39207
|
+
count: 1,
|
|
39208
|
+
previousOverflow: el.style.overflow
|
|
39209
|
+
});
|
|
39210
|
+
el.style.overflow = 'hidden';
|
|
39211
|
+
});
|
|
39212
|
+
}
|
|
39213
|
+
function unlockScroll(targets) {
|
|
39214
|
+
targets.forEach(el => {
|
|
39215
|
+
const lock = scrollLocks.get(el);
|
|
39216
|
+
if (!lock) return;
|
|
39217
|
+
lock.count -= 1;
|
|
39218
|
+
if (lock.count > 0) return;
|
|
39219
|
+
el.style.overflow = lock.previousOverflow;
|
|
39220
|
+
scrollLocks.delete(el);
|
|
39221
|
+
});
|
|
39222
|
+
}
|
|
39177
39223
|
var script = {
|
|
39178
39224
|
name: 'Drawer',
|
|
39179
39225
|
props: {
|
|
@@ -39202,21 +39248,33 @@ var script = {
|
|
|
39202
39248
|
}
|
|
39203
39249
|
},
|
|
39204
39250
|
watch: {
|
|
39205
|
-
open
|
|
39206
|
-
|
|
39207
|
-
handler(isOpen) {
|
|
39208
|
-
document.body.style.overflow = isOpen ? 'hidden' : '';
|
|
39209
|
-
}
|
|
39251
|
+
open(isOpen) {
|
|
39252
|
+
this.setScrollLock(isOpen);
|
|
39210
39253
|
}
|
|
39211
39254
|
},
|
|
39255
|
+
created() {
|
|
39256
|
+
this.locked = false;
|
|
39257
|
+
this.scrollTargets = [];
|
|
39258
|
+
},
|
|
39212
39259
|
mounted() {
|
|
39260
|
+
// Se resuelven acá y no en cada apertura: en mounted el drawer todavía está
|
|
39261
|
+
// en su lugar del DOM y los ancestros son los que corresponden.
|
|
39262
|
+
this.scrollTargets = scrollableAncestors(this.$el.parentElement);
|
|
39213
39263
|
document.addEventListener('keydown', this.handleKeydown);
|
|
39264
|
+
if (this.open) this.setScrollLock(true);
|
|
39214
39265
|
},
|
|
39215
39266
|
beforeDestroy() {
|
|
39216
39267
|
document.removeEventListener('keydown', this.handleKeydown);
|
|
39217
|
-
|
|
39268
|
+
this.setScrollLock(false);
|
|
39218
39269
|
},
|
|
39219
39270
|
methods: {
|
|
39271
|
+
// Idempotente: solo actúa cuando cambia el estado, para no descuadrar el
|
|
39272
|
+
// contador del registro compartido.
|
|
39273
|
+
setScrollLock(shouldLock) {
|
|
39274
|
+
if (shouldLock === this.locked) return;
|
|
39275
|
+
this.locked = shouldLock;
|
|
39276
|
+
if (shouldLock) lockScroll(this.scrollTargets);else unlockScroll(this.scrollTargets);
|
|
39277
|
+
},
|
|
39220
39278
|
handleKeydown(e) {
|
|
39221
39279
|
if (e.key === 'Escape' && this.open) {
|
|
39222
39280
|
this.$emit('close');
|
package/dist/index.js
CHANGED
|
@@ -39176,6 +39176,52 @@ const __vue_component__$1 = /*#__PURE__*/normalizeComponent({
|
|
|
39176
39176
|
//
|
|
39177
39177
|
//
|
|
39178
39178
|
|
|
39179
|
+
|
|
39180
|
+
// Registro de bloqueos compartido entre todas las instancias: guarda cuántos
|
|
39181
|
+
// drawers abiertos dependen de cada contenedor y cuál era su overflow original.
|
|
39182
|
+
// Sin el contador, cerrar un drawer devolvería el scroll aunque siguiera otro
|
|
39183
|
+
// abierto sobre el mismo contenedor.
|
|
39184
|
+
const scrollLocks = new Map();
|
|
39185
|
+
|
|
39186
|
+
// El scroll de fondo no siempre vive en el body: muchas apps scrollean en un
|
|
39187
|
+
// contenedor interno. Se bloquean todos los ancestros scrolleables más el body.
|
|
39188
|
+
function scrollableAncestors(node) {
|
|
39189
|
+
const targets = [];
|
|
39190
|
+
let el = node;
|
|
39191
|
+
while (el && el !== document.body && el.nodeType === 1) {
|
|
39192
|
+
const {
|
|
39193
|
+
overflowY
|
|
39194
|
+
} = window.getComputedStyle(el);
|
|
39195
|
+
if (overflowY === 'auto' || overflowY === 'scroll') targets.push(el);
|
|
39196
|
+
el = el.parentElement;
|
|
39197
|
+
}
|
|
39198
|
+
targets.push(document.body);
|
|
39199
|
+
return targets;
|
|
39200
|
+
}
|
|
39201
|
+
function lockScroll(targets) {
|
|
39202
|
+
targets.forEach(el => {
|
|
39203
|
+
const lock = scrollLocks.get(el);
|
|
39204
|
+
if (lock) {
|
|
39205
|
+
lock.count += 1;
|
|
39206
|
+
return;
|
|
39207
|
+
}
|
|
39208
|
+
scrollLocks.set(el, {
|
|
39209
|
+
count: 1,
|
|
39210
|
+
previousOverflow: el.style.overflow
|
|
39211
|
+
});
|
|
39212
|
+
el.style.overflow = 'hidden';
|
|
39213
|
+
});
|
|
39214
|
+
}
|
|
39215
|
+
function unlockScroll(targets) {
|
|
39216
|
+
targets.forEach(el => {
|
|
39217
|
+
const lock = scrollLocks.get(el);
|
|
39218
|
+
if (!lock) return;
|
|
39219
|
+
lock.count -= 1;
|
|
39220
|
+
if (lock.count > 0) return;
|
|
39221
|
+
el.style.overflow = lock.previousOverflow;
|
|
39222
|
+
scrollLocks.delete(el);
|
|
39223
|
+
});
|
|
39224
|
+
}
|
|
39179
39225
|
var script = {
|
|
39180
39226
|
name: 'Drawer',
|
|
39181
39227
|
props: {
|
|
@@ -39204,21 +39250,33 @@ var script = {
|
|
|
39204
39250
|
}
|
|
39205
39251
|
},
|
|
39206
39252
|
watch: {
|
|
39207
|
-
open
|
|
39208
|
-
|
|
39209
|
-
handler(isOpen) {
|
|
39210
|
-
document.body.style.overflow = isOpen ? 'hidden' : '';
|
|
39211
|
-
}
|
|
39253
|
+
open(isOpen) {
|
|
39254
|
+
this.setScrollLock(isOpen);
|
|
39212
39255
|
}
|
|
39213
39256
|
},
|
|
39257
|
+
created() {
|
|
39258
|
+
this.locked = false;
|
|
39259
|
+
this.scrollTargets = [];
|
|
39260
|
+
},
|
|
39214
39261
|
mounted() {
|
|
39262
|
+
// Se resuelven acá y no en cada apertura: en mounted el drawer todavía está
|
|
39263
|
+
// en su lugar del DOM y los ancestros son los que corresponden.
|
|
39264
|
+
this.scrollTargets = scrollableAncestors(this.$el.parentElement);
|
|
39215
39265
|
document.addEventListener('keydown', this.handleKeydown);
|
|
39266
|
+
if (this.open) this.setScrollLock(true);
|
|
39216
39267
|
},
|
|
39217
39268
|
beforeDestroy() {
|
|
39218
39269
|
document.removeEventListener('keydown', this.handleKeydown);
|
|
39219
|
-
|
|
39270
|
+
this.setScrollLock(false);
|
|
39220
39271
|
},
|
|
39221
39272
|
methods: {
|
|
39273
|
+
// Idempotente: solo actúa cuando cambia el estado, para no descuadrar el
|
|
39274
|
+
// contador del registro compartido.
|
|
39275
|
+
setScrollLock(shouldLock) {
|
|
39276
|
+
if (shouldLock === this.locked) return;
|
|
39277
|
+
this.locked = shouldLock;
|
|
39278
|
+
if (shouldLock) lockScroll(this.scrollTargets);else unlockScroll(this.scrollTargets);
|
|
39279
|
+
},
|
|
39222
39280
|
handleKeydown(e) {
|
|
39223
39281
|
if (e.key === 'Escape' && this.open) {
|
|
39224
39282
|
this.$emit('close');
|