@design-edito/tools 0.5.1 → 0.5.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.
Files changed (70) hide show
  1. package/agnostic/arrays/index.d.ts +1 -1
  2. package/agnostic/arrays/index.js +1 -1
  3. package/agnostic/colors/index.d.ts +1 -1
  4. package/agnostic/colors/index.js +1 -1
  5. package/agnostic/css/index.d.ts +1 -1
  6. package/agnostic/css/index.js +1 -1
  7. package/agnostic/html/hyper-json/smart-tags/coalesced/index.d.ts +12 -12
  8. package/agnostic/html/hyper-json/smart-tags/coalesced/index.js +12 -12
  9. package/agnostic/html/hyper-json/smart-tags/isolated/index.d.ts +3 -3
  10. package/agnostic/html/hyper-json/smart-tags/isolated/index.js +3 -3
  11. package/agnostic/html/index.d.ts +3 -3
  12. package/agnostic/html/index.js +3 -3
  13. package/agnostic/index.d.ts +3 -3
  14. package/agnostic/index.js +3 -3
  15. package/agnostic/misc/index.d.ts +4 -4
  16. package/agnostic/misc/index.js +4 -4
  17. package/agnostic/misc/logs/index.d.ts +1 -1
  18. package/agnostic/misc/logs/index.js +1 -1
  19. package/agnostic/numbers/index.d.ts +2 -2
  20. package/agnostic/numbers/index.js +2 -2
  21. package/agnostic/objects/index.d.ts +3 -3
  22. package/agnostic/objects/index.js +3 -3
  23. package/agnostic/optim/index.d.ts +1 -1
  24. package/agnostic/optim/index.js +1 -1
  25. package/agnostic/random/index.d.ts +1 -1
  26. package/agnostic/random/index.js +1 -1
  27. package/agnostic/strings/index.d.ts +3 -3
  28. package/agnostic/strings/index.js +3 -3
  29. package/agnostic/time/index.d.ts +1 -1
  30. package/agnostic/time/index.js +1 -1
  31. package/components/Input/index.controlled.d.ts +1 -1
  32. package/components/JsonEditor/index.js +16 -14
  33. package/components/ListLoader/index.controlled.d.ts +78 -0
  34. package/components/ListLoader/index.controlled.js +99 -0
  35. package/components/ListLoader/index.d.ts +69 -0
  36. package/components/ListLoader/index.js +146 -0
  37. package/components/ListLoader/styles.module.css +0 -0
  38. package/components/ListLoader/utils.d.ts +8 -0
  39. package/components/ListLoader/utils.js +10 -0
  40. package/components/index.d.ts +5 -4
  41. package/components/index.js +5 -4
  42. package/components/public-classnames.d.ts +1 -0
  43. package/components/public-classnames.js +1 -0
  44. package/index.d.ts +1 -1
  45. package/index.js +1 -1
  46. package/node/@aws-s3/storage/file/index.d.ts +1 -1
  47. package/node/@aws-s3/storage/file/index.js +1 -1
  48. package/node/@google-cloud/storage/directory/index.d.ts +2 -2
  49. package/node/@google-cloud/storage/directory/index.js +2 -2
  50. package/node/@google-cloud/storage/file/index.d.ts +2 -2
  51. package/node/@google-cloud/storage/file/index.js +2 -2
  52. package/node/cloud-storage/operations/index.d.ts +2 -2
  53. package/node/cloud-storage/operations/index.js +2 -2
  54. package/node/ftps/directory/index.d.ts +1 -1
  55. package/node/ftps/directory/index.js +1 -1
  56. package/node/ftps/file/index.d.ts +2 -2
  57. package/node/ftps/file/index.js +2 -2
  58. package/node/images/index.d.ts +2 -2
  59. package/node/images/index.js +2 -2
  60. package/node/images/transform/operations/index.d.ts +4 -4
  61. package/node/images/transform/operations/index.js +4 -4
  62. package/node/index.d.ts +3 -3
  63. package/node/index.js +3 -3
  64. package/node/process/index.d.ts +1 -1
  65. package/node/process/index.js +1 -1
  66. package/node/sftp/directory/index.d.ts +1 -1
  67. package/node/sftp/directory/index.js +1 -1
  68. package/node/sftp/file/index.d.ts +1 -1
  69. package/node/sftp/file/index.js +1 -1
  70. package/package.json +8 -1
