@trackunit/react-form-components 0.0.173-alpha-5bf259599b.0 → 0.0.175
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/index.cjs.js
CHANGED
|
@@ -3162,7 +3162,7 @@ const cvaOptionCardContainer = cssClassVarianceUtilities.cvaMerge(["contents"]);
|
|
|
3162
3162
|
const OptionCard = React.forwardRef((_a, ref) => {
|
|
3163
3163
|
var { icon, heading, subheading, description, disabled, id, value, className, dataTestId } = _a, rest = __rest(_a, ["icon", "heading", "subheading", "description", "disabled", "id", "value", "className", "dataTestId"]);
|
|
3164
3164
|
const htmlForId = id !== null && id !== void 0 ? id : "option-card-" + v4();
|
|
3165
|
-
return (jsxRuntime.jsxs("div", { "data-testid": dataTestId, className: cvaOptionCardContainer(), children: [jsxRuntime.jsx("input", Object.assign({ ref: ref, id: htmlForId, type: "radio", value: value, className: "peer hidden" }, rest)), jsxRuntime.jsxs("label", { htmlFor: htmlForId, className: cvaOptionCardLabel({ className, disabled }), children: [disabled && icon && React.cloneElement(icon, { className: `${icon.props.className} text-secondary-400` }), !disabled && icon, heading && (jsxRuntime.jsx(reactComponents.Heading, { variant: "secondary", subtle: disabled, children: heading })), (subheading || description) && (jsxRuntime.jsxs("div", { className: cvaOptionCardContent(), children: [subheading && (jsxRuntime.jsx(reactComponents.Text, { weight: "thick", align: "center", subtle: disabled, children: subheading })), description && (jsxRuntime.jsx(reactComponents.Text, { type: "span", subtle: true, align: "center", children: description }))] }))] })] }));
|
|
3165
|
+
return (jsxRuntime.jsxs("div", { "data-testid": dataTestId, className: cvaOptionCardContainer(), children: [jsxRuntime.jsx("input", Object.assign({ ref: ref, id: htmlForId, type: "radio", value: value, className: "peer hidden" }, rest)), jsxRuntime.jsxs("label", { htmlFor: htmlForId, className: cvaOptionCardLabel({ className, disabled }), children: [disabled && icon && React.cloneElement(icon, { className: `${icon.props.className} text-secondary-400` }), !disabled && icon, heading && (jsxRuntime.jsx(reactComponents.Heading, { variant: "secondary", subtle: disabled, children: heading })), (subheading || description) && (jsxRuntime.jsxs("div", { className: cvaOptionCardContent(), children: [subheading && (jsxRuntime.jsx(reactComponents.Text, { type: "span", weight: "thick", align: "center", subtle: disabled, children: subheading })), description && (jsxRuntime.jsx(reactComponents.Text, { type: "span", subtle: true, align: "center", children: description }))] }))] })] }));
|
|
3166
3166
|
});
|
|
3167
3167
|
|
|
3168
3168
|
// This file is a workaround for a bug in web browsers' "native"
|
|
@@ -14546,15 +14546,7 @@ const PhoneInput = React.forwardRef((_a, ref) => {
|
|
|
14546
14546
|
const onCodeChangeHandler = React__default["default"].useCallback((codeNumber) => {
|
|
14547
14547
|
codeRef.current = codeNumber;
|
|
14548
14548
|
setCode(codeNumber);
|
|
14549
|
-
|
|
14550
|
-
onChangeHandler({ newPhone: phone, newCode: codeNumber });
|
|
14551
|
-
}
|
|
14552
|
-
else {
|
|
14553
|
-
//Clear the phone number because we disable the field, when there is no country code
|
|
14554
|
-
onChangeHandler({ newPhone: "", newCode: "" });
|
|
14555
|
-
phoneRef.current = "";
|
|
14556
|
-
setPhone("");
|
|
14557
|
-
}
|
|
14549
|
+
onChangeHandler({ newPhone: phone, newCode: codeNumber });
|
|
14558
14550
|
}, [phone, onChangeHandler, codeRef]);
|
|
14559
14551
|
const onBlurHandler = React__default["default"].useCallback(() => {
|
|
14560
14552
|
onFieldsBlur &&
|
|
@@ -14579,7 +14571,7 @@ const PhoneInput = React.forwardRef((_a, ref) => {
|
|
|
14579
14571
|
}, onChange: e => {
|
|
14580
14572
|
var _a;
|
|
14581
14573
|
onCodeChangeHandler((_a = e === null || e === void 0 ? void 0 : e.value) !== null && _a !== void 0 ? _a : "");
|
|
14582
|
-
}, disabled: disabled, readOnly: readOnly, isInvalid: isInvalid, placeholder: countryCodePlaceholderValue, isClearable: isCountryCodeClearable }), jsxRuntime.jsx(BaseInput, Object.assign({ id: "phoneInput-number", dataTestId: dataTestId && `${dataTestId}-phoneNumberInput`, fieldSize: fieldSize, type: "tel", value: phone, disabled: disabled
|
|
14574
|
+
}, disabled: disabled, readOnly: readOnly, isInvalid: isInvalid, placeholder: countryCodePlaceholderValue, isClearable: isCountryCodeClearable }), jsxRuntime.jsx(BaseInput, Object.assign({ id: "phoneInput-number", dataTestId: dataTestId && `${dataTestId}-phoneNumberInput`, fieldSize: fieldSize, type: "tel", value: phone, disabled: disabled, readOnly: readOnly, isInvalid: isInvalid, onChange: e => {
|
|
14583
14575
|
onPhoneChangeHandler(e.target.value);
|
|
14584
14576
|
}, onBlur: () => {
|
|
14585
14577
|
onBlurHandler();
|
|
@@ -14612,14 +14604,18 @@ const PhoneField = React.forwardRef((_a, ref) => {
|
|
|
14612
14604
|
/**
|
|
14613
14605
|
* Validates a phone number
|
|
14614
14606
|
*/
|
|
14615
|
-
const validatePhoneNumber = (
|
|
14607
|
+
const validatePhoneNumber = ({ phone, countryCode, national, }) => {
|
|
14608
|
+
const phoneNumber = phone ? phone : countryCode || national ? `${countryCode}${national}` : undefined;
|
|
14609
|
+
if (!phoneNumber) {
|
|
14610
|
+
return "REQUIRED";
|
|
14611
|
+
}
|
|
14612
|
+
if (!phone && !countryCode && national) {
|
|
14613
|
+
return "REQUIRED_COUNTRY";
|
|
14614
|
+
}
|
|
14616
14615
|
if (phoneNumber &&
|
|
14617
14616
|
(checkIfPhoneNumberHasPlus(phoneNumber) ? isNaN(+phoneNumber.slice(1, phoneNumber.length)) : isNaN(+phoneNumber))) {
|
|
14618
14617
|
return "NOT_A_NUMBER";
|
|
14619
14618
|
}
|
|
14620
|
-
if (!phoneNumber) {
|
|
14621
|
-
return "REQUIRED";
|
|
14622
|
-
}
|
|
14623
14619
|
const safePhoneNumber = getPhoneNumberWithPlus(phoneNumber === null || phoneNumber === void 0 ? void 0 : phoneNumber.trim());
|
|
14624
14620
|
if (safePhoneNumber.length <= 5) {
|
|
14625
14621
|
//needs to be handled manually, parsePhoneNumberFromString can't parse it
|
|
@@ -14637,11 +14633,11 @@ const validatePhoneNumber = (phoneNumber) => {
|
|
|
14637
14633
|
/**
|
|
14638
14634
|
* Checks if the country code is valid and required
|
|
14639
14635
|
*/
|
|
14640
|
-
const isInvalidCountryCode = (error, required) => !!required && error === "REQUIRED";
|
|
14636
|
+
const isInvalidCountryCode = (error, required) => (!!required && error === "REQUIRED") || error === "REQUIRED_COUNTRY";
|
|
14641
14637
|
/**
|
|
14642
14638
|
* Checks if the phone number is valid and required
|
|
14643
14639
|
*/
|
|
14644
|
-
const isInvalidPhoneNumber = (error, required) => (!!error && error !== "REQUIRED") || (!!required && error === "REQUIRED");
|
|
14640
|
+
const isInvalidPhoneNumber = (error, required) => error !== "REQUIRED_COUNTRY" && ((!!error && error !== "REQUIRED") || (!!required && error === "REQUIRED"));
|
|
14645
14641
|
|
|
14646
14642
|
const cvaRadioGroup = cssClassVarianceUtilities.cvaMerge(["flex", "gap-2", "flex-col", "items-start"], {
|
|
14647
14643
|
variants: {
|
|
@@ -15305,6 +15301,7 @@ exports.Toggle = Toggle;
|
|
|
15305
15301
|
exports.UploadField = UploadField;
|
|
15306
15302
|
exports.UploadInput = UploadInput;
|
|
15307
15303
|
exports.ValueType = StateManagedSelect$1;
|
|
15304
|
+
exports.checkIfPhoneNumberHasPlus = checkIfPhoneNumberHasPlus;
|
|
15308
15305
|
exports.cvaInput = cvaInput;
|
|
15309
15306
|
exports.cvaInputAddon = cvaInputAddon;
|
|
15310
15307
|
exports.cvaInputAddonAfter = cvaInputAddonAfter;
|
|
@@ -15324,6 +15321,7 @@ exports.cvaSelectMenuList = cvaSelectMenuList;
|
|
|
15324
15321
|
exports.cvaSelectPrefix = cvaSelectPrefix;
|
|
15325
15322
|
exports.cvaSelectXIcon = cvaSelectXIcon;
|
|
15326
15323
|
exports.getOrderedOptions = getOrderedOptions;
|
|
15324
|
+
exports.getPhoneNumberWithPlus = getPhoneNumberWithPlus;
|
|
15327
15325
|
exports.isInvalidCountryCode = isInvalidCountryCode;
|
|
15328
15326
|
exports.isInvalidPhoneNumber = isInvalidPhoneNumber;
|
|
15329
15327
|
exports.isMultiValue = isMultiValue;
|
package/index.esm.js
CHANGED
|
@@ -3136,7 +3136,7 @@ const cvaOptionCardContainer = cvaMerge(["contents"]);
|
|
|
3136
3136
|
const OptionCard = forwardRef((_a, ref) => {
|
|
3137
3137
|
var { icon, heading, subheading, description, disabled, id, value, className, dataTestId } = _a, rest = __rest(_a, ["icon", "heading", "subheading", "description", "disabled", "id", "value", "className", "dataTestId"]);
|
|
3138
3138
|
const htmlForId = id !== null && id !== void 0 ? id : "option-card-" + v4();
|
|
3139
|
-
return (jsxs("div", { "data-testid": dataTestId, className: cvaOptionCardContainer(), children: [jsx$1("input", Object.assign({ ref: ref, id: htmlForId, type: "radio", value: value, className: "peer hidden" }, rest)), jsxs("label", { htmlFor: htmlForId, className: cvaOptionCardLabel({ className, disabled }), children: [disabled && icon && cloneElement(icon, { className: `${icon.props.className} text-secondary-400` }), !disabled && icon, heading && (jsx$1(Heading, { variant: "secondary", subtle: disabled, children: heading })), (subheading || description) && (jsxs("div", { className: cvaOptionCardContent(), children: [subheading && (jsx$1(Text, { weight: "thick", align: "center", subtle: disabled, children: subheading })), description && (jsx$1(Text, { type: "span", subtle: true, align: "center", children: description }))] }))] })] }));
|
|
3139
|
+
return (jsxs("div", { "data-testid": dataTestId, className: cvaOptionCardContainer(), children: [jsx$1("input", Object.assign({ ref: ref, id: htmlForId, type: "radio", value: value, className: "peer hidden" }, rest)), jsxs("label", { htmlFor: htmlForId, className: cvaOptionCardLabel({ className, disabled }), children: [disabled && icon && cloneElement(icon, { className: `${icon.props.className} text-secondary-400` }), !disabled && icon, heading && (jsx$1(Heading, { variant: "secondary", subtle: disabled, children: heading })), (subheading || description) && (jsxs("div", { className: cvaOptionCardContent(), children: [subheading && (jsx$1(Text, { type: "span", weight: "thick", align: "center", subtle: disabled, children: subheading })), description && (jsx$1(Text, { type: "span", subtle: true, align: "center", children: description }))] }))] })] }));
|
|
3140
3140
|
});
|
|
3141
3141
|
|
|
3142
3142
|
// This file is a workaround for a bug in web browsers' "native"
|
|
@@ -14520,15 +14520,7 @@ const PhoneInput = forwardRef((_a, ref) => {
|
|
|
14520
14520
|
const onCodeChangeHandler = React__default.useCallback((codeNumber) => {
|
|
14521
14521
|
codeRef.current = codeNumber;
|
|
14522
14522
|
setCode(codeNumber);
|
|
14523
|
-
|
|
14524
|
-
onChangeHandler({ newPhone: phone, newCode: codeNumber });
|
|
14525
|
-
}
|
|
14526
|
-
else {
|
|
14527
|
-
//Clear the phone number because we disable the field, when there is no country code
|
|
14528
|
-
onChangeHandler({ newPhone: "", newCode: "" });
|
|
14529
|
-
phoneRef.current = "";
|
|
14530
|
-
setPhone("");
|
|
14531
|
-
}
|
|
14523
|
+
onChangeHandler({ newPhone: phone, newCode: codeNumber });
|
|
14532
14524
|
}, [phone, onChangeHandler, codeRef]);
|
|
14533
14525
|
const onBlurHandler = React__default.useCallback(() => {
|
|
14534
14526
|
onFieldsBlur &&
|
|
@@ -14553,7 +14545,7 @@ const PhoneInput = forwardRef((_a, ref) => {
|
|
|
14553
14545
|
}, onChange: e => {
|
|
14554
14546
|
var _a;
|
|
14555
14547
|
onCodeChangeHandler((_a = e === null || e === void 0 ? void 0 : e.value) !== null && _a !== void 0 ? _a : "");
|
|
14556
|
-
}, disabled: disabled, readOnly: readOnly, isInvalid: isInvalid, placeholder: countryCodePlaceholderValue, isClearable: isCountryCodeClearable }), jsx$1(BaseInput, Object.assign({ id: "phoneInput-number", dataTestId: dataTestId && `${dataTestId}-phoneNumberInput`, fieldSize: fieldSize, type: "tel", value: phone, disabled: disabled
|
|
14548
|
+
}, disabled: disabled, readOnly: readOnly, isInvalid: isInvalid, placeholder: countryCodePlaceholderValue, isClearable: isCountryCodeClearable }), jsx$1(BaseInput, Object.assign({ id: "phoneInput-number", dataTestId: dataTestId && `${dataTestId}-phoneNumberInput`, fieldSize: fieldSize, type: "tel", value: phone, disabled: disabled, readOnly: readOnly, isInvalid: isInvalid, onChange: e => {
|
|
14557
14549
|
onPhoneChangeHandler(e.target.value);
|
|
14558
14550
|
}, onBlur: () => {
|
|
14559
14551
|
onBlurHandler();
|
|
@@ -14586,14 +14578,18 @@ const PhoneField = forwardRef((_a, ref) => {
|
|
|
14586
14578
|
/**
|
|
14587
14579
|
* Validates a phone number
|
|
14588
14580
|
*/
|
|
14589
|
-
const validatePhoneNumber = (
|
|
14581
|
+
const validatePhoneNumber = ({ phone, countryCode, national, }) => {
|
|
14582
|
+
const phoneNumber = phone ? phone : countryCode || national ? `${countryCode}${national}` : undefined;
|
|
14583
|
+
if (!phoneNumber) {
|
|
14584
|
+
return "REQUIRED";
|
|
14585
|
+
}
|
|
14586
|
+
if (!phone && !countryCode && national) {
|
|
14587
|
+
return "REQUIRED_COUNTRY";
|
|
14588
|
+
}
|
|
14590
14589
|
if (phoneNumber &&
|
|
14591
14590
|
(checkIfPhoneNumberHasPlus(phoneNumber) ? isNaN(+phoneNumber.slice(1, phoneNumber.length)) : isNaN(+phoneNumber))) {
|
|
14592
14591
|
return "NOT_A_NUMBER";
|
|
14593
14592
|
}
|
|
14594
|
-
if (!phoneNumber) {
|
|
14595
|
-
return "REQUIRED";
|
|
14596
|
-
}
|
|
14597
14593
|
const safePhoneNumber = getPhoneNumberWithPlus(phoneNumber === null || phoneNumber === void 0 ? void 0 : phoneNumber.trim());
|
|
14598
14594
|
if (safePhoneNumber.length <= 5) {
|
|
14599
14595
|
//needs to be handled manually, parsePhoneNumberFromString can't parse it
|
|
@@ -14611,11 +14607,11 @@ const validatePhoneNumber = (phoneNumber) => {
|
|
|
14611
14607
|
/**
|
|
14612
14608
|
* Checks if the country code is valid and required
|
|
14613
14609
|
*/
|
|
14614
|
-
const isInvalidCountryCode = (error, required) => !!required && error === "REQUIRED";
|
|
14610
|
+
const isInvalidCountryCode = (error, required) => (!!required && error === "REQUIRED") || error === "REQUIRED_COUNTRY";
|
|
14615
14611
|
/**
|
|
14616
14612
|
* Checks if the phone number is valid and required
|
|
14617
14613
|
*/
|
|
14618
|
-
const isInvalidPhoneNumber = (error, required) => (!!error && error !== "REQUIRED") || (!!required && error === "REQUIRED");
|
|
14614
|
+
const isInvalidPhoneNumber = (error, required) => error !== "REQUIRED_COUNTRY" && ((!!error && error !== "REQUIRED") || (!!required && error === "REQUIRED"));
|
|
14619
14615
|
|
|
14620
14616
|
const cvaRadioGroup = cvaMerge(["flex", "gap-2", "flex-col", "items-start"], {
|
|
14621
14617
|
variants: {
|
|
@@ -15246,4 +15242,4 @@ const UploadField = forwardRef((_a, ref) => {
|
|
|
15246
15242
|
*/
|
|
15247
15243
|
setupLibraryTranslations();
|
|
15248
15244
|
|
|
15249
|
-
export { ActionButton, BaseInput, Checkbox, CreatableSelect, DateField, DateInput, DropZone, EmailField, EmailInput, FormGroup, Label, MultiSelectMenuItem, NumberField, NumberInput, OptionCard, PhoneField, PhoneInput, RadioGroup, RadioItem, Schedule, ScheduleVariant, Search, Select, SingleSelectMenuItem, TextArea, TextAreaField, TextField, TextInput, TimeRange, TimeRangeField, Toggle, UploadField, UploadInput, StateManagedSelect$1 as ValueType, cvaInput, cvaInputAddon, cvaInputAddonAfter, cvaInputAddonBefore, cvaInputBase, cvaInputBaseDisabled, cvaInputBaseInvalid, cvaInputField, cvaInputPrefix, cvaInputSuffix, cvaSelect, cvaSelectCounter, cvaSelectDynamicTagContainer, cvaSelectIcon, cvaSelectMenu, cvaSelectMenuList, cvaSelectPrefix, cvaSelectXIcon, getOrderedOptions, isInvalidCountryCode, isInvalidPhoneNumber, isMultiValue, parseSchedule, serializeSchedule, useCustomComponents, usePhoneInput, validatePhoneNumber, weekDay, workTimeAlarmConversion };
|
|
15245
|
+
export { ActionButton, BaseInput, Checkbox, CreatableSelect, DateField, DateInput, DropZone, EmailField, EmailInput, FormGroup, Label, MultiSelectMenuItem, NumberField, NumberInput, OptionCard, PhoneField, PhoneInput, RadioGroup, RadioItem, Schedule, ScheduleVariant, Search, Select, SingleSelectMenuItem, TextArea, TextAreaField, TextField, TextInput, TimeRange, TimeRangeField, Toggle, UploadField, UploadInput, StateManagedSelect$1 as ValueType, checkIfPhoneNumberHasPlus, cvaInput, cvaInputAddon, cvaInputAddonAfter, cvaInputAddonBefore, cvaInputBase, cvaInputBaseDisabled, cvaInputBaseInvalid, cvaInputField, cvaInputPrefix, cvaInputSuffix, cvaSelect, cvaSelectCounter, cvaSelectDynamicTagContainer, cvaSelectIcon, cvaSelectMenu, cvaSelectMenuList, cvaSelectPrefix, cvaSelectXIcon, getOrderedOptions, getPhoneNumberWithPlus, isInvalidCountryCode, isInvalidPhoneNumber, isMultiValue, parseSchedule, serializeSchedule, useCustomComponents, usePhoneInput, validatePhoneNumber, weekDay, workTimeAlarmConversion };
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trackunit/react-form-components",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.175",
|
|
4
4
|
"repository": "https://github.com/Trackunit/manager",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=18.x"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@trackunit/css-class-variance-utilities": "0.0.
|
|
11
|
-
"@trackunit/i18n-library-translation": "0.0.
|
|
12
|
-
"@trackunit/react-components": "0.1.
|
|
13
|
-
"@trackunit/shared-utils": "0.0.
|
|
14
|
-
"@trackunit/ui-icons": "0.0.
|
|
10
|
+
"@trackunit/css-class-variance-utilities": "0.0.14",
|
|
11
|
+
"@trackunit/i18n-library-translation": "0.0.87",
|
|
12
|
+
"@trackunit/react-components": "0.1.178",
|
|
13
|
+
"@trackunit/shared-utils": "0.0.11",
|
|
14
|
+
"@trackunit/ui-icons": "0.0.78",
|
|
15
15
|
"date-fns": "2.29.3",
|
|
16
16
|
"libphonenumber-js": "1.10.36",
|
|
17
17
|
"react": "18.2.0",
|
|
@@ -12,7 +12,7 @@ export interface IOptionCardProps extends InputHTMLAttributes<HTMLInputElement>,
|
|
|
12
12
|
/**
|
|
13
13
|
* Subheading displayed above the description.
|
|
14
14
|
*/
|
|
15
|
-
subheading?: string;
|
|
15
|
+
subheading?: string | JSX.Element;
|
|
16
16
|
/**
|
|
17
17
|
* Descriptive text displayed inside the OptionCard.
|
|
18
18
|
*/
|
|
@@ -2,12 +2,8 @@ import React, { FocusEventHandler } from "react";
|
|
|
2
2
|
import { SingleValue } from "react-select";
|
|
3
3
|
import { BaseInputProps } from "../BaseInput";
|
|
4
4
|
type BaseInputExposedProps = Omit<BaseInputProps, "actions">;
|
|
5
|
-
export interface
|
|
6
|
-
|
|
7
|
-
phoneNumber: string;
|
|
8
|
-
}
|
|
9
|
-
interface PhoneNumberValue {
|
|
10
|
-
phone: string;
|
|
5
|
+
export interface PhoneNumberValue {
|
|
6
|
+
phone?: string;
|
|
11
7
|
national?: string;
|
|
12
8
|
countryCode?: string;
|
|
13
9
|
}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { ValidatePhoneNumberLengthResult } from "libphonenumber-js";
|
|
2
|
-
export type PhoneInputValidationError = "REQUIRED" | ValidatePhoneNumberLengthResult | undefined;
|
|
2
|
+
export type PhoneInputValidationError = "REQUIRED" | "REQUIRED_COUNTRY" | ValidatePhoneNumberLengthResult | undefined;
|
|
3
|
+
export interface PhoneNumberValueForValidation {
|
|
4
|
+
phone?: string | undefined | null;
|
|
5
|
+
national?: string | undefined | null;
|
|
6
|
+
countryCode?: string | undefined | null;
|
|
7
|
+
}
|
|
3
8
|
/**
|
|
4
9
|
* Validates a phone number
|
|
5
10
|
*/
|
|
6
|
-
export declare const validatePhoneNumber: (
|
|
11
|
+
export declare const validatePhoneNumber: ({ phone, countryCode, national, }: PhoneNumberValueForValidation) => PhoneInputValidationError;
|
|
7
12
|
/**
|
|
8
13
|
* Checks if the country code is valid and required
|
|
9
14
|
*/
|
package/src/index.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export * from "./components/OptionCard/OptionCard";
|
|
|
14
14
|
export * from "./components/PhoneField/PhoneField";
|
|
15
15
|
export * from "./components/PhoneInput/PhoneInput";
|
|
16
16
|
export * from "./components/PhoneInput/PhoneInputValidationUtils";
|
|
17
|
+
export * from "./components/PhoneInput/PhoneNumberUtilities";
|
|
17
18
|
export * from "./components/RadioGroup";
|
|
18
19
|
export * from "./components/Schedule/Schedule";
|
|
19
20
|
export * from "./components/Schedule/ScheduleParser";
|