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/react/index.mjs DELETED
@@ -1,108 +0,0 @@
1
- import {
2
- Overflowed
3
- } from "../chunk-DATLJDI5.mjs";
4
-
5
- // modules/react/useOverflowedItems.tsx
6
- import { useEffect, useMemo, useRef, useState } from "react";
7
-
8
- // modules/react/defaultCreateGetContainerProps.ts
9
- var defaultCreateGetContainerProps = (overflowed, state) => ({ style } = {}) => ({
10
- ref: (containerElement) => {
11
- if (!(containerElement instanceof HTMLElement)) {
12
- return;
13
- }
14
- overflowed.registerContainerElement(containerElement);
15
- },
16
- style: {
17
- overflowX: overflowed.axis === "horizontal" ? state.isMounted ? "clip" : "auto" : void 0,
18
- overflowY: overflowed.axis === "horizontal" ? state.isMounted ? "clip" : "auto" : void 0,
19
- ...style
20
- }
21
- });
22
-
23
- // modules/react/defaultCreateGetIndicatorProps.ts
24
- var defaultCreateGetIndicatorProps = (overflowed, state, isVisible) => ({ style } = {}) => ({
25
- ref: (indicatorElement) => {
26
- if (!(indicatorElement instanceof HTMLElement)) {
27
- return;
28
- }
29
- overflowed.registerIndicatorElement(indicatorElement);
30
- },
31
- style: isVisible ? {
32
- position: isVisible ? "absolute" : void 0,
33
- insetInlineStart: isVisible ? state.indicatorElementOffset : void 0,
34
- marginInlineStart: 0,
35
- ...style
36
- } : {
37
- userSelect: "none",
38
- pointerEvents: "none",
39
- visibility: "hidden"
40
- }
41
- });
42
-
43
- // modules/react/defaultCreateGetItemProps.ts
44
- var defaultCreateGetItemProps = (overflowed, state, isHidden) => ({ style } = {}) => ({
45
- ref: (itemElement) => {
46
- if (!(itemElement instanceof HTMLElement)) {
47
- return;
48
- }
49
- overflowed.registerItemElement(itemElement);
50
- },
51
- style: {
52
- ...isHidden ? {
53
- userSelect: "none",
54
- pointerEvents: "none",
55
- visibility: "hidden"
56
- } : {},
57
- ...style
58
- },
59
- "aria-hidden": isHidden ? true : false
60
- });
61
-
62
- // modules/react/useOverflowedItems.tsx
63
- var useOverflowedItems = (items, {
64
- enableEmptyOverflowedItems,
65
- maxItemCount = items.length,
66
- ...options
67
- } = {}) => {
68
- const [state, setState] = useState({
69
- visibleItemCount: maxItemCount,
70
- indicatorElementOffset: void 0,
71
- isMounted: false
72
- });
73
- const overflowedRef = useRef(
74
- new Overflowed({
75
- ...options,
76
- onUpdate: (newVisibleItemCount, newIndicatorElementOffset) => setState(({ isMounted }) => ({
77
- isMounted,
78
- visibleItemCount: Math.min(newVisibleItemCount, maxItemCount),
79
- indicatorElementOffset: newIndicatorElementOffset
80
- }))
81
- })
82
- );
83
- useEffect(() => {
84
- setState((previousState) => ({ ...previousState, isMounted: true }));
85
- return () => overflowedRef.current.onContainerElementWillUnmount();
86
- }, []);
87
- const visibleItems = useMemo(
88
- () => items.map(
89
- (item, index) => [item, defaultCreateGetItemProps(overflowedRef.current, state, index >= state.visibleItemCount)]
90
- ),
91
- [items, state]
92
- );
93
- const overflowedItems = useMemo(
94
- () => state.visibleItemCount < items.length ? items.slice(state.visibleItemCount) : [],
95
- [state.visibleItemCount, enableEmptyOverflowedItems]
96
- );
97
- const props = useMemo(
98
- () => ({
99
- getContainerProps: defaultCreateGetContainerProps(overflowedRef.current, state),
100
- getIndicatorProps: defaultCreateGetIndicatorProps(overflowedRef.current, state, overflowedItems.length > 0)
101
- }),
102
- [state, overflowedItems]
103
- );
104
- return [visibleItems, overflowedItems, props];
105
- };
106
- export {
107
- useOverflowedItems
108
- };
package/svelte/index.d.ts DELETED
@@ -1,9 +0,0 @@
1
- import { Action } from 'svelte/action';
2
-
3
- declare const overflowedItems: <Item>(items: Item[], onUpdate: (newVisibleItems: Item[], newOverflowedItems: Item[]) => void) => readonly [Item[], Item[], {
4
- readonly container: Action<HTMLElement, any, Record<never, any>>;
5
- readonly indicator: Action<HTMLElement, any, Record<never, any>>;
6
- readonly item: Action<HTMLElement, number, Record<never, any>>;
7
- }];
8
-
9
- export { overflowedItems };
package/svelte/index.js DELETED
@@ -1,183 +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/svelte/index.ts
21
- var svelte_exports = {};
22
- __export(svelte_exports, {
23
- overflowedItems: () => overflowedItems
24
- });
25
- module.exports = __toCommonJS(svelte_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
-
154
- // modules/svelte/OverflowedActions.ts
155
- var overflowedItems = (items, onUpdate) => {
156
- const overflowed = new Overflowed({
157
- onUpdate: (newVisibleItemCount, indicatorElementOffset) => {
158
- onUpdate(items, newVisibleItemCount < items.length ? items.slice(newVisibleItemCount) : []);
159
- console.log(indicatorElementOffset);
160
- }
161
- });
162
- const container = (element) => {
163
- overflowed.registerContainerElement(element);
164
- element.style.display = "flex";
165
- element.style.position = "relative";
166
- element.style.flexDirection = overflowed.axis === "horizontal" ? "row" : "column";
167
- element.style.overflowX = overflowed.axis === "horizontal" ? "clip" : "";
168
- element.style.overflowY = overflowed.axis === "horizontal" ? "clip" : "";
169
- };
170
- const indicator = (element) => {
171
- overflowed.registerIndicatorElement(element);
172
- element.style.flexShrink = "0";
173
- };
174
- const item = (element, index) => {
175
- overflowed.registerItemElement(element);
176
- element.style.flexShrink = "0";
177
- };
178
- return [items, items, { container, indicator, item }];
179
- };
180
- // Annotate the CommonJS export names for ESM import in node:
181
- 0 && (module.exports = {
182
- overflowedItems
183
- });
package/svelte/index.mjs DELETED
@@ -1,34 +0,0 @@
1
- import "../chunk-TXQIKLPR.mjs";
2
- import {
3
- Overflowed
4
- } from "../chunk-DATLJDI5.mjs";
5
-
6
- // modules/svelte/OverflowedActions.ts
7
- var overflowedItems = (items, onUpdate) => {
8
- const overflowed = new Overflowed({
9
- onUpdate: (newVisibleItemCount, indicatorElementOffset) => {
10
- onUpdate(items, newVisibleItemCount < items.length ? items.slice(newVisibleItemCount) : []);
11
- console.log(indicatorElementOffset);
12
- }
13
- });
14
- const container = (element) => {
15
- overflowed.registerContainerElement(element);
16
- element.style.display = "flex";
17
- element.style.position = "relative";
18
- element.style.flexDirection = overflowed.axis === "horizontal" ? "row" : "column";
19
- element.style.overflowX = overflowed.axis === "horizontal" ? "clip" : "";
20
- element.style.overflowY = overflowed.axis === "horizontal" ? "clip" : "";
21
- };
22
- const indicator = (element) => {
23
- overflowed.registerIndicatorElement(element);
24
- element.style.flexShrink = "0";
25
- };
26
- const item = (element, index) => {
27
- overflowed.registerItemElement(element);
28
- element.style.flexShrink = "0";
29
- };
30
- return [items, items, { container, indicator, item }];
31
- };
32
- export {
33
- overflowedItems
34
- };