@@ -0,0 +1,99 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { clss } from '../../agnostic/css/clss/index.js';
3
+ import { IntersectionObserverComponent } from '../IntersectionObserver/index.js';
4
+ import { mergeClassNames } from '../utils/index.js';
5
+ import { listLoader as publicClassName } from '../public-classnames.js';
6
+ import { rangeBetween } from './utils.js';
7
+ import cssModule from './styles.module.css';
8
+ /**
9
+ * Presentational layer of the paginated list. Renders already-loaded pages as a
10
+ * single flat item list, and interleaves load buttons wherever a page is missing.
11
+ *
12
+ * This component holds no state and performs no fetching. Loaded pages are sorted
13
+ * by position and flattened, so items appear in page order then in item order,
14
+ * with no per-page wrapper element.
15
+ *
16
+ * ### Load buttons
17
+ * One button is rendered per missing page position:
18
+ * - before the first loaded page, unless it is already `firstPagePos`,
19
+ * - in place of each page missing between two loaded pages,
20
+ * - after the last loaded page, unless it is already `lastPagePos`.
21
+ *
22
+ * ### CSS elements
23
+ * - `item` — wraps each rendered item. Carries `data-page`.
24
+ * - `load` — a load button. Rendered empty, so its label belongs in CSS.
25
+ * Carries `data-page` and a `prev`, `next` or `gap` modifier.
26
+ * - `load-observer` — the intersection observer wrapping an auto-loading button.
27
+ * Present only when `autoLoadPrevWhenVisible` or `autoLoadNextWhenVisible` is on.
28
+ * Carries a `prev` or `next` modifier.
29
+ *
30
+ * ### Data attributes on the root element
31
+ * - `data-loading-pages` — comma-separated ascending list of the pages being
32
+ * fetched, e.g. `"1,3,6"`. Absent entirely when nothing is loading.
33
+ *
34
+ * @param props - Component properties.
35
+ * @see {@link Props}
36
+ * @returns A flat list of items with load buttons in place of missing pages.
37
+ *
38
+ * @remarks
39
+ * Deduplication runs after `filter`, so an item hidden by `filter` never evicts
40
+ * an earlier duplicate.
41
+ */
42
+ export const ListLoaderControlled = ({ className, pages, firstPagePos, lastPagePos, itemsPages, filter, display, getIdentifier, loadingPages, onLoadPageClick, autoLoadPrevWhenVisible, autoLoadNextWhenVisible }) => {
43
+ const inBoundsPages = pages.filter(pagePos => pagePos >= firstPagePos && pagePos <= lastPagePos);
44
+ const filteredItems = Array.from(itemsPages)
45
+ .filter(([pagePos]) => inBoundsPages.includes(pagePos))
46
+ .sort(([pageA], [pageB]) => pageA - pageB)
47
+ .flatMap(([pagePos, items]) => items.map((item, itemPos) => ({ item, pagePos, itemPos })))
48
+ .filter(({ item }) => filter(item));
49
+ const identifiers = filteredItems.map(({ item }) => getIdentifier?.(item));
50
+ const displayedItems = filteredItems.filter((_, pos) => {
51
+ const identifier = identifiers[pos];
52
+ if (identifier === undefined)
53
+ return true;
54
+ return identifiers.lastIndexOf(identifier) === pos;
55
+ });
56
+ const loadedPages = Array.from(itemsPages.keys())
57
+ .filter(pagePos => inBoundsPages.includes(pagePos))
58
+ .sort((a, b) => a - b);
59
+ const firstLoadedPage = loadedPages[0];
60
+ const lastLoadedPage = loadedPages[loadedPages.length - 1];
61
+ const gapPages = loadedPages.flatMap((pagePos, pos) => {
62
+ const prevPage = loadedPages[pos - 1];
63
+ if (prevPage === undefined)
64
+ return [];
65
+ return rangeBetween(prevPage + 1, pagePos - 1);
66
+ });
67
+ const slots = [
68
+ ...firstLoadedPage !== undefined && firstLoadedPage > firstPagePos
69
+ ? [{ pagePos: firstLoadedPage - 1, kind: 'prev' }]
70
+ : [],
71
+ ...loadedPages.map(pagePos => ({ pagePos, kind: 'items' })),
72
+ ...gapPages.map(pagePos => ({ pagePos, kind: 'gap' })),
73
+ ...lastLoadedPage !== undefined && lastLoadedPage < lastPagePos
74
+ ? [{ pagePos: lastLoadedPage + 1, kind: 'next' }]
75
+ : []
76
+ ].sort((a, b) => a.pagePos - b.pagePos);
77
+ const sortedLoadingPages = [...loadingPages ?? []]
78
+ .filter(pagePos => inBoundsPages.includes(pagePos))
79
+ .sort((a, b) => a - b);
80
+ const c = clss(publicClassName, { cssModule });
81
+ const rootClss = mergeClassNames(c(null), className);
82
+ const renderLoadButton = (pagePos, kind) => {
83
+ const button = _jsx("button", { className: c('load', kind), "data-page": pagePos, onClick: () => onLoadPageClick?.(pagePos) }, `load/${pagePos}`);
84
+ const autoLoads = (kind === 'prev' && autoLoadPrevWhenVisible === true)
85
+ || (kind === 'next' && autoLoadNextWhenVisible === true);
86
+ if (!autoLoads)
87
+ return button;
88
+ return _jsx(IntersectionObserverComponent, { className: c('load-observer', kind), onIntersected: ({ ioEntry }) => {
89
+ if (ioEntry?.isIntersecting !== true)
90
+ return;
91
+ onLoadPageClick?.(pagePos);
92
+ }, children: button }, `load/${pagePos}`);
93
+ };
94
+ return _jsx("div", { className: rootClss, "data-loading-pages": sortedLoadingPages.length === 0 ? undefined : sortedLoadingPages.join(','), children: slots.map(({ pagePos, kind }) => kind === 'items'
95
+ ? displayedItems
96
+ .filter(entry => entry.pagePos === pagePos)
97
+ .map(({ item, itemPos }) => _jsx("div", { className: c('item'), "data-page": pagePos, children: display(item) }, getIdentifier?.(item) ?? `${pagePos}/${itemPos}`))
98
+ : renderLoadButton(pagePos, kind)) });
99
+ };
@@ -0,0 +1,69 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type Props as ControlledProps } from './index.controlled.js';
3
+ /**
4
+ * Props for the {@link ListLoader} component.
5
+ *
6
+ * Extends {@link ControlledProps} — minus the data it derives itself — with
7
+ * fetching, staleness and page-set management.
8
+ *
9
+ * @template T - The item type carried by each page.
10
+ *
11
+ * @property pages - Page positions to keep loaded. When provided, the component
12
+ * is fully controlled: load buttons only report clicks and never change the set
13
+ * themselves. When omitted, the set is managed internally.
14
+ * @property defaultPage - Page loaded first in uncontrolled mode. Clamped into
15
+ * `firstPagePos`–`lastPagePos`, and defaults to `firstPagePos`. Ignored when
16
+ * `pages` is provided.
17
+ * @property fillGaps - When `true` (the default), any page missing between the
18
+ * lowest and highest requested page is requested automatically, so the loaded
19
+ * range stays contiguous. Ignored when `pages` is provided.
20
+ * @property dropPagesFurtherThan - Maximum distance, in pages, kept around a page
21
+ * loaded through a load button. Pages further away are dropped from state and
22
+ * from the DOM. Applies to load-button activations only, never to retries or
23
+ * stale reloads. Ignored when `pages` is provided.
24
+ * @property fetch - Fetches one page's items. Rejections are reported through
25
+ * `onFetchError` and retried according to `fetchRetriesNb`.
26
+ * @property staleAfterMs - Delay after which a loaded page is refetched, counted
27
+ * from its own last successful load. When omitted, pages are never refreshed.
28
+ * @property onFetchSuccess - Called after a page's items have been stored. Not
29
+ * called for a page dropped while its request was in flight.
30
+ * @property onFetchError - Called on every failed attempt, not only once retries
31
+ * are exhausted. When omitted, failures are logged with `console.warn`.
32
+ * @property fetchRetriesNb - Number of retries after a failed fetch. Defaults to
33
+ * `Infinity`, so a page keeps retrying until it succeeds.
34
+ * @property fetchRetriesDelayMs - Delay between two attempts. Defaults to `1000`.
35
+ */
36
+ export type Props<T> = Omit<ControlledProps<T>, 'itemsPages' | 'loadingPages' | 'pages'> & {
37
+ pages?: number[];
38
+ defaultPage?: number;
39
+ fillGaps?: boolean;
40
+ dropPagesFurtherThan?: number;
41
+ fetch: (page: number) => Promise<T[]>;
42
+ staleAfterMs?: number;
43
+ onFetchSuccess?: (pagePos: number, items: T[]) => void;
44
+ onFetchError?: (pagePos: number, error: Error) => void;
45
+ fetchRetriesNb?: number;
46
+ fetchRetriesDelayMs?: number;
47
+ };
48
+ /**
49
+ * Paginated list abstraction. Fetches the pages it is asked for, keeps them
50
+ * fresh, and drives a {@link ListLoaderControlled} with the result.
51
+ *
52
+ * @param props - Component properties.
53
+ * @see {@link Props}
54
+ * @see {@link ListLoaderControlled} for the rendered markup and CSS elements.
55
+ * @returns A {@link ListLoaderControlled} fed with the loaded pages.
56
+ *
57
+ * @remarks
58
+ * - In controlled mode (`pages` defined), the page set is entirely driven by the
59
+ * parent. `fillGaps` and `dropPagesFurtherThan` are inert, and load buttons only
60
+ * report through `onLoadPageClick`.
61
+ * - In uncontrolled mode, internal state is initialized from `defaultPage` and load
62
+ * buttons extend the set themselves. `onLoadPageClick` still fires, after the
63
+ * internal state has been updated.
64
+ * - A page removed from the effective set is dropped from memory, and a request
65
+ * still in flight for it is discarded on arrival rather than re-inserted.
66
+ * - No page outside `firstPagePos`–`lastPagePos` is ever fetched, whichever mode
67
+ * is in use.
68
+ */
69
+ export declare const ListLoader: <T>({ className, pages, defaultPage, fillGaps, dropPagesFurtherThan, autoLoadPrevWhenVisible, autoLoadNextWhenVisible, firstPagePos, lastPagePos, fetch, filter, display, getIdentifier, onLoadPageClick, staleAfterMs, onFetchSuccess, onFetchError, fetchRetriesNb, fetchRetriesDelayMs }: Props<T>) => ReactNode;
@@ -0,0 +1,146 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useRef, useState } from 'react';
3
+ import { toError } from '../../agnostic/misc/cast/index.js';
4
+ import { clamp } from '../../agnostic/numbers/clamp/index.js';
5
+ import { ListLoaderControlled } from './index.controlled.js';
6
+ import { rangeBetween } from './utils.js';
7
+ /**
8
+ * Paginated list abstraction. Fetches the pages it is asked for, keeps them
9
+ * fresh, and drives a {@link ListLoaderControlled} with the result.
10
+ *
11
+ * @param props - Component properties.
12
+ * @see {@link Props}
13
+ * @see {@link ListLoaderControlled} for the rendered markup and CSS elements.
14
+ * @returns A {@link ListLoaderControlled} fed with the loaded pages.
15
+ *
16
+ * @remarks
17
+ * - In controlled mode (`pages` defined), the page set is entirely driven by the
18
+ * parent. `fillGaps` and `dropPagesFurtherThan` are inert, and load buttons only
19
+ * report through `onLoadPageClick`.
20
+ * - In uncontrolled mode, internal state is initialized from `defaultPage` and load
21
+ * buttons extend the set themselves. `onLoadPageClick` still fires, after the
22
+ * internal state has been updated.
23
+ * - A page removed from the effective set is dropped from memory, and a request
24
+ * still in flight for it is discarded on arrival rather than re-inserted.
25
+ * - No page outside `firstPagePos`–`lastPagePos` is ever fetched, whichever mode
26
+ * is in use.
27
+ */
28
+ export const ListLoader = ({ className, pages, defaultPage, fillGaps = true, dropPagesFurtherThan, autoLoadPrevWhenVisible, autoLoadNextWhenVisible, firstPagePos, lastPagePos, fetch, filter, display, getIdentifier, onLoadPageClick, staleAfterMs, onFetchSuccess, onFetchError, fetchRetriesNb = Infinity, fetchRetriesDelayMs = 1000 }) => {
29
+ const [itemsPages, setItemsPages] = useState(new Map());
30
+ const [loadingPages, setLoadingPages] = useState(new Set());
31
+ const [internalPages, setInternalPages] = useState([
32
+ clamp(defaultPage ?? firstPagePos, firstPagePos, lastPagePos)
33
+ ]);
34
+ const requestedPages = useRef(new Set());
35
+ // Single source of truth for what should be loaded. Memoized so the effects
36
+ // below keep a stable dependency when the page set has not actually changed.
37
+ const currentPages = useMemo(() => (pages ?? internalPages).filter(page => page >= firstPagePos && page <= lastPagePos), [pages, internalPages, firstPagePos, lastPagePos]);
38
+ const handleLoadClick = (pagePos) => {
39
+ if (pages === undefined) {
40
+ setInternalPages(curr => {
41
+ const next = curr.includes(pagePos) ? curr : [...curr, pagePos];
42
+ if (dropPagesFurtherThan === undefined)
43
+ return next;
44
+ const kept = next.filter(page => Math.abs(page - pagePos) <= dropPagesFurtherThan);
45
+ return kept.length === next.length ? next : kept;
46
+ });
47
+ }
48
+ onLoadPageClick?.(pagePos);
49
+ };
50
+ const storePage = (page, items) => setItemsPages(curr => {
51
+ const next = new Map(curr);
52
+ next.set(page, { loadedAt: new Date(), items });
53
+ return next;
54
+ });
55
+ const setPageLoading = (page, isLoading) => setLoadingPages(curr => {
56
+ const next = new Set(curr);
57
+ if (isLoading)
58
+ next.add(page);
59
+ else
60
+ next.delete(page);
61
+ return next;
62
+ });
63
+ const reportFetchError = (page, err) => {
64
+ const error = toError(err);
65
+ if (onFetchError !== undefined)
66
+ return onFetchError(page, error);
67
+ // eslint-disable-next-line no-console
68
+ console.warn(`ListLoader failed to fetch page ${page}`, error);
69
+ };
70
+ // Guards the whole load path at once: a page dropped meanwhile stops its
71
+ // pending retries and its stale reloads without any further bookkeeping.
72
+ const loadPage = (page, retriesLeft = fetchRetriesNb) => {
73
+ if (!requestedPages.current.has(page))
74
+ return;
75
+ setPageLoading(page, true);
76
+ void fetch(page)
77
+ .then(items => {
78
+ if (!requestedPages.current.has(page))
79
+ return;
80
+ storePage(page, items);
81
+ onFetchSuccess?.(page, items);
82
+ setPageLoading(page, false);
83
+ })
84
+ .catch((err) => {
85
+ reportFetchError(page, err);
86
+ if (retriesLeft <= 0)
87
+ return setPageLoading(page, false);
88
+ window.setTimeout(() => loadPage(page, retriesLeft - 1), fetchRetriesDelayMs);
89
+ });
90
+ };
91
+ // Fx. dep. `currentPages` - Drops everything held for pages no longer wanted.
92
+ // The updaters return `curr` untouched when nothing was removed, so an unstable
93
+ // `pages` prop cannot spin the render loop.
94
+ useEffect(() => {
95
+ Array.from(requestedPages.current)
96
+ .filter(page => !currentPages.includes(page))
97
+ .forEach(page => { requestedPages.current.delete(page); });
98
+ setItemsPages(curr => {
99
+ const next = new Map(Array.from(curr).filter(([page]) => currentPages.includes(page)));
100
+ return next.size === curr.size ? curr : next;
101
+ });
102
+ setLoadingPages(curr => {
103
+ const next = new Set(Array.from(curr).filter(page => currentPages.includes(page)));
104
+ return next.size === curr.size ? curr : next;
105
+ });
106
+ }, [currentPages]);
107
+ useEffect(() => {
108
+ if (pages !== undefined)
109
+ return;
110
+ if (!fillGaps)
111
+ return;
112
+ setInternalPages(curr => {
113
+ if (curr.length === 0)
114
+ return curr;
115
+ const missing = rangeBetween(Math.min(...curr), Math.max(...curr))
116
+ .filter(page => !curr.includes(page));
117
+ if (missing.length === 0)
118
+ return curr;
119
+ return [...curr, ...missing];
120
+ });
121
+ }, [currentPages, fillGaps, pages]);
122
+ useEffect(() => {
123
+ currentPages.forEach(page => {
124
+ if (requestedPages.current.has(page))
125
+ return;
126
+ requestedPages.current.add(page);
127
+ loadPage(page);
128
+ });
129
+ }, [currentPages, fetch]);
130
+ // Fx. dep. `itemsPages` - Reschedules one timeout per page on every store, each
131
+ // due from its own `loadedAt`. A refetch updates `loadedAt`, which re-runs this
132
+ // effect and keeps the cycle going.
133
+ useEffect(() => {
134
+ if (staleAfterMs === undefined)
135
+ return;
136
+ const timeouts = Array.from(itemsPages).map(([page, { loadedAt }]) => {
137
+ const dueInMs = Math.max(0, staleAfterMs - (Date.now() - loadedAt.getTime()));
138
+ return window.setTimeout(() => loadPage(page), dueInMs);
139
+ });
140
+ return () => timeouts.forEach(timeout => window.clearTimeout(timeout));
141
+ }, [itemsPages, staleAfterMs, fetch]);
142
+ const controlledItemsPages = new Map(Array
143
+ .from(itemsPages)
144
+ .map(([page, { items }]) => [page, items]));
145
+ return _jsx(ListLoaderControlled, { className: className, pages: currentPages, firstPagePos: firstPagePos, lastPagePos: lastPagePos, itemsPages: controlledItemsPages, filter: filter, display: display, getIdentifier: getIdentifier, loadingPages: Array.from(loadingPages), onLoadPageClick: handleLoadClick, autoLoadPrevWhenVisible: autoLoadPrevWhenVisible, autoLoadNextWhenVisible: autoLoadNextWhenVisible });
146
+ };
File without changes
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Lists every integer from `from` to `to`, both included.
3
+ *
4
+ * @param from - Lower bound.
5
+ * @param to - Upper bound. When lower than `from`, the range is empty.
6
+ * @returns The integers in ascending order.
7
+ */
8
+ export declare function rangeBetween(from: number, to: number): number[];
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Lists every integer from `from` to `to`, both included.
3
+ *
4
+ * @param from - Lower bound.
5
+ * @param to - Upper bound. When lower than `from`, the range is empty.
6
+ * @returns The integers in ascending order.
7
+ */
8
+ export function rangeBetween(from, to) {
9
+ return Array.from({ length: Math.max(0, to - from + 1) }, (_, pos) => from + pos);
10
+ }
@@ -1,23 +1,24 @@
1
1
  export * as beforeAfter from './BeforeAfter/index.js'
