@phpsoftbox/react-softbox 0.4.0 → 0.4.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.
- package/README.md +3 -0
- package/dist/components/Badge/Badge.d.ts +3 -1
- package/dist/components/Badge/Badge.js +7 -2
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/Badge/Badge.module.css +18 -0
- package/dist/components/Input/Select/Select.d.ts +50 -14
- package/dist/components/Input/Select/Select.js +72 -36
- package/dist/components/Input/Select/Select.js.map +1 -1
- package/dist/components/Menu/Dropdown.d.ts +2 -1
- package/dist/components/Menu/Dropdown.js +28 -7
- package/dist/components/Menu/Dropdown.js.map +1 -1
- package/dist/components/Table/Table.d.ts +4 -0
- package/dist/components/Table/Table.js +87 -78
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Table/Table.module.css +32 -1
- package/dist/components/Tabs/Tabs.js +7 -6
- package/dist/components/Tabs/Tabs.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.js +4 -2
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.module.css +5 -0
- package/dist/foundations/index.css +1 -0
- package/dist/{components/Tabs/Tabs.module.css → foundations/tabs.css} +14 -11
- package/dist/hooks/useDropdownPosition.d.ts +1 -0
- package/dist/hooks/useDropdownPosition.js +33 -3
- package/dist/hooks/useDropdownPosition.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js.map +1 -1
- package/docs/README.md +1 -0
- package/docs/feedback.md +3 -0
- package/docs/forms.md +22 -0
- package/docs/navigation.md +3 -0
- package/docs/table.md +24 -0
- package/docs/tabs.md +17 -0
- package/package.json +1 -1
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
|
|
3
3
|
export default function useDropdownPosition(open, options = {}) {
|
|
4
|
-
const { gap = 8, align = 'right', placement: requestedPlacement = 'auto', anchorRef } = options;
|
|
4
|
+
const { gap = 8, align = 'right', placement: requestedPlacement = 'auto', anchorRef, strategy = 'absolute' } = options;
|
|
5
5
|
const ref = React.useRef(null);
|
|
6
6
|
const [style, setStyle] = React.useState({});
|
|
7
7
|
const [currentPlacement, setCurrentPlacement] = React.useState('down');
|
|
8
|
+
const clamp = (value, min, max) => Math.min(Math.max(value, min), max);
|
|
8
9
|
const compute = React.useCallback(() => {
|
|
9
10
|
if (!ref.current) {
|
|
10
11
|
return;
|
|
@@ -38,6 +39,25 @@ export default function useDropdownPosition(open, options = {}) {
|
|
|
38
39
|
maxHeight = Math.max(140, availableSpace);
|
|
39
40
|
}
|
|
40
41
|
setCurrentPlacement(nextPlacement);
|
|
42
|
+
if (strategy === 'fixed' && anchorRef?.current) {
|
|
43
|
+
const anchor = anchorRef.current.getBoundingClientRect();
|
|
44
|
+
let left = align === 'right' ? anchor.right - rect.width : anchor.left;
|
|
45
|
+
const maxLeft = window.innerWidth - padding - rect.width;
|
|
46
|
+
left = clamp(left, padding, Math.max(padding, maxLeft));
|
|
47
|
+
let top = nextPlacement === 'down' ? anchor.bottom + gap : anchor.top - rect.height - gap;
|
|
48
|
+
const maxTop = window.innerHeight - padding - rect.height;
|
|
49
|
+
top = clamp(top, padding, Math.max(padding, maxTop));
|
|
50
|
+
setStyle({
|
|
51
|
+
position: 'fixed',
|
|
52
|
+
top: `${top}px`,
|
|
53
|
+
left: `${left}px`,
|
|
54
|
+
maxWidth: maxWidth ? `${maxWidth}px` : undefined,
|
|
55
|
+
maxHeight: maxHeight ? `${maxHeight}px` : undefined,
|
|
56
|
+
overflowY: maxHeight ? 'auto' : undefined,
|
|
57
|
+
transformOrigin: `${nextPlacement === 'up' ? 'bottom' : 'top'} ${align}`,
|
|
58
|
+
});
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
41
61
|
setStyle({
|
|
42
62
|
marginLeft: offset ? `${offset}px` : undefined,
|
|
43
63
|
maxWidth: maxWidth ? `${maxWidth}px` : undefined,
|
|
@@ -47,7 +67,7 @@ export default function useDropdownPosition(open, options = {}) {
|
|
|
47
67
|
bottom: nextPlacement === 'up' ? `calc(100% + ${gap}px)` : 'auto',
|
|
48
68
|
transformOrigin: `${nextPlacement === 'up' ? 'bottom' : 'top'} ${align}`,
|
|
49
69
|
});
|
|
50
|
-
}, [gap, align, requestedPlacement, anchorRef]);
|
|
70
|
+
}, [gap, align, requestedPlacement, anchorRef, strategy]);
|
|
51
71
|
useIsomorphicLayoutEffect(() => {
|
|
52
72
|
if (!open) {
|
|
53
73
|
setStyle({});
|
|
@@ -55,7 +75,17 @@ export default function useDropdownPosition(open, options = {}) {
|
|
|
55
75
|
return;
|
|
56
76
|
}
|
|
57
77
|
compute();
|
|
58
|
-
|
|
78
|
+
if (strategy !== 'fixed') {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const handler = () => compute();
|
|
82
|
+
window.addEventListener('resize', handler);
|
|
83
|
+
window.addEventListener('scroll', handler, true);
|
|
84
|
+
return () => {
|
|
85
|
+
window.removeEventListener('resize', handler);
|
|
86
|
+
window.removeEventListener('scroll', handler, true);
|
|
87
|
+
};
|
|
88
|
+
}, [open, compute, strategy]);
|
|
59
89
|
return { ref, style, placement: currentPlacement };
|
|
60
90
|
}
|
|
61
91
|
//# sourceMappingURL=useDropdownPosition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDropdownPosition.js","sourceRoot":"","sources":["../../src/hooks/useDropdownPosition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useDropdownPosition.js","sourceRoot":"","sources":["../../src/hooks/useDropdownPosition.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export { default as Radio } from './components/Input/Radio/Radio';
|
|
|
9
9
|
export { default as Switch } from './components/Input/Switch/Switch';
|
|
10
10
|
export { default as Checkbox } from './components/Input/Checkbox/Checkbox';
|
|
11
11
|
export { default as Select } from './components/Input/Select/Select';
|
|
12
|
+
export type { SelectOption, SelectOptionValue } from './components/Input/Select/Select';
|
|
12
13
|
export { default as Alert } from './components/Alert/Alert';
|
|
13
14
|
export { default as Notifier } from './components/Notifier/Notifier';
|
|
14
15
|
export { default as FloatLabel } from './components/Input/FloatLabel/FloatLabel';
|
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;
|
|
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"}
|
package/docs/README.md
CHANGED
|
@@ -13,6 +13,7 @@ ReactSoftBox — набор базовых компонентов для адм
|
|
|
13
13
|
- Все компоненты самодостаточны и не зависят от глобальных CSS.
|
|
14
14
|
- Адаптив — через `Grid`/`Row` и CSS‑модули компонентов.
|
|
15
15
|
- Состояния (hover, focus, disabled) задаются внутри компонента.
|
|
16
|
+
- `Dropdown` по умолчанию рендерится через портал (`portal={true}`), чтобы не клиппиться контейнерами со скроллом.
|
|
16
17
|
|
|
17
18
|
## Быстрый старт
|
|
18
19
|
|
package/docs/feedback.md
CHANGED
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
<Badge variant="success">Success</Badge>
|
|
12
12
|
<Badge variant="warning">Warning</Badge>
|
|
13
13
|
<Badge variant="danger">Danger</Badge>
|
|
14
|
+
<Badge size="sm" variant="info">Small</Badge>
|
|
15
|
+
<Badge size="md" variant="info">Medium</Badge>
|
|
16
|
+
<Badge size="lg" variant="info">Large</Badge>
|
|
14
17
|
```
|
|
15
18
|
|
|
16
19
|
## Alert
|
package/docs/forms.md
CHANGED
|
@@ -106,6 +106,28 @@ const options = [
|
|
|
106
106
|
</Input>
|
|
107
107
|
```
|
|
108
108
|
|
|
109
|
+
`value` и `options.value` могут быть `string` или `number`.
|
|
110
|
+
|
|
111
|
+
Для строгой типизации можно указать тип значения:
|
|
112
|
+
|
|
113
|
+
```tsx
|
|
114
|
+
import type { SelectOption } from '@phpsoftbox/react-softbox';
|
|
115
|
+
|
|
116
|
+
type StatusValue = 10 | 20 | 30;
|
|
117
|
+
|
|
118
|
+
const statusOptions = [
|
|
119
|
+
{ value: 10, label: 'Active' },
|
|
120
|
+
{ value: 20, label: 'Blocked' },
|
|
121
|
+
{ value: 30, label: 'Deleted' },
|
|
122
|
+
] satisfies SelectOption<StatusValue>[];
|
|
123
|
+
|
|
124
|
+
<Input.Select<StatusValue>
|
|
125
|
+
options={statusOptions}
|
|
126
|
+
value={status}
|
|
127
|
+
onChange={(value) => setStatus(value)}
|
|
128
|
+
/>;
|
|
129
|
+
```
|
|
130
|
+
|
|
109
131
|
### Поиск + multiple
|
|
110
132
|
|
|
111
133
|
```tsx
|
package/docs/navigation.md
CHANGED
|
@@ -95,6 +95,9 @@ const topMenu = [
|
|
|
95
95
|
</Dropdown>
|
|
96
96
|
```
|
|
97
97
|
|
|
98
|
+
По умолчанию dropdown рендерится через портал (`portal={true}`), чтобы не клиппиться контейнерами со скроллом.
|
|
99
|
+
Если нужно встроенное поведение, передайте `portal={false}`.
|
|
100
|
+
|
|
98
101
|
## CollapseButton
|
|
99
102
|
|
|
100
103
|
Универсальная кнопка для коллапса/бургер‑меню.
|
package/docs/table.md
CHANGED
|
@@ -104,6 +104,30 @@ const [selected, setSelected] = useState<React.Key[]>([]);
|
|
|
104
104
|
/>;
|
|
105
105
|
```
|
|
106
106
|
|
|
107
|
+
## Bulk actions
|
|
108
|
+
|
|
109
|
+
```tsx
|
|
110
|
+
<Table
|
|
111
|
+
columns={columns}
|
|
112
|
+
data={rows}
|
|
113
|
+
selection={{
|
|
114
|
+
selectedIds: selected,
|
|
115
|
+
onToggle: (id) => setSelected((prev) => prev.includes(id) ? prev.filter((key) => key !== id) : [...prev, id]),
|
|
116
|
+
}}
|
|
117
|
+
bulkActions={{
|
|
118
|
+
selectedIds: selected,
|
|
119
|
+
actions: [
|
|
120
|
+
{ id: 'remove', label: 'Удалить', onClick: (ids) => console.log(ids), variant: 'danger' },
|
|
121
|
+
{ id: 'restore', label: 'Восстановить', onClick: (ids) => console.log(ids), icon: '+' },
|
|
122
|
+
],
|
|
123
|
+
disabled: false,
|
|
124
|
+
placement: 'both',
|
|
125
|
+
}}
|
|
126
|
+
/>;
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
По умолчанию `placement` = `both`.
|
|
130
|
+
|
|
107
131
|
## Полезные поля колонки
|
|
108
132
|
|
|
109
133
|
- `field` / `accessor` / `cell` — источник данных
|
package/docs/tabs.md
CHANGED
|
@@ -32,3 +32,20 @@ const [activeId, setActiveId] = useState('overview');
|
|
|
32
32
|
|
|
33
33
|
- `badge` — дополнительная метка справа (например, `<Badge variant="info">3</Badge>`).
|
|
34
34
|
- `defaultActiveId` — активная вкладка по умолчанию (uncontrolled).
|
|
35
|
+
|
|
36
|
+
## CSS‑классы для ссылок
|
|
37
|
+
|
|
38
|
+
Можно использовать стили табов для ссылок:
|
|
39
|
+
|
|
40
|
+
```tsx
|
|
41
|
+
<div className="tabs tabs-horizontal">
|
|
42
|
+
<div className="tabs-list">
|
|
43
|
+
<a className="tab tab-active" href="#overview">
|
|
44
|
+
<span className="tab-label">Обзор</span>
|
|
45
|
+
</a>
|
|
46
|
+
<a className="tab" href="#metrics">
|
|
47
|
+
<span className="tab-label">Метрики</span>
|
|
48
|
+
</a>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
```
|