overflowed 0.0.0-experimental-20221120013127 → 0.0.0-experimental-20260129225612
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/box-mirror/HTMLBoxMirror.css +15 -0
- package/box-mirror/HTMLBoxMirror.ts +99 -0
- package/content-mirror/HTMLContentMirror.css +3 -0
- package/content-mirror/HTMLContentMirror.ts +43 -0
- package/dist/mod.d.ts +54 -0
- package/dist/mod.d.ts.map +1 -0
- package/dist/mod.js +189 -0
- package/dist/mod.js.map +1 -0
- package/mod.ts +2 -0
- package/overflow-container/HTMLOverflowContainerElement.css +42 -0
- package/overflow-container/HTMLOverflowContainerElement.ts +171 -0
- package/overflow-container/HTMLOverflowContainerEvent.ts +11 -0
- package/package.json +9 -22
- package/Overflowed-53afb67e.d.ts +0 -29
- package/chunk-DATLJDI5.mjs +0 -130
- package/chunk-TXQIKLPR.mjs +0 -0
- package/core/index.d.ts +0 -1
- package/core/index.js +0 -156
- package/core/index.mjs +0 -7
- package/index.d.ts +0 -4
- package/index.js +0 -28
- package/index.mjs +0 -5
- package/react/index.d.ts +0 -17
- package/react/index.js +0 -258
- package/react/index.mjs +0 -108
- package/svelte/index.d.ts +0 -9
- package/svelte/index.js +0 -183
- package/svelte/index.mjs +0 -34
package/package.json
CHANGED
|
@@ -1,23 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
},
|
|
12
|
-
"peerDependenciesMeta": {
|
|
13
|
-
"@types/react": {
|
|
14
|
-
"optional": true
|
|
15
|
-
},
|
|
16
|
-
"react": {
|
|
17
|
-
"optional": true
|
|
18
|
-
},
|
|
19
|
-
"svelte": {
|
|
20
|
-
"optional": true
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
2
|
+
"name": "overflowed",
|
|
3
|
+
"version": "0.0.0-experimental-20260129225612",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": "./dist/mod.js",
|
|
8
|
+
"./package.json": "./package.json"
|
|
9
|
+
}
|
|
10
|
+
}
|
package/Overflowed-53afb67e.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
interface OverflowedOptions {
|
|
2
|
-
axis?: "horizontal" | "vertical";
|
|
3
|
-
onUpdate: (visibleItemCount: number, indicatorElementOffset: number) => void;
|
|
4
|
-
disableIndicatorResizeProtection?: boolean;
|
|
5
|
-
ResizeObserver?: typeof ResizeObserver;
|
|
6
|
-
}
|
|
7
|
-
type Breakpoint = [lowerBound: number, upperBound: number];
|
|
8
|
-
declare class Overflowed {
|
|
9
|
-
readonly axis: "horizontal" | "vertical";
|
|
10
|
-
private onUpdate;
|
|
11
|
-
private resizeObserver;
|
|
12
|
-
private containerElement;
|
|
13
|
-
private indicatorElement;
|
|
14
|
-
private indicatorSize?;
|
|
15
|
-
constructor({ ResizeObserver, axis, onUpdate, }: OverflowedOptions);
|
|
16
|
-
registerContainerElement(containerElement: HTMLElement): void;
|
|
17
|
-
registerIndicatorElement(indicatorElement: HTMLElement): void;
|
|
18
|
-
registerItemElement(itemElement: HTMLElement): void;
|
|
19
|
-
/** Should be called before the container element is unmounted. */
|
|
20
|
-
onContainerElementWillUnmount(): void;
|
|
21
|
-
private getElementSize;
|
|
22
|
-
private getElementOffsetFromRight;
|
|
23
|
-
private getElementOffsetFromLeft;
|
|
24
|
-
private update;
|
|
25
|
-
private requestedUpdate;
|
|
26
|
-
requestUpdate(): void;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export { Breakpoint as B, OverflowedOptions as O, Overflowed as a };
|
package/chunk-DATLJDI5.mjs
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
// modules/core/Overflowed.ts
|
|
2
|
-
var Overflowed = class {
|
|
3
|
-
axis;
|
|
4
|
-
onUpdate;
|
|
5
|
-
resizeObserver;
|
|
6
|
-
containerElement = null;
|
|
7
|
-
indicatorElement = null;
|
|
8
|
-
indicatorSize;
|
|
9
|
-
constructor({
|
|
10
|
-
ResizeObserver = typeof window === "undefined" ? void 0 : window.ResizeObserver,
|
|
11
|
-
axis = "horizontal",
|
|
12
|
-
onUpdate
|
|
13
|
-
}) {
|
|
14
|
-
this.resizeObserver = ResizeObserver && new ResizeObserver((entries) => {
|
|
15
|
-
for (const entry of entries) {
|
|
16
|
-
if (entry.target === this.indicatorElement) {
|
|
17
|
-
if (entry.target.clientWidth > 0 && entry.target.clientWidth !== this.indicatorSize) {
|
|
18
|
-
console.warn("width doesn't match", this.indicatorSize, entry.target.clientWidth);
|
|
19
|
-
}
|
|
20
|
-
this.indicatorSize = entry.target.clientWidth;
|
|
21
|
-
} else if (entry.target.parentNode === this.containerElement) {
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
this.requestUpdate();
|
|
25
|
-
});
|
|
26
|
-
this.axis = axis;
|
|
27
|
-
this.onUpdate = onUpdate;
|
|
28
|
-
}
|
|
29
|
-
registerContainerElement(containerElement) {
|
|
30
|
-
this.containerElement = containerElement;
|
|
31
|
-
this.resizeObserver?.observe(containerElement);
|
|
32
|
-
this.requestUpdate();
|
|
33
|
-
}
|
|
34
|
-
registerIndicatorElement(indicatorElement) {
|
|
35
|
-
this.indicatorElement = indicatorElement;
|
|
36
|
-
this.indicatorSize = indicatorElement.clientWidth;
|
|
37
|
-
this.resizeObserver?.observe(indicatorElement);
|
|
38
|
-
this.requestUpdate();
|
|
39
|
-
}
|
|
40
|
-
registerItemElement(itemElement) {
|
|
41
|
-
this.resizeObserver?.observe(itemElement);
|
|
42
|
-
this.requestUpdate();
|
|
43
|
-
}
|
|
44
|
-
onContainerElementWillUnmount() {
|
|
45
|
-
this.resizeObserver?.disconnect();
|
|
46
|
-
this.containerElement = null;
|
|
47
|
-
this.indicatorElement = null;
|
|
48
|
-
}
|
|
49
|
-
getElementSize(element) {
|
|
50
|
-
if (!element) {
|
|
51
|
-
return 0;
|
|
52
|
-
}
|
|
53
|
-
if (this.axis === "horizontal") {
|
|
54
|
-
return element.offsetWidth;
|
|
55
|
-
}
|
|
56
|
-
return element.offsetHeight;
|
|
57
|
-
}
|
|
58
|
-
getElementOffsetFromRight(element) {
|
|
59
|
-
if (!element) {
|
|
60
|
-
return 0;
|
|
61
|
-
}
|
|
62
|
-
if (this.axis === "horizontal") {
|
|
63
|
-
return this.getElementSize(element.parentElement) - this.getElementSize(element) - element.offsetLeft;
|
|
64
|
-
}
|
|
65
|
-
return this.getElementSize(element.parentElement) - this.getElementSize(element) - element.offsetTop;
|
|
66
|
-
}
|
|
67
|
-
getElementOffsetFromLeft(element) {
|
|
68
|
-
if (!element) {
|
|
69
|
-
return 0;
|
|
70
|
-
}
|
|
71
|
-
if (this.axis === "horizontal") {
|
|
72
|
-
return element.offsetLeft;
|
|
73
|
-
}
|
|
74
|
-
return element.offsetTop;
|
|
75
|
-
}
|
|
76
|
-
update() {
|
|
77
|
-
if (!this.containerElement) {
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
const { direction, paddingBlockStart, paddingBlockEnd, paddingInlineStart, paddingInlineEnd } = window.getComputedStyle(this.containerElement);
|
|
81
|
-
const offsetStart = parseInt(this.axis === "horizontal" ? paddingInlineStart : paddingBlockStart, 10);
|
|
82
|
-
const offsetEnd = parseInt(this.axis === "horizontal" ? paddingInlineEnd : paddingBlockEnd, 10);
|
|
83
|
-
const isRtl = direction === "rtl";
|
|
84
|
-
const containerElementSize = this.getElementSize(this.containerElement) - offsetStart - offsetEnd;
|
|
85
|
-
const indicatorElementSize = this.getElementSize(this.indicatorElement);
|
|
86
|
-
const childrenArray = Array.from(this.containerElement.children).filter((element) => element !== this.indicatorElement).filter(isHtmlElement);
|
|
87
|
-
const getOffset = isRtl ? this.getElementOffsetFromRight.bind(this) : this.getElementOffsetFromLeft.bind(this);
|
|
88
|
-
const breakpoints = [];
|
|
89
|
-
for (const [_index, childElement] of childrenArray.entries()) {
|
|
90
|
-
const childOffset = getOffset(childElement);
|
|
91
|
-
const childSize = this.getElementSize(childElement);
|
|
92
|
-
breakpoints.push([childOffset - offsetStart, childOffset + childSize + offsetEnd]);
|
|
93
|
-
}
|
|
94
|
-
if (breakpoints.length === 0) {
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
const containerIntersectingChildIndex = breakpoints.findIndex(([_start, end]) => end > containerElementSize);
|
|
98
|
-
if (containerIntersectingChildIndex !== -1) {
|
|
99
|
-
const intersectingChildIndex = breakpoints.findIndex(
|
|
100
|
-
([start, end]) => (this.indicatorElement ? start : end) > containerElementSize - indicatorElementSize
|
|
101
|
-
);
|
|
102
|
-
const newVisibleItemCount = Math.max(intersectingChildIndex - (this.indicatorElement ? 1 : 0), 0);
|
|
103
|
-
const newIndicatorElementOffset = breakpoints[newVisibleItemCount]?.[0] + offsetStart;
|
|
104
|
-
this.onUpdate(newVisibleItemCount, newIndicatorElementOffset);
|
|
105
|
-
} else {
|
|
106
|
-
this.onUpdate(breakpoints.length, 0);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
requestedUpdate = false;
|
|
110
|
-
requestUpdate() {
|
|
111
|
-
if (this.requestedUpdate) {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
this.requestedUpdate = true;
|
|
115
|
-
this.update();
|
|
116
|
-
window.requestAnimationFrame(() => {
|
|
117
|
-
this.requestedUpdate = false;
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
var isHtmlElement = (element) => {
|
|
122
|
-
if (element instanceof HTMLElement) {
|
|
123
|
-
return true;
|
|
124
|
-
}
|
|
125
|
-
throw new Error("Element provided is not a HTMLElement.");
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
export {
|
|
129
|
-
Overflowed
|
|
130
|
-
};
|
package/chunk-TXQIKLPR.mjs
DELETED
|
File without changes
|
package/core/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { B as Breakpoint, a as Overflowed, O as OverflowedOptions } from '../Overflowed-53afb67e.js';
|
package/core/index.js
DELETED
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// modules/core/index.ts
|
|
21
|
-
var core_exports = {};
|
|
22
|
-
__export(core_exports, {
|
|
23
|
-
Overflowed: () => Overflowed
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(core_exports);
|
|
26
|
-
|
|
27
|
-
// modules/core/Overflowed.ts
|
|
28
|
-
var Overflowed = class {
|
|
29
|
-
axis;
|
|
30
|
-
onUpdate;
|
|
31
|
-
resizeObserver;
|
|
32
|
-
containerElement = null;
|
|
33
|
-
indicatorElement = null;
|
|
34
|
-
indicatorSize;
|
|
35
|
-
constructor({
|
|
36
|
-
ResizeObserver = typeof window === "undefined" ? void 0 : window.ResizeObserver,
|
|
37
|
-
axis = "horizontal",
|
|
38
|
-
onUpdate
|
|
39
|
-
}) {
|
|
40
|
-
this.resizeObserver = ResizeObserver && new ResizeObserver((entries) => {
|
|
41
|
-
for (const entry of entries) {
|
|
42
|
-
if (entry.target === this.indicatorElement) {
|
|
43
|
-
if (entry.target.clientWidth > 0 && entry.target.clientWidth !== this.indicatorSize) {
|
|
44
|
-
console.warn("width doesn't match", this.indicatorSize, entry.target.clientWidth);
|
|
45
|
-
}
|
|
46
|
-
this.indicatorSize = entry.target.clientWidth;
|
|
47
|
-
} else if (entry.target.parentNode === this.containerElement) {
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
this.requestUpdate();
|
|
51
|
-
});
|
|
52
|
-
this.axis = axis;
|
|
53
|
-
this.onUpdate = onUpdate;
|
|
54
|
-
}
|
|
55
|
-
registerContainerElement(containerElement) {
|
|
56
|
-
this.containerElement = containerElement;
|
|
57
|
-
this.resizeObserver?.observe(containerElement);
|
|
58
|
-
this.requestUpdate();
|
|
59
|
-
}
|
|
60
|
-
registerIndicatorElement(indicatorElement) {
|
|
61
|
-
this.indicatorElement = indicatorElement;
|
|
62
|
-
this.indicatorSize = indicatorElement.clientWidth;
|
|
63
|
-
this.resizeObserver?.observe(indicatorElement);
|
|
64
|
-
this.requestUpdate();
|
|
65
|
-
}
|
|
66
|
-
registerItemElement(itemElement) {
|
|
67
|
-
this.resizeObserver?.observe(itemElement);
|
|
68
|
-
this.requestUpdate();
|
|
69
|
-
}
|
|
70
|
-
onContainerElementWillUnmount() {
|
|
71
|
-
this.resizeObserver?.disconnect();
|
|
72
|
-
this.containerElement = null;
|
|
73
|
-
this.indicatorElement = null;
|
|
74
|
-
}
|
|
75
|
-
getElementSize(element) {
|
|
76
|
-
if (!element) {
|
|
77
|
-
return 0;
|
|
78
|
-
}
|
|
79
|
-
if (this.axis === "horizontal") {
|
|
80
|
-
return element.offsetWidth;
|
|
81
|
-
}
|
|
82
|
-
return element.offsetHeight;
|
|
83
|
-
}
|
|
84
|
-
getElementOffsetFromRight(element) {
|
|
85
|
-
if (!element) {
|
|
86
|
-
return 0;
|
|
87
|
-
}
|
|
88
|
-
if (this.axis === "horizontal") {
|
|
89
|
-
return this.getElementSize(element.parentElement) - this.getElementSize(element) - element.offsetLeft;
|
|
90
|
-
}
|
|
91
|
-
return this.getElementSize(element.parentElement) - this.getElementSize(element) - element.offsetTop;
|
|
92
|
-
}
|
|
93
|
-
getElementOffsetFromLeft(element) {
|
|
94
|
-
if (!element) {
|
|
95
|
-
return 0;
|
|
96
|
-
}
|
|
97
|
-
if (this.axis === "horizontal") {
|
|
98
|
-
return element.offsetLeft;
|
|
99
|
-
}
|
|
100
|
-
return element.offsetTop;
|
|
101
|
-
}
|
|
102
|
-
update() {
|
|
103
|
-
if (!this.containerElement) {
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
const { direction, paddingBlockStart, paddingBlockEnd, paddingInlineStart, paddingInlineEnd } = window.getComputedStyle(this.containerElement);
|
|
107
|
-
const offsetStart = parseInt(this.axis === "horizontal" ? paddingInlineStart : paddingBlockStart, 10);
|
|
108
|
-
const offsetEnd = parseInt(this.axis === "horizontal" ? paddingInlineEnd : paddingBlockEnd, 10);
|
|
109
|
-
const isRtl = direction === "rtl";
|
|
110
|
-
const containerElementSize = this.getElementSize(this.containerElement) - offsetStart - offsetEnd;
|
|
111
|
-
const indicatorElementSize = this.getElementSize(this.indicatorElement);
|
|
112
|
-
const childrenArray = Array.from(this.containerElement.children).filter((element) => element !== this.indicatorElement).filter(isHtmlElement);
|
|
113
|
-
const getOffset = isRtl ? this.getElementOffsetFromRight.bind(this) : this.getElementOffsetFromLeft.bind(this);
|
|
114
|
-
const breakpoints = [];
|
|
115
|
-
for (const [_index, childElement] of childrenArray.entries()) {
|
|
116
|
-
const childOffset = getOffset(childElement);
|
|
117
|
-
const childSize = this.getElementSize(childElement);
|
|
118
|
-
breakpoints.push([childOffset - offsetStart, childOffset + childSize + offsetEnd]);
|
|
119
|
-
}
|
|
120
|
-
if (breakpoints.length === 0) {
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
const containerIntersectingChildIndex = breakpoints.findIndex(([_start, end]) => end > containerElementSize);
|
|
124
|
-
if (containerIntersectingChildIndex !== -1) {
|
|
125
|
-
const intersectingChildIndex = breakpoints.findIndex(
|
|
126
|
-
([start, end]) => (this.indicatorElement ? start : end) > containerElementSize - indicatorElementSize
|
|
127
|
-
);
|
|
128
|
-
const newVisibleItemCount = Math.max(intersectingChildIndex - (this.indicatorElement ? 1 : 0), 0);
|
|
129
|
-
const newIndicatorElementOffset = breakpoints[newVisibleItemCount]?.[0] + offsetStart;
|
|
130
|
-
this.onUpdate(newVisibleItemCount, newIndicatorElementOffset);
|
|
131
|
-
} else {
|
|
132
|
-
this.onUpdate(breakpoints.length, 0);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
requestedUpdate = false;
|
|
136
|
-
requestUpdate() {
|
|
137
|
-
if (this.requestedUpdate) {
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
this.requestedUpdate = true;
|
|
141
|
-
this.update();
|
|
142
|
-
window.requestAnimationFrame(() => {
|
|
143
|
-
this.requestedUpdate = false;
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
var isHtmlElement = (element) => {
|
|
148
|
-
if (element instanceof HTMLElement) {
|
|
149
|
-
return true;
|
|
150
|
-
}
|
|
151
|
-
throw new Error("Element provided is not a HTMLElement.");
|
|
152
|
-
};
|
|
153
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
154
|
-
0 && (module.exports = {
|
|
155
|
-
Overflowed
|
|
156
|
-
});
|
package/core/index.mjs
DELETED
package/index.d.ts
DELETED
package/index.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// modules/index.ts
|
|
21
|
-
var modules_exports = {};
|
|
22
|
-
__export(modules_exports, {
|
|
23
|
-
default: () => modules_default
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(modules_exports);
|
|
26
|
-
var modules_default = void 0;
|
|
27
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
28
|
-
0 && (module.exports = {});
|
package/index.mjs
DELETED
package/react/index.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { O as OverflowedOptions } from '../Overflowed-53afb67e.js';
|
|
2
|
-
|
|
3
|
-
interface UseOverflowedItemsState {
|
|
4
|
-
visibleItemCount: number;
|
|
5
|
-
indicatorElementOffset: number | undefined;
|
|
6
|
-
isMounted: boolean;
|
|
7
|
-
}
|
|
8
|
-
interface UseOverflowedItemsOptions extends Omit<OverflowedOptions, "onUpdate"> {
|
|
9
|
-
enableEmptyOverflowedItems?: boolean;
|
|
10
|
-
maxItemCount?: number;
|
|
11
|
-
}
|
|
12
|
-
declare const useOverflowedItems: <Item extends unknown>(items: Item[], { enableEmptyOverflowedItems, maxItemCount, ...options }?: UseOverflowedItemsOptions) => readonly [(readonly [Item, any])[], Item[], {
|
|
13
|
-
getContainerProps: any;
|
|
14
|
-
getIndicatorProps: any;
|
|
15
|
-
}];
|
|
16
|
-
|
|
17
|
-
export { UseOverflowedItemsOptions, UseOverflowedItemsState, useOverflowedItems };
|
package/react/index.js
DELETED
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// modules/react/index.ts
|
|
21
|
-
var react_exports = {};
|
|
22
|
-
__export(react_exports, {
|
|
23
|
-
useOverflowedItems: () => useOverflowedItems
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(react_exports);
|
|
26
|
-
|
|
27
|
-
// modules/react/useOverflowedItems.tsx
|
|
28
|
-
var import_react = require("react");
|
|
29
|
-
|
|
30
|
-
// modules/core/Overflowed.ts
|
|
31
|
-
var Overflowed = class {
|
|
32
|
-
axis;
|
|
33
|
-
onUpdate;
|
|
34
|
-
resizeObserver;
|
|
35
|
-
containerElement = null;
|
|
36
|
-
indicatorElement = null;
|
|
37
|
-
indicatorSize;
|
|
38
|
-
constructor({
|
|
39
|
-
ResizeObserver = typeof window === "undefined" ? void 0 : window.ResizeObserver,
|
|
40
|
-
axis = "horizontal",
|
|
41
|
-
onUpdate
|
|
42
|
-
}) {
|
|
43
|
-
this.resizeObserver = ResizeObserver && new ResizeObserver((entries) => {
|
|
44
|
-
for (const entry of entries) {
|
|
45
|
-
if (entry.target === this.indicatorElement) {
|
|
46
|
-
if (entry.target.clientWidth > 0 && entry.target.clientWidth !== this.indicatorSize) {
|
|
47
|
-
console.warn("width doesn't match", this.indicatorSize, entry.target.clientWidth);
|
|
48
|
-
}
|
|
49
|
-
this.indicatorSize = entry.target.clientWidth;
|
|
50
|
-
} else if (entry.target.parentNode === this.containerElement) {
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
this.requestUpdate();
|
|
54
|
-
});
|
|
55
|
-
this.axis = axis;
|
|
56
|
-
this.onUpdate = onUpdate;
|
|
57
|
-
}
|
|
58
|
-
registerContainerElement(containerElement) {
|
|
59
|
-
this.containerElement = containerElement;
|
|
60
|
-
this.resizeObserver?.observe(containerElement);
|
|
61
|
-
this.requestUpdate();
|
|
62
|
-
}
|
|
63
|
-
registerIndicatorElement(indicatorElement) {
|
|
64
|
-
this.indicatorElement = indicatorElement;
|
|
65
|
-
this.indicatorSize = indicatorElement.clientWidth;
|
|
66
|
-
this.resizeObserver?.observe(indicatorElement);
|
|
67
|
-
this.requestUpdate();
|
|
68
|
-
}
|
|
69
|
-
registerItemElement(itemElement) {
|
|
70
|
-
this.resizeObserver?.observe(itemElement);
|
|
71
|
-
this.requestUpdate();
|
|
72
|
-
}
|
|
73
|
-
onContainerElementWillUnmount() {
|
|
74
|
-
this.resizeObserver?.disconnect();
|
|
75
|
-
this.containerElement = null;
|
|
76
|
-
this.indicatorElement = null;
|
|
77
|
-
}
|
|
78
|
-
getElementSize(element) {
|
|
79
|
-
if (!element) {
|
|
80
|
-
return 0;
|
|
81
|
-
}
|
|
82
|
-
if (this.axis === "horizontal") {
|
|
83
|
-
return element.offsetWidth;
|
|
84
|
-
}
|
|
85
|
-
return element.offsetHeight;
|
|
86
|
-
}
|
|
87
|
-
getElementOffsetFromRight(element) {
|
|
88
|
-
if (!element) {
|
|
89
|
-
return 0;
|
|
90
|
-
}
|
|
91
|
-
if (this.axis === "horizontal") {
|
|
92
|
-
return this.getElementSize(element.parentElement) - this.getElementSize(element) - element.offsetLeft;
|
|
93
|
-
}
|
|
94
|
-
return this.getElementSize(element.parentElement) - this.getElementSize(element) - element.offsetTop;
|
|
95
|
-
}
|
|
96
|
-
getElementOffsetFromLeft(element) {
|
|
97
|
-
if (!element) {
|
|
98
|
-
return 0;
|
|
99
|
-
}
|
|
100
|
-
if (this.axis === "horizontal") {
|
|
101
|
-
return element.offsetLeft;
|
|
102
|
-
}
|
|
103
|
-
return element.offsetTop;
|
|
104
|
-
}
|
|
105
|
-
update() {
|
|
106
|
-
if (!this.containerElement) {
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
const { direction, paddingBlockStart, paddingBlockEnd, paddingInlineStart, paddingInlineEnd } = window.getComputedStyle(this.containerElement);
|
|
110
|
-
const offsetStart = parseInt(this.axis === "horizontal" ? paddingInlineStart : paddingBlockStart, 10);
|
|
111
|
-
const offsetEnd = parseInt(this.axis === "horizontal" ? paddingInlineEnd : paddingBlockEnd, 10);
|
|
112
|
-
const isRtl = direction === "rtl";
|
|
113
|
-
const containerElementSize = this.getElementSize(this.containerElement) - offsetStart - offsetEnd;
|
|
114
|
-
const indicatorElementSize = this.getElementSize(this.indicatorElement);
|
|
115
|
-
const childrenArray = Array.from(this.containerElement.children).filter((element) => element !== this.indicatorElement).filter(isHtmlElement);
|
|
116
|
-
const getOffset = isRtl ? this.getElementOffsetFromRight.bind(this) : this.getElementOffsetFromLeft.bind(this);
|
|
117
|
-
const breakpoints = [];
|
|
118
|
-
for (const [_index, childElement] of childrenArray.entries()) {
|
|
119
|
-
const childOffset = getOffset(childElement);
|
|
120
|
-
const childSize = this.getElementSize(childElement);
|
|
121
|
-
breakpoints.push([childOffset - offsetStart, childOffset + childSize + offsetEnd]);
|
|
122
|
-
}
|
|
123
|
-
if (breakpoints.length === 0) {
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
const containerIntersectingChildIndex = breakpoints.findIndex(([_start, end]) => end > containerElementSize);
|
|
127
|
-
if (containerIntersectingChildIndex !== -1) {
|
|
128
|
-
const intersectingChildIndex = breakpoints.findIndex(
|
|
129
|
-
([start, end]) => (this.indicatorElement ? start : end) > containerElementSize - indicatorElementSize
|
|
130
|
-
);
|
|
131
|
-
const newVisibleItemCount = Math.max(intersectingChildIndex - (this.indicatorElement ? 1 : 0), 0);
|
|
132
|
-
const newIndicatorElementOffset = breakpoints[newVisibleItemCount]?.[0] + offsetStart;
|
|
133
|
-
this.onUpdate(newVisibleItemCount, newIndicatorElementOffset);
|
|
134
|
-
} else {
|
|
135
|
-
this.onUpdate(breakpoints.length, 0);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
requestedUpdate = false;
|
|
139
|
-
requestUpdate() {
|
|
140
|
-
if (this.requestedUpdate) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
this.requestedUpdate = true;
|
|
144
|
-
this.update();
|
|
145
|
-
window.requestAnimationFrame(() => {
|
|
146
|
-
this.requestedUpdate = false;
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
var isHtmlElement = (element) => {
|
|
151
|
-
if (element instanceof HTMLElement) {
|
|
152
|
-
return true;
|
|
153
|
-
}
|
|
154
|
-
throw new Error("Element provided is not a HTMLElement.");
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
// modules/react/defaultCreateGetContainerProps.ts
|
|
158
|
-
var defaultCreateGetContainerProps = (overflowed, state) => ({ style } = {}) => ({
|
|
159
|
-
ref: (containerElement) => {
|
|
160
|
-
if (!(containerElement instanceof HTMLElement)) {
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
overflowed.registerContainerElement(containerElement);
|
|
164
|
-
},
|
|
165
|
-
style: {
|
|
166
|
-
overflowX: overflowed.axis === "horizontal" ? state.isMounted ? "clip" : "auto" : void 0,
|
|
167
|
-
overflowY: overflowed.axis === "horizontal" ? state.isMounted ? "clip" : "auto" : void 0,
|
|
168
|
-
...style
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
// modules/react/defaultCreateGetIndicatorProps.ts
|
|
173
|
-
var defaultCreateGetIndicatorProps = (overflowed, state, isVisible) => ({ style } = {}) => ({
|
|
174
|
-
ref: (indicatorElement) => {
|
|
175
|
-
if (!(indicatorElement instanceof HTMLElement)) {
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
178
|
-
overflowed.registerIndicatorElement(indicatorElement);
|
|
179
|
-
},
|
|
180
|
-
style: isVisible ? {
|
|
181
|
-
position: isVisible ? "absolute" : void 0,
|
|
182
|
-
insetInlineStart: isVisible ? state.indicatorElementOffset : void 0,
|
|
183
|
-
marginInlineStart: 0,
|
|
184
|
-
...style
|
|
185
|
-
} : {
|
|
186
|
-
userSelect: "none",
|
|
187
|
-
pointerEvents: "none",
|
|
188
|
-
visibility: "hidden"
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
// modules/react/defaultCreateGetItemProps.ts
|
|
193
|
-
var defaultCreateGetItemProps = (overflowed, state, isHidden) => ({ style } = {}) => ({
|
|
194
|
-
ref: (itemElement) => {
|
|
195
|
-
if (!(itemElement instanceof HTMLElement)) {
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
overflowed.registerItemElement(itemElement);
|
|
199
|
-
},
|
|
200
|
-
style: {
|
|
201
|
-
...isHidden ? {
|
|
202
|
-
userSelect: "none",
|
|
203
|
-
pointerEvents: "none",
|
|
204
|
-
visibility: "hidden"
|
|
205
|
-
} : {},
|
|
206
|
-
...style
|
|
207
|
-
},
|
|
208
|
-
"aria-hidden": isHidden ? true : false
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
// modules/react/useOverflowedItems.tsx
|
|
212
|
-
var useOverflowedItems = (items, {
|
|
213
|
-
enableEmptyOverflowedItems,
|
|
214
|
-
maxItemCount = items.length,
|
|
215
|
-
...options
|
|
216
|
-
} = {}) => {
|
|
217
|
-
const [state, setState] = (0, import_react.useState)({
|
|
218
|
-
visibleItemCount: maxItemCount,
|
|
219
|
-
indicatorElementOffset: void 0,
|
|
220
|
-
isMounted: false
|
|
221
|
-
});
|
|
222
|
-
const overflowedRef = (0, import_react.useRef)(
|
|
223
|
-
new Overflowed({
|
|
224
|
-
...options,
|
|
225
|
-
onUpdate: (newVisibleItemCount, newIndicatorElementOffset) => setState(({ isMounted }) => ({
|
|
226
|
-
isMounted,
|
|
227
|
-
visibleItemCount: Math.min(newVisibleItemCount, maxItemCount),
|
|
228
|
-
indicatorElementOffset: newIndicatorElementOffset
|
|
229
|
-
}))
|
|
230
|
-
})
|
|
231
|
-
);
|
|
232
|
-
(0, import_react.useEffect)(() => {
|
|
233
|
-
setState((previousState) => ({ ...previousState, isMounted: true }));
|
|
234
|
-
return () => overflowedRef.current.onContainerElementWillUnmount();
|
|
235
|
-
}, []);
|
|
236
|
-
const visibleItems = (0, import_react.useMemo)(
|
|
237
|
-
() => items.map(
|
|
238
|
-
(item, index) => [item, defaultCreateGetItemProps(overflowedRef.current, state, index >= state.visibleItemCount)]
|
|
239
|
-
),
|
|
240
|
-
[items, state]
|
|
241
|
-
);
|
|
242
|
-
const overflowedItems = (0, import_react.useMemo)(
|
|
243
|
-
() => state.visibleItemCount < items.length ? items.slice(state.visibleItemCount) : [],
|
|
244
|
-
[state.visibleItemCount, enableEmptyOverflowedItems]
|
|
245
|
-
);
|
|
246
|
-
const props = (0, import_react.useMemo)(
|
|
247
|
-
() => ({
|
|
248
|
-
getContainerProps: defaultCreateGetContainerProps(overflowedRef.current, state),
|
|
249
|
-
getIndicatorProps: defaultCreateGetIndicatorProps(overflowedRef.current, state, overflowedItems.length > 0)
|
|
250
|
-
}),
|
|
251
|
-
[state, overflowedItems]
|
|
252
|
-
);
|
|
253
|
-
return [visibleItems, overflowedItems, props];
|
|
254
|
-
};
|
|
255
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
256
|
-
0 && (module.exports = {
|
|
257
|
-
useOverflowedItems
|
|
258
|
-
});
|