2
2
  export * as button from './Button/index.js'
3
+ export * as disclaimer from './Disclaimer/index.js'
3
4
  export * as clippable from './Clippable/index.js'
4
5
  export * as drawer from './Drawer/index.js'
5
- export * as disclaimer from './Disclaimer/index.js'
6
6
  export * as eventListener from './EventListener/index.js'
7
7
  export * as gallery from './Gallery/index.js'
8
8
  export * as iframe from './Iframe/index.js'
9
+ export * as image from './Image/index.js'
9
10
  export * as input from './Input/index.js'
10
11
  export * as intersectionObserver from './IntersectionObserver/index.js'
11
- export * as overlayer from './Overlayer/index.js'
12
12
  export * as jsonEditor from './JsonEditor/index.js'
13
+ export * as listLoader from './ListLoader/index.js'
14
+ export * as overlayer from './Overlayer/index.js'
13
15
  export * as paginator from './Paginator/index.js'
14
16
  export * as resizeObserver from './ResizeObserver/index.js'
15
17
  export * as scrllgngn from './Scrllgngn/index.js'
16
18
  export * as scrollListener from './ScrollListener/index.js'
17
- export * as image from './Image/index.js'
18
19
  export * as select from './Select/index.js'
19
- export * as shadowRoot from './ShadowRoot/index.js'
20
20
  export * as sequencer from './Sequencer/index.js'
