@phpsoftbox/react-softbox 1.4.5 → 1.5.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 CHANGED
@@ -42,6 +42,7 @@ import {
42
42
  Text,
43
43
  Textarea,
44
44
  Tooltip,
45
+ Wizard,
45
46
  } from '@phpsoftbox/react-softbox';
46
47
  ```
47
48
 
@@ -71,6 +72,7 @@ setThemeMode('dark');
71
72
  - `docs/tabs.md`
72
73
  - `docs/progress.md`
73
74
  - `docs/breadcrumbs.md`
75
+ - `docs/wizard.md`
74
76
 
75
77
  ## Playground
76
78
 
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import Button from '../Button/Button';
2
3
  type CardProps = React.HTMLAttributes<HTMLDivElement>;
3
4
  type CardHeaderProps = React.HTMLAttributes<HTMLDivElement> & {
4
5
  title?: React.ReactNode;
@@ -8,10 +9,24 @@ type CardHeaderProps = React.HTMLAttributes<HTMLDivElement> & {
8
9
  type CardSectionProps = React.HTMLAttributes<HTMLDivElement>;
9
10
  type CardToolbarProps = React.HTMLAttributes<HTMLDivElement> & {
10
11
  align?: 'left' | 'right' | 'between';
12
+ buttonHideLabelOn?: 'never' | 'md';
11
13
  };
12
14
  type CardToolbarGroupProps = React.HTMLAttributes<HTMLDivElement>;
15
+ type CardToolbarButtonBaseProps = Omit<React.ComponentProps<typeof Button>, 'children'> & {
16
+ icon?: React.ReactNode;
17
+ label?: React.ReactNode;
18
+ hideLabelOn?: 'never' | 'md';
19
+ };
20
+ type CardToolbarButtonProps = (CardToolbarButtonBaseProps & {
21
+ icon: React.ReactNode;
22
+ label?: React.ReactNode;
23
+ }) | (CardToolbarButtonBaseProps & {
24
+ icon?: React.ReactNode;
25
+ label: React.ReactNode;
26
+ });
13
27
  type CardToolbarComponent = React.FC<CardToolbarProps> & {
14
28
  Group: React.FC<CardToolbarGroupProps>;
29
+ Button: React.FC<CardToolbarButtonProps>;
15
30
  };
16
31
  type CardComponent = React.FC<CardProps> & {
17
32
  Header: React.FC<CardHeaderProps>;
@@ -1,5 +1,7 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
2
3
  import styles from './Card.module.css';
4
+ import Button from '../Button/Button';
3
5
  function CardBase({ className, ...props }) {
4
6
  const classes = [styles.card, className].filter(Boolean).join(' ');
5
7
  return _jsx("section", { className: classes, ...props });
@@ -17,14 +19,128 @@ function CardFooter({ className, ...props }) {
17
19
  const classes = [styles.footer, className].filter(Boolean).join(' ');
18
20
  return _jsx("div", { className: classes, ...props });
19
21
  }
20
- function CardToolbarBase({ align = 'left', className, ...props }) {
22
+ const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
23
+ const CardToolbarContext = React.createContext({ hideLabelOn: 'md' });
24
+ const resolveToolbarRows = (elements) => {
25
+ let currentTop = null;
26
+ let currentRow = 0;
27
+ return elements.map((element) => {
28
+ const top = Math.round(element.offsetTop);
29
+ if (currentTop === null) {
30
+ currentTop = top;
31
+ return { row: currentRow, rowStart: true };
32
+ }
33
+ if (Math.abs(top - currentTop) > 1) {
34
+ currentTop = top;
35
+ currentRow += 1;
36
+ return { row: currentRow, rowStart: true };
37
+ }
38
+ return { row: currentRow, rowStart: false };
39
+ });
40
+ };
41
+ const isSameRows = (left, right) => {
42
+ if (left.length !== right.length) {
43
+ return false;
44
+ }
45
+ for (let index = 0; index < left.length; index += 1) {
46
+ if (left[index].row !== right[index].row || left[index].rowStart !== right[index].rowStart) {
47
+ return false;
48
+ }
49
+ }
50
+ return true;
51
+ };
52
+ function CardToolbarBase({ align = 'left', buttonHideLabelOn = 'md', className, children, ...props }) {
21
53
  const alignClass = align === 'right'
22
54
  ? styles.toolbarAlignRight
23
55
  : align === 'between'
24
56
  ? styles.toolbarAlignBetween
25
57
  : styles.toolbarAlignLeft;
26
58
  const classes = [styles.toolbar, alignClass, className].filter(Boolean).join(' ');
27
- return _jsx("div", { className: classes, ...props });
59
+ const rootRef = React.useRef(null);
60
+ const [rows, setRows] = React.useState([]);
61
+ const toolbarChildren = React.Children.toArray(children);
62
+ useIsomorphicLayoutEffect(() => {
63
+ const root = rootRef.current;
64
+ if (!root) {
65
+ return;
66
+ }
67
+ let frameId = null;
68
+ const collect = () => {
69
+ root.setAttribute('data-toolbar-measuring', 'true');
70
+ try {
71
+ const items = Array.from(root.querySelectorAll('[data-card-toolbar-item="true"]'));
72
+ const nextRows = resolveToolbarRows(items);
73
+ setRows((previousRows) => (isSameRows(previousRows, nextRows) ? previousRows : nextRows));
74
+ }
75
+ finally {
76
+ root.removeAttribute('data-toolbar-measuring');
77
+ }
78
+ };
79
+ const scheduleCollect = () => {
80
+ if (typeof window === 'undefined') {
81
+ collect();
82
+ return;
83
+ }
84
+ if (frameId !== null) {
85
+ window.cancelAnimationFrame(frameId);
86
+ }
87
+ frameId = window.requestAnimationFrame(() => {
88
+ frameId = null;
89
+ collect();
90
+ });
91
+ };
92
+ scheduleCollect();
93
+ const handleResize = () => scheduleCollect();
94
+ window.addEventListener('resize', handleResize);
95
+ if (typeof ResizeObserver !== 'undefined') {
96
+ const observer = new ResizeObserver(() => scheduleCollect());
97
+ observer.observe(root);
98
+ Array.from(root.children).forEach((child) => {
99
+ if (child instanceof HTMLElement) {
100
+ observer.observe(child);
101
+ }
102
+ });
103
+ return () => {
104
+ observer.disconnect();
105
+ window.removeEventListener('resize', handleResize);
106
+ if (frameId !== null) {
107
+ window.cancelAnimationFrame(frameId);
108
+ }
109
+ };
110
+ }
111
+ return () => {
112
+ window.removeEventListener('resize', handleResize);
113
+ if (frameId !== null) {
114
+ window.cancelAnimationFrame(frameId);
115
+ }
116
+ };
117
+ }, [toolbarChildren.length]);
118
+ return (_jsx(CardToolbarContext.Provider, { value: { hideLabelOn: buttonHideLabelOn }, children: _jsx("div", { ref: rootRef, className: classes, ...props, children: toolbarChildren.map((child, index) => {
119
+ const rowMeta = rows[index];
120
+ const key = React.isValidElement(child) && child.key !== null ? child.key : `toolbar-item-${index}`;
121
+ const row = rowMeta?.row ?? 0;
122
+ const rowStart = rowMeta?.rowStart ?? index === 0;
123
+ return (_jsx("div", { className: styles.toolbarItem, "data-card-toolbar-item": "true", "data-toolbar-row": row, "data-toolbar-row-start": rowStart ? 'true' : 'false', "data-toolbar-row-wrapped": row > 0 ? 'true' : 'false', children: child }, key));
124
+ }) }) }));
125
+ }
126
+ function CardToolbarButton({ icon, label, hideLabelOn, className, ...props }) {
127
+ const toolbarConfig = React.useContext(CardToolbarContext);
128
+ const resolvedHideLabelOn = hideLabelOn ?? toolbarConfig.hideLabelOn;
129
+ const hasIcon = icon !== undefined && icon !== null;
130
+ const hasLabel = label !== undefined && label !== null;
131
+ if (!hasIcon && !hasLabel) {
132
+ return null;
133
+ }
134
+ const hasBoth = hasIcon && hasLabel;
135
+ const classes = [
136
+ styles.toolbarButton,
137
+ hasBoth ? styles.toolbarButtonHasBoth : null,
138
+ hasBoth && resolvedHideLabelOn === 'md' ? styles.toolbarButtonHideLabelMd : null,
139
+ className,
140
+ ]
141
+ .filter(Boolean)
142
+ .join(' ');
143
+ return (_jsxs(Button, { size: "sm", appearance: "outline", className: classes, ...props, children: [hasIcon ? _jsx("span", { className: styles.toolbarButtonIcon, children: icon }) : null, hasBoth ? _jsx("span", { className: styles.toolbarButtonSeparator, "aria-hidden": "true" }) : null, hasLabel ? (_jsx("span", { className: styles.toolbarButtonLabel, children: label })) : null] }));
28
144
  }
29
145
  function CardToolbarGroup({ className, ...props }) {
30
146
  const classes = [styles.toolbarGroup, className].filter(Boolean).join(' ');
@@ -32,6 +148,7 @@ function CardToolbarGroup({ className, ...props }) {
32
148
  }
33
149
  const CardToolbar = Object.assign(CardToolbarBase, {
34
150
  Group: CardToolbarGroup,
151
+ Button: CardToolbarButton,
35
152
  });
36
153
  const Card = Object.assign(CardBase, {
37
154
  Header: CardHeader,
@@ -1 +1 @@
1
- {"version":3,"file":"Card.js","sourceRoot":"","sources":["../../../src/components/Card/Card.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Card.js","sourceRoot":"","sources":["../../../src/components/Card/Card.tsx"],"names":[],"mappings":"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"}
@@ -19,12 +19,15 @@
19
19
 
20
20
  .toolbar {
21
21
  display: flex;
22
- align-items: center;
23
- gap: var(--spacing-2);
22
+ align-items: stretch;
23
+ flex-wrap: wrap;
24
+ column-gap: var(--spacing-2);
25
+ row-gap: 0;
24
26
  padding: var(--spacing-2) var(--spacing-3);
25
27
  border-radius: var(--radius-md);
26
28
  border: 1px solid var(--color-line);
27
29
  background: var(--surface-panel-soft);
30
+ overflow: hidden;
28
31
  }
29
32
 
30
33
  .toolbarAlignLeft {
@@ -39,30 +42,95 @@
39
42
  justify-content: space-between;
40
43
  }
41
44
 
42
- .toolbarGroup {
43
- display: inline-flex;
45
+ .toolbarItem {
46
+ display: flex;
44
47
  align-items: center;
45
- gap: var(--spacing-2);
46
- min-height: 30px;
47
- position: relative;
48
+ min-width: 0;
48
49
  }
49
50
 
50
- .toolbarGroup + .toolbarGroup {
51
- margin-left: var(--spacing-1);
52
- padding-left: var(--spacing-3);
51
+ .toolbarItem[data-toolbar-row-start="false"] {
52
+ position: relative;
53
53
  }
54
54
 
55
- .toolbarGroup + .toolbarGroup::before {
55
+ .toolbarItem[data-toolbar-row-start="false"]::before {
56
56
  content: '';
57
57
  position: absolute;
58
- left: 0;
59
- top: 2px;
60
- bottom: 2px;
58
+ left: calc(var(--spacing-2) / -2);
59
+ top: 0;
60
+ bottom: 0;
61
61
  width: 1px;
62
62
  background: var(--color-line);
63
63
  opacity: 0.55;
64
64
  }
65
65
 
66
+ .toolbarItem[data-toolbar-row-wrapped="true"] {
67
+ margin-top: var(--spacing-2);
68
+ padding-top: var(--spacing-2);
69
+ }
70
+
71
+ .toolbarItem[data-toolbar-row-start="true"][data-toolbar-row-wrapped="true"] {
72
+ position: relative;
73
+ }
74
+
75
+ .toolbarItem[data-toolbar-row-start="true"][data-toolbar-row-wrapped="true"]::before {
76
+ content: '';
77
+ position: absolute;
78
+ top: 0;
79
+ left: -2000px;
80
+ right: -2000px;
81
+ height: 1px;
82
+ background: var(--color-line);
83
+ }
84
+
85
+ .toolbar[data-toolbar-measuring="true"] .toolbarItem[data-toolbar-row-wrapped="true"] {
86
+ margin-top: 0;
87
+ padding-top: 0;
88
+ }
89
+
90
+ .toolbar[data-toolbar-measuring="true"] .toolbarItem[data-toolbar-row-start="false"]::before,
91
+ .toolbar[data-toolbar-measuring="true"] .toolbarItem[data-toolbar-row-start="true"][data-toolbar-row-wrapped="true"]::before {
92
+ display: none;
93
+ }
94
+
95
+ .toolbarGroup {
96
+ display: inline-flex;
97
+ align-items: center;
98
+ flex-wrap: wrap;
99
+ gap: var(--spacing-2);
100
+ padding-inline: var(--spacing-1);
101
+ min-height: 30px;
102
+ min-width: 0;
103
+ }
104
+
105
+ .toolbarButton {
106
+ min-height: 32px;
107
+ min-width: 0;
108
+ max-width: 100%;
109
+ }
110
+
111
+ .toolbarButtonIcon {
112
+ display: inline-flex;
113
+ align-items: center;
114
+ justify-content: center;
115
+ }
116
+
117
+ .toolbarButtonLabel {
118
+ display: inline-flex;
119
+ align-items: center;
120
+ min-width: 0;
121
+ }
122
+
123
+ .toolbarButtonSeparator {
124
+ width: 1px;
125
+ align-self: stretch;
126
+ background: currentColor;
127
+ opacity: 0.4;
128
+ }
129
+
130
+ .toolbarButtonHasBoth {
131
+ gap: var(--spacing-2);
132
+ }
133
+
66
134
  .headerMain {
67
135
  display: flex;
68
136
  flex-direction: column;
@@ -99,3 +167,16 @@
99
167
  justify-content: flex-end;
100
168
  gap: var(--spacing-3);
101
169
  }
170
+
171
+ @media (max-width: 1024px) {
172
+ .toolbarButtonHideLabelMd .toolbarButtonLabel,
173
+ .toolbarButtonHideLabelMd .toolbarButtonSeparator {
174
+ display: none;
175
+ }
176
+ }
177
+
178
+ @media (max-width: 720px) {
179
+ .toolbar {
180
+ padding: var(--spacing-2);
181
+ }
182
+ }
@@ -16,12 +16,17 @@ const InputField = React.forwardRef(({ hasError, className, ...props }, ref) =>
16
16
  ]
17
17
  .filter(Boolean)
18
18
  .join(' ');
19
- if (process.env.NODE_ENV !== 'production') {
20
- if (!props.id && !props.name) {
19
+ const warnedRef = React.useRef(false);
20
+ React.useEffect(() => {
21
+ if (process.env.NODE_ENV === 'production') {
22
+ return;
23
+ }
24
+ if (!props.id && !props.name && !warnedRef.current) {
25
+ warnedRef.current = true;
21
26
  // eslint-disable-next-line no-console
22
27
  console.warn('Input.Field: рекомендуется передавать id или name для связки с label.');
23
28
  }
24
- }
29
+ }, [props.id, props.name]);
25
30
  React.useEffect(() => {
26
31
  context?.registerField(resolvedId, props.name, props.required === true);
27
32
  }, [context, resolvedId, props.name, props.required]);
@@ -1 +1 @@
1
- {"version":3,"file":"Field.js","sourceRoot":"","sources":["../../../src/components/Input/Field.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAM5D,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE,CAAC;AAE1F,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAA0B,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACtG,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,IAAI,OAAO,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC5G,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC;IACjD,MAAM,OAAO,GAAG;QACd,MAAM,CAAC,KAAK;QACZ,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QAC9B,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI;QACzD,SAAS;KACV;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,OAAO,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;IAC1E,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEtD,OAAO,gBAAO,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,KAAM,KAAK,EAAE,YAAY,EAAE,YAAY,GAAI,CAAC;AACxG,CAAC,CAAC,CAAC;AAEH,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;AAEtC,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"Field.js","sourceRoot":"","sources":["../../../src/components/Input/Field.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAM5D,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE,CAAC;AAE1F,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAA0B,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACtG,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,IAAI,OAAO,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC5G,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC;IACjD,MAAM,OAAO,GAAG;QACd,MAAM,CAAC,KAAK;QACZ,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QAC9B,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI;QACzD,SAAS;KACV;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACnD,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;YACzB,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAE3B,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,OAAO,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;IAC1E,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEtD,OAAO,gBAAO,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,KAAM,KAAK,EAAE,YAAY,EAAE,YAAY,GAAI,CAAC;AACxG,CAAC,CAAC,CAAC;AAEH,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;AAEtC,eAAe,UAAU,CAAC"}
@@ -11,6 +11,7 @@
11
11
  .label {
12
12
  position: absolute;
13
13
  left: 16px;
14
+ right: 16px;
14
15
  top: 16px;
15
16
  color: var(--color-muted-2);
16
17
  font-size: var(--ui-control-font-size, var(--font-size-3));
@@ -22,6 +23,13 @@
22
23
  background: var(--surface-input);
23
24
  padding: 0;
24
25
  border-radius: 4px;
26
+ white-space: nowrap;
27
+ overflow: hidden;
28
+ text-overflow: ellipsis;
29
+ }
30
+
31
+ .wrapperWithHint .label {
32
+ right: 52px;
25
33
  }
26
34
 
27
35
  .requiredMark {
@@ -39,3 +39,16 @@
39
39
  font-size: 12px;
40
40
  color: var(--badge-danger-color, #ff6b6b);
41
41
  }
42
+
43
+ @media (max-width: 720px) {
44
+ .fieldRow {
45
+ flex-direction: column;
46
+ align-items: stretch;
47
+ }
48
+
49
+ .fieldRow .label {
50
+ min-width: 0;
51
+ text-align: left;
52
+ padding-top: 0;
53
+ }
54
+ }
@@ -6,5 +6,5 @@ type Props = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChan
6
6
  placeholderChar?: string;
7
7
  escapeChar?: string;
8
8
  };
9
- export default function MaskedInput({ mask, value, onChange, placeholderChar, escapeChar, onPaste, ...props }: Props): import("react/jsx-runtime").JSX.Element;
9
+ export default function MaskedInput({ mask, value, onChange, placeholderChar, escapeChar, onKeyDown, onPaste, ...props }: Props): import("react/jsx-runtime").JSX.Element;
10
10
  export {};
@@ -82,9 +82,10 @@ const extractRaw = (masked, mask, escapeChar = '\\') => {
82
82
  }
83
83
  return raw;
84
84
  };
85
- export default function MaskedInput({ mask, value, onChange, placeholderChar, escapeChar = '\\', onPaste, ...props }) {
85
+ export default function MaskedInput({ mask, value, onChange, placeholderChar, escapeChar = '\\', onKeyDown, onPaste, ...props }) {
86
86
  const isControlled = value !== undefined;
87
87
  const [internal, setInternal] = React.useState('');
88
+ const inputRef = React.useRef(null);
88
89
  const displayValue = React.useMemo(() => {
89
90
  const raw = extractRaw(String(isControlled ? value ?? '' : internal), mask, escapeChar);
90
91
  return applyMask(raw, mask, placeholderChar, escapeChar);
@@ -92,10 +93,50 @@ export default function MaskedInput({ mask, value, onChange, placeholderChar, es
92
93
  const handleChange = (event) => {
93
94
  const rawInput = event.target.value;
94
95
  const raw = extractRaw(rawInput, mask, escapeChar);
96
+ const updateRaw = (nextRaw) => {
97
+ if (!isControlled) {
98
+ setInternal(nextRaw);
99
+ }
100
+ onChange?.(nextRaw);
101
+ };
102
+ updateRaw(raw);
103
+ };
104
+ const handleKeyDownInternal = (event) => {
105
+ onKeyDown?.(event);
106
+ if (event.defaultPrevented) {
107
+ return;
108
+ }
109
+ if (event.key !== 'Backspace') {
110
+ return;
111
+ }
112
+ const target = event.currentTarget;
113
+ const start = target.selectionStart ?? 0;
114
+ const end = target.selectionEnd ?? start;
115
+ if (start <= 0 || start !== end) {
116
+ return;
117
+ }
118
+ const masked = target.value;
119
+ const raw = extractRaw(masked, mask, escapeChar);
120
+ const rawBefore = extractRaw(masked.slice(0, start), mask, escapeChar);
121
+ const rawBeforePrev = extractRaw(masked.slice(0, start - 1), mask, escapeChar);
122
+ // If deleting a literal mask symbol, remove the previous data char instead.
123
+ if (rawBefore.length !== rawBeforePrev.length) {
124
+ return;
125
+ }
126
+ if (rawBefore.length === 0) {
127
+ return;
128
+ }
129
+ event.preventDefault();
130
+ const deleteIndex = rawBefore.length - 1;
131
+ const nextRaw = raw.slice(0, deleteIndex) + raw.slice(deleteIndex + 1);
132
+ const caret = applyMask(nextRaw.slice(0, deleteIndex), mask, placeholderChar, escapeChar).length;
95
133
  if (!isControlled) {
96
- setInternal(raw);
134
+ setInternal(nextRaw);
97
135
  }
98
- onChange?.(raw);
136
+ onChange?.(nextRaw);
137
+ requestAnimationFrame(() => {
138
+ inputRef.current?.setSelectionRange(caret, caret);
139
+ });
99
140
  };
100
141
  const handlePaste = (event) => {
101
142
  onPaste?.(event);
@@ -107,7 +148,6 @@ export default function MaskedInput({ mask, value, onChange, placeholderChar, es
107
148
  return;
108
149
  }
109
150
  const raw = extractRaw(text, mask, escapeChar);
110
- console.log(raw);
111
151
  if (!raw) {
112
152
  return;
113
153
  }
@@ -117,6 +157,6 @@ export default function MaskedInput({ mask, value, onChange, placeholderChar, es
117
157
  }
118
158
  onChange?.(raw);
119
159
  };
120
- return _jsx(InputField, { ...props, value: displayValue, onChange: handleChange, onPaste: handlePaste });
160
+ return (_jsx(InputField, { ...props, ref: inputRef, value: displayValue, onChange: handleChange, onKeyDown: handleKeyDownInternal, onPaste: handlePaste }));
121
161
  }
122
162
  //# sourceMappingURL=MaskedInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MaskedInput.js","sourceRoot":"","sources":["../../../src/components/Input/MaskedInput.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MaskedInput.js","sourceRoot":"","sources":["../../../src/components/Input/MaskedInput.tsx"],"names":[],"mappings":"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"}
@@ -119,12 +119,17 @@ export default function Select({ label, id, name, required = false, options = []
119
119
  React.useEffect(() => {
120
120
  context?.registerField(controlId, name, required === true);
121
121
  }, [context, controlId, name, required]);
122
- if (process.env.NODE_ENV !== 'production') {
123
- if (!id && !name) {
122
+ const warnedRef = React.useRef(false);
123
+ React.useEffect(() => {
124
+ if (process.env.NODE_ENV === 'production') {
125
+ return;
126
+ }
127
+ if (!id && !name && !warnedRef.current) {
128
+ warnedRef.current = true;
124
129
  // eslint-disable-next-line no-console
125
130
  console.warn('Input.Select: рекомендуется передавать id или name для связки с label.');
126
131
  }
127
- }
132
+ }, [id, name]);
128
133
  React.useEffect(() => {
129
134
  if (open && searchable) {
130
135
  inputRef.current?.focus();
@@ -408,7 +413,7 @@ export default function Select({ label, id, name, required = false, options = []
408
413
  event.stopPropagation();
409
414
  handleRemove(item.value);
410
415
  }
411
- }, "aria-label": `Удалить ${item.label}`, children: "\u00D7" })] }, String(item.value))))) : (_jsx("span", { className: styles.singleValue, children: selectedList[0] ? (renderValue ? renderValue(selectedList[0]) : selectedList[0].label) : null }))) : (_jsx("span", { className: styles.placeholder, children: placeholder })) }) }), _jsxs(ActionStack, { className: styles.controls, children: [endActions, showClear ? (_jsx("span", { role: "button", tabIndex: 0, className: styles.clearButton, "aria-label": clearLabel, onMouseDown: (event) => event.preventDefault(), onClick: handleClear, onKeyDown: (event) => {
416
+ }, "aria-label": `Удалить ${item.label}`, children: "\u00D7" })] }, String(item.value))))) : (_jsx("span", { className: styles.singleValue, children: selectedList[0] ? (renderValue ? renderValue(selectedList[0]) : selectedList[0].label) : null }))) : (_jsx("span", { className: [styles.placeholder, styles.singleValue].join(' '), children: placeholder })) }) }), _jsxs(ActionStack, { className: styles.controls, children: [endActions, showClear ? (_jsx("span", { role: "button", tabIndex: 0, className: styles.clearButton, "aria-label": clearLabel, onMouseDown: (event) => event.preventDefault(), onClick: handleClear, onKeyDown: (event) => {
412
417
  if (event.key === 'Enter' || event.key === ' ') {
413
418
  event.preventDefault();
414
419
  handleClear(event);
@@ -447,7 +452,9 @@ export default function Select({ label, id, name, required = false, options = []
447
452
  if (event.detail === 0) {
448
453
  handleSelect(option);
449
454
  }
450
- }, disabled: option.disabled, children: [renderOption ? renderOption(option, { selected, active, multiple }) : _jsx("span", { children: option.label }), selected ? _jsx("span", { className: styles.check, children: "\u2713" }) : null] }, option.value ?? '__empty'));
455
+ }, disabled: option.disabled, children: [renderOption
456
+ ? renderOption(option, { selected, active, multiple })
457
+ : _jsx("span", { className: styles.optionLabel, children: option.label }), selected ? _jsx("span", { className: styles.check, children: "\u2713" }) : null] }, option.value ?? '__empty'));
451
458
  })
452
459
  : null] })] })) : null] }));
453
460
  }