@phpsoftbox/react-softbox 0.5.3 → 0.6.1
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 +1 -0
- package/dist/components/Collapse/Collapse.d.ts +7 -0
- package/dist/components/Collapse/Collapse.js +46 -0
- package/dist/components/Collapse/Collapse.js.map +1 -0
- package/dist/components/Collapse/Collapse.module.css +25 -0
- package/dist/components/CollapseButton/CollapseButton.module.css +2 -2
- package/dist/components/Input/Input.d.ts +2 -2
- package/dist/foundations/typography.css +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/docs/README.md +1 -1
- package/docs/layout.md +18 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type Props = React.HTMLAttributes<HTMLDivElement> & {
|
|
3
|
+
open: boolean;
|
|
4
|
+
duration?: number;
|
|
5
|
+
};
|
|
6
|
+
export default function Collapse({ open, duration, className, style, children, ...props }: Props): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import styles from './Collapse.module.css';
|
|
4
|
+
const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
|
|
5
|
+
export default function Collapse({ open, duration = 180, className, style, children, ...props }) {
|
|
6
|
+
const contentRef = React.useRef(null);
|
|
7
|
+
const [height, setHeight] = React.useState(open ? 'auto' : 0);
|
|
8
|
+
useIsomorphicLayoutEffect(() => {
|
|
9
|
+
const node = contentRef.current;
|
|
10
|
+
if (!node) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (open) {
|
|
14
|
+
const nextHeight = node.scrollHeight;
|
|
15
|
+
setHeight(nextHeight);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (height === 'auto') {
|
|
19
|
+
const nextHeight = node.scrollHeight;
|
|
20
|
+
setHeight(nextHeight);
|
|
21
|
+
if (typeof window !== 'undefined') {
|
|
22
|
+
window.requestAnimationFrame(() => setHeight(0));
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
setHeight(0);
|
|
26
|
+
}
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
setHeight(0);
|
|
30
|
+
}, [open]);
|
|
31
|
+
const handleTransitionEnd = (event) => {
|
|
32
|
+
if (event.propertyName !== 'height') {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (open) {
|
|
36
|
+
setHeight('auto');
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const resolvedStyle = {
|
|
40
|
+
...style,
|
|
41
|
+
height: typeof height === 'number' ? `${height}px` : height,
|
|
42
|
+
transitionDuration: `${duration}ms`,
|
|
43
|
+
};
|
|
44
|
+
return (_jsx("div", { className: [styles.collapse, className].filter(Boolean).join(' '), style: resolvedStyle, "data-state": open ? 'open' : 'closed', "aria-hidden": !open, onTransitionEnd: handleTransitionEnd, ...props, children: _jsx("div", { ref: contentRef, className: styles.inner, children: children }) }));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=Collapse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Collapse.js","sourceRoot":"","sources":["../../../src/components/Collapse/Collapse.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAO3C,MAAM,yBAAyB,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;AAE1G,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,GAAG,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAS;IACpG,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IACtD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAkB,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/E,yBAAyB,CAAC,GAAG,EAAE;QAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;YACrC,SAAS,CAAC,UAAU,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;YACrC,SAAS,CAAC,UAAU,CAAC,CAAC;YACtB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;YACD,OAAO;QACT,CAAC;QAED,SAAS,CAAC,CAAC,CAAC,CAAC;IACf,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,mBAAmB,GAAG,CAAC,KAA4C,EAAE,EAAE;QAC3E,IAAI,KAAK,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,SAAS,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,aAAa,GAAwB;QACzC,GAAG,KAAK;QACR,MAAM,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM;QAC3D,kBAAkB,EAAE,GAAG,QAAQ,IAAI;KACpC,CAAC;IAEF,OAAO,CACL,cACE,SAAS,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EACjE,KAAK,EAAE,aAAa,gBACR,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,iBACvB,CAAC,IAAI,EAClB,eAAe,EAAE,mBAAmB,KAChC,KAAK,YAET,cAAK,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,YAC1C,QAAQ,GACL,GACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
.collapse {
|
|
2
|
+
--collapse-padding-y: var(--spacing-3);
|
|
3
|
+
--collapse-padding-x: var(--spacing-4);
|
|
4
|
+
overflow: hidden;
|
|
5
|
+
opacity: 0;
|
|
6
|
+
pointer-events: none;
|
|
7
|
+
transition: height var(--collapse-duration, 180ms) ease, opacity var(--collapse-duration, 180ms) ease;
|
|
8
|
+
will-change: height, opacity;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.collapse[data-state='open'] {
|
|
12
|
+
opacity: 1;
|
|
13
|
+
pointer-events: auto;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.inner {
|
|
17
|
+
display: block;
|
|
18
|
+
padding: var(--collapse-padding-y) var(--collapse-padding-x);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@media (prefers-reduced-motion: reduce) {
|
|
22
|
+
.collapse {
|
|
23
|
+
transition: none;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
border: 1px solid rgba(30, 99, 233, 0.3);
|
|
6
6
|
background: var(--surface-control);
|
|
7
7
|
color: var(--color-text);
|
|
8
|
-
padding:
|
|
9
|
-
border-radius:
|
|
8
|
+
padding: var(--spacing-3) calc(var(--spacing-4) + var(--spacing-1) / 2);
|
|
9
|
+
border-radius: var(--radius-sm);
|
|
10
10
|
cursor: pointer;
|
|
11
11
|
}
|
|
12
12
|
|
|
@@ -15,7 +15,7 @@ declare const Input: import("react").FC<import("react").HTMLAttributes<HTMLDivEl
|
|
|
15
15
|
layout?: "row" | "column";
|
|
16
16
|
gap?: number | string;
|
|
17
17
|
labelWidth?: number | string;
|
|
18
|
-
align?: "
|
|
18
|
+
align?: "center" | "end" | "start";
|
|
19
19
|
labelAlign?: "right" | "center" | "left";
|
|
20
20
|
}> & {
|
|
21
21
|
Label: React.FC<import("react").LabelHTMLAttributes<HTMLLabelElement>>;
|
|
@@ -50,7 +50,7 @@ declare const Input: import("react").FC<import("react").HTMLAttributes<HTMLDivEl
|
|
|
50
50
|
layout?: "row" | "column";
|
|
51
51
|
gap?: number | string;
|
|
52
52
|
labelWidth?: number | string;
|
|
53
|
-
align?: "
|
|
53
|
+
align?: "center" | "end" | "start";
|
|
54
54
|
labelAlign?: "right" | "center" | "left";
|
|
55
55
|
}> & {
|
|
56
56
|
Label: React.FC<import("react").LabelHTMLAttributes<HTMLLabelElement>>;
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export { default as Button } from './components/Button/Button';
|
|
|
2
2
|
export { default as Badge } from './components/Badge/Badge';
|
|
3
3
|
export { default as Card } from './components/Card/Card';
|
|
4
4
|
export { default as CollapseButton } from './components/CollapseButton/CollapseButton';
|
|
5
|
+
export { default as Collapse } from './components/Collapse/Collapse';
|
|
5
6
|
export { default as FormField } from './components/Input/FormField/FormField';
|
|
6
7
|
export { default as Input } from './components/Input/Input';
|
|
7
8
|
export { default as Textarea } from './components/Input/Textarea/Textarea';
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@ export { default as Button } from './components/Button/Button';
|
|
|
2
2
|
export { default as Badge } from './components/Badge/Badge';
|
|
3
3
|
export { default as Card } from './components/Card/Card';
|
|
4
4
|
export { default as CollapseButton } from './components/CollapseButton/CollapseButton';
|
|
5
|
+
export { default as Collapse } from './components/Collapse/Collapse';
|
|
5
6
|
export { default as FormField } from './components/Input/FormField/FormField';
|
|
6
7
|
export { default as Input } from './components/Input/Input';
|
|
7
8
|
export { default as Textarea } from './components/Input/Textarea/Textarea';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAY5D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAY5D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC"}
|
package/docs/README.md
CHANGED
|
@@ -27,7 +27,7 @@ import { Button, Card, Menu } from '@phpsoftbox/react-softbox';
|
|
|
27
27
|
|
|
28
28
|
## Разделы
|
|
29
29
|
|
|
30
|
-
- `layout.md` — Grid, Flex,
|
|
30
|
+
- `layout.md` — Grid, Flex, утилиты, Collapse
|
|
31
31
|
- `navigation.md` — Menu, Dropdown, CollapseButton
|
|
32
32
|
- `forms.md` — Input (Field/Select/FloatLabel), Switch, Radio, Checkbox, FileUploader
|
|
33
33
|
- `table.md` — Table, сортировка, футер
|
package/docs/layout.md
CHANGED
|
@@ -38,6 +38,24 @@
|
|
|
38
38
|
- `align`, `justify` — соответствуют flex‑свойствам
|
|
39
39
|
- `wrap` — управление переносом для `Row`
|
|
40
40
|
|
|
41
|
+
## Collapse
|
|
42
|
+
|
|
43
|
+
`Collapse` — анимированное сворачивание контента. Обычно используется вместе с `CollapseButton`.
|
|
44
|
+
|
|
45
|
+
```tsx
|
|
46
|
+
const [open, setOpen] = useState(false);
|
|
47
|
+
|
|
48
|
+
<CollapseButton targetId="filters-panel" open={open} onClick={() => setOpen((v) => !v)}>
|
|
49
|
+
Фильтры
|
|
50
|
+
</CollapseButton>
|
|
51
|
+
|
|
52
|
+
<Collapse id="filters-panel" open={open}>
|
|
53
|
+
<Card>
|
|
54
|
+
<Card.Body>Контент фильтров</Card.Body>
|
|
55
|
+
</Card>
|
|
56
|
+
</Collapse>
|
|
57
|
+
```
|
|
58
|
+
|
|
41
59
|
## Утилитарные отступы
|
|
42
60
|
|
|
43
61
|
Глобальные классы для отступов и gap основаны на `--spacing-1…10`.
|