21
+ export * as shadowRoot from './ShadowRoot/index.js'
21
22
  export * as subtitles from './Subtitles/index.js'
22
23
  export * as textarea from './Textarea/index.js'
23
24
  export * as theatre from './Theatre/index.js'
@@ -1,23 +1,24 @@
1
1
  export * as beforeAfter from './BeforeAfter/index.js'
2
2
  export * as button from './Button/index.js'
3
+ export * as disclaimer from './Disclaimer/index.js'
3
4
  export * as clippable from './Clippable/index.js'
4
5
  export * as drawer from './Drawer/index.js'
5
- export * as disclaimer from './Disclaimer/index.js'
6
6
  export * as eventListener from './EventListener/index.js'
7
7
  export * as gallery from './Gallery/index.js'
8
8
  export * as iframe from './Iframe/index.js'
9
+ export * as image from './Image/index.js'
9
10
  export * as input from './Input/index.js'
10
11
  export * as intersectionObserver from './IntersectionObserver/index.js'
11
- export * as overlayer from './Overlayer/index.js'
12
12
  export * as jsonEditor from './JsonEditor/index.js'
13
+ export * as listLoader from './ListLoader/index.js'
14
+ export * as overlayer from './Overlayer/index.js'
13
15
  export * as paginator from './Paginator/index.js'
