@bigbinary/neeto-atoms 1.0.112 → 1.0.114
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/dist/{MultiEmailInput-Bzd2dPFC.js → MultiEmailInput-DFWfld8K.js} +58 -26
- package/dist/MultiEmailInput-DFWfld8K.js.map +1 -0
- package/dist/{Select-ZWR0HFCa.js → Select-C5ZsQHGK.js} +8 -5
- package/dist/Select-C5ZsQHGK.js.map +1 -0
- package/dist/{TranslationProvider-CtJI6HJ4.js → TranslationProvider-Dd0ITHC0.js} +11 -1
- package/dist/{TranslationProvider-CtJI6HJ4.js.map → TranslationProvider-Dd0ITHC0.js.map} +1 -1
- package/dist/cjs/{MultiEmailInput-FNRR9b74.js → MultiEmailInput-CW0TQEU2.js} +58 -26
- package/dist/cjs/MultiEmailInput-CW0TQEU2.js.map +1 -0
- package/dist/cjs/{Select-VQCROyX1.js → Select-DRH-AINK.js} +8 -5
- package/dist/cjs/Select-DRH-AINK.js.map +1 -0
- package/dist/cjs/{TranslationProvider-BgCNBYs8.js → TranslationProvider-DOeyGtbV.js} +11 -1
- package/dist/cjs/{TranslationProvider-BgCNBYs8.js.map → TranslationProvider-DOeyGtbV.js.map} +1 -1
- package/dist/cjs/components/MultiEmailInput.js +2 -2
- package/dist/cjs/components/Select.js +1 -1
- package/dist/cjs/components/TranslationProvider.js +1 -1
- package/dist/cjs/components/index.js +3 -3
- package/dist/cjs/formik/MultiEmailInput.js +2 -2
- package/dist/cjs/formik/Select.js +1 -1
- package/dist/cjs/formik/index.js +2 -2
- package/dist/cjs/index.js +3 -3
- package/dist/components/MultiEmailInput/constants.d.ts +16 -1
- package/dist/components/MultiEmailInput/index.d.ts +1 -1
- package/dist/components/MultiEmailInput/types.d.ts +13 -7
- package/dist/components/MultiEmailInput/utils.d.ts +5 -5
- package/dist/components/MultiEmailInput.js +2 -2
- package/dist/components/Select/MultiSelectCombobox.types.d.ts +1 -0
- package/dist/components/Select/SelectCombobox.types.d.ts +1 -0
- package/dist/components/Select/constants.d.ts +1 -0
- package/dist/components/Select/hooks/useMultiSelectState.d.ts +1 -0
- package/dist/components/Select/hooks/useSelectState.d.ts +1 -0
- package/dist/components/Select.js +1 -1
- package/dist/components/TranslationProvider.js +1 -1
- package/dist/components/index.js +3 -3
- package/dist/formik/MultiEmailInput.js +2 -2
- package/dist/formik/Select.js +1 -1
- package/dist/formik/index.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -3
- package/dist/translations/index.d.ts +10 -0
- package/package.json +1 -1
- package/dist/MultiEmailInput-Bzd2dPFC.js.map +0 -1
- package/dist/Select-ZWR0HFCa.js.map +0 -1
- package/dist/cjs/MultiEmailInput-FNRR9b74.js.map +0 -1
- package/dist/cjs/Select-VQCROyX1.js.map +0 -1
|
@@ -16,12 +16,12 @@ var Empty = require('../Empty-Bqt-TucD.js');
|
|
|
16
16
|
var Input = require('../Input-DIq7T9D0.js');
|
|
17
17
|
var Kbd = require('../Kbd--A8Gl8TV.js');
|
|
18
18
|
var Label = require('../Label-CpsdGBV8.js');
|
|
19
|
-
var MultiEmailInput = require('../MultiEmailInput-
|
|
19
|
+
var MultiEmailInput = require('../MultiEmailInput-CW0TQEU2.js');
|
|
20
20
|
var Pagination = require('../Pagination-WyQlBpvK.js');
|
|
21
21
|
var Popover = require('../Popover-5BUgIW60.js');
|
|
22
22
|
var Progress = require('../Progress-n_VwK9_E.js');
|
|
23
23
|
var RadioGroup = require('../RadioGroup-B-u8rdbf.js');
|
|
24
|
-
var Select = require('../Select-
|
|
24
|
+
var Select = require('../Select-DRH-AINK.js');
|
|
25
25
|
var Sheet = require('../Sheet-D-NWMprq.js');
|
|
26
26
|
var Slider = require('../Slider-DIUSlx_m.js');
|
|
27
27
|
var Spinner = require('../Spinner-DRoghJA8.js');
|
|
@@ -33,7 +33,7 @@ var TimePicker = require('../TimePicker-lJ2985nh.js');
|
|
|
33
33
|
var TimePickerPanel = require('../TimePickerPanel-DX6cjrSN.js');
|
|
34
34
|
var Toastr = require('../Toastr-9DXjD-Mq.js');
|
|
35
35
|
var Tooltip = require('../Tooltip-B6uv_2Jz.js');
|
|
36
|
-
var TranslationProvider = require('../TranslationProvider-
|
|
36
|
+
var TranslationProvider = require('../TranslationProvider-DOeyGtbV.js');
|
|
37
37
|
var Tree = require('../Tree-Y0ulyxew.js');
|
|
38
38
|
var TreeSelect = require('../TreeSelect-DDQx8FPS.js');
|
|
39
39
|
var Typography = require('../Typography-BW6xEk10.js');
|
|
@@ -4,7 +4,8 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var formik = require('formik');
|
|
6
6
|
var ramda = require('ramda');
|
|
7
|
-
var MultiEmailInput = require('../MultiEmailInput-
|
|
7
|
+
var MultiEmailInput = require('../MultiEmailInput-CW0TQEU2.js');
|
|
8
|
+
require('react-i18next');
|
|
8
9
|
require('../utils-BhM0B89p.js');
|
|
9
10
|
require('../primitives/Field.js');
|
|
10
11
|
require('../HelpIcon-BF1ePUQf.js');
|
|
@@ -39,7 +40,6 @@ require('react-router-dom');
|
|
|
39
40
|
require('../primitives/Button.js');
|
|
40
41
|
require('../button-CSBhDSDJ.js');
|
|
41
42
|
require('../primitives/Spinner.js');
|
|
42
|
-
require('react-i18next');
|
|
43
43
|
require('../loader-circle-Bw7zP2Gn.js');
|
|
44
44
|
require('../label-BdcX4_ud.js');
|
|
45
45
|
require('../separator-DSL-aG1J.js');
|
|
@@ -4,7 +4,7 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var formik = require('formik');
|
|
6
6
|
var ramda = require('ramda');
|
|
7
|
-
var Select = require('../Select-
|
|
7
|
+
var Select = require('../Select-DRH-AINK.js');
|
|
8
8
|
require('../fieldIds-DiVU6GVS.js');
|
|
9
9
|
require('../hyphenize-BTrVNVv3.js');
|
|
10
10
|
require('../SelectFieldWrapper-CIh_atln.js');
|
package/dist/cjs/formik/index.js
CHANGED
|
@@ -65,7 +65,7 @@ require('../hyphenize-BTrVNVv3.js');
|
|
|
65
65
|
require('../withIconSize-C6LP0R7o.js');
|
|
66
66
|
require('../Textarea-bxleSw86.js');
|
|
67
67
|
require('../primitives/Textarea.js');
|
|
68
|
-
require('../Select-
|
|
68
|
+
require('../Select-DRH-AINK.js');
|
|
69
69
|
require('../SelectFieldWrapper-CIh_atln.js');
|
|
70
70
|
require('../Combobox-PAGcNUr6.js');
|
|
71
71
|
require('../chevron-down-CPsWSS51.js');
|
|
@@ -95,7 +95,7 @@ require('../index-CS_WSHYi.js');
|
|
|
95
95
|
require('../Tree-Y0ulyxew.js');
|
|
96
96
|
require('../chevron-right-0jNdwX2Q.js');
|
|
97
97
|
require('../redux-DEF7lAd1.js');
|
|
98
|
-
require('../MultiEmailInput-
|
|
98
|
+
require('../MultiEmailInput-CW0TQEU2.js');
|
|
99
99
|
require('../Dialog-ZUHGaoAE.js');
|
|
100
100
|
require('../primitives/Dialog.js');
|
|
101
101
|
require('../dialog-CGblgaX5.js');
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var utils$1 = require('@bigbinary/neeto-commons-frontend/utils');
|
|
4
|
-
var TranslationProvider = require('./TranslationProvider-
|
|
4
|
+
var TranslationProvider = require('./TranslationProvider-DOeyGtbV.js');
|
|
5
5
|
var components_DropdownMenu = require('./components/DropdownMenu.js');
|
|
6
6
|
var useMobile = require('./use-mobile-Be9CI6km.js');
|
|
7
7
|
var utils = require('./utils-BhM0B89p.js');
|
|
@@ -21,12 +21,12 @@ var Empty = require('./Empty-Bqt-TucD.js');
|
|
|
21
21
|
var Input = require('./Input-DIq7T9D0.js');
|
|
22
22
|
var Kbd = require('./Kbd--A8Gl8TV.js');
|
|
23
23
|
var Label = require('./Label-CpsdGBV8.js');
|
|
24
|
-
var MultiEmailInput = require('./MultiEmailInput-
|
|
24
|
+
var MultiEmailInput = require('./MultiEmailInput-CW0TQEU2.js');
|
|
25
25
|
var Pagination = require('./Pagination-WyQlBpvK.js');
|
|
26
26
|
var Popover = require('./Popover-5BUgIW60.js');
|
|
27
27
|
var Progress = require('./Progress-n_VwK9_E.js');
|
|
28
28
|
var RadioGroup = require('./RadioGroup-B-u8rdbf.js');
|
|
29
|
-
var Select = require('./Select-
|
|
29
|
+
var Select = require('./Select-DRH-AINK.js');
|
|
30
30
|
var Sheet = require('./Sheet-D-NWMprq.js');
|
|
31
31
|
var Slider = require('./Slider-DIUSlx_m.js');
|
|
32
32
|
var Spinner = require('./Spinner-DRoghJA8.js');
|
|
@@ -1,3 +1,18 @@
|
|
|
1
1
|
export declare const EMAIL_REGEX: RegExp;
|
|
2
2
|
export declare const UNSTRICT_EMAIL_REGEX: RegExp;
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const DOMAIN_REGEX: RegExp;
|
|
4
|
+
export declare const SEPARATION_REGEX: RegExp;
|
|
5
|
+
export declare const VALIDATION_REGEX: {
|
|
6
|
+
readonly email: RegExp;
|
|
7
|
+
readonly domain: RegExp;
|
|
8
|
+
};
|
|
9
|
+
export declare const ENTITY_FALLBACK: {
|
|
10
|
+
readonly email: {
|
|
11
|
+
readonly one: "email";
|
|
12
|
+
readonly other: "emails";
|
|
13
|
+
};
|
|
14
|
+
readonly domain: {
|
|
15
|
+
readonly one: "domain";
|
|
16
|
+
readonly other: "domains";
|
|
17
|
+
};
|
|
18
|
+
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { MultiEmailInput } from "./MultiEmailInput";
|
|
2
|
-
export type { MultiEmailInputProps, EmailValue } from "./types";
|
|
2
|
+
export type { MultiEmailInputProps, EmailValue, EntryType } from "./types";
|
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import type React from "react";
|
|
2
2
|
import type { FieldLabel } from "src/primitives/Field";
|
|
3
3
|
import type { IconLike } from "src/utils/withIconSize";
|
|
4
|
+
/** What each entry represents. Drives validation, parsing and the noun used in
|
|
5
|
+
* the counter, the duplicate warning and the remove-invalid link. */
|
|
6
|
+
export type EntryType = "email" | "domain";
|
|
4
7
|
export interface EmailValue {
|
|
5
|
-
/** Display text for the
|
|
8
|
+
/** Display text for the chip. */
|
|
6
9
|
label: string;
|
|
7
|
-
/** The email address string. */
|
|
10
|
+
/** The email address or domain string. */
|
|
8
11
|
value: string;
|
|
9
|
-
/** Whether the
|
|
12
|
+
/** Whether the entry passes regex validation for the current `entryType`. */
|
|
10
13
|
valid: boolean;
|
|
11
14
|
}
|
|
12
15
|
export interface MultiEmailInputProps {
|
|
16
|
+
/** What each entry represents. `"domain"` validates against a domain regex and
|
|
17
|
+
* skips the email extraction pass while parsing. @default "email" */
|
|
18
|
+
entryType?: EntryType;
|
|
13
19
|
/** Text displayed above the input. */
|
|
14
20
|
label?: string;
|
|
15
21
|
/** Placeholder text when no emails are added. */
|
|
@@ -18,9 +24,9 @@ export interface MultiEmailInputProps {
|
|
|
18
24
|
helpText?: React.ReactNode;
|
|
19
25
|
/** Error message displayed below the input. */
|
|
20
26
|
error?: string;
|
|
21
|
-
/** Controlled
|
|
27
|
+
/** Controlled values. */
|
|
22
28
|
value?: EmailValue[];
|
|
23
|
-
/** Callback fired when
|
|
29
|
+
/** Callback fired when the values change. */
|
|
24
30
|
onChange?: (emails: EmailValue[]) => void;
|
|
25
31
|
/** Callback fired on blur when input is empty. */
|
|
26
32
|
onBlur?: () => void;
|
|
@@ -32,12 +38,12 @@ export interface MultiEmailInputProps {
|
|
|
32
38
|
maxHeight?: number;
|
|
33
39
|
/** Number of chips visible when blurred. @default 3 */
|
|
34
40
|
visibleEmailsCount?: number;
|
|
35
|
-
/** Show
|
|
41
|
+
/** Show entry counter next to label. */
|
|
36
42
|
counter?: boolean | {
|
|
37
43
|
label?: string;
|
|
38
44
|
startsFrom?: number;
|
|
39
45
|
};
|
|
40
|
-
/** Show a link to remove invalid
|
|
46
|
+
/** Show a link to remove invalid entries alongside the error. */
|
|
41
47
|
filterInvalidEmails?: {
|
|
42
48
|
label?: string;
|
|
43
49
|
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
export declare const
|
|
1
|
+
import type { TFunction } from "i18next";
|
|
2
|
+
import type { EmailValue, EntryType } from "./types";
|
|
3
|
+
export declare const formatEmailInputOption: (email: string, entryType?: EntryType) => EmailValue;
|
|
4
|
+
export declare const pruneDuplicates: (existing: EmailValue[], newEmailStrings: string[], entryType?: EntryType) => {
|
|
4
5
|
uniqueEmails: EmailValue[];
|
|
5
6
|
duplicates: string[];
|
|
6
7
|
};
|
|
7
8
|
export declare const filterValidEmails: (emails: EmailValue[]) => EmailValue[];
|
|
8
|
-
export declare const
|
|
9
|
-
export declare const formatDuplicateWarning: (duplicates: string[]) => string;
|
|
9
|
+
export declare const getEntityLabel: (t: TFunction, entryType: EntryType, count: number) => string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export { M as MultiEmailInput } from '../MultiEmailInput-
|
|
1
|
+
export { M as MultiEmailInput } from '../MultiEmailInput-DFWfld8K.js';
|
|
2
2
|
import 'react/jsx-runtime';
|
|
3
3
|
import 'react';
|
|
4
|
+
import 'react-i18next';
|
|
4
5
|
import '../utils-BJnb9o5c.js';
|
|
5
6
|
import '../primitives/Field.js';
|
|
6
7
|
import '../HelpIcon-xh488VXs.js';
|
|
@@ -35,7 +36,6 @@ import 'react-router-dom';
|
|
|
35
36
|
import '../primitives/Button.js';
|
|
36
37
|
import '../button-CePY5zne.js';
|
|
37
38
|
import '../primitives/Spinner.js';
|
|
38
|
-
import 'react-i18next';
|
|
39
39
|
import '../loader-circle-DycHUAWN.js';
|
|
40
40
|
import '../label-YEsizr2c.js';
|
|
41
41
|
import '../separator-ByRsc-y-.js';
|
package/dist/components/index.js
CHANGED
|
@@ -14,12 +14,12 @@ export { E as Empty } from '../Empty-DINS0Uu4.js';
|
|
|
14
14
|
export { I as Input } from '../Input-W8foyOcS.js';
|
|
15
15
|
export { K as Kbd } from '../Kbd-CKfR8HlC.js';
|
|
16
16
|
export { L as Label } from '../Label-B-R4PNNq.js';
|
|
17
|
-
export { M as MultiEmailInput } from '../MultiEmailInput-
|
|
17
|
+
export { M as MultiEmailInput } from '../MultiEmailInput-DFWfld8K.js';
|
|
18
18
|
export { P as Pagination } from '../Pagination-yjG8uCpV.js';
|
|
19
19
|
export { P as Popover } from '../Popover-BHGvcdV2.js';
|
|
20
20
|
export { P as Progress } from '../Progress-DbtLbWf8.js';
|
|
21
21
|
export { R as RadioGroup } from '../RadioGroup-CBXByAMW.js';
|
|
22
|
-
export { S as Select } from '../Select-
|
|
22
|
+
export { S as Select } from '../Select-C5ZsQHGK.js';
|
|
23
23
|
export { S as Sheet } from '../Sheet-D1MWtg1q.js';
|
|
24
24
|
export { S as Slider } from '../Slider-CxQdlyHZ.js';
|
|
25
25
|
export { S as Spinner } from '../Spinner-vfggfvEp.js';
|
|
@@ -31,7 +31,7 @@ export { T as TimePicker } from '../TimePicker-BixF9wdU.js';
|
|
|
31
31
|
export { T as TimePickerPanel } from '../TimePickerPanel--KDX5QwS.js';
|
|
32
32
|
export { T as Toastr } from '../Toastr-CXqmoXjn.js';
|
|
33
33
|
export { T as Tooltip } from '../Tooltip-DWDsgyx7.js';
|
|
34
|
-
export { T as TranslationProvider } from '../TranslationProvider-
|
|
34
|
+
export { T as TranslationProvider } from '../TranslationProvider-Dd0ITHC0.js';
|
|
35
35
|
export { T as Tree } from '../Tree-Cb1Zkayi.js';
|
|
36
36
|
export { T as TreeSelect } from '../TreeSelect-rrTHwY42.js';
|
|
37
37
|
export { T as Typography, t as typographyVariants } from '../Typography-CmILccNh.js';
|
|
@@ -2,7 +2,8 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { forwardRef } from 'react';
|
|
3
3
|
import { useField, useFormikContext, getIn } from 'formik';
|
|
4
4
|
import { dissoc } from 'ramda';
|
|
5
|
-
import { M as MultiEmailInput } from '../MultiEmailInput-
|
|
5
|
+
import { M as MultiEmailInput } from '../MultiEmailInput-DFWfld8K.js';
|
|
6
|
+
import 'react-i18next';
|
|
6
7
|
import '../utils-BJnb9o5c.js';
|
|
7
8
|
import '../primitives/Field.js';
|
|
8
9
|
import '../HelpIcon-xh488VXs.js';
|
|
@@ -37,7 +38,6 @@ import 'react-router-dom';
|
|
|
37
38
|
import '../primitives/Button.js';
|
|
38
39
|
import '../button-CePY5zne.js';
|
|
39
40
|
import '../primitives/Spinner.js';
|
|
40
|
-
import 'react-i18next';
|
|
41
41
|
import '../loader-circle-DycHUAWN.js';
|
|
42
42
|
import '../label-YEsizr2c.js';
|
|
43
43
|
import '../separator-ByRsc-y-.js';
|
package/dist/formik/Select.js
CHANGED
|
@@ -2,7 +2,7 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { forwardRef } from 'react';
|
|
3
3
|
import { useField, useFormikContext, getIn } from 'formik';
|
|
4
4
|
import { dissoc } from 'ramda';
|
|
5
|
-
import { S as Select } from '../Select-
|
|
5
|
+
import { S as Select } from '../Select-C5ZsQHGK.js';
|
|
6
6
|
import '../fieldIds-VpluAAMl.js';
|
|
7
7
|
import '../hyphenize-TRhMI0tl.js';
|
|
8
8
|
import '../SelectFieldWrapper-D370CD4o.js';
|
package/dist/formik/index.js
CHANGED
|
@@ -63,7 +63,7 @@ import '../hyphenize-TRhMI0tl.js';
|
|
|
63
63
|
import '../withIconSize-BonoFXeH.js';
|
|
64
64
|
import '../Textarea-CUe09-sr.js';
|
|
65
65
|
import '../primitives/Textarea.js';
|
|
66
|
-
import '../Select-
|
|
66
|
+
import '../Select-C5ZsQHGK.js';
|
|
67
67
|
import '../SelectFieldWrapper-D370CD4o.js';
|
|
68
68
|
import '../Combobox-NgubHftk.js';
|
|
69
69
|
import '../chevron-down-BNi0ntys.js';
|
|
@@ -93,7 +93,7 @@ import '../index-Jr4soqx3.js';
|
|
|
93
93
|
import '../Tree-Cb1Zkayi.js';
|
|
94
94
|
import '../chevron-right-DQnrO-ek.js';
|
|
95
95
|
import '../redux-BKH6DnBB.js';
|
|
96
|
-
import '../MultiEmailInput-
|
|
96
|
+
import '../MultiEmailInput-DFWfld8K.js';
|
|
97
97
|
import '../Dialog-Yw34WDqY.js';
|
|
98
98
|
import '../primitives/Dialog.js';
|
|
99
99
|
import '../dialog-CqXuhXNS.js';
|
package/dist/index.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ export type { RadioGroupProps } from "./components/RadioGroup";
|
|
|
44
44
|
export { Select } from "./components/Select";
|
|
45
45
|
export type { SelectProps, SelectOption, SelectOptionBase, SelectOptionGroup, } from "./components/Select";
|
|
46
46
|
export { MultiEmailInput } from "./components/MultiEmailInput";
|
|
47
|
-
export type { MultiEmailInputProps, EmailValue, } from "./components/MultiEmailInput";
|
|
47
|
+
export type { MultiEmailInputProps, EmailValue, EntryType, } from "./components/MultiEmailInput";
|
|
48
48
|
export { Sheet } from "./components/Sheet";
|
|
49
49
|
export type { SheetProps } from "./components/Sheet";
|
|
50
50
|
export { Popover } from "./components/Popover";
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { dayjs } from '@bigbinary/neeto-commons-frontend/utils';
|
|
2
2
|
export { dayjs } from '@bigbinary/neeto-commons-frontend/utils';
|
|
3
|
-
export { T as TranslationProvider, r as translations } from './TranslationProvider-
|
|
3
|
+
export { T as TranslationProvider, r as translations } from './TranslationProvider-Dd0ITHC0.js';
|
|
4
4
|
export { DropdownMenu } from './components/DropdownMenu.js';
|
|
5
5
|
export { u as useIsMobile } from './use-mobile-QbHL72cX.js';
|
|
6
6
|
export { c as cn } from './utils-BJnb9o5c.js';
|
|
@@ -20,12 +20,12 @@ export { E as Empty } from './Empty-DINS0Uu4.js';
|
|
|
20
20
|
export { I as Input } from './Input-W8foyOcS.js';
|
|
21
21
|
export { K as Kbd } from './Kbd-CKfR8HlC.js';
|
|
22
22
|
export { L as Label } from './Label-B-R4PNNq.js';
|
|
23
|
-
export { M as MultiEmailInput } from './MultiEmailInput-
|
|
23
|
+
export { M as MultiEmailInput } from './MultiEmailInput-DFWfld8K.js';
|
|
24
24
|
export { P as Pagination } from './Pagination-yjG8uCpV.js';
|
|
25
25
|
export { P as Popover } from './Popover-BHGvcdV2.js';
|
|
26
26
|
export { P as Progress } from './Progress-DbtLbWf8.js';
|
|
27
27
|
export { R as RadioGroup } from './RadioGroup-CBXByAMW.js';
|
|
28
|
-
export { S as Select } from './Select-
|
|
28
|
+
export { S as Select } from './Select-C5ZsQHGK.js';
|
|
29
29
|
export { S as Sheet } from './Sheet-D1MWtg1q.js';
|
|
30
30
|
export { S as Slider } from './Slider-CxQdlyHZ.js';
|
|
31
31
|
export { S as Spinner } from './Spinner-vfggfvEp.js';
|
|
@@ -64,6 +64,16 @@ export declare const resources: {
|
|
|
64
64
|
copyMessage: string;
|
|
65
65
|
copied: string;
|
|
66
66
|
};
|
|
67
|
+
multiEmailInput: {
|
|
68
|
+
email_one: string;
|
|
69
|
+
email_other: string;
|
|
70
|
+
domain_one: string;
|
|
71
|
+
domain_other: string;
|
|
72
|
+
hiddenCount: string;
|
|
73
|
+
remove: string;
|
|
74
|
+
removeInvalid: string;
|
|
75
|
+
duplicateWarning: string;
|
|
76
|
+
};
|
|
67
77
|
};
|
|
68
78
|
};
|
|
69
79
|
};
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MultiEmailInput-Bzd2dPFC.js","sources":["../src/components/MultiEmailInput/constants.ts","../src/components/MultiEmailInput/utils.ts","../src/components/MultiEmailInput/useMultiEmailState.ts","../src/components/MultiEmailInput/MultiEmailInput.tsx"],"sourcesContent":["export const EMAIL_REGEX = /^[A-Z0-9._%+-]+@[A-Z0-9-]+(?:\\.[A-Z0-9-]+)*\\.[A-Z]{2,}$/i;\n\nexport const UNSTRICT_EMAIL_REGEX =\n /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/g;\n\nexport const EMAIL_SEPARATION_REGEX = /[^\\s,]+/g;\n","import { EMAIL_REGEX } from \"./constants\";\nimport type { EmailValue } from \"./types\";\n\nexport const formatEmailInputOption = (email: string): EmailValue => ({\n label: email,\n value: email,\n valid: EMAIL_REGEX.test(email),\n});\n\nexport const pruneDuplicates = (\n existing: EmailValue[],\n newEmailStrings: string[]\n): { uniqueEmails: EmailValue[]; duplicates: string[] } => {\n const seen = new Set(existing.map(e => e.value.toLowerCase()));\n const duplicates: string[] = [];\n const added: EmailValue[] = [];\n\n for (const emailStr of newEmailStrings) {\n const lower = emailStr.toLowerCase();\n if (seen.has(lower)) {\n duplicates.push(emailStr);\n } else {\n seen.add(lower);\n added.push(formatEmailInputOption(emailStr));\n }\n }\n\n return { uniqueEmails: [...existing, ...added], duplicates };\n};\n\nexport const filterValidEmails = (emails: EmailValue[]): EmailValue[] =>\n emails.filter(email => email.valid);\n\nexport const pluralizeEmail = (count: number): string =>\n count === 1 ? \"email\" : \"emails\";\n\nexport const formatDuplicateWarning = (duplicates: string[]): string => {\n const count = duplicates.length;\n\n return `Removed ${count} duplicate ${pluralizeEmail(count)} from the list: ${duplicates.join(\", \")}`;\n};\n","import { useState, useCallback, useMemo } from \"react\";\n\nimport { UNSTRICT_EMAIL_REGEX, EMAIL_SEPARATION_REGEX } from \"./constants\";\nimport { pruneDuplicates, filterValidEmails } from \"./utils\";\nimport type { MultiEmailInputProps } from \"./types\";\n\nexport function useMultiEmailState(props: MultiEmailInputProps) {\n const {\n value = [],\n onChange,\n onBlur,\n visibleEmailsCount = 3,\n isAlwaysExpanded = false,\n counter,\n filterInvalidEmails,\n } = props;\n\n const [inputValue, setInputValue] = useState(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const [duplicateEmails, setDuplicateEmails] = useState<string[]>([]);\n\n const addEmails = useCallback(\n (input: string) => {\n const trimmed = input.trim();\n if (!trimmed) return;\n UNSTRICT_EMAIL_REGEX.lastIndex = 0;\n EMAIL_SEPARATION_REGEX.lastIndex = 0;\n const emailMatches =\n trimmed.match(UNSTRICT_EMAIL_REGEX) ||\n trimmed.match(EMAIL_SEPARATION_REGEX) ||\n [];\n if (emailMatches.length === 0) return;\n const { uniqueEmails, duplicates } = pruneDuplicates(value, emailMatches);\n onChange?.(uniqueEmails);\n setDuplicateEmails(duplicates);\n setInputValue(\"\");\n },\n [value, onChange]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (!inputValue && event.key === \"Backspace\" && value.length > 0) {\n onChange?.(value.slice(0, -1));\n return;\n }\n if (!inputValue) return;\n if ([\"Enter\", \"Tab\", \",\", \" \"].includes(event.key)) {\n addEmails(inputValue);\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [inputValue, value, onChange, addEmails]\n );\n\n const handlePaste = useCallback(\n (event: React.ClipboardEvent<HTMLInputElement>) => {\n const text = event.clipboardData.getData(\"text\");\n if (!text) return;\n event.preventDefault();\n addEmails(text);\n },\n [addEmails]\n );\n\n const handleBlur = useCallback(() => {\n if (inputValue) {\n addEmails(inputValue);\n } else {\n onBlur?.();\n }\n setIsFocused(false);\n setDuplicateEmails([]);\n }, [inputValue, addEmails, onBlur]);\n\n const handleFocus = useCallback(() => setIsFocused(true), []);\n\n const handleChipRemove = useCallback(\n (emailValue: string) =>\n onChange?.(value.filter(e => e.value !== emailValue)),\n [value, onChange]\n );\n\n const handleFilterInvalidEmails = useCallback(\n () => onChange?.(filterValidEmails(value)),\n [value, onChange]\n );\n\n const validCount = useMemo(() => value.filter(e => e.valid).length, [value]);\n const isCounterVisible =\n !!counter &&\n (typeof counter === \"boolean\" ||\n !counter.startsFrom ||\n validCount >= counter.startsFrom);\n const shouldCollapse =\n !isAlwaysExpanded && !isFocused && value.length > visibleEmailsCount;\n const visibleEmails = shouldCollapse\n ? value.slice(0, visibleEmailsCount)\n : value;\n const hiddenCount = shouldCollapse ? value.length - visibleEmailsCount : 0;\n const isFilterLinkVisible =\n !!filterInvalidEmails && value.length > validCount;\n\n return {\n inputValue,\n setInputValue,\n isFocused,\n duplicateEmails,\n handleKeyDown,\n handlePaste,\n handleBlur,\n handleFocus,\n handleChipRemove,\n handleFilterInvalidEmails,\n isCounterVisible,\n validCount,\n visibleEmails,\n hiddenCount,\n isFilterLinkVisible,\n };\n}\n","import { forwardRef, useId } from \"react\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { Field, FieldLabel, FieldContent } from \"src/primitives/Field\";\nimport { buildTestIdPrefix } from \"src/utils/fieldIds\";\nimport { hyphenize } from \"src/utils/hyphenize\";\nimport { withIconSize } from \"src/utils/withIconSize\";\nimport { useMultiEmailState } from \"./useMultiEmailState\";\nimport { pluralizeEmail, formatDuplicateWarning } from \"./utils\";\nimport type { MultiEmailInputProps } from \"./types\";\n\nconst CHIP_BASE =\n \"flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground\";\nconst CHIP_INVALID =\n \"border border-destructive text-destructive bg-destructive/10\";\nconst CHIPS_CONTAINER =\n \"flex min-h-8 flex-wrap items-center gap-1 rounded-lg border border-input bg-transparent bg-clip-padding px-2.5 py-1 text-base md:text-sm transition-colors focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50\";\nconst CHIPS_ERROR =\n \"border-destructive ring-3 ring-destructive/20 dark:border-destructive/50 dark:ring-destructive/40\";\n\nexport const MultiEmailInput = forwardRef<\n HTMLInputElement,\n MultiEmailInputProps\n>((props, ref) => {\n const {\n label,\n placeholder = \"\",\n helpText,\n error,\n disabled = false,\n required = false,\n maxHeight = 200,\n counter,\n filterInvalidEmails,\n prefix,\n suffix,\n labelProps,\n className,\n dataTestId,\n } = props;\n const id = useId();\n const testIdPrefix = buildTestIdPrefix(dataTestId, label);\n const {\n isCounterVisible,\n validCount,\n visibleEmails,\n hiddenCount,\n inputValue,\n setInputValue,\n handleKeyDown,\n handlePaste,\n handleFocus,\n handleBlur,\n handleChipRemove,\n isFilterLinkVisible,\n handleFilterInvalidEmails,\n duplicateEmails,\n } = useMultiEmailState(props);\n\n return (\n <Field\n className={cn(\"flex flex-col gap-1.5\", className)}\n data-testid=\"email-input-wrapper\"\n >\n {(label || isCounterVisible) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <FieldLabel\n htmlFor={id}\n data-testid={`${testIdPrefix}-input-label`}\n {...labelProps}\n >\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n {\" *\"}\n </span>\n )}\n </FieldLabel>\n )}\n {isCounterVisible && (\n <span\n className=\"text-xs text-muted-foreground\"\n data-testid={`${testIdPrefix}-email-counter`}\n >\n {validCount}{\" \"}\n {typeof counter === \"object\" && counter?.label\n ? counter.label\n : pluralizeEmail(validCount)}\n </span>\n )}\n </div>\n )}\n <div\n data-testid=\"multi-email-select-container\"\n className={cn(\n CHIPS_CONTAINER,\n !!error && CHIPS_ERROR,\n disabled && \"pointer-events-none opacity-50\"\n )}\n style={{ maxHeight: `${maxHeight}px`, overflowY: \"auto\" }}\n >\n {prefix && (\n <div className=\"shrink-0 text-muted-foreground\">\n {withIconSize(prefix, \"size-4\")}\n </div>\n )}\n {visibleEmails.map(email => (\n <span\n key={email.value}\n className={cn(CHIP_BASE, !email.valid && CHIP_INVALID)}\n >\n {email.label}\n {!disabled && (\n <button\n type=\"button\"\n tabIndex={-1}\n data-testid={`${hyphenize(email.label)}-remove-icon`}\n className=\"-ms-0.5 rounded-xs opacity-50 hover:opacity-100\"\n onMouseDown={e => e.preventDefault()}\n onClick={() => handleChipRemove(email.value)}\n aria-label={`Remove ${email.label}`}\n >\n <XIcon className=\"size-3 pointer-events-none\" />\n </button>\n )}\n </span>\n ))}\n {hiddenCount > 0 && (\n <span className=\"flex h-[calc(--spacing(5.25))] items-center rounded-sm bg-secondary px-1.5 text-xs font-medium text-secondary-foreground\">\n +{hiddenCount} more\n </span>\n )}\n <input\n ref={ref}\n id={id}\n type=\"text\"\n data-testid=\"email-select-input-field\"\n value={inputValue}\n onChange={e => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={props.value?.length ? \"\" : placeholder}\n disabled={disabled}\n className=\"min-w-16 flex-1 bg-transparent text-base outline-none placeholder:text-muted-foreground md:text-sm\"\n />\n {suffix && (\n <div className=\"shrink-0 text-muted-foreground\">\n {withIconSize(suffix, \"size-4\")}\n </div>\n )}\n </div>\n <FieldContent>\n {!!error && (\n <p\n className=\"text-[0.8rem] text-destructive\"\n data-testid={`${testIdPrefix}-input-error`}\n >\n {error}\n {isFilterLinkVisible && (\n <button\n type=\"button\"\n className=\"ml-1 cursor-pointer font-semibold underline\"\n onClick={handleFilterInvalidEmails}\n >\n {filterInvalidEmails?.label ??\n \"Click here to remove invalid emails.\"}\n </button>\n )}\n </p>\n )}\n {!!helpText && (\n <p\n className=\"text-[0.8rem] text-muted-foreground\"\n data-testid={`${testIdPrefix}-input-help`}\n >\n {helpText}\n </p>\n )}\n {duplicateEmails.length > 0 && (\n <p\n className=\"text-[0.8rem] text-amber-600 dark:text-amber-400\"\n data-testid={`${testIdPrefix}-duplicate-emails-warning`}\n >\n {formatDuplicateWarning(duplicateEmails)}\n </p>\n )}\n </FieldContent>\n </Field>\n );\n});\nMultiEmailInput.displayName = \"MultiEmailInput\";\n"],"names":["XIcon"],"mappings":"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"}
|