@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.
Files changed (34) hide show
  1. package/README.md +3 -0
  2. package/dist/components/Badge/Badge.d.ts +3 -1
  3. package/dist/components/Badge/Badge.js +7 -2
  4. package/dist/components/Badge/Badge.js.map +1 -1
  5. package/dist/components/Badge/Badge.module.css +18 -0
  6. package/dist/components/Input/Select/Select.d.ts +50 -14
  7. package/dist/components/Input/Select/Select.js +72 -36
  8. package/dist/components/Input/Select/Select.js.map +1 -1
  9. package/dist/components/Menu/Dropdown.d.ts +2 -1
  10. package/dist/components/Menu/Dropdown.js +28 -7
  11. package/dist/components/Menu/Dropdown.js.map +1 -1
  12. package/dist/components/Table/Table.d.ts +4 -0
  13. package/dist/components/Table/Table.js +87 -78
  14. package/dist/components/Table/Table.js.map +1 -1
  15. package/dist/components/Table/Table.module.css +32 -1
  16. package/dist/components/Tabs/Tabs.js +7 -6
  17. package/dist/components/Tabs/Tabs.js.map +1 -1
  18. package/dist/components/Tooltip/Tooltip.js +4 -2
  19. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  20. package/dist/components/Tooltip/Tooltip.module.css +5 -0
  21. package/dist/foundations/index.css +1 -0
  22. package/dist/{components/Tabs/Tabs.module.css → foundations/tabs.css} +14 -11
  23. package/dist/hooks/useDropdownPosition.d.ts +1 -0
  24. package/dist/hooks/useDropdownPosition.js +33 -3
  25. package/dist/hooks/useDropdownPosition.js.map +1 -1
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.js.map +1 -1
  28. package/docs/README.md +1 -0
  29. package/docs/feedback.md +3 -0
  30. package/docs/forms.md +22 -0
  31. package/docs/navigation.md +3 -0
  32. package/docs/table.md +24 -0
  33. package/docs/tabs.md +17 -0
  34. 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
- }, [open, compute]);
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":"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"}
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;AACrE,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,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
@@ -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
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phpsoftbox/react-softbox",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",