14
16
  export * as resizeObserver from './ResizeObserver/index.js'
15
17
  export * as scrllgngn from './Scrllgngn/index.js'
16
18
  export * as scrollListener from './ScrollListener/index.js'
17
- export * as image from './Image/index.js'
18
19
  export * as select from './Select/index.js'
19
- export * as shadowRoot from './ShadowRoot/index.js'
20
20
  export * as sequencer from './Sequencer/index.js'
21
+ export * as shadowRoot from './ShadowRoot/index.js'
21
22
  export * as subtitles from './Subtitles/index.js'
22
23
  export * as textarea from './Textarea/index.js'
23
24
  export * as theatre from './Theatre/index.js'
@@ -10,6 +10,7 @@ export declare const image = "lm-image";
10
10
  export declare const input = "lm-input";
11
11
  export declare const intersectionObserver = "lm-intersection-observer";
12
12
  export declare const jsonEditor = "lm-json-editor";
13
+ export declare const listLoader = "lm-list-loader";
13
14
  export declare const overlayer = "lm-overlayer";
14
15
  export declare const paginator = "lm-paginator";
15
16
  export declare const resizeObserver = "lm-resize-observer";
@@ -10,6 +10,7 @@ export const image = 'lm-image';
10
10
  export const input = 'lm-input';
