@pinfold/react 0.0.0-stage → 0.2.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/README.md +58 -2
- package/accordion/lazy/package.json +6 -0
- package/accordion/package.json +6 -0
- package/dist/accordion/client.cjs +491 -0
- package/dist/accordion/client.d.cts +34 -0
- package/dist/accordion/client.d.ts +34 -0
- package/dist/accordion/client.js +490 -0
- package/dist/accordion/index.cjs +49 -0
- package/dist/accordion/index.d.cts +56 -0
- package/dist/accordion/index.d.ts +56 -0
- package/dist/accordion/index.js +14 -0
- package/dist/accordion/lazy.cjs +17 -0
- package/dist/accordion/lazy.d.cts +16 -0
- package/dist/accordion/lazy.d.ts +16 -0
- package/dist/accordion/lazy.js +16 -0
- package/dist/chunk-5ZMK623A.js +61 -0
- package/dist/chunk-BPPCPHHU.js +70 -0
- package/dist/chunk-DQWSDHRY.cjs +71 -0
- package/dist/chunk-Q232PTPW.js +115 -0
- package/dist/chunk-RJPT3NTP.cjs +62 -0
- package/dist/chunk-VPKVOJHA.cjs +116 -0
- package/dist/client.cjs +30 -0
- package/dist/client.d.cts +120 -0
- package/dist/client.d.ts +120 -0
- package/dist/client.js +29 -0
- package/dist/index.cjs +52 -0
- package/dist/index.d.cts +123 -0
- package/dist/index.d.ts +123 -0
- package/dist/index.js +10 -0
- package/dist/types-CkcgnWwL.d.cts +367 -0
- package/dist/types-CkcgnWwL.d.ts +367 -0
- package/dist/types-N0Yo4zGa.d.cts +374 -0
- package/dist/types-N0Yo4zGa.d.ts +374 -0
- package/dist/validate-EQHBH4NH.cjs +42 -0
- package/dist/validate-WKHQNNGD.js +41 -0
- package/llms-full.txt +140 -0
- package/llms.txt +26 -0
- package/package.json +92 -4
- package/registry/accordion.json +20 -0
- package/registry/registry.json +25 -0
- package/schema/accordion.json +903 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }'use client';
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _chunkRJPT3NTPcjs = require('../chunk-RJPT3NTP.cjs');
|
|
6
|
+
require('../chunk-VPKVOJHA.cjs');
|
|
7
|
+
|
|
8
|
+
// src/accordion/lazy.ts
|
|
9
|
+
var Accordion = _chunkRJPT3NTPcjs.createLazyComponent.call(void 0,
|
|
10
|
+
() => Promise.resolve().then(() => _interopRequireWildcard(require("./client.cjs"))).then((m) => ({ default: m.Accordion })),
|
|
11
|
+
{ displayName: "LazyAccordion" }
|
|
12
|
+
);
|
|
13
|
+
var lazy_default = Accordion;
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
exports.Accordion = Accordion; exports.default = lazy_default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as _pinfold_core from '@pinfold/core';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { c as AnyAccordionConfig } from '../types-CkcgnWwL.cjs';
|
|
4
|
+
export { A as AccordionConfig, a as AccordionMappedConfig } from '../types-CkcgnWwL.cjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Code-split entry point. Nothing accordion-related enters the main bundle
|
|
8
|
+
* until the component first renders:
|
|
9
|
+
*
|
|
10
|
+
* import { Accordion } from '@pinfold/react/accordion/lazy';
|
|
11
|
+
*/
|
|
12
|
+
declare const Accordion: React.ComponentType<AnyAccordionConfig & {
|
|
13
|
+
lazy?: _pinfold_core.PinfoldLazy;
|
|
14
|
+
}>;
|
|
15
|
+
|
|
16
|
+
export { Accordion, Accordion as default };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as _pinfold_core from '@pinfold/core';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { c as AnyAccordionConfig } from '../types-CkcgnWwL.js';
|
|
4
|
+
export { A as AccordionConfig, a as AccordionMappedConfig } from '../types-CkcgnWwL.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Code-split entry point. Nothing accordion-related enters the main bundle
|
|
8
|
+
* until the component first renders:
|
|
9
|
+
*
|
|
10
|
+
* import { Accordion } from '@pinfold/react/accordion/lazy';
|
|
11
|
+
*/
|
|
12
|
+
declare const Accordion: React.ComponentType<AnyAccordionConfig & {
|
|
13
|
+
lazy?: _pinfold_core.PinfoldLazy;
|
|
14
|
+
}>;
|
|
15
|
+
|
|
16
|
+
export { Accordion, Accordion as default };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import {
|
|
3
|
+
createLazyComponent
|
|
4
|
+
} from "../chunk-5ZMK623A.js";
|
|
5
|
+
import "../chunk-Q232PTPW.js";
|
|
6
|
+
|
|
7
|
+
// src/accordion/lazy.ts
|
|
8
|
+
var Accordion = createLazyComponent(
|
|
9
|
+
() => import("./client.js").then((m) => ({ default: m.Accordion })),
|
|
10
|
+
{ displayName: "LazyAccordion" }
|
|
11
|
+
);
|
|
12
|
+
var lazy_default = Accordion;
|
|
13
|
+
export {
|
|
14
|
+
Accordion,
|
|
15
|
+
lazy_default as default
|
|
16
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import {
|
|
3
|
+
usePinfold
|
|
4
|
+
} from "./chunk-Q232PTPW.js";
|
|
5
|
+
|
|
6
|
+
// src/lazy.tsx
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
function createLazyComponent(loader, options = {}) {
|
|
9
|
+
var _a, _b;
|
|
10
|
+
const Lazy = React.lazy(loader);
|
|
11
|
+
const fallback = (_a = options.fallback) != null ? _a : null;
|
|
12
|
+
const Wrapped = (props) => {
|
|
13
|
+
var _a2, _b2;
|
|
14
|
+
const ctx = usePinfold();
|
|
15
|
+
const preferred = (_a2 = props.lazy) != null ? _a2 : ctx.lazy;
|
|
16
|
+
const strategy = preferred === "auto" ? (_b2 = options.auto) != null ? _b2 : "eager" : preferred;
|
|
17
|
+
const [ready, setReady] = React.useState(strategy === "eager");
|
|
18
|
+
const placeholder = React.useRef(null);
|
|
19
|
+
React.useEffect(() => {
|
|
20
|
+
if (ready) return;
|
|
21
|
+
if (strategy === "idle") {
|
|
22
|
+
const w = window;
|
|
23
|
+
if (w.requestIdleCallback) {
|
|
24
|
+
const id2 = w.requestIdleCallback(() => setReady(true));
|
|
25
|
+
return () => {
|
|
26
|
+
var _a3;
|
|
27
|
+
return (_a3 = w.cancelIdleCallback) == null ? void 0 : _a3.call(w, id2);
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const id = setTimeout(() => setReady(true), 200);
|
|
31
|
+
return () => clearTimeout(id);
|
|
32
|
+
}
|
|
33
|
+
const el = placeholder.current;
|
|
34
|
+
if (!el || typeof IntersectionObserver === "undefined") {
|
|
35
|
+
setReady(true);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const observer = new IntersectionObserver(
|
|
39
|
+
(entries) => {
|
|
40
|
+
if (entries.some((e) => e.isIntersecting)) {
|
|
41
|
+
setReady(true);
|
|
42
|
+
observer.disconnect();
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
{ rootMargin: "200px" }
|
|
46
|
+
);
|
|
47
|
+
observer.observe(el);
|
|
48
|
+
return () => observer.disconnect();
|
|
49
|
+
}, [ready, strategy]);
|
|
50
|
+
if (!ready) {
|
|
51
|
+
return /* @__PURE__ */ React.createElement("div", { ref: placeholder, "data-pinfold-lazy": "", style: { minHeight: 1 } }, fallback);
|
|
52
|
+
}
|
|
53
|
+
return /* @__PURE__ */ React.createElement(React.Suspense, { fallback }, React.createElement(Lazy, props));
|
|
54
|
+
};
|
|
55
|
+
Wrapped.displayName = (_b = options.displayName) != null ? _b : "PinfoldLazy";
|
|
56
|
+
return Wrapped;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export {
|
|
60
|
+
createLazyComponent
|
|
61
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import {
|
|
3
|
+
useIsomorphicLayoutEffect
|
|
4
|
+
} from "./chunk-Q232PTPW.js";
|
|
5
|
+
|
|
6
|
+
// src/slots.ts
|
|
7
|
+
import { cn, mergeProps } from "@pinfold/core";
|
|
8
|
+
function slotProps(overrides, slot, base) {
|
|
9
|
+
var _a, _b, _c;
|
|
10
|
+
if (!overrides) return base;
|
|
11
|
+
const extraClass = (_a = overrides.classNames) == null ? void 0 : _a[slot];
|
|
12
|
+
const extraStyle = (_b = overrides.styles) == null ? void 0 : _b[slot];
|
|
13
|
+
let next = base;
|
|
14
|
+
if (extraClass) next = { ...next, className: cn(next.className, extraClass) };
|
|
15
|
+
if (extraStyle) next = { ...next, style: { ...next.style, ...extraStyle } };
|
|
16
|
+
return mergeProps(next, (_c = overrides.slotProps) == null ? void 0 : _c[slot]);
|
|
17
|
+
}
|
|
18
|
+
function renderSlot(overrides, slot, props, state, children, defaultRender) {
|
|
19
|
+
var _a;
|
|
20
|
+
const custom = (_a = overrides == null ? void 0 : overrides.render) == null ? void 0 : _a[slot];
|
|
21
|
+
if (custom) return custom({ props, state, children });
|
|
22
|
+
return defaultRender(props, children);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// src/component.tsx
|
|
26
|
+
import * as React from "react";
|
|
27
|
+
function usePinfoldComponent(displayName, api, render, buildParts) {
|
|
28
|
+
const renderRef = React.useRef(render);
|
|
29
|
+
renderRef.current = render;
|
|
30
|
+
const ref = React.useRef(null);
|
|
31
|
+
if (ref.current === null) {
|
|
32
|
+
const store2 = { version: 0, listeners: /* @__PURE__ */ new Set() };
|
|
33
|
+
const subscribe = (listener) => {
|
|
34
|
+
store2.listeners.add(listener);
|
|
35
|
+
return () => {
|
|
36
|
+
store2.listeners.delete(listener);
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
const snapshot = () => store2.version;
|
|
40
|
+
const useFresh = () => React.useSyncExternalStore(subscribe, snapshot, snapshot);
|
|
41
|
+
const Component2 = ((props) => {
|
|
42
|
+
useFresh();
|
|
43
|
+
return renderRef.current(props);
|
|
44
|
+
});
|
|
45
|
+
Component2.displayName = displayName;
|
|
46
|
+
const parts = buildParts ? buildParts() : {};
|
|
47
|
+
for (const key of Object.keys(parts)) {
|
|
48
|
+
const part = parts[key];
|
|
49
|
+
const Live = (props) => {
|
|
50
|
+
useFresh();
|
|
51
|
+
return part(props);
|
|
52
|
+
};
|
|
53
|
+
Live.displayName = `${displayName}.${key}`;
|
|
54
|
+
Component2[key] = Live;
|
|
55
|
+
}
|
|
56
|
+
ref.current = { store: store2, Component: Component2 };
|
|
57
|
+
}
|
|
58
|
+
const { store, Component } = ref.current;
|
|
59
|
+
store.version++;
|
|
60
|
+
useIsomorphicLayoutEffect(() => {
|
|
61
|
+
store.listeners.forEach((listener) => listener());
|
|
62
|
+
});
|
|
63
|
+
return Object.assign(Component, api, { displayName });
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export {
|
|
67
|
+
slotProps,
|
|
68
|
+
renderSlot,
|
|
69
|
+
usePinfoldComponent
|
|
70
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }'use client';
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _chunkVPKVOJHAcjs = require('./chunk-VPKVOJHA.cjs');
|
|
6
|
+
|
|
7
|
+
// src/slots.ts
|
|
8
|
+
var _core = require('@pinfold/core');
|
|
9
|
+
function slotProps(overrides, slot, base) {
|
|
10
|
+
var _a, _b, _c;
|
|
11
|
+
if (!overrides) return base;
|
|
12
|
+
const extraClass = (_a = overrides.classNames) == null ? void 0 : _a[slot];
|
|
13
|
+
const extraStyle = (_b = overrides.styles) == null ? void 0 : _b[slot];
|
|
14
|
+
let next = base;
|
|
15
|
+
if (extraClass) next = { ...next, className: _core.cn.call(void 0, next.className, extraClass) };
|
|
16
|
+
if (extraStyle) next = { ...next, style: { ...next.style, ...extraStyle } };
|
|
17
|
+
return _core.mergeProps.call(void 0, next, (_c = overrides.slotProps) == null ? void 0 : _c[slot]);
|
|
18
|
+
}
|
|
19
|
+
function renderSlot(overrides, slot, props, state, children, defaultRender) {
|
|
20
|
+
var _a;
|
|
21
|
+
const custom = (_a = overrides == null ? void 0 : overrides.render) == null ? void 0 : _a[slot];
|
|
22
|
+
if (custom) return custom({ props, state, children });
|
|
23
|
+
return defaultRender(props, children);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// src/component.tsx
|
|
27
|
+
var _react = require('react'); var React = _interopRequireWildcard(_react);
|
|
28
|
+
function usePinfoldComponent(displayName, api, render, buildParts) {
|
|
29
|
+
const renderRef = React.useRef(render);
|
|
30
|
+
renderRef.current = render;
|
|
31
|
+
const ref = React.useRef(null);
|
|
32
|
+
if (ref.current === null) {
|
|
33
|
+
const store2 = { version: 0, listeners: /* @__PURE__ */ new Set() };
|
|
34
|
+
const subscribe = (listener) => {
|
|
35
|
+
store2.listeners.add(listener);
|
|
36
|
+
return () => {
|
|
37
|
+
store2.listeners.delete(listener);
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
const snapshot = () => store2.version;
|
|
41
|
+
const useFresh = () => React.useSyncExternalStore(subscribe, snapshot, snapshot);
|
|
42
|
+
const Component2 = ((props) => {
|
|
43
|
+
useFresh();
|
|
44
|
+
return renderRef.current(props);
|
|
45
|
+
});
|
|
46
|
+
Component2.displayName = displayName;
|
|
47
|
+
const parts = buildParts ? buildParts() : {};
|
|
48
|
+
for (const key of Object.keys(parts)) {
|
|
49
|
+
const part = parts[key];
|
|
50
|
+
const Live = (props) => {
|
|
51
|
+
useFresh();
|
|
52
|
+
return part(props);
|
|
53
|
+
};
|
|
54
|
+
Live.displayName = `${displayName}.${key}`;
|
|
55
|
+
Component2[key] = Live;
|
|
56
|
+
}
|
|
57
|
+
ref.current = { store: store2, Component: Component2 };
|
|
58
|
+
}
|
|
59
|
+
const { store, Component } = ref.current;
|
|
60
|
+
store.version++;
|
|
61
|
+
_chunkVPKVOJHAcjs.useIsomorphicLayoutEffect.call(void 0, () => {
|
|
62
|
+
store.listeners.forEach((listener) => listener());
|
|
63
|
+
});
|
|
64
|
+
return Object.assign(Component, api, { displayName });
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
exports.slotProps = slotProps; exports.renderSlot = renderSlot; exports.usePinfoldComponent = usePinfoldComponent;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
// src/hooks.ts
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
var useIsomorphicLayoutEffect = typeof document !== "undefined" ? React.useLayoutEffect : React.useEffect;
|
|
6
|
+
function useId2(provided) {
|
|
7
|
+
const generated = React.useId();
|
|
8
|
+
return provided || "pinfold-" + generated.replace(/[^\w-]/g, "");
|
|
9
|
+
}
|
|
10
|
+
function useEvent(fn) {
|
|
11
|
+
const ref = React.useRef(fn);
|
|
12
|
+
useIsomorphicLayoutEffect(() => {
|
|
13
|
+
ref.current = fn;
|
|
14
|
+
});
|
|
15
|
+
return React.useCallback(((...args) => ref.current(...args)), []);
|
|
16
|
+
}
|
|
17
|
+
function useControllableState({
|
|
18
|
+
value,
|
|
19
|
+
defaultValue,
|
|
20
|
+
onChange
|
|
21
|
+
}) {
|
|
22
|
+
const [uncontrolled, setUncontrolled] = React.useState(defaultValue);
|
|
23
|
+
const isControlled = value !== void 0;
|
|
24
|
+
const current = isControlled ? value : uncontrolled;
|
|
25
|
+
const currentRef = React.useRef(current);
|
|
26
|
+
currentRef.current = current;
|
|
27
|
+
const setValue = useEvent((next) => {
|
|
28
|
+
const resolved = typeof next === "function" ? next(currentRef.current) : next;
|
|
29
|
+
if (Object.is(resolved, currentRef.current)) return;
|
|
30
|
+
if (!isControlled) setUncontrolled(resolved);
|
|
31
|
+
onChange == null ? void 0 : onChange(resolved);
|
|
32
|
+
});
|
|
33
|
+
return [current, setValue];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// src/provider.tsx
|
|
37
|
+
import * as React2 from "react";
|
|
38
|
+
var DEFAULTS = {
|
|
39
|
+
theme: "system",
|
|
40
|
+
radius: "md",
|
|
41
|
+
dir: "ltr",
|
|
42
|
+
size: "md",
|
|
43
|
+
tone: "primary",
|
|
44
|
+
stylePack: "default",
|
|
45
|
+
lazy: "auto",
|
|
46
|
+
disableAnimation: false,
|
|
47
|
+
defaults: {}
|
|
48
|
+
};
|
|
49
|
+
var PinfoldContext = React2.createContext(DEFAULTS);
|
|
50
|
+
function usePinfold() {
|
|
51
|
+
return React2.useContext(PinfoldContext);
|
|
52
|
+
}
|
|
53
|
+
function PinfoldProvider(props) {
|
|
54
|
+
const { children, applyToDocument = false, className, config, ...own } = props;
|
|
55
|
+
const parent = React2.useContext(PinfoldContext);
|
|
56
|
+
const overrides = { ...stripUndefined(config != null ? config : {}), ...stripUndefined(own) };
|
|
57
|
+
const value = React2.useMemo(
|
|
58
|
+
() => ({ ...parent, ...overrides, defaults: mergeDefaults(parent.defaults, overrides.defaults) }),
|
|
59
|
+
// Keyed on the serialised overrides: configs are plain data, and inline objects must not bust the memo.
|
|
60
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
61
|
+
[parent, stableKey(overrides)]
|
|
62
|
+
);
|
|
63
|
+
useIsomorphicLayoutEffect(() => {
|
|
64
|
+
if (!applyToDocument) return;
|
|
65
|
+
const el = document.documentElement;
|
|
66
|
+
const attrs = [
|
|
67
|
+
["data-pinfold-theme", value.theme === "system" ? null : value.theme],
|
|
68
|
+
["data-pinfold-radius", value.radius],
|
|
69
|
+
["data-pinfold-style", value.stylePack === "default" ? null : value.stylePack]
|
|
70
|
+
];
|
|
71
|
+
const previous = attrs.map(([name]) => el.getAttribute(name));
|
|
72
|
+
attrs.forEach(([name, v]) => restore(el, name, v));
|
|
73
|
+
return () => attrs.forEach(([name], i) => restore(el, name, previous[i]));
|
|
74
|
+
}, [applyToDocument, value.theme, value.radius, value.stylePack]);
|
|
75
|
+
const body = applyToDocument ? children : /* @__PURE__ */ React2.createElement(
|
|
76
|
+
"div",
|
|
77
|
+
{
|
|
78
|
+
className: className ? "pinfold " + className : "pinfold",
|
|
79
|
+
dir: value.dir,
|
|
80
|
+
"data-pinfold-theme": value.theme === "system" ? void 0 : value.theme,
|
|
81
|
+
"data-pinfold-radius": value.radius,
|
|
82
|
+
"data-pinfold-style": value.stylePack === "default" ? void 0 : value.stylePack
|
|
83
|
+
},
|
|
84
|
+
children
|
|
85
|
+
);
|
|
86
|
+
return /* @__PURE__ */ React2.createElement(PinfoldContext.Provider, { value }, body);
|
|
87
|
+
}
|
|
88
|
+
function mergeDefaults(parent, own) {
|
|
89
|
+
if (!own) return parent;
|
|
90
|
+
const out = { ...parent };
|
|
91
|
+
for (const key in own) out[key] = { ...parent[key], ...own[key] };
|
|
92
|
+
return out;
|
|
93
|
+
}
|
|
94
|
+
function stableKey(obj) {
|
|
95
|
+
let fn = 0;
|
|
96
|
+
return JSON.stringify(obj, (_, v) => typeof v === "function" ? `fn${fn++}` : v);
|
|
97
|
+
}
|
|
98
|
+
function restore(el, attr, v) {
|
|
99
|
+
if (v == null) el.removeAttribute(attr);
|
|
100
|
+
else el.setAttribute(attr, v);
|
|
101
|
+
}
|
|
102
|
+
function stripUndefined(obj) {
|
|
103
|
+
const out = {};
|
|
104
|
+
for (const k in obj) if (obj[k] !== void 0) out[k] = obj[k];
|
|
105
|
+
return out;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export {
|
|
109
|
+
useIsomorphicLayoutEffect,
|
|
110
|
+
useId2 as useId,
|
|
111
|
+
useEvent,
|
|
112
|
+
useControllableState,
|
|
113
|
+
usePinfold,
|
|
114
|
+
PinfoldProvider
|
|
115
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }'use client';
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _chunkVPKVOJHAcjs = require('./chunk-VPKVOJHA.cjs');
|
|
6
|
+
|
|
7
|
+
// src/lazy.tsx
|
|
8
|
+
var _react = require('react'); var React = _interopRequireWildcard(_react);
|
|
9
|
+
function createLazyComponent(loader, options = {}) {
|
|
10
|
+
var _a, _b;
|
|
11
|
+
const Lazy = React.lazy(loader);
|
|
12
|
+
const fallback = (_a = options.fallback) != null ? _a : null;
|
|
13
|
+
const Wrapped = (props) => {
|
|
14
|
+
var _a2, _b2;
|
|
15
|
+
const ctx = _chunkVPKVOJHAcjs.usePinfold.call(void 0, );
|
|
16
|
+
const preferred = (_a2 = props.lazy) != null ? _a2 : ctx.lazy;
|
|
17
|
+
const strategy = preferred === "auto" ? (_b2 = options.auto) != null ? _b2 : "eager" : preferred;
|
|
18
|
+
const [ready, setReady] = React.useState(strategy === "eager");
|
|
19
|
+
const placeholder = React.useRef(null);
|
|
20
|
+
React.useEffect(() => {
|
|
21
|
+
if (ready) return;
|
|
22
|
+
if (strategy === "idle") {
|
|
23
|
+
const w = window;
|
|
24
|
+
if (w.requestIdleCallback) {
|
|
25
|
+
const id2 = w.requestIdleCallback(() => setReady(true));
|
|
26
|
+
return () => {
|
|
27
|
+
var _a3;
|
|
28
|
+
return (_a3 = w.cancelIdleCallback) == null ? void 0 : _a3.call(w, id2);
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const id = setTimeout(() => setReady(true), 200);
|
|
32
|
+
return () => clearTimeout(id);
|
|
33
|
+
}
|
|
34
|
+
const el = placeholder.current;
|
|
35
|
+
if (!el || typeof IntersectionObserver === "undefined") {
|
|
36
|
+
setReady(true);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const observer = new IntersectionObserver(
|
|
40
|
+
(entries) => {
|
|
41
|
+
if (entries.some((e) => e.isIntersecting)) {
|
|
42
|
+
setReady(true);
|
|
43
|
+
observer.disconnect();
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
{ rootMargin: "200px" }
|
|
47
|
+
);
|
|
48
|
+
observer.observe(el);
|
|
49
|
+
return () => observer.disconnect();
|
|
50
|
+
}, [ready, strategy]);
|
|
51
|
+
if (!ready) {
|
|
52
|
+
return /* @__PURE__ */ React.createElement("div", { ref: placeholder, "data-pinfold-lazy": "", style: { minHeight: 1 } }, fallback);
|
|
53
|
+
}
|
|
54
|
+
return /* @__PURE__ */ React.createElement(React.Suspense, { fallback }, React.createElement(Lazy, props));
|
|
55
|
+
};
|
|
56
|
+
Wrapped.displayName = (_b = options.displayName) != null ? _b : "PinfoldLazy";
|
|
57
|
+
return Wrapped;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
exports.createLazyComponent = createLazyComponent;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }'use client';
|
|
3
|
+
|
|
4
|
+
// src/hooks.ts
|
|
5
|
+
var _react = require('react'); var React = _interopRequireWildcard(_react); var React2 = _interopRequireWildcard(_react);
|
|
6
|
+
var useIsomorphicLayoutEffect = typeof document !== "undefined" ? React.useLayoutEffect : React.useEffect;
|
|
7
|
+
function useId2(provided) {
|
|
8
|
+
const generated = React.useId();
|
|
9
|
+
return provided || "pinfold-" + generated.replace(/[^\w-]/g, "");
|
|
10
|
+
}
|
|
11
|
+
function useEvent(fn) {
|
|
12
|
+
const ref = React.useRef(fn);
|
|
13
|
+
useIsomorphicLayoutEffect(() => {
|
|
14
|
+
ref.current = fn;
|
|
15
|
+
});
|
|
16
|
+
return React.useCallback(((...args) => ref.current(...args)), []);
|
|
17
|
+
}
|
|
18
|
+
function useControllableState({
|
|
19
|
+
value,
|
|
20
|
+
defaultValue,
|
|
21
|
+
onChange
|
|
22
|
+
}) {
|
|
23
|
+
const [uncontrolled, setUncontrolled] = React.useState(defaultValue);
|
|
24
|
+
const isControlled = value !== void 0;
|
|
25
|
+
const current = isControlled ? value : uncontrolled;
|
|
26
|
+
const currentRef = React.useRef(current);
|
|
27
|
+
currentRef.current = current;
|
|
28
|
+
const setValue = useEvent((next) => {
|
|
29
|
+
const resolved = typeof next === "function" ? next(currentRef.current) : next;
|
|
30
|
+
if (Object.is(resolved, currentRef.current)) return;
|
|
31
|
+
if (!isControlled) setUncontrolled(resolved);
|
|
32
|
+
onChange == null ? void 0 : onChange(resolved);
|
|
33
|
+
});
|
|
34
|
+
return [current, setValue];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// src/provider.tsx
|
|
38
|
+
|
|
39
|
+
var DEFAULTS = {
|
|
40
|
+
theme: "system",
|
|
41
|
+
radius: "md",
|
|
42
|
+
dir: "ltr",
|
|
43
|
+
size: "md",
|
|
44
|
+
tone: "primary",
|
|
45
|
+
stylePack: "default",
|
|
46
|
+
lazy: "auto",
|
|
47
|
+
disableAnimation: false,
|
|
48
|
+
defaults: {}
|
|
49
|
+
};
|
|
50
|
+
var PinfoldContext = React2.createContext(DEFAULTS);
|
|
51
|
+
function usePinfold() {
|
|
52
|
+
return React2.useContext(PinfoldContext);
|
|
53
|
+
}
|
|
54
|
+
function PinfoldProvider(props) {
|
|
55
|
+
const { children, applyToDocument = false, className, config, ...own } = props;
|
|
56
|
+
const parent = React2.useContext(PinfoldContext);
|
|
57
|
+
const overrides = { ...stripUndefined(config != null ? config : {}), ...stripUndefined(own) };
|
|
58
|
+
const value = React2.useMemo(
|
|
59
|
+
() => ({ ...parent, ...overrides, defaults: mergeDefaults(parent.defaults, overrides.defaults) }),
|
|
60
|
+
// Keyed on the serialised overrides: configs are plain data, and inline objects must not bust the memo.
|
|
61
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
62
|
+
[parent, stableKey(overrides)]
|
|
63
|
+
);
|
|
64
|
+
useIsomorphicLayoutEffect(() => {
|
|
65
|
+
if (!applyToDocument) return;
|
|
66
|
+
const el = document.documentElement;
|
|
67
|
+
const attrs = [
|
|
68
|
+
["data-pinfold-theme", value.theme === "system" ? null : value.theme],
|
|
69
|
+
["data-pinfold-radius", value.radius],
|
|
70
|
+
["data-pinfold-style", value.stylePack === "default" ? null : value.stylePack]
|
|
71
|
+
];
|
|
72
|
+
const previous = attrs.map(([name]) => el.getAttribute(name));
|
|
73
|
+
attrs.forEach(([name, v]) => restore(el, name, v));
|
|
74
|
+
return () => attrs.forEach(([name], i) => restore(el, name, previous[i]));
|
|
75
|
+
}, [applyToDocument, value.theme, value.radius, value.stylePack]);
|
|
76
|
+
const body = applyToDocument ? children : /* @__PURE__ */ React2.createElement(
|
|
77
|
+
"div",
|
|
78
|
+
{
|
|
79
|
+
className: className ? "pinfold " + className : "pinfold",
|
|
80
|
+
dir: value.dir,
|
|
81
|
+
"data-pinfold-theme": value.theme === "system" ? void 0 : value.theme,
|
|
82
|
+
"data-pinfold-radius": value.radius,
|
|
83
|
+
"data-pinfold-style": value.stylePack === "default" ? void 0 : value.stylePack
|
|
84
|
+
},
|
|
85
|
+
children
|
|
86
|
+
);
|
|
87
|
+
return /* @__PURE__ */ React2.createElement(PinfoldContext.Provider, { value }, body);
|
|
88
|
+
}
|
|
89
|
+
function mergeDefaults(parent, own) {
|
|
90
|
+
if (!own) return parent;
|
|
91
|
+
const out = { ...parent };
|
|
92
|
+
for (const key in own) out[key] = { ...parent[key], ...own[key] };
|
|
93
|
+
return out;
|
|
94
|
+
}
|
|
95
|
+
function stableKey(obj) {
|
|
96
|
+
let fn = 0;
|
|
97
|
+
return JSON.stringify(obj, (_, v) => typeof v === "function" ? `fn${fn++}` : v);
|
|
98
|
+
}
|
|
99
|
+
function restore(el, attr, v) {
|
|
100
|
+
if (v == null) el.removeAttribute(attr);
|
|
101
|
+
else el.setAttribute(attr, v);
|
|
102
|
+
}
|
|
103
|
+
function stripUndefined(obj) {
|
|
104
|
+
const out = {};
|
|
105
|
+
for (const k in obj) if (obj[k] !== void 0) out[k] = obj[k];
|
|
106
|
+
return out;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect; exports.useId = useId2; exports.useEvent = useEvent; exports.useControllableState = useControllableState; exports.usePinfold = usePinfold; exports.PinfoldProvider = PinfoldProvider;
|
package/dist/client.cjs
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});'use client';
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkDQWSDHRYcjs = require('./chunk-DQWSDHRY.cjs');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
var _chunkRJPT3NTPcjs = require('./chunk-RJPT3NTP.cjs');
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
var _chunkVPKVOJHAcjs = require('./chunk-VPKVOJHA.cjs');
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
exports.PinfoldProvider = _chunkVPKVOJHAcjs.PinfoldProvider; exports.createLazyComponent = _chunkRJPT3NTPcjs.createLazyComponent; exports.renderSlot = _chunkDQWSDHRYcjs.renderSlot; exports.slotProps = _chunkDQWSDHRYcjs.slotProps; exports.useControllableState = _chunkVPKVOJHAcjs.useControllableState; exports.useEvent = _chunkVPKVOJHAcjs.useEvent; exports.useId = _chunkVPKVOJHAcjs.useId; exports.useIsomorphicLayoutEffect = _chunkVPKVOJHAcjs.useIsomorphicLayoutEffect; exports.usePinfold = _chunkVPKVOJHAcjs.usePinfold; exports.usePinfoldComponent = _chunkDQWSDHRYcjs.usePinfoldComponent;
|