@panneau/fields 5.0.0-alpha.2 → 5.0.0-alpha.20
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 +186 -20
- package/dist/address/AddressField.css +44 -0
- package/dist/address/AddressField.d.ts +37 -0
- package/dist/address/AddressField.d.ts.map +1 -0
- package/dist/address/AddressField.js +411 -0
- package/dist/address/AddressField.js.map +1 -0
- package/dist/address/AddressField.module.js +22 -0
- package/dist/address/AddressField.module.js.map +1 -0
- package/dist/address/address.d.ts +23 -0
- package/dist/address/address.d.ts.map +1 -0
- package/dist/address/address.js +58 -0
- package/dist/address/address.js.map +1 -0
- package/dist/address/index.d.ts +3 -0
- package/dist/address/index.d.ts.map +1 -0
- package/dist/address/index.js +3 -0
- package/dist/boolean/BooleanField.d.ts +1 -1
- package/dist/boolean/BooleanField.js +78 -17
- package/dist/boolean/BooleanField.js.map +1 -1
- package/dist/boolean/index.d.ts +1 -1
- package/dist/color/ColorField.css +9 -0
- package/dist/color/ColorField.d.ts +12 -5
- package/dist/color/ColorField.d.ts.map +1 -1
- package/dist/color/ColorField.js +341 -81
- package/dist/color/ColorField.js.map +1 -1
- package/dist/color/ColorField.module.js +4 -2
- package/dist/color/ColorField.module.js.map +1 -1
- package/dist/color/index.d.ts +2 -1
- package/dist/color/index.d.ts.map +1 -1
- package/dist/color/index.js +3 -1
- package/dist/color/palette.d.ts +23 -0
- package/dist/color/palette.d.ts.map +1 -0
- package/dist/color/palette.js +34 -0
- package/dist/color/palette.js.map +1 -0
- package/dist/compound/Compound.css +26 -0
- package/dist/compound/Compound.module.js +16 -0
- package/dist/compound/Compound.module.js.map +1 -0
- package/dist/compound/compound.d.ts +56 -0
- package/dist/compound/compound.d.ts.map +1 -0
- package/dist/compound/compound.js +186 -0
- package/dist/compound/compound.js.map +1 -0
- package/dist/country/CountryField.css +42 -0
- package/dist/country/CountryField.d.ts +32 -0
- package/dist/country/CountryField.d.ts.map +1 -0
- package/dist/country/CountryField.js +424 -0
- package/dist/country/CountryField.js.map +1 -0
- package/dist/country/CountryField.module.js +20 -0
- package/dist/country/CountryField.module.js.map +1 -0
- package/dist/country/codes.d.ts +6 -0
- package/dist/country/codes.d.ts.map +1 -0
- package/dist/country/codes.js +261 -0
- package/dist/country/codes.js.map +1 -0
- package/dist/country/countries.d.ts +32 -0
- package/dist/country/countries.d.ts.map +1 -0
- package/dist/country/countries.js +60 -0
- package/dist/country/countries.js.map +1 -0
- package/dist/country/index.d.ts +3 -0
- package/dist/country/index.d.ts.map +1 -0
- package/dist/country/index.js +4 -0
- package/dist/credits/CreditsField.d.ts +15 -0
- package/dist/credits/CreditsField.d.ts.map +1 -0
- package/dist/credits/CreditsField.js +58 -0
- package/dist/credits/CreditsField.js.map +1 -0
- package/dist/credits/credits.d.ts +18 -0
- package/dist/credits/credits.d.ts.map +1 -0
- package/dist/credits/credits.js +33 -0
- package/dist/credits/credits.js.map +1 -0
- package/dist/credits/index.d.ts +5 -0
- package/dist/credits/index.d.ts.map +1 -0
- package/dist/credits/index.js +3 -0
- package/dist/date/DateField.d.ts +1 -1
- package/dist/date/DateField.js.map +1 -1
- package/dist/date/index.d.ts +1 -1
- package/dist/daterange/DateRangeField.css +9 -0
- package/dist/daterange/DateRangeField.d.ts +31 -0
- package/dist/daterange/DateRangeField.d.ts.map +1 -0
- package/dist/daterange/DateRangeField.js +372 -0
- package/dist/daterange/DateRangeField.js.map +1 -0
- package/dist/daterange/DateRangeField.module.js +12 -0
- package/dist/daterange/DateRangeField.module.js.map +1 -0
- package/dist/daterange/index.d.ts +3 -0
- package/dist/daterange/index.d.ts.map +1 -0
- package/dist/daterange/index.js +3 -0
- package/dist/daterange/range.d.ts +61 -0
- package/dist/daterange/range.d.ts.map +1 -0
- package/dist/daterange/range.js +119 -0
- package/dist/daterange/range.js.map +1 -0
- package/dist/datetime/DateTimeField.d.ts +1 -1
- package/dist/datetime/DateTimeField.js +107 -20
- package/dist/datetime/DateTimeField.js.map +1 -1
- package/dist/datetime/index.d.ts +1 -1
- package/dist/duration/DurationField.css +11 -0
- package/dist/duration/DurationField.d.ts +67 -0
- package/dist/duration/DurationField.d.ts.map +1 -0
- package/dist/duration/DurationField.js +260 -0
- package/dist/duration/DurationField.js.map +1 -0
- package/dist/duration/DurationField.module.js +12 -0
- package/dist/duration/DurationField.module.js.map +1 -0
- package/dist/duration/index.d.ts +2 -0
- package/dist/duration/index.d.ts.map +1 -0
- package/dist/duration/index.js +1 -0
- package/dist/email/EmailField.d.ts +2 -2
- package/dist/email/EmailField.js.map +1 -1
- package/dist/email/index.d.ts +1 -1
- package/dist/embed/EmbedField.css +60 -0
- package/dist/embed/EmbedField.d.ts +29 -0
- package/dist/embed/EmbedField.d.ts.map +1 -0
- package/dist/embed/EmbedField.js +309 -0
- package/dist/embed/EmbedField.js.map +1 -0
- package/dist/embed/EmbedField.module.js +22 -0
- package/dist/embed/EmbedField.module.js.map +1 -0
- package/dist/embed/index.d.ts +3 -0
- package/dist/embed/index.d.ts.map +1 -0
- package/dist/embed/index.js +3 -0
- package/dist/file/FileField.css +54 -0
- package/dist/file/FileField.d.ts +50 -0
- package/dist/file/FileField.d.ts.map +1 -0
- package/dist/file/FileField.js +288 -0
- package/dist/file/FileField.js.map +1 -0
- package/dist/file/FileField.module.js +22 -0
- package/dist/file/FileField.module.js.map +1 -0
- package/dist/file/index.d.ts +3 -0
- package/dist/file/index.d.ts.map +1 -0
- package/dist/file/index.js +1 -0
- package/dist/group/GroupField.css +20 -3
- package/dist/group/GroupField.d.ts +10 -4
- package/dist/group/GroupField.d.ts.map +1 -1
- package/dist/group/GroupField.js +71 -66
- package/dist/group/GroupField.js.map +1 -1
- package/dist/group/GroupField.module.js +10 -2
- package/dist/group/GroupField.module.js.map +1 -1
- package/dist/group/index.d.ts +1 -1
- package/dist/index.d.ts +21 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -2
- package/dist/json/JsonField.css +7 -0
- package/dist/json/JsonField.d.ts +22 -0
- package/dist/json/JsonField.d.ts.map +1 -0
- package/dist/json/JsonField.js +207 -0
- package/dist/json/JsonField.js.map +1 -0
- package/dist/json/JsonField.module.js +8 -0
- package/dist/json/JsonField.module.js.map +1 -0
- package/dist/json/index.d.ts +2 -0
- package/dist/json/index.d.ts.map +1 -0
- package/dist/json/index.js +1 -0
- package/dist/link/LinkField.css +12 -0
- package/dist/link/LinkField.d.ts +38 -0
- package/dist/link/LinkField.d.ts.map +1 -0
- package/dist/link/LinkField.js +742 -0
- package/dist/link/LinkField.js.map +1 -0
- package/dist/link/LinkField.module.js +8 -0
- package/dist/link/LinkField.module.js.map +1 -0
- package/dist/link/index.d.ts +3 -0
- package/dist/link/index.d.ts.map +1 -0
- package/dist/link/index.js +3 -0
- package/dist/link/link.d.ts +30 -0
- package/dist/link/link.d.ts.map +1 -0
- package/dist/link/link.js +63 -0
- package/dist/link/link.js.map +1 -0
- package/dist/link/pages.d.ts +17 -0
- package/dist/link/pages.d.ts.map +1 -0
- package/dist/link/pages.js +104 -0
- package/dist/link/pages.js.map +1 -0
- package/dist/locales/index.js.map +1 -1
- package/dist/localized/LocalizedField.css +27 -6
- package/dist/localized/LocalizedField.d.ts +19 -8
- package/dist/localized/LocalizedField.d.ts.map +1 -1
- package/dist/localized/LocalizedField.js +238 -105
- package/dist/localized/LocalizedField.js.map +1 -1
- package/dist/localized/LocalizedField.module.js +10 -4
- package/dist/localized/LocalizedField.module.js.map +1 -1
- package/dist/localized/index.d.ts +1 -1
- package/dist/location/LocationField.css +54 -0
- package/dist/location/LocationField.d.ts +31 -0
- package/dist/location/LocationField.d.ts.map +1 -0
- package/dist/location/LocationField.js +487 -0
- package/dist/location/LocationField.js.map +1 -0
- package/dist/location/LocationField.module.js +22 -0
- package/dist/location/LocationField.module.js.map +1 -0
- package/dist/location/LocationMap.d.ts +25 -0
- package/dist/location/LocationMap.d.ts.map +1 -0
- package/dist/location/LocationMap.js +205 -0
- package/dist/location/LocationMap.js.map +1 -0
- package/dist/location/index.d.ts +5 -0
- package/dist/location/index.d.ts.map +1 -0
- package/dist/location/index.js +4 -0
- package/dist/location/leafletCss.d.ts +2 -0
- package/dist/location/leafletCss.d.ts.map +1 -0
- package/dist/location/leafletCss.js +6 -0
- package/dist/location/leafletCss.js.map +1 -0
- package/dist/location/nominatim.d.ts +23 -0
- package/dist/location/nominatim.d.ts.map +1 -0
- package/dist/location/nominatim.js +79 -0
- package/dist/location/nominatim.js.map +1 -0
- package/dist/location/search.d.ts +10 -0
- package/dist/location/search.d.ts.map +1 -0
- package/dist/location/search.js +83 -0
- package/dist/location/search.js.map +1 -0
- package/dist/location/types.d.ts +46 -0
- package/dist/location/types.d.ts.map +1 -0
- package/dist/missing/MissingField.d.ts +4 -3
- package/dist/missing/MissingField.d.ts.map +1 -1
- package/dist/missing/MissingField.js +3 -2
- package/dist/missing/MissingField.js.map +1 -1
- package/dist/money/MoneyField.d.ts +28 -0
- package/dist/money/MoneyField.d.ts.map +1 -0
- package/dist/money/MoneyField.js +269 -0
- package/dist/money/MoneyField.js.map +1 -0
- package/dist/money/index.d.ts +3 -0
- package/dist/money/index.d.ts.map +1 -0
- package/dist/money/index.js +3 -0
- package/dist/money/money.d.ts +27 -0
- package/dist/money/money.d.ts.map +1 -0
- package/dist/money/money.js +56 -0
- package/dist/money/money.js.map +1 -0
- package/dist/number/NumberField.d.ts +1 -1
- package/dist/number/NumberField.js.map +1 -1
- package/dist/number/index.d.ts +1 -1
- package/dist/range/RangeField.d.ts +22 -0
- package/dist/range/RangeField.d.ts.map +1 -0
- package/dist/range/RangeField.js +203 -0
- package/dist/range/RangeField.js.map +1 -0
- package/dist/range/index.d.ts +2 -0
- package/dist/range/index.d.ts.map +1 -0
- package/dist/range/index.js +1 -0
- package/dist/region/RegionField.d.ts +23 -0
- package/dist/region/RegionField.d.ts.map +1 -0
- package/dist/region/RegionField.js +174 -0
- package/dist/region/RegionField.js.map +1 -0
- package/dist/region/RegionFlag.css +9 -0
- package/dist/region/RegionFlag.d.ts +20 -0
- package/dist/region/RegionFlag.d.ts.map +1 -0
- package/dist/region/RegionFlag.js +61 -0
- package/dist/region/RegionFlag.js.map +1 -0
- package/dist/region/RegionFlag.module.js +8 -0
- package/dist/region/RegionFlag.module.js.map +1 -0
- package/dist/region/data.d.ts +5 -0
- package/dist/region/data.d.ts.map +1 -0
- package/dist/region/data.js +513 -0
- package/dist/region/data.js.map +1 -0
- package/dist/region/flags/CA.d.ts +4 -0
- package/dist/region/flags/CA.d.ts.map +1 -0
- package/dist/region/flags/CA.js +21 -0
- package/dist/region/flags/CA.js.map +1 -0
- package/dist/region/flags/US.d.ts +4 -0
- package/dist/region/flags/US.d.ts.map +1 -0
- package/dist/region/flags/US.js +65 -0
- package/dist/region/flags/US.js.map +1 -0
- package/dist/region/flags.d.ts +17 -0
- package/dist/region/flags.d.ts.map +1 -0
- package/dist/region/flags.js +84 -0
- package/dist/region/flags.js.map +1 -0
- package/dist/region/index.d.ts +5 -0
- package/dist/region/index.d.ts.map +1 -0
- package/dist/region/index.js +5 -0
- package/dist/region/regions.d.ts +15 -0
- package/dist/region/regions.d.ts.map +1 -0
- package/dist/region/regions.js +29 -0
- package/dist/region/regions.js.map +1 -0
- package/dist/relation/RelationField.d.ts +2 -2
- package/dist/relation/RelationField.d.ts.map +1 -1
- package/dist/relation/RelationField.js +511 -171
- package/dist/relation/RelationField.js.map +1 -1
- package/dist/relation/index.d.ts +2 -2
- package/dist/repeater/RepeaterField.d.ts +13 -2
- package/dist/repeater/RepeaterField.d.ts.map +1 -1
- package/dist/repeater/RepeaterField.js +138 -50
- package/dist/repeater/RepeaterField.js.map +1 -1
- package/dist/repeater/index.d.ts +1 -1
- package/dist/select/SelectField.d.ts +1 -1
- package/dist/select/SelectField.js.map +1 -1
- package/dist/select/index.d.ts +1 -1
- package/dist/sessions/SessionsField.d.ts +15 -0
- package/dist/sessions/SessionsField.d.ts.map +1 -0
- package/dist/sessions/SessionsField.js +49 -0
- package/dist/sessions/SessionsField.js.map +1 -0
- package/dist/sessions/index.d.ts +4 -0
- package/dist/sessions/index.d.ts.map +1 -0
- package/dist/sessions/index.js +1 -0
- package/dist/shared/CodeComboBox.d.ts +21 -0
- package/dist/shared/CodeComboBox.d.ts.map +1 -0
- package/dist/shared/CodeComboBox.js +238 -0
- package/dist/shared/CodeComboBox.js.map +1 -0
- package/dist/shared/DefinitionField.d.ts +9 -4
- package/dist/shared/DefinitionField.d.ts.map +1 -1
- package/dist/shared/DefinitionField.js +98 -78
- package/dist/shared/DefinitionField.js.map +1 -1
- package/dist/shared/builtIn.d.ts +7 -3
- package/dist/shared/builtIn.d.ts.map +1 -1
- package/dist/shared/builtIn.js +39 -7
- package/dist/shared/builtIn.js.map +1 -1
- package/dist/shared/check.d.ts +27 -0
- package/dist/shared/check.d.ts.map +1 -0
- package/dist/shared/check.js +18 -0
- package/dist/shared/check.js.map +1 -0
- package/dist/shared/context.d.ts +33 -5
- package/dist/shared/context.d.ts.map +1 -1
- package/dist/shared/context.js +36 -20
- package/dist/shared/context.js.map +1 -1
- package/dist/shared/cx.js.map +1 -1
- package/dist/shared/dates.js +2 -2
- package/dist/shared/dates.js.map +1 -1
- package/dist/shared/embed.d.ts +19 -0
- package/dist/shared/embed.d.ts.map +1 -0
- package/dist/shared/embed.js +14 -0
- package/dist/shared/embed.js.map +1 -0
- package/dist/shared/entry.d.ts +13 -4
- package/dist/shared/entry.d.ts.map +1 -1
- package/dist/shared/entry.js +24 -7
- package/dist/shared/entry.js.map +1 -1
- package/dist/shared/flow.d.ts +8 -0
- package/dist/shared/flow.d.ts.map +1 -0
- package/dist/shared/flow.js +38 -0
- package/dist/shared/flow.js.map +1 -0
- package/dist/shared/part.d.ts +26 -0
- package/dist/shared/part.d.ts.map +1 -0
- package/dist/shared/part.js +64 -0
- package/dist/shared/part.js.map +1 -0
- package/dist/shared/relation.js.map +1 -1
- package/dist/shared/reveal.d.ts +16 -0
- package/dist/shared/reveal.d.ts.map +1 -0
- package/dist/shared/reveal.js +46 -0
- package/dist/shared/reveal.js.map +1 -0
- package/dist/shared/types.d.ts +12 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/slug/SlugField.css +18 -0
- package/dist/slug/SlugField.d.ts +33 -5
- package/dist/slug/SlugField.d.ts.map +1 -1
- package/dist/slug/SlugField.js +346 -126
- package/dist/slug/SlugField.js.map +1 -1
- package/dist/slug/SlugField.module.js +14 -0
- package/dist/slug/SlugField.module.js.map +1 -0
- package/dist/slug/index.d.ts +1 -1
- package/dist/slug/index.d.ts.map +1 -1
- package/dist/slug/index.js +1 -1
- package/dist/tags/TagsField.d.ts +17 -0
- package/dist/tags/TagsField.d.ts.map +1 -0
- package/dist/tags/TagsField.js +120 -0
- package/dist/tags/TagsField.js.map +1 -0
- package/dist/tags/index.d.ts +2 -0
- package/dist/tags/index.d.ts.map +1 -0
- package/dist/tags/index.js +1 -0
- package/dist/tel/TelField.css +25 -0
- package/dist/tel/TelField.d.ts +34 -0
- package/dist/tel/TelField.d.ts.map +1 -0
- package/dist/tel/TelField.js +390 -0
- package/dist/tel/TelField.js.map +1 -0
- package/dist/tel/TelField.module.js +12 -0
- package/dist/tel/TelField.module.js.map +1 -0
- package/dist/tel/index.d.ts +3 -0
- package/dist/tel/index.d.ts.map +1 -0
- package/dist/tel/index.js +3 -0
- package/dist/tel/phone.d.ts +59 -0
- package/dist/tel/phone.d.ts.map +1 -0
- package/dist/tel/phone.js +107 -0
- package/dist/tel/phone.js.map +1 -0
- package/dist/text/TextField.d.ts +12 -4
- package/dist/text/TextField.d.ts.map +1 -1
- package/dist/text/TextField.js +104 -60
- package/dist/text/TextField.js.map +1 -1
- package/dist/text/index.d.ts +1 -1
- package/dist/textarea/TextAreaField.d.ts +1 -1
- package/dist/textarea/TextAreaField.js.map +1 -1
- package/dist/textarea/index.d.ts +1 -1
- package/dist/time/TimeField.d.ts +1 -1
- package/dist/time/TimeField.js +64 -10
- package/dist/time/TimeField.js.map +1 -1
- package/dist/time/index.d.ts +1 -1
- package/dist/upload/FilePicker.css +24 -0
- package/dist/upload/FilePicker.d.ts +14 -0
- package/dist/upload/FilePicker.d.ts.map +1 -0
- package/dist/upload/FilePicker.js +130 -0
- package/dist/upload/FilePicker.js.map +1 -0
- package/dist/upload/FilePicker.module.js +12 -0
- package/dist/upload/FilePicker.module.js.map +1 -0
- package/dist/upload/UploadList.css +93 -0
- package/dist/upload/UploadList.d.ts +18 -0
- package/dist/upload/UploadList.d.ts.map +1 -0
- package/dist/upload/UploadList.js +144 -0
- package/dist/upload/UploadList.js.map +1 -0
- package/dist/upload/UploadList.module.js +32 -0
- package/dist/upload/UploadList.module.js.map +1 -0
- package/dist/upload/files.d.ts +5 -0
- package/dist/upload/files.d.ts.map +1 -0
- package/dist/upload/files.js +26 -0
- package/dist/upload/files.js.map +1 -0
- package/dist/upload/types.d.ts +58 -0
- package/dist/upload/types.d.ts.map +1 -0
- package/dist/upload/useRejectionMessage.d.ts +4 -0
- package/dist/upload/useRejectionMessage.d.ts.map +1 -0
- package/dist/upload/useRejectionMessage.js +25 -0
- package/dist/upload/useRejectionMessage.js.map +1 -0
- package/dist/upload/useUploads.d.ts +30 -0
- package/dist/upload/useUploads.d.ts.map +1 -0
- package/dist/upload/useUploads.js +115 -0
- package/dist/upload/useUploads.js.map +1 -0
- package/dist/uppy/index.d.ts +3 -0
- package/dist/uppy/index.d.ts.map +1 -0
- package/dist/uppy/index.js +1 -0
- package/dist/uppy/uploader.d.ts +44 -0
- package/dist/uppy/uploader.d.ts.map +1 -0
- package/dist/uppy/uploader.js +139 -0
- package/dist/uppy/uploader.js.map +1 -0
- package/dist/url/UrlField.d.ts +2 -2
- package/dist/url/UrlField.d.ts.map +1 -1
- package/dist/url/UrlField.js +69 -14
- package/dist/url/UrlField.js.map +1 -1
- package/dist/url/index.d.ts +1 -1
- package/package.json +110 -7
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
import { getFieldProps, getSetting, isBoolean, isString } from "../shared/entry.js";
|
|
2
|
+
import { messages } from "../shared/messages.js";
|
|
3
|
+
import { getCountryFlag, getCountryName, getLocaleCountry } from "../country/countries.js";
|
|
4
|
+
import { TextField } from "../text/TextField.js";
|
|
5
|
+
import TelField_module_default from "./TelField.module.js";
|
|
6
|
+
import { formatPhoneInput, getCallingCode, getPhoneCountries, joinExtension, parsePhone, readExtension, readPhone, splitExtension } from "./phone.js";
|
|
7
|
+
import { c } from "react/compiler-runtime";
|
|
8
|
+
import { Select, usePanneauIntl } from "@panneau/ui";
|
|
9
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
import { useState } from "react";
|
|
11
|
+
//#region src/tel/TelField.tsx
|
|
12
|
+
/** Characters that aren't part of a number: an extension typed after it (`x123`, `ext. 123`). */
|
|
13
|
+
var NOT_A_NUMBER = /[^\d\s()+.-]/;
|
|
14
|
+
/** The text shown for a value: a number of the country in its format, any other as it is. */
|
|
15
|
+
function display(value, country) {
|
|
16
|
+
const number = parsePhone(value);
|
|
17
|
+
if (number === null) return value ?? "";
|
|
18
|
+
return number.country !== null && number.country === country ? number.national : number.international;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A phone number, in E.164 (`+15145550199`). The country of the number, its flag and its calling
|
|
22
|
+
* code, is in a menu at the start of the input, and the number shows in the format of its country
|
|
23
|
+
* as it is typed. The country follows the number: typing `+33…` picks France.
|
|
24
|
+
*
|
|
25
|
+
* Until a number is complete, the value is the text as typed, which the `tel` rule refuses. A value
|
|
26
|
+
* that isn't E.164, kept from before, shows as it is, and becomes E.164 when the field is left, if
|
|
27
|
+
* it reads as a number of the chosen country.
|
|
28
|
+
*
|
|
29
|
+
* With `extension`, an input after the number takes the digits of an extension, kept after `;ext=`
|
|
30
|
+
* (`+15145550199;ext=123`). An extension typed or pasted after the number (`ext. 123`, `x123`,
|
|
31
|
+
* `poste 123`) moves to that input when the field is left.
|
|
32
|
+
*/
|
|
33
|
+
function TelField(t0) {
|
|
34
|
+
const $ = c(88);
|
|
35
|
+
let defaultCountry;
|
|
36
|
+
let disabled;
|
|
37
|
+
let onBlur;
|
|
38
|
+
let onChange;
|
|
39
|
+
let props;
|
|
40
|
+
let readOnly;
|
|
41
|
+
let suffix;
|
|
42
|
+
let t1;
|
|
43
|
+
let value;
|
|
44
|
+
if ($[0] !== t0) {
|
|
45
|
+
({value, onChange, onBlur, country: defaultCountry, extension: t1, suffix, disabled, readOnly, ...props} = t0);
|
|
46
|
+
$[0] = t0;
|
|
47
|
+
$[1] = defaultCountry;
|
|
48
|
+
$[2] = disabled;
|
|
49
|
+
$[3] = onBlur;
|
|
50
|
+
$[4] = onChange;
|
|
51
|
+
$[5] = props;
|
|
52
|
+
$[6] = readOnly;
|
|
53
|
+
$[7] = suffix;
|
|
54
|
+
$[8] = t1;
|
|
55
|
+
$[9] = value;
|
|
56
|
+
} else {
|
|
57
|
+
defaultCountry = $[1];
|
|
58
|
+
disabled = $[2];
|
|
59
|
+
onBlur = $[3];
|
|
60
|
+
onChange = $[4];
|
|
61
|
+
props = $[5];
|
|
62
|
+
readOnly = $[6];
|
|
63
|
+
suffix = $[7];
|
|
64
|
+
t1 = $[8];
|
|
65
|
+
value = $[9];
|
|
66
|
+
}
|
|
67
|
+
const allowsExtension = t1 === void 0 ? false : t1;
|
|
68
|
+
const intl = usePanneauIntl();
|
|
69
|
+
const [chosen, setChosen] = useState(null);
|
|
70
|
+
const [draft, setDraft] = useState(null);
|
|
71
|
+
let country;
|
|
72
|
+
let number;
|
|
73
|
+
let parts;
|
|
74
|
+
let t2;
|
|
75
|
+
if ($[10] !== allowsExtension || $[11] !== chosen || $[12] !== defaultCountry || $[13] !== draft || $[14] !== intl.locale || $[15] !== value) {
|
|
76
|
+
parts = allowsExtension ? splitExtension(value) : {
|
|
77
|
+
number: value ?? null,
|
|
78
|
+
extension: null
|
|
79
|
+
};
|
|
80
|
+
number = parsePhone(parts.number);
|
|
81
|
+
country = number?.country ?? chosen ?? defaultCountry ?? getLocaleCountry(intl.locale) ?? null;
|
|
82
|
+
t2 = draft ?? display(parts.number, country);
|
|
83
|
+
$[10] = allowsExtension;
|
|
84
|
+
$[11] = chosen;
|
|
85
|
+
$[12] = defaultCountry;
|
|
86
|
+
$[13] = draft;
|
|
87
|
+
$[14] = intl.locale;
|
|
88
|
+
$[15] = value;
|
|
89
|
+
$[16] = country;
|
|
90
|
+
$[17] = number;
|
|
91
|
+
$[18] = parts;
|
|
92
|
+
$[19] = t2;
|
|
93
|
+
} else {
|
|
94
|
+
country = $[16];
|
|
95
|
+
number = $[17];
|
|
96
|
+
parts = $[18];
|
|
97
|
+
t2 = $[19];
|
|
98
|
+
}
|
|
99
|
+
const shown = t2;
|
|
100
|
+
let t3;
|
|
101
|
+
if ($[20] !== onChange || $[21] !== value) {
|
|
102
|
+
t3 = (next) => {
|
|
103
|
+
if (next !== (value ?? null)) onChange?.(next);
|
|
104
|
+
};
|
|
105
|
+
$[20] = onChange;
|
|
106
|
+
$[21] = value;
|
|
107
|
+
$[22] = t3;
|
|
108
|
+
} else t3 = $[22];
|
|
109
|
+
const emit = t3;
|
|
110
|
+
let t4;
|
|
111
|
+
if ($[23] !== emit || $[24] !== parts) {
|
|
112
|
+
t4 = (next_0, extension) => {
|
|
113
|
+
emit(joinExtension(next_0, extension === void 0 ? parts.extension : extension));
|
|
114
|
+
};
|
|
115
|
+
$[23] = emit;
|
|
116
|
+
$[24] = parts;
|
|
117
|
+
$[25] = t4;
|
|
118
|
+
} else t4 = $[25];
|
|
119
|
+
const emitNumber = t4;
|
|
120
|
+
let T0;
|
|
121
|
+
let t10;
|
|
122
|
+
let t5;
|
|
123
|
+
let t6;
|
|
124
|
+
let t7;
|
|
125
|
+
let t8;
|
|
126
|
+
let t9;
|
|
127
|
+
if ($[26] !== disabled || $[27] !== intl || $[28] !== readOnly) {
|
|
128
|
+
const collator = new Intl.Collator(intl.locale);
|
|
129
|
+
let t11;
|
|
130
|
+
if ($[36] !== intl.locale) {
|
|
131
|
+
t11 = (code) => ({
|
|
132
|
+
code,
|
|
133
|
+
name: getCountryName(code, intl.locale)
|
|
134
|
+
});
|
|
135
|
+
$[36] = intl.locale;
|
|
136
|
+
$[37] = t11;
|
|
137
|
+
} else t11 = $[37];
|
|
138
|
+
const countries = getPhoneCountries().map(t11).sort((a, b) => collator.compare(a.name, b.name));
|
|
139
|
+
T0 = Select;
|
|
140
|
+
if ($[38] !== intl) {
|
|
141
|
+
t5 = intl.formatMessage(messages.telCountry);
|
|
142
|
+
$[38] = intl;
|
|
143
|
+
$[39] = t5;
|
|
144
|
+
} else t5 = $[39];
|
|
145
|
+
t6 = "bare";
|
|
146
|
+
t7 = true;
|
|
147
|
+
t8 = disabled === true || readOnly === true;
|
|
148
|
+
t9 = "+";
|
|
149
|
+
t10 = countries.map(_temp);
|
|
150
|
+
$[26] = disabled;
|
|
151
|
+
$[27] = intl;
|
|
152
|
+
$[28] = readOnly;
|
|
153
|
+
$[29] = T0;
|
|
154
|
+
$[30] = t10;
|
|
155
|
+
$[31] = t5;
|
|
156
|
+
$[32] = t6;
|
|
157
|
+
$[33] = t7;
|
|
158
|
+
$[34] = t8;
|
|
159
|
+
$[35] = t9;
|
|
160
|
+
} else {
|
|
161
|
+
T0 = $[29];
|
|
162
|
+
t10 = $[30];
|
|
163
|
+
t5 = $[31];
|
|
164
|
+
t6 = $[32];
|
|
165
|
+
t7 = $[33];
|
|
166
|
+
t8 = $[34];
|
|
167
|
+
t9 = $[35];
|
|
168
|
+
}
|
|
169
|
+
let t11;
|
|
170
|
+
if ($[40] !== emitNumber || $[41] !== number?.nationalNumber || $[42] !== shown) {
|
|
171
|
+
t11 = (next_1) => {
|
|
172
|
+
const code_1 = next_1 !== null ? String(next_1) : null;
|
|
173
|
+
setChosen(code_1);
|
|
174
|
+
setDraft(null);
|
|
175
|
+
const digits = number?.nationalNumber ?? shown.replace(/^\+/, "");
|
|
176
|
+
emitNumber(readPhone(digits, code_1).value);
|
|
177
|
+
};
|
|
178
|
+
$[40] = emitNumber;
|
|
179
|
+
$[41] = number?.nationalNumber;
|
|
180
|
+
$[42] = shown;
|
|
181
|
+
$[43] = t11;
|
|
182
|
+
} else t11 = $[43];
|
|
183
|
+
let t12;
|
|
184
|
+
if ($[44] !== T0 || $[45] !== country || $[46] !== t10 || $[47] !== t11 || $[48] !== t5 || $[49] !== t6 || $[50] !== t7 || $[51] !== t8 || $[52] !== t9) {
|
|
185
|
+
t12 = /* @__PURE__ */ jsx(T0, {
|
|
186
|
+
"aria-label": t5,
|
|
187
|
+
appearance: t6,
|
|
188
|
+
isRequired: t7,
|
|
189
|
+
isDisabled: t8,
|
|
190
|
+
placeholder: t9,
|
|
191
|
+
options: t10,
|
|
192
|
+
value: country,
|
|
193
|
+
renderValue: _temp2,
|
|
194
|
+
onChange: t11
|
|
195
|
+
});
|
|
196
|
+
$[44] = T0;
|
|
197
|
+
$[45] = country;
|
|
198
|
+
$[46] = t10;
|
|
199
|
+
$[47] = t11;
|
|
200
|
+
$[48] = t5;
|
|
201
|
+
$[49] = t6;
|
|
202
|
+
$[50] = t7;
|
|
203
|
+
$[51] = t8;
|
|
204
|
+
$[52] = t9;
|
|
205
|
+
$[53] = t12;
|
|
206
|
+
} else t12 = $[53];
|
|
207
|
+
const picker = t12;
|
|
208
|
+
let t13;
|
|
209
|
+
if ($[54] !== allowsExtension || $[55] !== disabled || $[56] !== emitNumber || $[57] !== intl || $[58] !== onBlur || $[59] !== parts || $[60] !== props || $[61] !== readOnly) {
|
|
210
|
+
t13 = allowsExtension ? /* @__PURE__ */ jsxs("span", {
|
|
211
|
+
className: TelField_module_default.extension,
|
|
212
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
213
|
+
"aria-hidden": "true",
|
|
214
|
+
children: intl.formatMessage(messages.telExtensionShort)
|
|
215
|
+
}), /* @__PURE__ */ jsx("input", {
|
|
216
|
+
className: TelField_module_default.extensionInput,
|
|
217
|
+
type: "text",
|
|
218
|
+
inputMode: "numeric",
|
|
219
|
+
autoComplete: "tel-extension",
|
|
220
|
+
"aria-label": intl.formatMessage(messages.telExtension),
|
|
221
|
+
"aria-invalid": (props.errors?.length ?? 0) > 0 || void 0,
|
|
222
|
+
maxLength: 10,
|
|
223
|
+
value: parts.extension ?? "",
|
|
224
|
+
disabled,
|
|
225
|
+
readOnly,
|
|
226
|
+
onChange: (event) => {
|
|
227
|
+
const digits_0 = event.target.value.replace(/\D/g, "").slice(0, 10);
|
|
228
|
+
emitNumber(parts.number, digits_0 === "" ? null : digits_0);
|
|
229
|
+
},
|
|
230
|
+
onBlur: () => onBlur?.()
|
|
231
|
+
})]
|
|
232
|
+
}) : null;
|
|
233
|
+
$[54] = allowsExtension;
|
|
234
|
+
$[55] = disabled;
|
|
235
|
+
$[56] = emitNumber;
|
|
236
|
+
$[57] = intl;
|
|
237
|
+
$[58] = onBlur;
|
|
238
|
+
$[59] = parts;
|
|
239
|
+
$[60] = props;
|
|
240
|
+
$[61] = readOnly;
|
|
241
|
+
$[62] = t13;
|
|
242
|
+
} else t13 = $[62];
|
|
243
|
+
const extensionInput = t13;
|
|
244
|
+
let t14;
|
|
245
|
+
if ($[63] !== extensionInput || $[64] !== suffix) {
|
|
246
|
+
t14 = extensionInput !== null || suffix !== void 0 ? { suffix: /* @__PURE__ */ jsxs(Fragment, { children: [extensionInput, suffix] }) } : {};
|
|
247
|
+
$[63] = extensionInput;
|
|
248
|
+
$[64] = suffix;
|
|
249
|
+
$[65] = t14;
|
|
250
|
+
} else t14 = $[65];
|
|
251
|
+
let t15;
|
|
252
|
+
if ($[66] !== allowsExtension || $[67] !== country || $[68] !== emitNumber || $[69] !== shown) {
|
|
253
|
+
t15 = (text) => {
|
|
254
|
+
const typed = text ?? "";
|
|
255
|
+
const typedExtension = allowsExtension && NOT_A_NUMBER.test(typed);
|
|
256
|
+
const added = typed.startsWith(shown) ? typed.slice(shown.length) : "";
|
|
257
|
+
const next_2 = !typedExtension && added !== "" && !(allowsExtension && added.trim() === "") ? formatPhoneInput(typed, country) : typed;
|
|
258
|
+
setDraft(next_2);
|
|
259
|
+
if (typedExtension) {
|
|
260
|
+
emitNumber(next_2.trim());
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
const read = readPhone(next_2, country);
|
|
264
|
+
if (read.country !== null && read.country !== country) setChosen(read.country);
|
|
265
|
+
emitNumber(read.value);
|
|
266
|
+
};
|
|
267
|
+
$[66] = allowsExtension;
|
|
268
|
+
$[67] = country;
|
|
269
|
+
$[68] = emitNumber;
|
|
270
|
+
$[69] = shown;
|
|
271
|
+
$[70] = t15;
|
|
272
|
+
} else t15 = $[70];
|
|
273
|
+
let t16;
|
|
274
|
+
if ($[71] !== allowsExtension || $[72] !== country || $[73] !== disabled || $[74] !== emitNumber || $[75] !== onBlur || $[76] !== parts || $[77] !== readOnly) {
|
|
275
|
+
t16 = () => {
|
|
276
|
+
setDraft(null);
|
|
277
|
+
if (readOnly !== true && disabled !== true && isString(parts.number) && parsePhone(parts.number) === null) {
|
|
278
|
+
const typed_0 = allowsExtension ? readExtension(parts.number) : null;
|
|
279
|
+
emitNumber(readPhone(typed_0?.number ?? parts.number, country).value, typed_0?.extension ?? parts.extension);
|
|
280
|
+
}
|
|
281
|
+
onBlur?.();
|
|
282
|
+
};
|
|
283
|
+
$[71] = allowsExtension;
|
|
284
|
+
$[72] = country;
|
|
285
|
+
$[73] = disabled;
|
|
286
|
+
$[74] = emitNumber;
|
|
287
|
+
$[75] = onBlur;
|
|
288
|
+
$[76] = parts;
|
|
289
|
+
$[77] = readOnly;
|
|
290
|
+
$[78] = t16;
|
|
291
|
+
} else t16 = $[78];
|
|
292
|
+
let t17;
|
|
293
|
+
if ($[79] !== disabled || $[80] !== picker || $[81] !== props || $[82] !== readOnly || $[83] !== shown || $[84] !== t14 || $[85] !== t15 || $[86] !== t16) {
|
|
294
|
+
t17 = /* @__PURE__ */ jsx(TextField, {
|
|
295
|
+
autoComplete: "tel",
|
|
296
|
+
...props,
|
|
297
|
+
disabled,
|
|
298
|
+
readOnly,
|
|
299
|
+
type: "tel",
|
|
300
|
+
inputMode: "tel",
|
|
301
|
+
prefix: picker,
|
|
302
|
+
...t14,
|
|
303
|
+
value: shown,
|
|
304
|
+
onChange: t15,
|
|
305
|
+
onBlur: t16
|
|
306
|
+
});
|
|
307
|
+
$[79] = disabled;
|
|
308
|
+
$[80] = picker;
|
|
309
|
+
$[81] = props;
|
|
310
|
+
$[82] = readOnly;
|
|
311
|
+
$[83] = shown;
|
|
312
|
+
$[84] = t14;
|
|
313
|
+
$[85] = t15;
|
|
314
|
+
$[86] = t16;
|
|
315
|
+
$[87] = t17;
|
|
316
|
+
} else t17 = $[87];
|
|
317
|
+
return t17;
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* The `tel` type: `settings.country` is the country of a new number, and `settings.extension` adds
|
|
321
|
+
* an input for an extension.
|
|
322
|
+
*/
|
|
323
|
+
function _temp2(option) {
|
|
324
|
+
return `+${getCallingCode(String(option.value)) ?? ""}`;
|
|
325
|
+
}
|
|
326
|
+
function _temp(t0) {
|
|
327
|
+
const { code: code_0, name } = t0;
|
|
328
|
+
return {
|
|
329
|
+
value: code_0,
|
|
330
|
+
label: `${name} +${getCallingCode(code_0) ?? ""}`,
|
|
331
|
+
prefix: getCountryFlag(code_0)
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
function TelFieldEntry(props) {
|
|
335
|
+
const $ = c(16);
|
|
336
|
+
let t0;
|
|
337
|
+
if ($[0] !== props.field) {
|
|
338
|
+
t0 = getSetting(props.field, "country", isString);
|
|
339
|
+
$[0] = props.field;
|
|
340
|
+
$[1] = t0;
|
|
341
|
+
} else t0 = $[1];
|
|
342
|
+
const country = t0;
|
|
343
|
+
let t1;
|
|
344
|
+
if ($[2] !== props.field) {
|
|
345
|
+
t1 = getSetting(props.field, "extension", isBoolean);
|
|
346
|
+
$[2] = props.field;
|
|
347
|
+
$[3] = t1;
|
|
348
|
+
} else t1 = $[3];
|
|
349
|
+
const extension = t1 === true;
|
|
350
|
+
let t2;
|
|
351
|
+
if ($[4] !== props) {
|
|
352
|
+
t2 = getFieldProps(props);
|
|
353
|
+
$[4] = props;
|
|
354
|
+
$[5] = t2;
|
|
355
|
+
} else t2 = $[5];
|
|
356
|
+
let t3;
|
|
357
|
+
if ($[6] !== country) {
|
|
358
|
+
t3 = country !== void 0 ? { country } : {};
|
|
359
|
+
$[6] = country;
|
|
360
|
+
$[7] = t3;
|
|
361
|
+
} else t3 = $[7];
|
|
362
|
+
let t4;
|
|
363
|
+
if ($[8] !== extension) {
|
|
364
|
+
t4 = extension ? { extension } : {};
|
|
365
|
+
$[8] = extension;
|
|
366
|
+
$[9] = t4;
|
|
367
|
+
} else t4 = $[9];
|
|
368
|
+
const t5 = isString(props.value) ? props.value : null;
|
|
369
|
+
let t6;
|
|
370
|
+
if ($[10] !== props.onChange || $[11] !== t2 || $[12] !== t3 || $[13] !== t4 || $[14] !== t5) {
|
|
371
|
+
t6 = /* @__PURE__ */ jsx(TelField, {
|
|
372
|
+
...t2,
|
|
373
|
+
...t3,
|
|
374
|
+
...t4,
|
|
375
|
+
value: t5,
|
|
376
|
+
onChange: props.onChange
|
|
377
|
+
});
|
|
378
|
+
$[10] = props.onChange;
|
|
379
|
+
$[11] = t2;
|
|
380
|
+
$[12] = t3;
|
|
381
|
+
$[13] = t4;
|
|
382
|
+
$[14] = t5;
|
|
383
|
+
$[15] = t6;
|
|
384
|
+
} else t6 = $[15];
|
|
385
|
+
return t6;
|
|
386
|
+
}
|
|
387
|
+
//#endregion
|
|
388
|
+
export { TelField, TelFieldEntry };
|
|
389
|
+
|
|
390
|
+
//# sourceMappingURL=TelField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TelField.js","names":["useState","Select","usePanneauIntl","getCountryFlag","getCountryName","getLocaleCountry","getFieldProps","getSetting","isBoolean","isString","messages","FieldEntryProps","TextField","TextFieldProps","styles","MAX_EXTENSION_LENGTH","formatPhoneInput","getCallingCode","getPhoneCountries","joinExtension","parsePhone","readExtension","readPhone","splitExtension","TelFieldProps","Omit","country","extension","NOT_A_NUMBER","display","value","number","national","international","TelField","t0","$","_c","defaultCountry","disabled","onBlur","onChange","props","readOnly","suffix","t1","allowsExtension","undefined","intl","chosen","setChosen","draft","setDraft","parts","t2","locale","shown","t3","next","emit","t4","next_0","emitNumber","T0","t10","t5","t6","t7","t8","t9","collator","Intl","Collator","t11","code","name","countries","map","sort","a","b","compare","formatMessage","telCountry","_temp","nationalNumber","next_1","code_1","String","digits","replace","t12","_temp2","picker","t13","telExtensionShort","extensionInput","telExtension","errors","length","event","digits_0","target","slice","t14","t15","text","typed","typedExtension","test","added","startsWith","next_2","trim","read","t16","typed_0","t17","option","code_0","label","prefix","TelFieldEntry","field","_c","styles","_Fragment"],"sources":["../../src/tel/TelField.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Select, usePanneauIntl } from '@panneau/ui';\n\nimport { getCountryFlag, getCountryName, getLocaleCountry } from '../country/countries';\nimport { getFieldProps, getSetting, isBoolean, isString } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps } from '../shared/types';\nimport { TextField, type TextFieldProps } from '../text/TextField';\nimport styles from './TelField.module.css';\nimport {\n MAX_EXTENSION_LENGTH,\n formatPhoneInput,\n getCallingCode,\n getPhoneCountries,\n joinExtension,\n parsePhone,\n readExtension,\n readPhone,\n splitExtension,\n} from './phone';\n\nexport interface TelFieldProps extends Omit<\n TextFieldProps,\n 'type' | 'inputMode' | 'prefix' | 'maxLength' | 'secret'\n> {\n /**\n * The country of a new number (`CA`). Without it, the region of the user's locale (`fr-CA`\n * gives `CA`).\n */\n country?: string | null;\n /**\n * Adds an input for the extension, after the number. The value is then the number with its\n * extension after `;ext=`, as in a `tel:` URI: `+15145550199;ext=123`.\n */\n extension?: boolean;\n}\n\n/** Characters that aren't part of a number: an extension typed after it (`x123`, `ext. 123`). */\nconst NOT_A_NUMBER = /[^\\d\\s()+.-]/;\n\n/** The text shown for a value: a number of the country in its format, any other as it is. */\nfunction display(value: string | null | undefined, country: string | null): string {\n const number = parsePhone(value);\n if (number === null) {\n return value ?? '';\n }\n return number.country !== null && number.country === country\n ? number.national\n : number.international;\n}\n\n/**\n * A phone number, in E.164 (`+15145550199`). The country of the number, its flag and its calling\n * code, is in a menu at the start of the input, and the number shows in the format of its country\n * as it is typed. The country follows the number: typing `+33…` picks France.\n *\n * Until a number is complete, the value is the text as typed, which the `tel` rule refuses. A value\n * that isn't E.164, kept from before, shows as it is, and becomes E.164 when the field is left, if\n * it reads as a number of the chosen country.\n *\n * With `extension`, an input after the number takes the digits of an extension, kept after `;ext=`\n * (`+15145550199;ext=123`). An extension typed or pasted after the number (`ext. 123`, `x123`,\n * `poste 123`) moves to that input when the field is left.\n */\nexport function TelField({\n value,\n onChange,\n onBlur,\n country: defaultCountry,\n extension: allowsExtension = false,\n suffix,\n disabled,\n readOnly,\n ...props\n}: TelFieldProps) {\n const intl = usePanneauIntl();\n // The country picked in the menu, or found in a number typed with its calling code.\n const [chosen, setChosen] = useState<string | null>(null);\n // The text being typed, while the input has the focus.\n const [draft, setDraft] = useState<string | null>(null);\n // Without extensions, a value is a number as it is, even with `;ext=`: the rule refuses it.\n const parts = allowsExtension\n ? splitExtension(value)\n : { number: value ?? null, extension: null };\n const number = parsePhone(parts.number);\n const country =\n number?.country ?? chosen ?? defaultCountry ?? getLocaleCountry(intl.locale) ?? null;\n const shown = draft ?? display(parts.number, country);\n\n const emit = (next: string | null) => {\n if (next !== (value ?? null)) {\n onChange?.(next);\n }\n };\n /** A number, with the extension of the value, or another one. */\n const emitNumber = (next: string | null, extension?: string | null) => {\n emit(joinExtension(next, extension === undefined ? parts.extension : extension));\n };\n\n const collator = new Intl.Collator(intl.locale);\n const countries = getPhoneCountries()\n .map((code) => ({ code, name: getCountryName(code, intl.locale) }))\n .sort((a, b) => collator.compare(a.name, b.name));\n\n const picker = (\n <Select\n aria-label={intl.formatMessage(messages.telCountry)}\n appearance=\"bare\"\n isRequired\n isDisabled={disabled === true || readOnly === true}\n placeholder=\"+\"\n options={countries.map(({ code, name }) => ({\n value: code,\n label: `${name} +${getCallingCode(code) ?? ''}`,\n prefix: getCountryFlag(code),\n }))}\n value={country}\n renderValue={(option) => `+${getCallingCode(String(option.value)) ?? ''}`}\n onChange={(next) => {\n const code = next !== null ? String(next) : null;\n setChosen(code);\n setDraft(null);\n // The same digits, in the country picked.\n const digits = number?.nationalNumber ?? shown.replace(/^\\+/, '');\n emitNumber(readPhone(digits, code).value);\n }}\n />\n );\n\n const extensionInput = allowsExtension ? (\n <span className={styles.extension}>\n <span aria-hidden=\"true\">{intl.formatMessage(messages.telExtensionShort)}</span>\n <input\n className={styles.extensionInput}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete=\"tel-extension\"\n aria-label={intl.formatMessage(messages.telExtension)}\n aria-invalid={(props.errors?.length ?? 0) > 0 || undefined}\n maxLength={MAX_EXTENSION_LENGTH}\n value={parts.extension ?? ''}\n disabled={disabled}\n readOnly={readOnly}\n onChange={(event) => {\n // Digits only: other characters are left out as they are typed.\n const digits = event.target.value\n .replace(/\\D/g, '')\n .slice(0, MAX_EXTENSION_LENGTH);\n emitNumber(parts.number, digits === '' ? null : digits);\n }}\n onBlur={() => onBlur?.()}\n />\n </span>\n ) : null;\n\n return (\n <TextField\n autoComplete=\"tel\"\n {...props}\n disabled={disabled}\n readOnly={readOnly}\n type=\"tel\"\n inputMode=\"tel\"\n prefix={picker}\n {...(extensionInput !== null || suffix !== undefined\n ? {\n suffix: (\n <>\n {extensionInput}\n {suffix}\n </>\n ),\n }\n : {})}\n value={shown}\n onChange={(text) => {\n const typed = text ?? '';\n // An extension typed after the number stays as typed until the field is left.\n const typedExtension = allowsExtension && NOT_A_NUMBER.test(typed);\n // Characters added at the end are formatted as they are typed; other edits stay as\n // they are, so that the cursor doesn't jump. With extensions, a space typed after\n // the number stays, before `ext.` or `x`.\n const added = typed.startsWith(shown) ? typed.slice(shown.length) : '';\n const next =\n !typedExtension && added !== '' && !(allowsExtension && added.trim() === '')\n ? formatPhoneInput(typed, country)\n : typed;\n setDraft(next);\n if (typedExtension) {\n emitNumber(next.trim());\n return;\n }\n const read = readPhone(next, country);\n if (read.country !== null && read.country !== country) {\n setChosen(read.country);\n }\n emitNumber(read.value);\n }}\n onBlur={() => {\n setDraft(null);\n // A number as typed becomes E.164 when it reads as a number of the country, and an\n // extension typed after it moves to its input, unless the field can't be changed.\n if (\n readOnly !== true &&\n disabled !== true &&\n isString(parts.number) &&\n parsePhone(parts.number) === null\n ) {\n const typed = allowsExtension ? readExtension(parts.number) : null;\n emitNumber(\n readPhone(typed?.number ?? parts.number, country).value,\n typed?.extension ?? parts.extension,\n );\n }\n onBlur?.();\n }}\n />\n );\n}\n\n/**\n * The `tel` type: `settings.country` is the country of a new number, and `settings.extension` adds\n * an input for an extension.\n */\nexport function TelFieldEntry(props: FieldEntryProps) {\n const country = getSetting(props.field, 'country', isString);\n const extension = getSetting(props.field, 'extension', isBoolean) === true;\n return (\n <TelField\n {...getFieldProps(props)}\n {...(country !== undefined ? { country } : {})}\n {...(extension ? { extension } : {})}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;AAuCA,IAAM4B,eAAe;;AAGrB,SAASC,QAAQC,OAAkCJ,SAAgC;CAC/E,MAAMK,SAASX,WAAWU,KAAK;CAC/B,IAAIC,WAAW,MACX,OAAOD,SAAS;CAEpB,OAAOC,OAAOL,YAAY,QAAQK,OAAOL,YAAYA,UAC/CK,OAAOC,WACPD,OAAOE;AACjB;;;;;;;;;;;;;;AAeA,SAAOC,SAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAf;CAAA,IAAAM,EAAA,OAAAD,IAAA;EAAkB,CAAA,CAAAL,OAAAW,UAAAD,QAAAd,SAAAY,gBAAAX,WAAAkB,IAAAD,QAAAL,UAAAI,UAAA,GAAAD,SAAAP;EAUTC,EAAA,KAAAD;EAAAC,EAAA,KAAAE;EAAAF,EAAA,KAAAG;EAAAH,EAAA,KAAAI;EAAAJ,EAAA,KAAAK;EAAAL,EAAA,KAAAM;EAAAN,EAAA,KAAAO;EAAAP,EAAA,KAAAQ;EAAAR,EAAA,KAAAS;EAAAT,EAAA,KAAAN;CAAA,OAAA;EAAAQ,iBAAAF,EAAA;EAAAG,WAAAH,EAAA;EAAAI,SAAAJ,EAAA;EAAAK,WAAAL,EAAA;EAAAM,QAAAN,EAAA;EAAAO,WAAAP,EAAA;EAAAQ,SAAAR,EAAA;EAAAS,KAAAT,EAAA;EAAAN,QAAAM,EAAA;CAAA;CALD,MAAAU,kBAAAD,OAAAE,KAAAA,IAAA,QAAAF;CAMX,MAAAG,OAAa9C,eAAe;CAE5B,MAAA,CAAA+C,QAAAC,aAA4BlD,SAAwB,IAAI;CAExD,MAAA,CAAAmD,OAAAC,YAA0BpD,SAAwB,IAAI;CAAE,IAAA0B;CAAA,IAAAK;CAAA,IAAAsB;CAAA,IAAAC;CAAA,IAAAlB,EAAA,QAAAU,mBAAAV,EAAA,QAAAa,UAAAb,EAAA,QAAAE,kBAAAF,EAAA,QAAAe,SAAAf,EAAA,QAAAY,KAAAO,UAAAnB,EAAA,QAAAN,OAAA;EAExDuB,QAAcP,kBACRvB,eAAeO,KAC0B,IAFjC;GAAAC,QAEED,SAAA;GAAaH,WAAa;EAAK;EAC/CI,SAAeX,WAAWiC,MAAKtB,MAAO;EACtCL,UACIK,QAAML,WAANuB,UAAAX,kBAA+CjC,iBAAiB2C,KAAIO,MAAO,KAA3E;EACUD,KAAAH,SAAStB,QAAQwB,MAAKtB,QAASL,OAAO;EAACU,EAAA,MAAAU;EAAAV,EAAA,MAAAa;EAAAb,EAAA,MAAAE;EAAAF,EAAA,MAAAe;EAAAf,EAAA,MAAAY,KAAAO;EAAAnB,EAAA,MAAAN;EAAAM,EAAA,MAAAV;EAAAU,EAAA,MAAAL;EAAAK,EAAA,MAAAiB;EAAAjB,EAAA,MAAAkB;CAAA,OAAA;EAAA5B,UAAAU,EAAA;EAAAL,SAAAK,EAAA;EAAAiB,QAAAjB,EAAA;EAAAkB,KAAAlB,EAAA;CAAA;CAArD,MAAAoB,QAAcF;CAAwC,IAAAG;CAAA,IAAArB,EAAA,QAAAK,YAAAL,EAAA,QAAAN,OAAA;EAEzC2B,MAAAC,SAAA;GACT,IAAIA,UAAU5B,SAAA,OACVW,WAAWiB,IAAI;EAClB;EACJtB,EAAA,MAAAK;EAAAL,EAAA,MAAAN;EAAAM,EAAA,MAAAqB;CAAA,OAAAA,KAAArB,EAAA;CAJD,MAAAuB,OAAaF;CAIX,IAAAG;CAAA,IAAAxB,EAAA,QAAAuB,QAAAvB,EAAA,QAAAiB,OAAA;EAEiBO,MAAAC,QAAAlC,cAAA;GACfgC,KAAKxC,cAAcuC,QAAM/B,cAAcoB,KAAAA,IAAYM,MAAK1B,YAA/BA,SAAqD,CAAC;EAAC;EACnFS,EAAA,MAAAuB;EAAAvB,EAAA,MAAAiB;EAAAjB,EAAA,MAAAwB;CAAA,OAAAA,KAAAxB,EAAA;CAFD,MAAA0B,aAAmBF;CAEjB,IAAAG;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAjC,EAAA,QAAAG,YAAAH,EAAA,QAAAY,QAAAZ,EAAA,QAAAO,UAAA;EAEF,MAAA2B,WAAiB,IAAIC,KAAIC,SAAUxB,KAAIO,MAAO;EAAE,IAAAkB;EAAA,IAAArC,EAAA,QAAAY,KAAAO,QAAA;GAEvCkB,OAAAC,UAAW;IAAAA;IAAAC,MAAcvE,eAAesE,MAAM1B,KAAIO,MAAO;GAAE;GAAEnB,EAAA,MAAAY,KAAAO;GAAAnB,EAAA,MAAAqC;EAAA,OAAAA,MAAArC,EAAA;EADtE,MAAAwC,YAAkB1D,kBAAkB,CAAC,CAAA2D,IAC5BJ,GAA6D,CAAC,CAAAK,MAC7DC,GAAAC,MAAUV,SAAQW,QAASF,EAACJ,MAAOK,EAACL,IAAK,CAAC;EAG/CZ,KAAA9D;EAAM,IAAAmC,EAAA,QAAAY,MAAA;GACSiB,KAAAjB,KAAIkC,cAAexE,SAAQyE,UAAW;GAAC/C,EAAA,MAAAY;GAAAZ,EAAA,MAAA6B;EAAA,OAAAA,KAAA7B,EAAA;EACxC8B,KAAA;EACXC,KAAA;EACYC,KAAA7B,aAAa,QAAQI,aAAa;EAClC0B,KAAA;EACHL,MAAAY,UAASC,IAAKO,KAIrB;EAAChD,EAAA,MAAAG;EAAAH,EAAA,MAAAY;EAAAZ,EAAA,MAAAO;EAAAP,EAAA,MAAA2B;EAAA3B,EAAA,MAAA4B;EAAA5B,EAAA,MAAA6B;EAAA7B,EAAA,MAAA8B;EAAA9B,EAAA,MAAA+B;EAAA/B,EAAA,MAAAgC;EAAAhC,EAAA,MAAAiC;CAAA,OAAA;EAAAN,KAAA3B,EAAA;EAAA4B,MAAA5B,EAAA;EAAA6B,KAAA7B,EAAA;EAAA8B,KAAA9B,EAAA;EAAA+B,KAAA/B,EAAA;EAAAgC,KAAAhC,EAAA;EAAAiC,KAAAjC,EAAA;CAAA;CAAA,IAAAqC;CAAA,IAAArC,EAAA,QAAA0B,cAAA1B,EAAA,QAAAL,QAAAsD,kBAAAjD,EAAA,QAAAoB,OAAA;EAGOiB,OAAAa,WAAA;GACN,MAAAC,SAAa7B,WAAS,OAAO8B,OAAO9B,MAAW,IAAlC;GACbR,UAAUwB,MAAI;GACdtB,SAAS,IAAI;GAEb,MAAAqC,SAAe1D,QAAMsD,kBAAoB7B,MAAKkC,QAAS,OAAO,EAAE;GAChE5B,WAAWxC,UAAUmE,QAAQf,MAAI,CAAC,CAAA5C,KAAM;EAAC;EAC5CM,EAAA,MAAA0B;EAAA1B,EAAA,MAAAL,QAAAsD;EAAAjD,EAAA,MAAAoB;EAAApB,EAAA,MAAAqC;CAAA,OAAAA,MAAArC,EAAA;CAAA,IAAAuD;CAAA,IAAAvD,EAAA,QAAA2B,MAAA3B,EAAA,QAAAV,WAAAU,EAAA,QAAA4B,OAAA5B,EAAA,QAAAqC,OAAArC,EAAA,QAAA6B,MAAA7B,EAAA,QAAA8B,MAAA9B,EAAA,QAAA+B,MAAA/B,EAAA,QAAAgC,MAAAhC,EAAA,QAAAiC,IAAA;EApBLsB,MAAA,oBAAC,IAAD;GACgB,cAAA1B;GACD,YAAAC;GACX,YAAAC;GACY,YAAAC;GACA,aAAAC;GACH,SAAAL;GAKFtC,OAAAA;GACM,aAAAkE;GACH,UAAAnB;EAOT,CAAA;EACHrC,EAAA,MAAA2B;EAAA3B,EAAA,MAAAV;EAAAU,EAAA,MAAA4B;EAAA5B,EAAA,MAAAqC;EAAArC,EAAA,MAAA6B;EAAA7B,EAAA,MAAA8B;EAAA9B,EAAA,MAAA+B;EAAA/B,EAAA,MAAAgC;EAAAhC,EAAA,MAAAiC;EAAAjC,EAAA,MAAAuD;CAAA,OAAAA,MAAAvD,EAAA;CAtBN,MAAAyD,SACIF;CAsBF,IAAAG;CAAA,IAAA1D,EAAA,QAAAU,mBAAAV,EAAA,QAAAG,YAAAH,EAAA,QAAA0B,cAAA1B,EAAA,QAAAY,QAAAZ,EAAA,QAAAI,UAAAJ,EAAA,QAAAiB,SAAAjB,EAAA,QAAAM,SAAAN,EAAA,QAAAO,UAAA;EAEqBmD,MAAAhD,kBACnB,qBAAA,QAAA;GAAiB,WAAAhC,wBAAMa;GAAvB,UAAA,CACI,oBAAA,QAAA;IAAkB,eAAA;IAAQqB,UAAAA,KAAIkC,cAAexE,SAAQqF,iBAAkB;GAAS,CAAA,GAChF,oBAAA,SAAA;IACe,WAAAjF,wBAAMkF;IACZ,MAAA;IACK,WAAA;IACG,cAAA;IACD,cAAAhD,KAAIkC,cAAexE,SAAQuF,YAAa;IACtC,iBAACvD,MAAKwD,QAAeC,UAApB,KAA6B,KAA9BpD,KAAAA;IACHhC,WAAAA;IACJ,OAAAsC,MAAK1B,aAAL;IACGY;IACAI;IACA,WAAAyD,UAAA;KAEN,MAAAC,WAAeD,MAAKE,OAAOxE,MAAM4D,QACpB,OAAO,EAAE,CAAC,CAAAa,MACZ,GAAA,EAAuB;KAClCzC,WAAWT,MAAKtB,QAAS0D,aAAW,KAAX,OAAAY,QAA6B;IAAC;IAEnD,cAAM7D,SAAS;GAAC,CAAA,CAEzB;EAvBY,CAAA,IAAA;EAwBfJ,EAAA,MAAAU;EAAAV,EAAA,MAAAG;EAAAH,EAAA,MAAA0B;EAAA1B,EAAA,MAAAY;EAAAZ,EAAA,MAAAI;EAAAJ,EAAA,MAAAiB;EAAAjB,EAAA,MAAAM;EAAAN,EAAA,MAAAO;EAAAP,EAAA,MAAA0D;CAAA,OAAAA,MAAA1D,EAAA;CAxBR,MAAA4D,iBAAuBF;CAwBd,IAAAU;CAAA,IAAApE,EAAA,QAAA4D,kBAAA5D,EAAA,QAAAQ,QAAA;EAWI4D,MAAAR,mBAAmB,QAAQpD,WAAWG,KAAAA,IAAtC,EAAAH,QAGS,qBAAAkF,UAAA,EAAA,UAAA,CACK9B,gBACApD,MAAM,EAAA,CAAA,EAIlB,IATF,CASE;EAACR,EAAA,MAAA4D;EAAA5D,EAAA,MAAAQ;EAAAR,EAAA,MAAAoE;CAAA,OAAAA,MAAApE,EAAA;CAAA,IAAAqE;CAAA,IAAArE,EAAA,QAAAU,mBAAAV,EAAA,QAAAV,WAAAU,EAAA,QAAA0B,cAAA1B,EAAA,QAAAoB,OAAA;EAEEiD,OAAAC,SAAA;GACN,MAAAC,QAAcD,QAAA;GAEd,MAAAE,iBAAuB9D,mBAAmBlB,aAAYiF,KAAMF,KAAK;GAIjE,MAAAG,QAAcH,MAAKI,WAAYvD,KAAsC,IAA7BmD,MAAKJ,MAAO/C,MAAK2C,MAAY,IAAvD;GACd,MAAAa,SACI,CAACJ,kBAAkBE,UAAU,MAA7B,EAAqChE,mBAAmBgE,MAAKG,KAAM,MAAM,MACnEjG,iBAAiB2F,OAAOjF,OACpB,IAFViF;GAGJvD,SAASM,MAAI;GACb,IAAIkD,gBAAc;IACd9C,WAAWJ,OAAIuD,KAAM,CAAC;IAAC;GAAA;GAG3B,MAAAC,OAAa5F,UAAUoC,QAAMhC,OAAO;GACpC,IAAIwF,KAAIxF,YAAa,QAAQwF,KAAIxF,YAAaA,SAC1CwB,UAAUgE,KAAIxF,OAAQ;GAE1BoC,WAAWoD,KAAIpF,KAAM;EAAC;EACzBM,EAAA,MAAAU;EAAAV,EAAA,MAAAV;EAAAU,EAAA,MAAA0B;EAAA1B,EAAA,MAAAoB;EAAApB,EAAA,MAAAqE;CAAA,OAAAA,MAAArE,EAAA;CAAA,IAAA+E;CAAA,IAAA/E,EAAA,QAAAU,mBAAAV,EAAA,QAAAV,WAAAU,EAAA,QAAAG,YAAAH,EAAA,QAAA0B,cAAA1B,EAAA,QAAAI,UAAAJ,EAAA,QAAAiB,SAAAjB,EAAA,QAAAO,UAAA;EACOwE,YAAA;GACJ/D,SAAS,IAAI;GAGb,IACIT,aAAa,QACbJ,aAAa,QACb9B,SAAS4C,MAAKtB,MAAO,KACrBX,WAAWiC,MAAKtB,MAAO,MAAM,MAAI;IAEjC,MAAAqF,UAActE,kBAAkBzB,cAAcgC,MAAKtB,MAAc,IAAnD;IACd+B,WACIxC,UAAUqF,SAAK5E,UAAYsB,MAAKtB,QAASL,OAAO,CAAC,CAAAI,OACjD6E,SAAKhF,aAAe0B,MAAK1B,SAC7B;GAAC;GAELa,SAAS;EAAC;EACbJ,EAAA,MAAAU;EAAAV,EAAA,MAAAV;EAAAU,EAAA,MAAAG;EAAAH,EAAA,MAAA0B;EAAA1B,EAAA,MAAAI;EAAAJ,EAAA,MAAAiB;EAAAjB,EAAA,MAAAO;EAAAP,EAAA,MAAA+E;CAAA,OAAAA,MAAA/E,EAAA;CAAA,IAAAiF;CAAA,IAAAjF,EAAA,QAAAG,YAAAH,EAAA,QAAAyD,UAAAzD,EAAA,QAAAM,SAAAN,EAAA,QAAAO,YAAAP,EAAA,QAAAoB,SAAApB,EAAA,QAAAoE,OAAApE,EAAA,QAAAqE,OAAArE,EAAA,QAAA+E,KAAA;EA3DLE,MAAA,oBAAC,WAAD;GACiB,cAAA;GAAK,GACd3E;GACMH;GACAI;GACL,MAAA;GACK,WAAA;GACFkD,QAAAA;GAAM,GACTW;GAUEhD,OAAAA;GACG,UAAAiD;GAuBF,QAAAU;EAiBP,CAAA;EACH/E,EAAA,MAAAG;EAAAH,EAAA,MAAAyD;EAAAzD,EAAA,MAAAM;EAAAN,EAAA,MAAAO;EAAAP,EAAA,MAAAoB;EAAApB,EAAA,MAAAoE;EAAApE,EAAA,MAAAqE;EAAArE,EAAA,MAAA+E;EAAA/E,EAAA,MAAAiF;CAAA,OAAAA,MAAAjF,EAAA;CAAA,OA5DFiF;AA4DE;;;;;AAxJH,SAAAzB,OAAA0B,QAAA;CAAA,OAqD8B,IAAIrG,eAAeuE,OAAO8B,OAAMxF,KAAM,CAAO,KAAzC;AAA4C;AArD9E,SAAAsD,MAAAjD,IAAA;CA+C6B,MAAA,EAAAuC,MAAA6C,QAAA5C,SAAAxC;CAAc,OAAM;EAAAL,OACjC4C;EAAI8C,OACJ,GAAG7C,KAAI,IAAK1D,eAAeyD,MAAU,KAAzB;EAA4B+C,QACvCtH,eAAeuE,MAAI;CAC/B;AAAC;AA6Gb,SAAOgD,cAAAhF,OAAA;CAAA,MAAAN,IAAAC,EAAA,EAAA;CAAA,IAAAF;CAAA,IAAAC,EAAA,OAAAM,MAAAiF,OAAA;EACaxF,KAAA5B,WAAWmC,MAAKiF,OAAQ,WAAWlH,QAAQ;EAAC2B,EAAA,KAAAM,MAAAiF;EAAAvF,EAAA,KAAAD;CAAA,OAAAA,KAAAC,EAAA;CAA5D,MAAAV,UAAgBS;CAA6C,IAAAU;CAAA,IAAAT,EAAA,OAAAM,MAAAiF,OAAA;EAC3C9E,KAAAtC,WAAWmC,MAAKiF,OAAQ,aAAanH,SAAS;EAAC4B,EAAA,KAAAM,MAAAiF;EAAAvF,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAjE,MAAAT,YAAkBkB,OAAoD;CAAK,IAAAS;CAAA,IAAAlB,EAAA,OAAAM,OAAA;EAG/DY,KAAAhD,cAAcoC,KAAK;EAACN,EAAA,KAAAM;EAAAN,EAAA,KAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAA,IAAAqB;CAAA,IAAArB,EAAA,OAAAV,SAAA;EACnB+B,KAAA/B,YAAYqB,KAAAA,IAAZ,EAAArB,QAAuC,IAAvC,CAAuC;EAACU,EAAA,KAAAV;EAAAU,EAAA,KAAAqB;CAAA,OAAAA,KAAArB,EAAA;CAAA,IAAAwB;CAAA,IAAAxB,EAAA,OAAAT,WAAA;EACxCiC,KAAAjC,YAAA,EAAAA,UAA6B,IAA7B,CAA6B;EAACS,EAAA,KAAAT;EAAAS,EAAA,KAAAwB;CAAA,OAAAA,KAAAxB,EAAA;CAC5B,MAAA6B,KAAAxD,SAASiC,MAAKZ,KAA2B,IAAjBY,MAAKZ,QAA7B;CAA0C,IAAAoC;CAAA,IAAA9B,EAAA,QAAAM,MAAAD,YAAAL,EAAA,QAAAkB,MAAAlB,EAAA,QAAAqB,MAAArB,EAAA,QAAAwB,MAAAxB,EAAA,QAAA6B,IAAA;EAJrDC,KAAA,oBAAC,UAAD;GAAS,GACDZ;GAAoB,GACnBG;GAAwC,GACxCG;GACE,OAAAK;GACG,UAAAvB,MAAKD;EAAS,CAAA;EAC1BL,EAAA,MAAAM,MAAAD;EAAAL,EAAA,MAAAkB;EAAAlB,EAAA,MAAAqB;EAAArB,EAAA,MAAAwB;EAAAxB,EAAA,MAAA6B;EAAA7B,EAAA,MAAA8B;CAAA,OAAAA,KAAA9B,EAAA;CAAA,OANF8B;AAME"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import "./TelField.css";
|
|
2
|
+
//#region src/tel/TelField.module.css
|
|
3
|
+
var extension = "panneau-tel-field-extension";
|
|
4
|
+
var extensionInput = "panneau-tel-field-extension-input";
|
|
5
|
+
var TelField_module_default = {
|
|
6
|
+
extension,
|
|
7
|
+
extensionInput
|
|
8
|
+
};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { TelField_module_default as default, extension, extensionInput };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=TelField.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TelField.module.js","names":[],"sources":["../../src/tel/TelField.module.css"],"sourcesContent":["/* The extension, after the number, in the same box. */\n.extension {\n display: inline-flex;\n align-items: center;\n gap: var(--panneau-space-1);\n align-self: stretch;\n padding-inline-start: var(--panneau-space-2);\n border-inline-start: var(--panneau-border-width) solid var(--panneau-color-border-control);\n}\n\n.extensionInput {\n width: 6ch;\n min-width: 0;\n padding: 0;\n font: inherit;\n color: var(--panneau-color-text);\n background: transparent;\n border: 0;\n outline: none;\n}\n\n.extensionInput:read-only,\n.extensionInput:disabled {\n cursor: inherit;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { TelField, TelFieldEntry, type TelFieldProps } from './TelField.js';
|
|
2
|
+
export { MAX_EXTENSION_LENGTH, type PhoneNumber, type PhoneParts, formatPhoneInput, getCallingCode, getPhoneCountries, joinExtension, parsePhone, readExtension, readPhone, splitExtension, } from './phone.js';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EACH,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,aAAa,EACb,SAAS,EACT,cAAc,GACjB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { MAX_EXTENSION_LENGTH, formatPhoneInput, getCallingCode, getPhoneCountries, joinExtension, parsePhone, readExtension, readPhone, splitExtension } from "./phone.js";
|
|
2
|
+
import { TelField, TelFieldEntry } from "./TelField.js";
|
|
3
|
+
export { MAX_EXTENSION_LENGTH, TelField, TelFieldEntry, formatPhoneInput, getCallingCode, getPhoneCountries, joinExtension, parsePhone, readExtension, readPhone, splitExtension };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/** A phone number read from an E.164 value. */
|
|
2
|
+
export interface PhoneNumber {
|
|
3
|
+
/** The value, in E.164: `+15145550199`. */
|
|
4
|
+
number: string;
|
|
5
|
+
/** The country of the number, or `null` for a number of no country (`+800`). */
|
|
6
|
+
country: string | null;
|
|
7
|
+
/** The digits after the calling code: `5145550199`. */
|
|
8
|
+
nationalNumber: string;
|
|
9
|
+
/** In the format of its country: `(514) 555-0199`. */
|
|
10
|
+
national: string;
|
|
11
|
+
/** With its calling code: `+1 514 555 0199`. */
|
|
12
|
+
international: string;
|
|
13
|
+
}
|
|
14
|
+
/** A value in E.164 that is a valid number, read. `null` for any other value. */
|
|
15
|
+
export declare function parsePhone(value: unknown): PhoneNumber | null;
|
|
16
|
+
/**
|
|
17
|
+
* The value of a typed number: in E.164 once it is a valid number of its country, the text as
|
|
18
|
+
* typed (trimmed) until then, or `null` when empty. A number typed with its calling code (`+33…`)
|
|
19
|
+
* gives its own country.
|
|
20
|
+
*/
|
|
21
|
+
export declare function readPhone(text: string, country: string | null): {
|
|
22
|
+
value: string | null;
|
|
23
|
+
country: string | null;
|
|
24
|
+
};
|
|
25
|
+
/** A number being typed, in the format of its country: `514555` gives `(514) 555`. */
|
|
26
|
+
export declare function formatPhoneInput(text: string, country: string | null): string;
|
|
27
|
+
/** The calling code of a country, without `+` (`1` for `CA`), or `null`. */
|
|
28
|
+
export declare function getCallingCode(country: string | null | undefined): string | null;
|
|
29
|
+
/** The countries that have calling codes. */
|
|
30
|
+
export declare function getPhoneCountries(): string[];
|
|
31
|
+
/** The longest extension a value can have, in digits. */
|
|
32
|
+
export declare const MAX_EXTENSION_LENGTH = 10;
|
|
33
|
+
/** A value split into its number and its extension. */
|
|
34
|
+
export interface PhoneParts {
|
|
35
|
+
/** The number: E.164, or the text as typed. `null` when empty. */
|
|
36
|
+
number: string | null;
|
|
37
|
+
/** The digits of the extension, or `null` without one. */
|
|
38
|
+
extension: string | null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The number and the extension of a value: `+15145550199;ext=123` gives `+15145550199` and `123`.
|
|
42
|
+
* A value without `;ext=` is a number without an extension. To send a value to a service that
|
|
43
|
+
* doesn't take extensions (SMS), keep its `number`.
|
|
44
|
+
*/
|
|
45
|
+
export declare function splitExtension(value: string | null | undefined): PhoneParts;
|
|
46
|
+
/**
|
|
47
|
+
* A number with its extension, after `;ext=`: `+15145550199;ext=123`. Without an extension, the
|
|
48
|
+
* number as it is.
|
|
49
|
+
*/
|
|
50
|
+
export declare function joinExtension(number: string | null | undefined, extension: string | null | undefined): string | null;
|
|
51
|
+
/**
|
|
52
|
+
* The extension typed after a number, as people write it: `514 555-0199 ext. 123`, `x123`,
|
|
53
|
+
* `poste 123`, or `;ext=123`. `null` when the text has none.
|
|
54
|
+
*/
|
|
55
|
+
export declare function readExtension(text: string): {
|
|
56
|
+
number: string;
|
|
57
|
+
extension: string;
|
|
58
|
+
} | null;
|
|
59
|
+
//# sourceMappingURL=phone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone.d.ts","sourceRoot":"","sources":["../../src/tel/phone.ts"],"names":[],"mappings":"AAYA,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IACxB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,aAAa,EAAE,MAAM,CAAC;CACzB;AAQD,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAe7D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,IAAI,GACvB;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAelD;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE7E;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAGhF;AAED,6CAA6C;AAC7C,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED,yDAAyD;AACzD,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAWvC,uDAAuD;AACvD,MAAM,WAAW,UAAU;IACvB,kEAAkE;IAClE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,CAU3E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CACzB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACrC,MAAM,GAAG,IAAI,CAKf;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAOxF"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { AsYouType, getCountries, getCountryCallingCode, isSupportedCountry, parsePhoneNumberFromString } from "libphonenumber-js/min";
|
|
2
|
+
//#region src/tel/phone.ts
|
|
3
|
+
/** An international number in E.164, as the `tel` rule of the protocol checks it. */
|
|
4
|
+
var E164 = /^\+[1-9]\d{6,14}$/;
|
|
5
|
+
function asCountry(country) {
|
|
6
|
+
return country !== null && country !== void 0 && isSupportedCountry(country) ? country : void 0;
|
|
7
|
+
}
|
|
8
|
+
/** A value in E.164 that is a valid number, read. `null` for any other value. */
|
|
9
|
+
function parsePhone(value) {
|
|
10
|
+
if (typeof value !== "string" || !E164.test(value)) return null;
|
|
11
|
+
const number = parsePhoneNumberFromString(value);
|
|
12
|
+
if (number === void 0 || !number.isValid()) return null;
|
|
13
|
+
return {
|
|
14
|
+
number: number.number,
|
|
15
|
+
country: number.country ?? null,
|
|
16
|
+
nationalNumber: number.nationalNumber,
|
|
17
|
+
national: number.formatNational(),
|
|
18
|
+
international: number.formatInternational()
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The value of a typed number: in E.164 once it is a valid number of its country, the text as
|
|
23
|
+
* typed (trimmed) until then, or `null` when empty. A number typed with its calling code (`+33…`)
|
|
24
|
+
* gives its own country.
|
|
25
|
+
*/
|
|
26
|
+
function readPhone(text, country) {
|
|
27
|
+
const trimmed = text.trim();
|
|
28
|
+
if (trimmed === "") return {
|
|
29
|
+
value: null,
|
|
30
|
+
country: null
|
|
31
|
+
};
|
|
32
|
+
const typer = new AsYouType(asCountry(country));
|
|
33
|
+
typer.input(trimmed);
|
|
34
|
+
const number = typer.getNumber();
|
|
35
|
+
if (number?.isValid() === true) return {
|
|
36
|
+
value: number.number,
|
|
37
|
+
country: number.country ?? null
|
|
38
|
+
};
|
|
39
|
+
return {
|
|
40
|
+
value: trimmed,
|
|
41
|
+
country: typer.isInternational() ? typer.getCountry() ?? null : null
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** A number being typed, in the format of its country: `514555` gives `(514) 555`. */
|
|
45
|
+
function formatPhoneInput(text, country) {
|
|
46
|
+
return new AsYouType(asCountry(country)).input(text);
|
|
47
|
+
}
|
|
48
|
+
/** The calling code of a country, without `+` (`1` for `CA`), or `null`. */
|
|
49
|
+
function getCallingCode(country) {
|
|
50
|
+
const code = asCountry(country);
|
|
51
|
+
return code !== void 0 ? getCountryCallingCode(code) : null;
|
|
52
|
+
}
|
|
53
|
+
/** The countries that have calling codes. */
|
|
54
|
+
function getPhoneCountries() {
|
|
55
|
+
return getCountries();
|
|
56
|
+
}
|
|
57
|
+
/** The longest extension a value can have, in digits. */
|
|
58
|
+
var MAX_EXTENSION_LENGTH = 10;
|
|
59
|
+
/** A value with an extension after `;ext=`, as in a `tel:` URI (RFC 3966). */
|
|
60
|
+
var STORED_EXTENSION = /^(.*);ext=(\d{1,10})$/s;
|
|
61
|
+
/**
|
|
62
|
+
* An extension typed after a number: `514 555-0199 ext. 123`, `x123`, `poste 123`, `;ext=123`. The
|
|
63
|
+
* number ends with a digit or a parenthesis.
|
|
64
|
+
*/
|
|
65
|
+
var TYPED_EXTENSION = /^(.*?[\d)])[\s,;]*(?:extension|ext|poste|x)\s*[.:=#]?\s*(\d{1,10})$/is;
|
|
66
|
+
/**
|
|
67
|
+
* The number and the extension of a value: `+15145550199;ext=123` gives `+15145550199` and `123`.
|
|
68
|
+
* A value without `;ext=` is a number without an extension. To send a value to a service that
|
|
69
|
+
* doesn't take extensions (SMS), keep its `number`.
|
|
70
|
+
*/
|
|
71
|
+
function splitExtension(value) {
|
|
72
|
+
const match = STORED_EXTENSION.exec(value ?? "");
|
|
73
|
+
if (match === null) return {
|
|
74
|
+
number: value === void 0 || value === "" ? null : value ?? null,
|
|
75
|
+
extension: null
|
|
76
|
+
};
|
|
77
|
+
const [, number = "", extension = null] = match;
|
|
78
|
+
return {
|
|
79
|
+
number: number === "" ? null : number,
|
|
80
|
+
extension
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* A number with its extension, after `;ext=`: `+15145550199;ext=123`. Without an extension, the
|
|
85
|
+
* number as it is.
|
|
86
|
+
*/
|
|
87
|
+
function joinExtension(number, extension) {
|
|
88
|
+
if (extension === null || extension === void 0 || extension === "") return number === void 0 || number === "" ? null : number ?? null;
|
|
89
|
+
return `${number ?? ""};ext=${extension}`;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The extension typed after a number, as people write it: `514 555-0199 ext. 123`, `x123`,
|
|
93
|
+
* `poste 123`, or `;ext=123`. `null` when the text has none.
|
|
94
|
+
*/
|
|
95
|
+
function readExtension(text) {
|
|
96
|
+
const match = TYPED_EXTENSION.exec(text.trim());
|
|
97
|
+
if (match === null) return null;
|
|
98
|
+
const [, number = "", extension = ""] = match;
|
|
99
|
+
return {
|
|
100
|
+
number: number.trim(),
|
|
101
|
+
extension
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//#endregion
|
|
105
|
+
export { MAX_EXTENSION_LENGTH, formatPhoneInput, getCallingCode, getPhoneCountries, joinExtension, parsePhone, readExtension, readPhone, splitExtension };
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=phone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone.js","names":["AsYouType","CountryCode","getCountries","getCountryCallingCode","isSupportedCountry","parsePhoneNumberFromString","E164","PhoneNumber","number","country","nationalNumber","national","international","asCountry","undefined","parsePhone","value","test","isValid","formatNational","formatInternational","readPhone","text","trimmed","trim","typer","input","getNumber","isInternational","getCountry","formatPhoneInput","getCallingCode","code","getPhoneCountries","MAX_EXTENSION_LENGTH","STORED_EXTENSION","TYPED_EXTENSION","PhoneParts","extension","splitExtension","match","exec","joinExtension","readExtension"],"sources":["../../src/tel/phone.ts"],"sourcesContent":["import {\n AsYouType,\n type CountryCode,\n getCountries,\n getCountryCallingCode,\n isSupportedCountry,\n parsePhoneNumberFromString,\n} from 'libphonenumber-js/min';\n\n/** An international number in E.164, as the `tel` rule of the protocol checks it. */\nconst E164 = /^\\+[1-9]\\d{6,14}$/;\n\n/** A phone number read from an E.164 value. */\nexport interface PhoneNumber {\n /** The value, in E.164: `+15145550199`. */\n number: string;\n /** The country of the number, or `null` for a number of no country (`+800`). */\n country: string | null;\n /** The digits after the calling code: `5145550199`. */\n nationalNumber: string;\n /** In the format of its country: `(514) 555-0199`. */\n national: string;\n /** With its calling code: `+1 514 555 0199`. */\n international: string;\n}\n\nfunction asCountry(country: string | null | undefined): CountryCode | undefined {\n return country !== null && country !== undefined && isSupportedCountry(country)\n ? country\n : undefined;\n}\n\n/** A value in E.164 that is a valid number, read. `null` for any other value. */\nexport function parsePhone(value: unknown): PhoneNumber | null {\n if (typeof value !== 'string' || !E164.test(value)) {\n return null;\n }\n const number = parsePhoneNumberFromString(value);\n if (number === undefined || !number.isValid()) {\n return null;\n }\n return {\n number: number.number,\n country: number.country ?? null,\n nationalNumber: number.nationalNumber,\n national: number.formatNational(),\n international: number.formatInternational(),\n };\n}\n\n/**\n * The value of a typed number: in E.164 once it is a valid number of its country, the text as\n * typed (trimmed) until then, or `null` when empty. A number typed with its calling code (`+33…`)\n * gives its own country.\n */\nexport function readPhone(\n text: string,\n country: string | null,\n): { value: string | null; country: string | null } {\n const trimmed = text.trim();\n if (trimmed === '') {\n return { value: null, country: null };\n }\n const typer = new AsYouType(asCountry(country));\n typer.input(trimmed);\n const number = typer.getNumber();\n if (number?.isValid() === true) {\n return { value: number.number, country: number.country ?? null };\n }\n return {\n value: trimmed,\n country: typer.isInternational() ? (typer.getCountry() ?? null) : null,\n };\n}\n\n/** A number being typed, in the format of its country: `514555` gives `(514) 555`. */\nexport function formatPhoneInput(text: string, country: string | null): string {\n return new AsYouType(asCountry(country)).input(text);\n}\n\n/** The calling code of a country, without `+` (`1` for `CA`), or `null`. */\nexport function getCallingCode(country: string | null | undefined): string | null {\n const code = asCountry(country);\n return code !== undefined ? getCountryCallingCode(code) : null;\n}\n\n/** The countries that have calling codes. */\nexport function getPhoneCountries(): string[] {\n return getCountries();\n}\n\n/** The longest extension a value can have, in digits. */\nexport const MAX_EXTENSION_LENGTH = 10;\n\n/** A value with an extension after `;ext=`, as in a `tel:` URI (RFC 3966). */\nconst STORED_EXTENSION = /^(.*);ext=(\\d{1,10})$/s;\n\n/**\n * An extension typed after a number: `514 555-0199 ext. 123`, `x123`, `poste 123`, `;ext=123`. The\n * number ends with a digit or a parenthesis.\n */\nconst TYPED_EXTENSION = /^(.*?[\\d)])[\\s,;]*(?:extension|ext|poste|x)\\s*[.:=#]?\\s*(\\d{1,10})$/is;\n\n/** A value split into its number and its extension. */\nexport interface PhoneParts {\n /** The number: E.164, or the text as typed. `null` when empty. */\n number: string | null;\n /** The digits of the extension, or `null` without one. */\n extension: string | null;\n}\n\n/**\n * The number and the extension of a value: `+15145550199;ext=123` gives `+15145550199` and `123`.\n * A value without `;ext=` is a number without an extension. To send a value to a service that\n * doesn't take extensions (SMS), keep its `number`.\n */\nexport function splitExtension(value: string | null | undefined): PhoneParts {\n const match = STORED_EXTENSION.exec(value ?? '');\n if (match === null) {\n return {\n number: value === undefined || value === '' ? null : (value ?? null),\n extension: null,\n };\n }\n const [, number = '', extension = null] = match;\n return { number: number === '' ? null : number, extension };\n}\n\n/**\n * A number with its extension, after `;ext=`: `+15145550199;ext=123`. Without an extension, the\n * number as it is.\n */\nexport function joinExtension(\n number: string | null | undefined,\n extension: string | null | undefined,\n): string | null {\n if (extension === null || extension === undefined || extension === '') {\n return number === undefined || number === '' ? null : (number ?? null);\n }\n return `${number ?? ''};ext=${extension}`;\n}\n\n/**\n * The extension typed after a number, as people write it: `514 555-0199 ext. 123`, `x123`,\n * `poste 123`, or `;ext=123`. `null` when the text has none.\n */\nexport function readExtension(text: string): { number: string; extension: string } | null {\n const match = TYPED_EXTENSION.exec(text.trim());\n if (match === null) {\n return null;\n }\n const [, number = '', extension = ''] = match;\n return { number: number.trim(), extension };\n}\n"],"mappings":";;;AAUA,IAAMM,OAAO;AAgBb,SAASO,UAAUJ,SAA6D;CAC5E,OAAOA,YAAY,QAAQA,YAAYK,KAAAA,KAAaV,mBAAmBK,OAAO,IACxEA,UACAK,KAAAA;AACV;;AAGA,SAAgBC,WAAWC,OAAoC;CAC3D,IAAI,OAAOA,UAAU,YAAY,CAACV,KAAKW,KAAKD,KAAK,GAC7C,OAAO;CAEX,MAAMR,SAASH,2BAA2BW,KAAK;CAC/C,IAAIR,WAAWM,KAAAA,KAAa,CAACN,OAAOU,QAAQ,GACxC,OAAO;CAEX,OAAO;EACHV,QAAQA,OAAOA;EACfC,SAASD,OAAOC,WAAW;EAC3BC,gBAAgBF,OAAOE;EACvBC,UAAUH,OAAOW,eAAe;EAChCP,eAAeJ,OAAOY,oBAAoB;CAC9C;AACJ;;;;;;AAOA,SAAgBC,UACZC,MACAb,SACgD;CAChD,MAAMc,UAAUD,KAAKE,KAAK;CAC1B,IAAID,YAAY,IACZ,OAAO;EAAEP,OAAO;EAAMP,SAAS;CAAK;CAExC,MAAMgB,QAAQ,IAAIzB,UAAUa,UAAUJ,OAAO,CAAC;CAC9CgB,MAAMC,MAAMH,OAAO;CACnB,MAAMf,SAASiB,MAAME,UAAU;CAC/B,IAAInB,QAAQU,QAAQ,MAAM,MACtB,OAAO;EAAEF,OAAOR,OAAOA;EAAQC,SAASD,OAAOC,WAAW;CAAK;CAEnE,OAAO;EACHO,OAAOO;EACPd,SAASgB,MAAMG,gBAAgB,IAAKH,MAAMI,WAAW,KAAK,OAAQ;CACtE;AACJ;;AAGA,SAAgBC,iBAAiBR,MAAcb,SAAgC;CAC3E,OAAO,IAAIT,UAAUa,UAAUJ,OAAO,CAAC,CAAC,CAACiB,MAAMJ,IAAI;AACvD;;AAGA,SAAgBS,eAAetB,SAAmD;CAC9E,MAAMuB,OAAOnB,UAAUJ,OAAO;CAC9B,OAAOuB,SAASlB,KAAAA,IAAYX,sBAAsB6B,IAAI,IAAI;AAC9D;;AAGA,SAAgBC,oBAA8B;CAC1C,OAAO/B,aAAa;AACxB;;AAGA,IAAagC,uBAAuB;;AAGpC,IAAMC,mBAAmB;;;;;AAMzB,IAAMC,kBAAkB;;;;;;AAexB,SAAgBG,eAAevB,OAA8C;CACzE,MAAMwB,QAAQL,iBAAiBM,KAAKzB,SAAS,EAAE;CAC/C,IAAIwB,UAAU,MACV,OAAO;EACHhC,QAAQQ,UAAUF,KAAAA,KAAaE,UAAU,KAAK,OAAQA,SAAS;EAC/DsB,WAAW;CACf;CAEJ,MAAM,GAAG9B,SAAS,IAAI8B,YAAY,QAAQE;CAC1C,OAAO;EAAEhC,QAAQA,WAAW,KAAK,OAAOA;EAAQ8B;CAAU;AAC9D;;;;;AAMA,SAAgBI,cACZlC,QACA8B,WACa;CACb,IAAIA,cAAc,QAAQA,cAAcxB,KAAAA,KAAawB,cAAc,IAC/D,OAAO9B,WAAWM,KAAAA,KAAaN,WAAW,KAAK,OAAQA,UAAU;CAErE,OAAO,GAAGA,UAAU,GAAE,OAAQ8B;AAClC;;;;;AAMA,SAAgBK,cAAcrB,MAA4D;CACtF,MAAMkB,QAAQJ,gBAAgBK,KAAKnB,KAAKE,KAAK,CAAC;CAC9C,IAAIgB,UAAU,MACV,OAAO;CAEX,MAAM,GAAGhC,SAAS,IAAI8B,YAAY,MAAME;CACxC,OAAO;EAAEhC,QAAQA,OAAOgB,KAAK;EAAGc;CAAU;AAC9C"}
|