11
11
  export const intersectionObserver = 'lm-intersection-observer';
12
12
  export const jsonEditor = 'lm-json-editor';
13
+ export const listLoader = 'lm-list-loader';
13
14
  export const overlayer = 'lm-overlayer';
14
15
  export const paginator = 'lm-paginator';
15
16
  export const resizeObserver = 'lm-resize-observer';
package/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export * as agnostic from './agnostic/index.js'
2
1
  export * as components from './components/index.js'
3
2
  export * as node from './node/index.js'
3
+ export * as agnostic from './agnostic/index.js'
package/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export * as agnostic from './agnostic/index.js'
2
1
  export * as components from './components/index.js'
3
2
  export * as node from './node/index.js'
3
+ export * as agnostic from './agnostic/index.js'
@@ -1,6 +1,6 @@
1
1
  export * as copy from './copy/index.js'
2
- export * as download from './download/index.js'
3
2
  export * as exists from './exists/index.js'
3
+ export * as download from './download/index.js'
4
4
  export * as move from './move/index.js'
5
5
  export * as remove from './remove/index.js'
6
6
  export * as stat from './stat/index.js'
@@ -1,6 +1,6 @@
1
1
  export * as copy from './copy/index.js'
2
- export * as download from './download/index.js'
3
2
  export * as exists from './exists/index.js'
