@panneau/fields 5.0.0-alpha.15 → 5.0.0-alpha.16
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 +53 -3
- 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/color/ColorField.css +9 -0
- package/dist/color/ColorField.d.ts +10 -3
- 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 +1 -0
- 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/country/CountryField.css +42 -0
- package/dist/country/CountryField.d.ts +19 -4
- package/dist/country/CountryField.d.ts.map +1 -1
- package/dist/country/CountryField.js +355 -82
- package/dist/country/CountryField.js.map +1 -1
- package/dist/country/CountryField.module.js +20 -0
- package/dist/country/CountryField.module.js.map +1 -0
- package/dist/country/index.d.ts +1 -1
- package/dist/country/index.d.ts.map +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/duration/DurationField.css +1 -1
- package/dist/duration/DurationField.d.ts +54 -13
- package/dist/duration/DurationField.d.ts.map +1 -1
- package/dist/duration/DurationField.js +205 -159
- package/dist/duration/DurationField.js.map +1 -1
- package/dist/duration/DurationField.module.js.map +1 -1
- package/dist/duration/index.d.ts +1 -1
- package/dist/duration/index.d.ts.map +1 -1
- package/dist/duration/index.js +1 -1
- package/dist/embed/EmbedField.d.ts +11 -2
- package/dist/embed/EmbedField.d.ts.map +1 -1
- package/dist/embed/EmbedField.js +179 -116
- package/dist/embed/EmbedField.js.map +1 -1
- 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/location/LocationField.d.ts.map +1 -1
- package/dist/location/LocationField.js +9 -85
- package/dist/location/LocationField.js.map +1 -1
- package/dist/location/nominatim.d.ts +8 -2
- package/dist/location/nominatim.d.ts.map +1 -1
- package/dist/location/nominatim.js +32 -3
- package/dist/location/nominatim.js.map +1 -1
- 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 +8 -2
- package/dist/location/types.d.ts.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/region/RegionField.js +1 -1
- package/dist/shared/builtIn.d.ts +3 -1
- package/dist/shared/builtIn.d.ts.map +1 -1
- package/dist/shared/builtIn.js +18 -8
- package/dist/shared/builtIn.js.map +1 -1
- package/dist/shared/dates.js +2 -2
- package/dist/shared/dates.js.map +1 -1
- package/dist/shared/flow.d.ts.map +1 -1
- package/dist/shared/flow.js +1 -0
- package/dist/shared/flow.js.map +1 -1
- 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/tel/TelField.css +25 -0
- package/dist/tel/TelField.d.ts +14 -2
- package/dist/tel/TelField.d.ts.map +1 -1
- package/dist/tel/TelField.js +246 -145
- package/dist/tel/TelField.js.map +1 -1
- package/dist/tel/TelField.module.js +12 -0
- package/dist/tel/TelField.module.js.map +1 -0
- package/dist/tel/index.d.ts +1 -1
- package/dist/tel/index.d.ts.map +1 -1
- package/dist/tel/index.js +2 -2
- package/dist/tel/phone.d.ts +28 -0
- package/dist/tel/phone.d.ts.map +1 -1
- package/dist/tel/phone.js +48 -1
- package/dist/tel/phone.js.map +1 -1
- package/dist/url/UrlField.d.ts.map +1 -1
- package/dist/url/UrlField.js +1 -1
- package/dist/url/UrlField.js.map +1 -1
- package/package.json +24 -4
package/dist/tel/TelField.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TelField.js","names":["useState","Select","usePanneauIntl","getCountryFlag","getCountryName","getLocaleCountry","getFieldProps","getSetting","isString","messages","FieldEntryProps","TextField","TextFieldProps","formatPhoneInput","getCallingCode","getPhoneCountries","parsePhone","readPhone","TelFieldProps","Omit","country","display","value","number","national","international","TelField","t0","$","_c","defaultCountry","disabled","onBlur","onChange","props","readOnly","intl","chosen","setChosen","draft","setDraft","t1","t2","locale","t3","shown","t4","next","emit","T0","t10","t5","t6","t7","t8","t9","collator","Intl","Collator","t11","code","name","countries","map","sort","a","b","compare","formatMessage","telCountry","_temp","nationalNumber","next_0","code_1","String","digits","replace","t12","_temp2","picker","t13","text","typed","next_1","length","startsWith","read","t14","t15","option","code_0","label","prefix","TelFieldEntry","field","undefined","_c"],"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, isString } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps } from '../shared/types';\nimport { TextField, type TextFieldProps } from '../text/TextField';\nimport {\n formatPhoneInput,\n getCallingCode,\n getPhoneCountries,\n parsePhone,\n readPhone,\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\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 */\nexport function TelField({\n value,\n onChange,\n onBlur,\n country: defaultCountry,\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 const number = parsePhone(value);\n const country =\n number?.country ?? chosen ?? defaultCountry ?? getLocaleCountry(intl.locale) ?? null;\n const shown = draft ?? display(value, country);\n\n const emit = (next: string | null) => {\n if (next !== (value ?? null)) {\n onChange?.(next);\n }\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 emit(readPhone(digits, code).value);\n }}\n />\n );\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 value={shown}\n onChange={(text) => {\n const typed = text ?? '';\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.\n const next =\n typed.length > shown.length && typed.startsWith(shown)\n ? formatPhoneInput(typed, country)\n : typed;\n setDraft(next);\n const read = readPhone(next, country);\n if (read.country !== null && read.country !== country) {\n setChosen(read.country);\n }\n emit(read.value);\n }}\n onBlur={() => {\n setDraft(null);\n // A value as typed becomes E.164 when it reads as a number of the country, unless\n // the field can't be changed.\n if (\n readOnly !== true &&\n disabled !== true &&\n isString(value) &&\n parsePhone(value) === null\n ) {\n emit(readPhone(value, country).value);\n }\n onBlur?.();\n }}\n />\n );\n}\n\n/** The `tel` type: `settings.country` is the country of a new number. */\nexport function TelFieldEntry(props: FieldEntryProps) {\n const country = getSetting(props.field, 'country', isString);\n return (\n <TelField\n {...getFieldProps(props)}\n {...(country !== undefined ? { country } : {})}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n />\n );\n}\n"],"mappings":"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"}
|
|
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":"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"}
|
|
@@ -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":""}
|
package/dist/tel/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { TelField, TelFieldEntry, type TelFieldProps } from './TelField.js';
|
|
2
|
-
export { type PhoneNumber, formatPhoneInput, getCallingCode, getPhoneCountries, parsePhone, readPhone, } from './phone.js';
|
|
2
|
+
export { MAX_EXTENSION_LENGTH, type PhoneNumber, type PhoneParts, formatPhoneInput, getCallingCode, getPhoneCountries, joinExtension, parsePhone, readExtension, readPhone, splitExtension, } from './phone.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/tel/index.d.ts.map
CHANGED
|
@@ -1 +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,KAAK,WAAW,EAChB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,SAAS,
|
|
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"}
|
package/dist/tel/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { formatPhoneInput, getCallingCode, getPhoneCountries, parsePhone, readPhone } from "./phone.js";
|
|
1
|
+
import { MAX_EXTENSION_LENGTH, formatPhoneInput, getCallingCode, getPhoneCountries, joinExtension, parsePhone, readExtension, readPhone, splitExtension } from "./phone.js";
|
|
2
2
|
import { TelField, TelFieldEntry } from "./TelField.js";
|
|
3
|
-
export { TelField, TelFieldEntry, formatPhoneInput, getCallingCode, getPhoneCountries, parsePhone, readPhone };
|
|
3
|
+
export { MAX_EXTENSION_LENGTH, TelField, TelFieldEntry, formatPhoneInput, getCallingCode, getPhoneCountries, joinExtension, parsePhone, readExtension, readPhone, splitExtension };
|
package/dist/tel/phone.d.ts
CHANGED
|
@@ -28,4 +28,32 @@ export declare function formatPhoneInput(text: string, country: string | null):
|
|
|
28
28
|
export declare function getCallingCode(country: string | null | undefined): string | null;
|
|
29
29
|
/** The countries that have calling codes. */
|
|
30
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;
|
|
31
59
|
//# sourceMappingURL=phone.d.ts.map
|
package/dist/tel/phone.d.ts.map
CHANGED
|
@@ -1 +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"}
|
|
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"}
|
package/dist/tel/phone.js
CHANGED
|
@@ -54,7 +54,54 @@ function getCallingCode(country) {
|
|
|
54
54
|
function getPhoneCountries() {
|
|
55
55
|
return getCountries();
|
|
56
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
|
+
}
|
|
57
104
|
//#endregion
|
|
58
|
-
export { formatPhoneInput, getCallingCode, getPhoneCountries, parsePhone, readPhone };
|
|
105
|
+
export { MAX_EXTENSION_LENGTH, formatPhoneInput, getCallingCode, getPhoneCountries, joinExtension, parsePhone, readExtension, readPhone, splitExtension };
|
|
59
106
|
|
|
60
107
|
//# sourceMappingURL=phone.js.map
|
package/dist/tel/phone.js.map
CHANGED
|
@@ -1 +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"],"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"],"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"}
|
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UrlField.d.ts","sourceRoot":"","sources":["../../src/url/UrlField.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnE,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACxF,yFAAyF;IACzF,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAa,GAAG,MAAM,CASnE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EACrB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,aAA0B,EAC1B,GAAG,KAAK,EACX,EAAE,aAAa,+
|
|
1
|
+
{"version":3,"file":"UrlField.d.ts","sourceRoot":"","sources":["../../src/url/UrlField.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnE,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACxF,yFAAyF;IACzF,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAa,GAAG,MAAM,CASnE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EACrB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,aAA0B,EAC1B,GAAG,KAAK,EACX,EAAE,aAAa,+BAqCf;AAED,+CAA+C;AAC/C,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,+BAUnD"}
|
package/dist/url/UrlField.js
CHANGED
package/dist/url/UrlField.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UrlField.js","names":["ExternalLink","Icon","usePanneauIntl","getFieldProps","getSetting","isString","messages","FieldEntryProps","TextField","TextFieldProps","styles","UrlFieldProps","Omit","defaultScheme","SCHEME","withScheme","url","scheme","trimmed","trim","startsWith","slice","test","UrlField","t0","$","_c","onBlur","onChange","props","t1","value","undefined","intl","t2","openable","t3","next","t4","open","formatMessage","openLink","t5","UrlFieldEntry","field","_c","styles"],"sources":["../../src/url/UrlField.tsx"],"sourcesContent":["import { ExternalLink } from 'lucide-react';\n\nimport { Icon, usePanneauIntl } from '@panneau/ui';\n\nimport { getFieldProps, getSetting, 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 './UrlField.module.css';\n\nexport interface UrlFieldProps extends Omit<TextFieldProps, 'type' | 'inputMode' | 'suffix'> {\n /** Scheme added on blur to a URL without one (`example.com`). Defaults to `https://`. */\n defaultScheme?: string;\n}\n\nconst SCHEME = /^[a-z][a-z0-9+.-]*:/i;\n\n/** Adds a scheme to a URL that has none, and isn't a path or an anchor. */\nexport function withScheme(url: string, scheme = 'https://'): string {\n const trimmed = url.trim();\n if (trimmed.startsWith('//')) {\n return `${scheme}${trimmed.slice(2)}`;\n }\n if (trimmed === '' || SCHEME.test(trimmed) || /^[/#?]/.test(trimmed)) {\n return trimmed;\n }\n return `${scheme}${trimmed}`;\n}\n\n/**\n * A URL, with the URL keyboard on phones and a link to open it. A URL typed without a scheme\n * gets `https://` on blur, as v4 did.\n */\nexport function UrlField({\n value,\n onChange,\n onBlur,\n defaultScheme = 'https://',\n ...props\n}: UrlFieldProps) {\n const intl = usePanneauIntl();\n const openable = value !== null && value !== undefined && /^https?:\\/\\//i.test(value);\n return (\n <TextField\n autoComplete=\"off\"\n {...props}\n type=\"url\"\n inputMode=\"url\"\n value={value}\n onChange={onChange}\n onBlur={() => {\n if (value !== null && value !== undefined) {\n const next = withScheme(value, defaultScheme);\n if (next !== value) {\n onChange?.(next === '' ? null : next);\n }\n }\n onBlur?.();\n }}\n suffix={\n openable ? (\n <a\n href={value}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.open}\n title={intl.formatMessage(messages.openLink)}\n >\n <Icon icon={ExternalLink} label={intl.formatMessage(messages.openLink)} />\n </a>\n ) :
|
|
1
|
+
{"version":3,"file":"UrlField.js","names":["ExternalLink","Icon","usePanneauIntl","getFieldProps","getSetting","isString","messages","FieldEntryProps","TextField","TextFieldProps","styles","UrlFieldProps","Omit","defaultScheme","SCHEME","withScheme","url","scheme","trimmed","trim","startsWith","slice","test","UrlField","t0","$","_c","onBlur","onChange","props","t1","value","undefined","intl","t2","openable","t3","next","t4","open","formatMessage","openLink","t5","UrlFieldEntry","field","_c","styles"],"sources":["../../src/url/UrlField.tsx"],"sourcesContent":["import { ExternalLink } from 'lucide-react';\n\nimport { Icon, usePanneauIntl } from '@panneau/ui';\n\nimport { getFieldProps, getSetting, 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 './UrlField.module.css';\n\nexport interface UrlFieldProps extends Omit<TextFieldProps, 'type' | 'inputMode' | 'suffix'> {\n /** Scheme added on blur to a URL without one (`example.com`). Defaults to `https://`. */\n defaultScheme?: string;\n}\n\nconst SCHEME = /^[a-z][a-z0-9+.-]*:/i;\n\n/** Adds a scheme to a URL that has none, and isn't a path or an anchor. */\nexport function withScheme(url: string, scheme = 'https://'): string {\n const trimmed = url.trim();\n if (trimmed.startsWith('//')) {\n return `${scheme}${trimmed.slice(2)}`;\n }\n if (trimmed === '' || SCHEME.test(trimmed) || /^[/#?]/.test(trimmed)) {\n return trimmed;\n }\n return `${scheme}${trimmed}`;\n}\n\n/**\n * A URL, with the URL keyboard on phones and a link to open it. A URL typed without a scheme\n * gets `https://` on blur, as v4 did.\n */\nexport function UrlField({\n value,\n onChange,\n onBlur,\n defaultScheme = 'https://',\n ...props\n}: UrlFieldProps) {\n const intl = usePanneauIntl();\n const openable = value !== null && value !== undefined && /^https?:\\/\\//i.test(value);\n return (\n <TextField\n autoComplete=\"off\"\n {...props}\n type=\"url\"\n inputMode=\"url\"\n value={value}\n onChange={onChange}\n onBlur={() => {\n if (value !== null && value !== undefined) {\n const next = withScheme(value, defaultScheme);\n if (next !== value) {\n onChange?.(next === '' ? null : next);\n }\n }\n onBlur?.();\n }}\n suffix={\n openable ? (\n <a\n href={value}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.open}\n title={intl.formatMessage(messages.openLink)}\n >\n <Icon icon={ExternalLink} label={intl.formatMessage(messages.openLink)} />\n </a>\n ) : // `null` keeps the control of the input as the link comes and goes: the input\n // keeps its focus\n null\n }\n />\n );\n}\n\n/** The `url` type: setting `defaultScheme`. */\nexport function UrlFieldEntry(props: FieldEntryProps) {\n const defaultScheme = getSetting(props.field, 'defaultScheme', isString);\n return (\n <UrlField\n {...getFieldProps(props)}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n {...(defaultScheme !== undefined ? { defaultScheme } : {})}\n />\n );\n}\n"],"mappings":";;;;;;;;;AAeA,IAAMc,SAAS;;AAGf,SAAgBC,WAAWC,KAAaC,SAAS,YAAoB;CACjE,MAAMC,UAAUF,IAAIG,KAAK;CACzB,IAAID,QAAQE,WAAW,IAAI,GACvB,OAAO,GAAGH,SAASC,QAAQG,MAAM,CAAC;CAEtC,IAAIH,YAAY,MAAMJ,OAAOQ,KAAKJ,OAAO,KAAK,SAASI,KAAKJ,OAAO,GAC/D,OAAOA;CAEX,OAAO,GAAGD,SAASC;AACvB;;;;;AAMA,SAAOK,SAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAN,EAAA,OAAAD,IAAA;EAAkB,CAAA,CAAAO,OAAAH,UAAAD,QAAAd,eAAAiB,IAAA,GAAAD,SAAAL;EAMTC,EAAA,KAAAD;EAAAC,EAAA,KAAAE;EAAAF,EAAA,KAAAG;EAAAH,EAAA,KAAAI;EAAAJ,EAAA,KAAAK;EAAAL,EAAA,KAAAM;CAAA,OAAA;EAAAJ,SAAAF,EAAA;EAAAG,WAAAH,EAAA;EAAAI,QAAAJ,EAAA;EAAAK,KAAAL,EAAA;EAAAM,QAAAN,EAAA;CAAA;CAFZ,MAAAZ,gBAAAiB,OAAAE,KAAAA,IAAA,aAAAF;CAGA,MAAAG,OAAa/B,eAAe;CAAE,IAAAgC;CAAA,IAAAT,EAAA,OAAAM,OAAA;EACbG,KAAAH,UAAU,QAAQA,UAAUC,KAAAA,KAAa,gBAAeV,KAAMS,KAAK;EAACN,EAAA,KAAAM;EAAAN,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAArF,MAAAU,WAAiBD;CAAqE,IAAAE;CAAA,IAAAX,EAAA,OAAAZ,iBAAAY,EAAA,OAAAE,UAAAF,EAAA,QAAAG,YAAAH,EAAA,QAAAM,OAAA;EAStEK,WAAA;GACJ,IAAIL,UAAU,QAAQA,UAAUC,KAAAA,GAAS;IACrC,MAAAK,OAAatB,WAAWgB,OAAOlB,aAAa;IAC5C,IAAIwB,SAASN,OACTH,WAAWS,SAAS,KAAT,OAAAA,IAAyB;GACvC;GAELV,SAAS;EAAC;EACbF,EAAA,KAAAZ;EAAAY,EAAA,KAAAE;EAAAF,EAAA,MAAAG;EAAAH,EAAA,MAAAM;EAAAN,EAAA,MAAAW;CAAA,OAAAA,KAAAX,EAAA;CAAA,IAAAa;CAAA,IAAAb,EAAA,QAAAQ,QAAAR,EAAA,QAAAU,YAAAV,EAAA,QAAAM,OAAA;EAEGO,KAAAH,WACI,oBAAA,KAAA;GACUJ,MAAAA;GACC,QAAA;GACH,KAAA;GACO,WAAArB,wBAAM6B;GACV,OAAAN,KAAIO,cAAelC,SAAQmC,QAAS;GAE3C,UAAA,oBAAC,MAAD;IAAYzC,MAAAA;IAAqB,OAAAiC,KAAIO,cAAelC,SAAQmC,QAAS;GAAC,CAAA;EACtE,CAAA,IATR;EAYIhB,EAAA,MAAAQ;EAAAR,EAAA,MAAAU;EAAAV,EAAA,MAAAM;EAAAN,EAAA,MAAAa;CAAA,OAAAA,KAAAb,EAAA;CAAA,IAAAiB;CAAA,IAAAjB,EAAA,QAAAG,YAAAH,EAAA,QAAAI,SAAAJ,EAAA,QAAAW,MAAAX,EAAA,QAAAa,MAAAb,EAAA,QAAAM,OAAA;EA7BZW,KAAA,oBAAC,WAAD;GACiB,cAAA;GAAK,GACdb;GACC,MAAA;GACK,WAAA;GACHE;GACGH;GACF,QAAAQ;GAUJ,QAAAE;EAYI,CAAA;EAEVb,EAAA,MAAAG;EAAAH,EAAA,MAAAI;EAAAJ,EAAA,MAAAW;EAAAX,EAAA,MAAAa;EAAAb,EAAA,MAAAM;EAAAN,EAAA,MAAAiB;CAAA,OAAAA,KAAAjB,EAAA;CAAA,OA/BFiB;AA+BE;;AAKV,SAAOC,cAAAd,OAAA;CAAA,MAAAJ,IAAAC,EAAA,EAAA;CAAA,IAAAF;CAAA,IAAAC,EAAA,OAAAI,MAAAe,OAAA;EACmBpB,KAAApB,WAAWyB,MAAKe,OAAQ,iBAAiBvC,QAAQ;EAACoB,EAAA,KAAAI,MAAAe;EAAAnB,EAAA,KAAAD;CAAA,OAAAA,KAAAC,EAAA;CAAxE,MAAAZ,gBAAsBW;CAAmD,IAAAM;CAAA,IAAAL,EAAA,OAAAI,OAAA;EAG7DC,KAAA3B,cAAc0B,KAAK;EAACJ,EAAA,KAAAI;EAAAJ,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CACjB,MAAAS,KAAA7B,SAASwB,MAAKE,KAA2B,IAAjBF,MAAKE,QAA7B;CAA0C,IAAAK;CAAA,IAAAX,EAAA,OAAAZ,eAAA;EAE5CuB,KAAAvB,kBAAkBmB,KAAAA,IAAlB,EAAAnB,cAAmD,IAAnD,CAAmD;EAACY,EAAA,KAAAZ;EAAAY,EAAA,KAAAW;CAAA,OAAAA,KAAAX,EAAA;CAAA,IAAAa;CAAA,IAAAb,EAAA,OAAAI,MAAAD,YAAAH,EAAA,OAAAK,MAAAL,EAAA,OAAAS,MAAAT,EAAA,OAAAW,IAAA;EAJ7DE,KAAA,oBAAC,UAAD;GAAS,GACDR;GACG,OAAAI;GACG,UAAAL,MAAKD;GAAS,GACnBQ;EAAoD,CAAA;EAC3DX,EAAA,KAAAI,MAAAD;EAAAH,EAAA,KAAAK;EAAAL,EAAA,KAAAS;EAAAT,EAAA,KAAAW;EAAAX,EAAA,MAAAa;CAAA,OAAAA,KAAAb,EAAA;CAAA,OALFa;AAKE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@panneau/fields",
|
|
3
|
-
"version": "5.0.0-alpha.
|
|
3
|
+
"version": "5.0.0-alpha.16",
|
|
4
4
|
"description": "Controlled field components of Panneau for the protocol's built-in field types, one subpath per field, and uploads to storage (Uppy 6 in its own entry point).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -118,6 +118,26 @@
|
|
|
118
118
|
"types": "./dist/region/index.d.ts",
|
|
119
119
|
"default": "./dist/region/index.js"
|
|
120
120
|
},
|
|
121
|
+
"./address": {
|
|
122
|
+
"@panneau/source": "./src/address/index.ts",
|
|
123
|
+
"types": "./dist/address/index.d.ts",
|
|
124
|
+
"default": "./dist/address/index.js"
|
|
125
|
+
},
|
|
126
|
+
"./link": {
|
|
127
|
+
"@panneau/source": "./src/link/index.ts",
|
|
128
|
+
"types": "./dist/link/index.d.ts",
|
|
129
|
+
"default": "./dist/link/index.js"
|
|
130
|
+
},
|
|
131
|
+
"./daterange": {
|
|
132
|
+
"@panneau/source": "./src/daterange/index.ts",
|
|
133
|
+
"types": "./dist/daterange/index.d.ts",
|
|
134
|
+
"default": "./dist/daterange/index.js"
|
|
135
|
+
},
|
|
136
|
+
"./money": {
|
|
137
|
+
"@panneau/source": "./src/money/index.ts",
|
|
138
|
+
"types": "./dist/money/index.d.ts",
|
|
139
|
+
"default": "./dist/money/index.js"
|
|
140
|
+
},
|
|
121
141
|
"./location": {
|
|
122
142
|
"@panneau/source": "./src/location/index.ts",
|
|
123
143
|
"types": "./dist/location/index.d.ts",
|
|
@@ -188,9 +208,9 @@
|
|
|
188
208
|
},
|
|
189
209
|
"dependencies": {
|
|
190
210
|
"@internationalized/date": "^3.12.4",
|
|
191
|
-
"@panneau/intl": "5.0.0-alpha.
|
|
192
|
-
"@panneau/protocol": "5.0.0-alpha.
|
|
193
|
-
"@panneau/ui": "5.0.0-alpha.
|
|
211
|
+
"@panneau/intl": "5.0.0-alpha.16",
|
|
212
|
+
"@panneau/protocol": "5.0.0-alpha.16",
|
|
213
|
+
"@panneau/ui": "5.0.0-alpha.16",
|
|
194
214
|
"leaflet": "^1.9.4",
|
|
195
215
|
"libphonenumber-js": "^1.13.15",
|
|
196
216
|
"lucide-react": "^1.57.0"
|