@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
package/dist/shared/types.d.ts
CHANGED
|
@@ -39,10 +39,22 @@ export interface FieldEntryProps {
|
|
|
39
39
|
onChange: (value: unknown) => void;
|
|
40
40
|
onBlur?: () => void;
|
|
41
41
|
errors?: readonly string[];
|
|
42
|
+
/**
|
|
43
|
+
* Paths inside the field that have errors (`title.en`), given by the form's binding to fields
|
|
44
|
+
* that show their nested fields: a localized field marks its locales in error.
|
|
45
|
+
*/
|
|
46
|
+
invalidPaths?: readonly string[];
|
|
42
47
|
disabled?: boolean;
|
|
43
48
|
readOnly?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Renders the field without a visible label, named by its label for assistive technologies:
|
|
51
|
+
* the input of a locale, under the label of its localized field.
|
|
52
|
+
*/
|
|
53
|
+
hideLabel?: boolean;
|
|
44
54
|
/** The object the field belongs to: the form's values, or a group or a block. */
|
|
45
55
|
parentValue?: unknown;
|
|
56
|
+
/** The locale of the value: the input of a locale of a localized field. */
|
|
57
|
+
locale?: string;
|
|
46
58
|
className?: string;
|
|
47
59
|
}
|
|
48
60
|
/** A registry entry: renders the field of a type from its definition. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IACzB,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACrC,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,iCAAiC;IACjC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wFAAwF;AACxF,MAAM,WAAW,eAAe;IAC5B,iDAAiD;IACjD,KAAK,EAAE,KAAK,CAAC;IACb,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iFAAiF;IACjF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,yEAAyE;AACzE,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IACzB,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACrC,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,iCAAiC;IACjC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wFAAwF;AACxF,MAAM,WAAW,eAAe;IAC5B,iDAAiD;IACjD,KAAK,EAAE,KAAK,CAAC;IACb,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,yEAAyE;AACzE,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
.panneau-slug-field-description {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
gap: var(--panneau-space-1);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.panneau-slug-field-url {
|
|
8
|
+
overflow-wrap: anywhere;
|
|
9
|
+
color: var(--panneau-color-link);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.panneau-slug-field-taken {
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-wrap: wrap;
|
|
15
|
+
align-items: center;
|
|
16
|
+
gap: var(--panneau-space-2);
|
|
17
|
+
color: var(--panneau-color-warning);
|
|
18
|
+
}
|
package/dist/slug/SlugField.d.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import {
|
|
1
|
+
import type { FieldCheckResponse } from '@panneau/protocol';
|
|
2
|
+
import type { FieldEntryProps } from '../shared/types.js';
|
|
3
|
+
import { type TextFieldProps } from '../text/TextField.js';
|
|
3
4
|
/**
|
|
4
5
|
* Turns a text into a slug: lowercase ASCII letters and digits separated by dashes, without
|
|
5
6
|
* accents (`Été à Montréal` gives `ete-a-montreal`).
|
|
6
7
|
*/
|
|
7
8
|
export declare function slugify(text: string): string;
|
|
9
|
+
/** Checks a slug with the backend: whether it is available, and its URL. */
|
|
10
|
+
export type SlugCheck = (value: string, options: {
|
|
11
|
+
signal: AbortSignal;
|
|
12
|
+
}) => Promise<FieldCheckResponse>;
|
|
8
13
|
export interface SlugFieldProps extends Omit<TextFieldProps, 'type' | 'suffix'> {
|
|
9
14
|
/**
|
|
10
15
|
* The text the slug is made from (a title). While the slug is empty or still matches it, the
|
|
@@ -13,12 +18,35 @@ export interface SlugFieldProps extends Omit<TextFieldProps, 'type' | 'suffix'>
|
|
|
13
18
|
source?: string | null;
|
|
14
19
|
/** Name of the source, for the button that generates the slug from it. */
|
|
15
20
|
sourceLabel?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Checks the slug as it is typed, and once when the field shows: the field then shows the
|
|
23
|
+
* URL the backend gives, and says when the slug is taken, with a free one to use instead.
|
|
24
|
+
*/
|
|
25
|
+
onCheck?: SlugCheck | null;
|
|
26
|
+
/** How long typing must pause before a check, in milliseconds. Defaults to 300. */
|
|
27
|
+
checkDelay?: number;
|
|
28
|
+
/**
|
|
29
|
+
* What the check depends on besides the slug, such as the form's values: the slug is checked
|
|
30
|
+
* again when it changes. `onCheck` itself can change on every render.
|
|
31
|
+
*/
|
|
32
|
+
checkKey?: string;
|
|
16
33
|
}
|
|
17
34
|
/**
|
|
18
35
|
* A slug for URLs. Typed text is cleaned up on blur. With a `source`, the slug follows it until
|
|
19
|
-
* it is edited, and a button generates it again.
|
|
36
|
+
* it is edited, and a button generates it again. With `onCheck`, the backend says whether the
|
|
37
|
+
* slug is taken, and gives its URL.
|
|
38
|
+
*/
|
|
39
|
+
export declare function SlugField({ value, onChange, onBlur, source, sourceLabel, onCheck, checkDelay, checkKey, disabled, readOnly, prefix, errors, description, ...props }: SlugFieldProps): import("react").JSX.Element;
|
|
40
|
+
/**
|
|
41
|
+
* The text of a source value: the value itself, or for a localized value, its value in `locale`.
|
|
42
|
+
* Without a locale, the first locale that has a value.
|
|
43
|
+
*/
|
|
44
|
+
export declare function sourceText(value: unknown, locale?: string): string | null;
|
|
45
|
+
/**
|
|
46
|
+
* The `slug` type: `from` names the field it follows, in the slug's own locale, or in the default
|
|
47
|
+
* locale (the first of the fields context) for a slug that isn't localized. Setting `prefix`
|
|
48
|
+
* shows a URL prefix. With `check`, the fields context's check source checks the slug of a field
|
|
49
|
+
* at the top of the resource, with the form's values.
|
|
20
50
|
*/
|
|
21
|
-
export declare function SlugField({ value, onChange, onBlur, source, sourceLabel, disabled, readOnly, ...props }: SlugFieldProps): import("react").JSX.Element;
|
|
22
|
-
/** The `slug` type: `from` names the field it follows, and setting `prefix` shows a URL prefix. */
|
|
23
51
|
export declare function SlugFieldEntry(props: FieldEntryProps): import("react").JSX.Element;
|
|
24
52
|
//# sourceMappingURL=SlugField.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlugField.d.ts","sourceRoot":"","sources":["../../src/slug/SlugField.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SlugField.d.ts","sourceRoot":"","sources":["../../src/slug/SlugField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAM5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMnE;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO5C;AAED,4EAA4E;AAC5E,MAAM,MAAM,SAAS,GAAG,CACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,KAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEjC,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC3E;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AA4CD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EACtB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,MAAM,EACN,WAAW,EACX,OAAO,EACP,UAAgB,EAChB,QAAa,EACb,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,EACN,WAAW,EACX,GAAG,KAAK,EACX,EAAE,cAAc,+BA4FhB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAazE;AAeD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,+BAqCpD"}
|
package/dist/slug/SlugField.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { getFieldProps, getSetting, isString } from "../shared/entry.js";
|
|
2
|
+
import { useFieldsContext } from "../shared/context.js";
|
|
2
3
|
import { messages } from "../shared/messages.js";
|
|
3
4
|
import { TextField } from "../text/TextField.js";
|
|
5
|
+
import SlugField_module_default from "./SlugField.module.js";
|
|
4
6
|
import { c } from "react/compiler-runtime";
|
|
5
|
-
import { IconButton, usePanneauIntl } from "@panneau/ui";
|
|
6
|
-
import {
|
|
7
|
-
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
import { Button, IconButton, usePanneauIntl } from "@panneau/ui";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
9
|
import { WandSparkles } from "lucide-react";
|
|
10
|
+
import { useEffect, useRef, useState } from "react";
|
|
9
11
|
//#region src/slug/SlugField.tsx
|
|
12
|
+
var suggestionMessage = messages.useSuggestion;
|
|
10
13
|
/**
|
|
11
14
|
* Turns a text into a slug: lowercase ASCII letters and digits separated by dashes, without
|
|
12
15
|
* accents (`Été à Montréal` gives `ete-a-montreal`).
|
|
@@ -15,47 +18,131 @@ function slugify(text) {
|
|
|
15
18
|
return text.normalize("NFKD").replace(/[̀-ͯ]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
16
19
|
}
|
|
17
20
|
/**
|
|
21
|
+
* Checks a slug after a pause in typing, and keeps the latest answer for it. A check that
|
|
22
|
+
* fails leaves the field as it is: saving still validates the slug.
|
|
23
|
+
*/
|
|
24
|
+
function useSlugCheck(value, onCheck, delay, key) {
|
|
25
|
+
const $ = c(11);
|
|
26
|
+
const [result, setResult] = useState(null);
|
|
27
|
+
const latest = useRef(onCheck);
|
|
28
|
+
let t0;
|
|
29
|
+
if ($[0] !== onCheck) {
|
|
30
|
+
t0 = () => {
|
|
31
|
+
latest.current = onCheck;
|
|
32
|
+
};
|
|
33
|
+
$[0] = onCheck;
|
|
34
|
+
$[1] = t0;
|
|
35
|
+
} else t0 = $[1];
|
|
36
|
+
useEffect(t0);
|
|
37
|
+
const enabled = onCheck !== null && onCheck !== void 0;
|
|
38
|
+
let t1;
|
|
39
|
+
if ($[2] !== delay || $[3] !== enabled || $[4] !== value) {
|
|
40
|
+
t1 = () => {
|
|
41
|
+
if (!enabled || value === "") return;
|
|
42
|
+
const controller = new AbortController();
|
|
43
|
+
const timer = setTimeout(() => {
|
|
44
|
+
const check = latest.current;
|
|
45
|
+
if (check === null || check === void 0) return;
|
|
46
|
+
check(value, { signal: controller.signal }).then((check_0) => {
|
|
47
|
+
if (!controller.signal.aborted) setResult({
|
|
48
|
+
value,
|
|
49
|
+
check: check_0
|
|
50
|
+
});
|
|
51
|
+
}).catch(_temp);
|
|
52
|
+
}, delay);
|
|
53
|
+
return () => {
|
|
54
|
+
clearTimeout(timer);
|
|
55
|
+
controller.abort();
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
$[2] = delay;
|
|
59
|
+
$[3] = enabled;
|
|
60
|
+
$[4] = value;
|
|
61
|
+
$[5] = t1;
|
|
62
|
+
} else t1 = $[5];
|
|
63
|
+
let t2;
|
|
64
|
+
if ($[6] !== delay || $[7] !== enabled || $[8] !== key || $[9] !== value) {
|
|
65
|
+
t2 = [
|
|
66
|
+
value,
|
|
67
|
+
enabled,
|
|
68
|
+
delay,
|
|
69
|
+
key
|
|
70
|
+
];
|
|
71
|
+
$[6] = delay;
|
|
72
|
+
$[7] = enabled;
|
|
73
|
+
$[8] = key;
|
|
74
|
+
$[9] = value;
|
|
75
|
+
$[10] = t2;
|
|
76
|
+
} else t2 = $[10];
|
|
77
|
+
useEffect(t1, t2);
|
|
78
|
+
return result !== null && result.value === value ? result.check : null;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
18
81
|
* A slug for URLs. Typed text is cleaned up on blur. With a `source`, the slug follows it until
|
|
19
|
-
* it is edited, and a button generates it again.
|
|
82
|
+
* it is edited, and a button generates it again. With `onCheck`, the backend says whether the
|
|
83
|
+
* slug is taken, and gives its URL.
|
|
20
84
|
*/
|
|
85
|
+
function _temp() {}
|
|
21
86
|
function SlugField(t0) {
|
|
22
|
-
const $ = c(
|
|
87
|
+
const $ = c(65);
|
|
88
|
+
let description;
|
|
23
89
|
let disabled;
|
|
90
|
+
let errors;
|
|
24
91
|
let onBlur;
|
|
25
92
|
let onChange;
|
|
93
|
+
let onCheck;
|
|
94
|
+
let prefix;
|
|
26
95
|
let props;
|
|
27
96
|
let readOnly;
|
|
28
97
|
let source;
|
|
29
98
|
let sourceLabel;
|
|
99
|
+
let t1;
|
|
100
|
+
let t2;
|
|
30
101
|
let value;
|
|
31
102
|
if ($[0] !== t0) {
|
|
32
|
-
({value, onChange, onBlur, source, sourceLabel, disabled, readOnly, ...props} = t0);
|
|
103
|
+
({value, onChange, onBlur, source, sourceLabel, onCheck, checkDelay: t1, checkKey: t2, disabled, readOnly, prefix, errors, description, ...props} = t0);
|
|
33
104
|
$[0] = t0;
|
|
34
|
-
$[1] =
|
|
35
|
-
$[2] =
|
|
36
|
-
$[3] =
|
|
37
|
-
$[4] =
|
|
38
|
-
$[5] =
|
|
39
|
-
$[6] =
|
|
40
|
-
$[7] =
|
|
41
|
-
$[8] =
|
|
105
|
+
$[1] = description;
|
|
106
|
+
$[2] = disabled;
|
|
107
|
+
$[3] = errors;
|
|
108
|
+
$[4] = onBlur;
|
|
109
|
+
$[5] = onChange;
|
|
110
|
+
$[6] = onCheck;
|
|
111
|
+
$[7] = prefix;
|
|
112
|
+
$[8] = props;
|
|
113
|
+
$[9] = readOnly;
|
|
114
|
+
$[10] = source;
|
|
115
|
+
$[11] = sourceLabel;
|
|
116
|
+
$[12] = t1;
|
|
117
|
+
$[13] = t2;
|
|
118
|
+
$[14] = value;
|
|
42
119
|
} else {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
120
|
+
description = $[1];
|
|
121
|
+
disabled = $[2];
|
|
122
|
+
errors = $[3];
|
|
123
|
+
onBlur = $[4];
|
|
124
|
+
onChange = $[5];
|
|
125
|
+
onCheck = $[6];
|
|
126
|
+
prefix = $[7];
|
|
127
|
+
props = $[8];
|
|
128
|
+
readOnly = $[9];
|
|
129
|
+
source = $[10];
|
|
130
|
+
sourceLabel = $[11];
|
|
131
|
+
t1 = $[12];
|
|
132
|
+
t2 = $[13];
|
|
133
|
+
value = $[14];
|
|
51
134
|
}
|
|
135
|
+
const checkDelay = t1 === void 0 ? 300 : t1;
|
|
136
|
+
const checkKey = t2 === void 0 ? "" : t2;
|
|
52
137
|
const intl = usePanneauIntl();
|
|
53
138
|
const previousSource = useRef(source);
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
139
|
+
const check = useSlugCheck(value ?? "", onCheck, checkDelay, checkKey);
|
|
140
|
+
const disabledByBackend = check?.disabled === true;
|
|
141
|
+
const editable = disabled !== true && readOnly !== true && !disabledByBackend;
|
|
142
|
+
let t3;
|
|
143
|
+
let t4;
|
|
144
|
+
if ($[15] !== editable || $[16] !== onChange || $[17] !== source || $[18] !== value) {
|
|
145
|
+
t3 = () => {
|
|
59
146
|
const previous = previousSource.current;
|
|
60
147
|
previousSource.current = source;
|
|
61
148
|
if (!editable || source === previous || source === void 0) return;
|
|
@@ -65,95 +152,193 @@ function SlugField(t0) {
|
|
|
65
152
|
if (next !== current) onChange?.(next === "" ? null : next);
|
|
66
153
|
}
|
|
67
154
|
};
|
|
68
|
-
|
|
155
|
+
t4 = [
|
|
69
156
|
source,
|
|
70
157
|
value,
|
|
71
158
|
onChange,
|
|
72
159
|
editable
|
|
73
160
|
];
|
|
74
|
-
$[
|
|
75
|
-
$[
|
|
76
|
-
$[
|
|
77
|
-
$[
|
|
78
|
-
$[
|
|
79
|
-
$[
|
|
161
|
+
$[15] = editable;
|
|
162
|
+
$[16] = onChange;
|
|
163
|
+
$[17] = source;
|
|
164
|
+
$[18] = value;
|
|
165
|
+
$[19] = t3;
|
|
166
|
+
$[20] = t4;
|
|
80
167
|
} else {
|
|
81
|
-
|
|
82
|
-
|
|
168
|
+
t3 = $[19];
|
|
169
|
+
t4 = $[20];
|
|
83
170
|
}
|
|
84
|
-
useEffect(
|
|
85
|
-
const
|
|
86
|
-
let
|
|
87
|
-
if ($[
|
|
88
|
-
|
|
89
|
-
$[
|
|
90
|
-
$[
|
|
91
|
-
} else
|
|
92
|
-
const generated =
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
171
|
+
useEffect(t3, t4);
|
|
172
|
+
const t5 = source ?? "";
|
|
173
|
+
let t6;
|
|
174
|
+
if ($[21] !== t5) {
|
|
175
|
+
t6 = slugify(t5);
|
|
176
|
+
$[21] = t5;
|
|
177
|
+
$[22] = t6;
|
|
178
|
+
} else t6 = $[22];
|
|
179
|
+
const generated = t6;
|
|
180
|
+
const taken = check !== null && !check.available;
|
|
181
|
+
let t7;
|
|
182
|
+
if ($[23] !== check || $[24] !== taken) {
|
|
183
|
+
t7 = taken && isString(check.suggestion) ? check.suggestion : null;
|
|
184
|
+
$[23] = check;
|
|
185
|
+
$[24] = taken;
|
|
186
|
+
$[25] = t7;
|
|
187
|
+
} else t7 = $[25];
|
|
188
|
+
const suggestion = t7;
|
|
189
|
+
let t8;
|
|
190
|
+
if ($[26] !== check || $[27] !== taken) {
|
|
191
|
+
t8 = check !== null && isString(check.url) && !taken ? check.url : null;
|
|
192
|
+
$[26] = check;
|
|
193
|
+
$[27] = taken;
|
|
194
|
+
$[28] = t8;
|
|
195
|
+
} else t8 = $[28];
|
|
196
|
+
const url = t8;
|
|
197
|
+
const t9 = readOnly === true || disabledByBackend;
|
|
198
|
+
let t10;
|
|
199
|
+
if ($[29] !== check || $[30] !== prefix) {
|
|
200
|
+
t10 = check !== null && isString(check.prefix) ? { prefix: check.prefix } : prefix !== void 0 ? { prefix } : {};
|
|
201
|
+
$[29] = check;
|
|
202
|
+
$[30] = prefix;
|
|
203
|
+
$[31] = t10;
|
|
204
|
+
} else t10 = $[31];
|
|
205
|
+
let t11;
|
|
206
|
+
if ($[32] !== errors) {
|
|
207
|
+
t11 = errors !== void 0 ? { errors } : {};
|
|
208
|
+
$[32] = errors;
|
|
209
|
+
$[33] = t11;
|
|
210
|
+
} else t11 = $[33];
|
|
211
|
+
let t12;
|
|
212
|
+
if ($[34] !== description || $[35] !== editable || $[36] !== intl || $[37] !== onChange || $[38] !== suggestion || $[39] !== taken || $[40] !== url) {
|
|
213
|
+
t12 = taken || url !== null || description !== void 0 ? /* @__PURE__ */ jsxs("span", {
|
|
214
|
+
className: SlugField_module_default.description,
|
|
215
|
+
children: [
|
|
216
|
+
description !== void 0 ? /* @__PURE__ */ jsx("span", { children: description }) : null,
|
|
217
|
+
url !== null ? /* @__PURE__ */ jsx("a", {
|
|
218
|
+
href: url,
|
|
219
|
+
target: "_blank",
|
|
220
|
+
rel: "noreferrer",
|
|
221
|
+
className: SlugField_module_default.url,
|
|
222
|
+
children: url
|
|
223
|
+
}) : null,
|
|
224
|
+
taken ? /* @__PURE__ */ jsxs("span", {
|
|
225
|
+
className: SlugField_module_default.taken,
|
|
226
|
+
role: "status",
|
|
227
|
+
children: [intl.formatMessage(messages.slugTaken), suggestion !== null && editable ? /* @__PURE__ */ jsx(Button, {
|
|
228
|
+
size: "sm",
|
|
229
|
+
appearance: "ghost",
|
|
230
|
+
onPress: () => onChange?.(suggestion),
|
|
231
|
+
children: intl.formatMessage(suggestionMessage, { suggestion })
|
|
232
|
+
}) : null]
|
|
233
|
+
}) : null
|
|
234
|
+
]
|
|
235
|
+
}) : void 0;
|
|
236
|
+
$[34] = description;
|
|
237
|
+
$[35] = editable;
|
|
238
|
+
$[36] = intl;
|
|
239
|
+
$[37] = onChange;
|
|
240
|
+
$[38] = suggestion;
|
|
241
|
+
$[39] = taken;
|
|
242
|
+
$[40] = url;
|
|
243
|
+
$[41] = t12;
|
|
244
|
+
} else t12 = $[41];
|
|
245
|
+
let t13;
|
|
246
|
+
if ($[42] !== onBlur || $[43] !== onChange || $[44] !== value) {
|
|
247
|
+
t13 = () => {
|
|
96
248
|
if (value !== null && value !== void 0) {
|
|
97
249
|
const next_0 = slugify(value);
|
|
98
250
|
if (next_0 !== value) onChange?.(next_0 === "" ? null : next_0);
|
|
99
251
|
}
|
|
100
252
|
onBlur?.();
|
|
101
253
|
};
|
|
102
|
-
$[
|
|
103
|
-
$[
|
|
104
|
-
$[
|
|
105
|
-
$[
|
|
106
|
-
} else
|
|
107
|
-
let
|
|
108
|
-
if ($[
|
|
109
|
-
|
|
254
|
+
$[42] = onBlur;
|
|
255
|
+
$[43] = onChange;
|
|
256
|
+
$[44] = value;
|
|
257
|
+
$[45] = t13;
|
|
258
|
+
} else t13 = $[45];
|
|
259
|
+
let t14;
|
|
260
|
+
if ($[46] !== editable || $[47] !== generated || $[48] !== intl || $[49] !== onChange || $[50] !== source || $[51] !== sourceLabel || $[52] !== value) {
|
|
261
|
+
t14 = source !== void 0 && editable ? /* @__PURE__ */ jsx(IconButton, {
|
|
110
262
|
icon: WandSparkles,
|
|
111
263
|
size: "sm",
|
|
112
264
|
label: intl.formatMessage(messages.generateSlug, { field: sourceLabel ?? "" }),
|
|
113
265
|
isDisabled: generated === "" || generated === value,
|
|
114
266
|
onPress: () => onChange?.(generated === "" ? null : generated)
|
|
115
267
|
}) : void 0;
|
|
116
|
-
$[
|
|
117
|
-
$[
|
|
118
|
-
$[
|
|
119
|
-
$[
|
|
120
|
-
$[
|
|
121
|
-
$[
|
|
122
|
-
$[
|
|
123
|
-
$[
|
|
124
|
-
} else
|
|
125
|
-
let
|
|
126
|
-
if ($[
|
|
127
|
-
|
|
268
|
+
$[46] = editable;
|
|
269
|
+
$[47] = generated;
|
|
270
|
+
$[48] = intl;
|
|
271
|
+
$[49] = onChange;
|
|
272
|
+
$[50] = source;
|
|
273
|
+
$[51] = sourceLabel;
|
|
274
|
+
$[52] = value;
|
|
275
|
+
$[53] = t14;
|
|
276
|
+
} else t14 = $[53];
|
|
277
|
+
let t15;
|
|
278
|
+
if ($[54] !== disabled || $[55] !== onChange || $[56] !== props || $[57] !== t10 || $[58] !== t11 || $[59] !== t12 || $[60] !== t13 || $[61] !== t14 || $[62] !== t9 || $[63] !== value) {
|
|
279
|
+
t15 = /* @__PURE__ */ jsx(TextField, {
|
|
128
280
|
autoComplete: "off",
|
|
129
281
|
...props,
|
|
130
282
|
value,
|
|
131
283
|
onChange,
|
|
132
284
|
disabled,
|
|
133
|
-
readOnly,
|
|
134
|
-
|
|
135
|
-
|
|
285
|
+
readOnly: t9,
|
|
286
|
+
...t10,
|
|
287
|
+
...t11,
|
|
288
|
+
description: t12,
|
|
289
|
+
onBlur: t13,
|
|
290
|
+
suffix: t14
|
|
136
291
|
});
|
|
137
|
-
$[
|
|
138
|
-
$[
|
|
139
|
-
$[
|
|
140
|
-
$[
|
|
141
|
-
$[
|
|
142
|
-
$[
|
|
143
|
-
$[
|
|
144
|
-
$[
|
|
145
|
-
|
|
146
|
-
|
|
292
|
+
$[54] = disabled;
|
|
293
|
+
$[55] = onChange;
|
|
294
|
+
$[56] = props;
|
|
295
|
+
$[57] = t10;
|
|
296
|
+
$[58] = t11;
|
|
297
|
+
$[59] = t12;
|
|
298
|
+
$[60] = t13;
|
|
299
|
+
$[61] = t14;
|
|
300
|
+
$[62] = t9;
|
|
301
|
+
$[63] = value;
|
|
302
|
+
$[64] = t15;
|
|
303
|
+
} else t15 = $[64];
|
|
304
|
+
return t15;
|
|
147
305
|
}
|
|
148
|
-
|
|
306
|
+
/**
|
|
307
|
+
* The text of a source value: the value itself, or for a localized value, its value in `locale`.
|
|
308
|
+
* Without a locale, the first locale that has a value.
|
|
309
|
+
*/
|
|
310
|
+
function sourceText(value, locale) {
|
|
149
311
|
if (typeof value === "string") return value;
|
|
150
|
-
if (value !== null && typeof value === "object")
|
|
312
|
+
if (value !== null && typeof value === "object") {
|
|
313
|
+
const record = value;
|
|
314
|
+
if (locale !== void 0) {
|
|
315
|
+
const text = record[locale];
|
|
316
|
+
return isString(text) ? text : null;
|
|
317
|
+
}
|
|
318
|
+
return Object.values(record).find(isString) ?? null;
|
|
319
|
+
}
|
|
151
320
|
return null;
|
|
152
321
|
}
|
|
153
|
-
/** The
|
|
322
|
+
/** The form's values that a check depends on: all but the slug itself. */
|
|
323
|
+
function checkKeyOf(values, name) {
|
|
324
|
+
if (values === null) return "";
|
|
325
|
+
const { [name]: _slug, ...others } = values;
|
|
326
|
+
try {
|
|
327
|
+
return JSON.stringify(others);
|
|
328
|
+
} catch {
|
|
329
|
+
return "";
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* The `slug` type: `from` names the field it follows, in the slug's own locale, or in the default
|
|
334
|
+
* locale (the first of the fields context) for a slug that isn't localized. Setting `prefix`
|
|
335
|
+
* shows a URL prefix. With `check`, the fields context's check source checks the slug of a field
|
|
336
|
+
* at the top of the resource, with the form's values.
|
|
337
|
+
*/
|
|
154
338
|
function SlugFieldEntry(props) {
|
|
155
|
-
const $ = c(
|
|
156
|
-
const { field, parentValue } = props;
|
|
339
|
+
const $ = c(33);
|
|
340
|
+
const { field, parentValue, locale, path } = props;
|
|
341
|
+
const { locales, checkSource } = useFieldsContext();
|
|
157
342
|
let t0;
|
|
158
343
|
if ($[0] !== field) {
|
|
159
344
|
t0 = getSetting(field, "prefix", isString);
|
|
@@ -161,56 +346,91 @@ function SlugFieldEntry(props) {
|
|
|
161
346
|
$[1] = t0;
|
|
162
347
|
} else t0 = $[1];
|
|
163
348
|
const prefix = t0;
|
|
349
|
+
const values = parentValue !== null && typeof parentValue === "object" ? parentValue : null;
|
|
164
350
|
let t1;
|
|
165
|
-
if ($[2] !== field.from || $[3] !==
|
|
166
|
-
t1 = field.from !== void 0 &&
|
|
351
|
+
if ($[2] !== field.from || $[3] !== locale || $[4] !== locales || $[5] !== values) {
|
|
352
|
+
t1 = field.from !== void 0 && values !== null ? sourceText(values[field.from], locale ?? locales[0]) : void 0;
|
|
167
353
|
$[2] = field.from;
|
|
168
|
-
$[3] =
|
|
169
|
-
$[4] =
|
|
170
|
-
|
|
354
|
+
$[3] = locale;
|
|
355
|
+
$[4] = locales;
|
|
356
|
+
$[5] = values;
|
|
357
|
+
$[6] = t1;
|
|
358
|
+
} else t1 = $[6];
|
|
171
359
|
const source = t1;
|
|
360
|
+
const topLevel = path === field.name || path === `${field.name}.${locale ?? ""}`;
|
|
172
361
|
let t2;
|
|
173
|
-
if ($[
|
|
174
|
-
t2 =
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
362
|
+
if ($[7] !== checkSource || $[8] !== field.check || $[9] !== field.name || $[10] !== locale || $[11] !== topLevel || $[12] !== values) {
|
|
363
|
+
t2 = field.check === true && checkSource !== null && topLevel ? (value, t3) => {
|
|
364
|
+
const { signal } = t3;
|
|
365
|
+
return checkSource.check(field.name, {
|
|
366
|
+
value,
|
|
367
|
+
...locale !== void 0 ? { locale } : {},
|
|
368
|
+
values: values ?? {}
|
|
369
|
+
}, { signal });
|
|
370
|
+
} : null;
|
|
371
|
+
$[7] = checkSource;
|
|
372
|
+
$[8] = field.check;
|
|
373
|
+
$[9] = field.name;
|
|
374
|
+
$[10] = locale;
|
|
375
|
+
$[11] = topLevel;
|
|
376
|
+
$[12] = values;
|
|
377
|
+
$[13] = t2;
|
|
378
|
+
} else t2 = $[13];
|
|
379
|
+
const onCheck = t2;
|
|
380
|
+
let t3;
|
|
381
|
+
if ($[14] !== props) {
|
|
382
|
+
t3 = getFieldProps(props);
|
|
383
|
+
$[14] = props;
|
|
384
|
+
$[15] = t3;
|
|
385
|
+
} else t3 = $[15];
|
|
386
|
+
const t4 = isString(props.value) ? props.value : null;
|
|
387
|
+
let t5;
|
|
388
|
+
if ($[16] !== field.name || $[17] !== onCheck || $[18] !== values) {
|
|
389
|
+
t5 = onCheck !== null ? checkKeyOf(values, field.name) : "";
|
|
390
|
+
$[16] = field.name;
|
|
391
|
+
$[17] = onCheck;
|
|
392
|
+
$[18] = values;
|
|
393
|
+
$[19] = t5;
|
|
394
|
+
} else t5 = $[19];
|
|
395
|
+
let t6;
|
|
396
|
+
if ($[20] !== field.from || $[21] !== source) {
|
|
397
|
+
t6 = source !== void 0 ? {
|
|
182
398
|
source,
|
|
183
399
|
sourceLabel: field.from ?? ""
|
|
184
400
|
} : {};
|
|
185
|
-
$[
|
|
186
|
-
$[
|
|
187
|
-
$[
|
|
188
|
-
} else
|
|
189
|
-
let
|
|
190
|
-
if ($[
|
|
191
|
-
|
|
192
|
-
$[
|
|
193
|
-
$[
|
|
194
|
-
} else
|
|
195
|
-
let
|
|
196
|
-
if ($[
|
|
197
|
-
|
|
198
|
-
...
|
|
199
|
-
value:
|
|
401
|
+
$[20] = field.from;
|
|
402
|
+
$[21] = source;
|
|
403
|
+
$[22] = t6;
|
|
404
|
+
} else t6 = $[22];
|
|
405
|
+
let t7;
|
|
406
|
+
if ($[23] !== prefix) {
|
|
407
|
+
t7 = prefix !== void 0 ? { prefix } : {};
|
|
408
|
+
$[23] = prefix;
|
|
409
|
+
$[24] = t7;
|
|
410
|
+
} else t7 = $[24];
|
|
411
|
+
let t8;
|
|
412
|
+
if ($[25] !== onCheck || $[26] !== props.onChange || $[27] !== t3 || $[28] !== t4 || $[29] !== t5 || $[30] !== t6 || $[31] !== t7) {
|
|
413
|
+
t8 = /* @__PURE__ */ jsx(SlugField, {
|
|
414
|
+
...t3,
|
|
415
|
+
value: t4,
|
|
200
416
|
onChange: props.onChange,
|
|
201
|
-
|
|
202
|
-
|
|
417
|
+
onCheck,
|
|
418
|
+
checkKey: t5,
|
|
419
|
+
...t6,
|
|
420
|
+
...t7
|
|
203
421
|
});
|
|
204
|
-
$[
|
|
205
|
-
$[
|
|
206
|
-
$[
|
|
207
|
-
$[
|
|
208
|
-
$[
|
|
209
|
-
$[
|
|
210
|
-
|
|
211
|
-
|
|
422
|
+
$[25] = onCheck;
|
|
423
|
+
$[26] = props.onChange;
|
|
424
|
+
$[27] = t3;
|
|
425
|
+
$[28] = t4;
|
|
426
|
+
$[29] = t5;
|
|
427
|
+
$[30] = t6;
|
|
428
|
+
$[31] = t7;
|
|
429
|
+
$[32] = t8;
|
|
430
|
+
} else t8 = $[32];
|
|
431
|
+
return t8;
|
|
212
432
|
}
|
|
213
433
|
//#endregion
|
|
214
|
-
export { SlugField, SlugFieldEntry, slugify };
|
|
434
|
+
export { SlugField, SlugFieldEntry, slugify, sourceText };
|
|
215
435
|
|
|
216
436
|
//# sourceMappingURL=SlugField.js.map
|