3
+ export * as download from './download/index.js'
4
4
  export * as move from './move/index.js'
5
5
  export * as remove from './remove/index.js'
6
6
  export * as stat from './stat/index.js'
@@ -1,4 +1,4 @@
1
- export * as moveDir from './move-dir/index.js'
2
- export * as list from './list/index.js'
3
1
  export * as copyDir from './copy-dir/index.js'
2
+ export * as list from './list/index.js'
3
+ export * as moveDir from './move-dir/index.js'
4
4
  export * as removeDir from './remove-dir/index.js'
@@ -1,4 +1,4 @@
1
- export * as moveDir from './move-dir/index.js'
2
- export * as list from './list/index.js'
3
1
  export * as copyDir from './copy-dir/index.js'
2
+ export * as list from './list/index.js'
3
+ export * as moveDir from './move-dir/index.js'
4
4
  export * as removeDir from './remove-dir/index.js'
@@ -4,9 +4,9 @@ export * as exists from './exists/index.js'
4
4
  export * as generateSignedUrl from './generate-signed-url/index.js'
5
5
  export * as getMetadata from './get-metadata/index.js'
6
6
  export * as getPermissions from './get-permissions/index.js'
7
- export * as remove from './remove/index.js'
8
7
  export * as move from './move/index.js'
8
+ export * as remove from './remove/index.js'
9
9
  export * as revokeSignedUrls from './revoke-signed-urls/index.js'
10
10
  export * as stat from './stat/index.js'
11
- export * as upload from './upload/index.js'
12
11
  export * as updateMetadata from './update-metadata/index.js'
12
+ export * as upload from './upload/index.js'
@@ -4,9 +4,9 @@ export * as exists from './exists/index.js'
4
4
  export * as generateSignedUrl from './generate-signed-url/index.js'
5
5
  export * as getMetadata from './get-metadata/index.js'
6
6
  export * as getPermissions from './get-permissions/index.js'
7
- export * as remove from './remove/index.js'
8
7
  export * as move from './move/index.js'
8
+ export * as remove from './remove/index.js'
9
9
  export * as revokeSignedUrls from './revoke-signed-urls/index.js'
10
10
  export * as stat from './stat/index.js'
11
- export * as upload from './upload/index.js'
12
11
  export * as updateMetadata from './update-metadata/index.js'
12
+ export * as upload from './upload/index.js'
@@ -1,11 +1,11 @@
1
1
  export * as copyDir from './copy-dir/index.js'
2
- export * as downloadFile from './download-file/index.js'
3
2
  export * as copyFile from './copy-file/index.js'
3
+ export * as downloadFile from './download-file/index.js'
4
4
  export * as existsFile from './exists-file/index.js'
5
5
  export * as listDir from './list-dir/index.js'
6
6
  export * as moveDir from './move-dir/index.js'
7
7
  export * as moveFile from './move-file/index.js'
8
- export * as removeFile from './remove-file/index.js'
9
8
  export * as removeDir from './remove-dir/index.js'
9
+ export * as removeFile from './remove-file/index.js'
10
10
  export * as statFile from './stat-file/index.js'
11
11
  export * as uploadFile from './upload-file/index.js'
@@ -1,11 +1,11 @@
1
1
  export * as copyDir from './copy-dir/index.js'
2
- export * as downloadFile from './download-file/index.js'
3
2
  export * as copyFile from './copy-file/index.js'
3
+ export * as downloadFile from './download-file/index.js'
4
4
  export * as existsFile from './exists-file/index.js'
5
5
  export * as listDir from './list-dir/index.js'
6
6
  export * as moveDir from './move-dir/index.js'
7
7
  export * as moveFile from './move-file/index.js'
8
- export * as removeFile from './remove-file/index.js'
9
8
  export * as removeDir from './remove-dir/index.js'
9
+ export * as removeFile from './remove-file/index.js'
10
10
  export * as statFile from './stat-file/index.js'
11
11
  export * as uploadFile from './upload-file/index.js'
@@ -1,4 +1,4 @@
1
+ export * as copyDir from './copy-dir/index.js'
1
2
  export * as list from './list/index.js'
2
3
  export * as moveDir from './move-dir/index.js'
3
4
  export * as removeDir from './remove-dir/index.js'
4
- export * as copyDir from './copy-dir/index.js'
@@ -1,4 +1,4 @@
1
+ export * as copyDir from './copy-dir/index.js'
1
2
  export * as list from './list/index.js'
2
3
  export * as moveDir from './move-dir/index.js'
3
4
  export * as removeDir from './remove-dir/index.js'
4
- export * as copyDir from './copy-dir/index.js'
@@ -1,7 +1,7 @@
1
- export * as download from './download/index.js'
2
1
  export * as copy from './copy/index.js'
3
- export * as move from './move/index.js'
2
+ export * as download from './download/index.js'
4
3
  export * as exists from './exists/index.js'
4
+ export * as move from './move/index.js'
5
5
  export * as remove from './remove/index.js'
6
6
  export * as stat from './stat/index.js'
7
7
  export * as upload from './upload/index.js'
@@ -1,7 +1,7 @@
1
- export * as download from './download/index.js'
2
1
  export * as copy from './copy/index.js'
3
- export * as move from './move/index.js'
2
+ export * as download from './download/index.js'
4
3
  export * as exists from './exists/index.js'
4
+ export * as move from './move/index.js'
5
5
  export * as remove from './remove/index.js'
6
6
  export * as stat from './stat/index.js'
7
7
  export * as upload from './upload/index.js'
@@ -1,5 +1,5 @@
1
- export * as format from './format/index.js'
2
- export * as metadata from './metadata/index.js'
3
1
  export * as create from './create/index.js'
2
+ export * as metadata from './metadata/index.js'
3
+ export * as format from './format/index.js'
4
4
  export * as transform from './transform/index.js'
5
5
  export * as utils from './utils/index.js'
@@ -1,5 +1,5 @@
1
- export * as format from './format/index.js'
2
- export * as metadata from './metadata/index.js'
3
1
  export * as create from './create/index.js'
2
+ export * as metadata from './metadata/index.js'
3
+ export * as format from './format/index.js'
4
4
  export * as transform from './transform/index.js'
5
5
  export * as utils from './utils/index.js'
@@ -1,15 +1,15 @@
1
1
  export * as blur from './blur/index.js'
2
- export * as brighten from './brighten/index.js'
3
2
  export * as extend from './extend/index.js'
3
+ export * as brighten from './brighten/index.js'
4
4
  export * as extract from './extract/index.js'
5
5
  export * as flatten from './flatten/index.js'
6
6
  export * as flip from './flip/index.js'
7
7
  export * as flop from './flop/index.js'
8
- export * as lighten from './lighten/index.js'
8
+ export * as hue from './hue/index.js'
9
9
  export * as level from './level/index.js'
10
+ export * as lighten from './lighten/index.js'
10
11
  export * as normalize from './normalize/index.js'
11
- export * as resize from './resize/index.js'
12
12
  export * as overlay from './overlay/index.js'
13
- export * as hue from './hue/index.js'
13
+ export * as resize from './resize/index.js'
14
14
  export * as rotate from './rotate/index.js'
15
15
  export * as saturate from './saturate/index.js'
@@ -1,15 +1,15 @@
1
1
  export * as blur from './blur/index.js'
2
- export * as brighten from './brighten/index.js'
3
2
  export * as extend from './extend/index.js'
3
+ export * as brighten from './brighten/index.js'
4
4
  export * as extract from './extract/index.js'
5
5
  export * as flatten from './flatten/index.js'
6
6
  export * as flip from './flip/index.js'
7
7
  export * as flop from './flop/index.js'
8
- export * as lighten from './lighten/index.js'
8
+ export * as hue from './hue/index.js'
9
9
  export * as level from './level/index.js'
10
+ export * as lighten from './lighten/index.js'
10
11
  export * as normalize from './normalize/index.js'
11
- export * as resize from './resize/index.js'
12
12
  export * as overlay from './overlay/index.js'
13
- export * as hue from './hue/index.js'
13
+ export * as resize from './resize/index.js'
14
14
  export * as rotate from './rotate/index.js'
15
15
  export * as saturate from './saturate/index.js'
package/node/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
+ export * as awsS3 from './@aws-s3/index.js'
1
2
  export * as designEdito from './@design-edito/index.js'
2
3
  export * as express from './@express/index.js'
3
- export * as awsS3 from './@aws-s3/index.js'
4
+ export * as googleCloud from './@google-cloud/index.js'
4
5
  export * as cloudStorage from './cloud-storage/index.js'
5
6
  export * as encryption from './encryption/index.js'
6
- export * as files from './files/index.js'
7
- export * as googleCloud from './@google-cloud/index.js'
8
7
  export * as ftps from './ftps/index.js'
8
+ export * as files from './files/index.js'
9
9
  export * as images from './images/index.js'
10
10
  export * as process from './process/index.js'
11
11
  export * as sftp from './sftp/index.js'