@panneau/fields 5.0.0-alpha.2 → 5.0.0-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +186 -20
- package/dist/address/AddressField.css +44 -0
- package/dist/address/AddressField.d.ts +37 -0
- package/dist/address/AddressField.d.ts.map +1 -0
- package/dist/address/AddressField.js +411 -0
- package/dist/address/AddressField.js.map +1 -0
- package/dist/address/AddressField.module.js +22 -0
- package/dist/address/AddressField.module.js.map +1 -0
- package/dist/address/address.d.ts +23 -0
- package/dist/address/address.d.ts.map +1 -0
- package/dist/address/address.js +58 -0
- package/dist/address/address.js.map +1 -0
- package/dist/address/index.d.ts +3 -0
- package/dist/address/index.d.ts.map +1 -0
- package/dist/address/index.js +3 -0
- package/dist/boolean/BooleanField.d.ts +1 -1
- package/dist/boolean/BooleanField.js +78 -17
- package/dist/boolean/BooleanField.js.map +1 -1
- package/dist/boolean/index.d.ts +1 -1
- package/dist/color/ColorField.css +9 -0
- package/dist/color/ColorField.d.ts +12 -5
- package/dist/color/ColorField.d.ts.map +1 -1
- package/dist/color/ColorField.js +341 -81
- package/dist/color/ColorField.js.map +1 -1
- package/dist/color/ColorField.module.js +4 -2
- package/dist/color/ColorField.module.js.map +1 -1
- package/dist/color/index.d.ts +2 -1
- package/dist/color/index.d.ts.map +1 -1
- package/dist/color/index.js +3 -1
- package/dist/color/palette.d.ts +23 -0
- package/dist/color/palette.d.ts.map +1 -0
- package/dist/color/palette.js +34 -0
- package/dist/color/palette.js.map +1 -0
- package/dist/compound/Compound.css +26 -0
- package/dist/compound/Compound.module.js +16 -0
- package/dist/compound/Compound.module.js.map +1 -0
- package/dist/compound/compound.d.ts +56 -0
- package/dist/compound/compound.d.ts.map +1 -0
- package/dist/compound/compound.js +186 -0
- package/dist/compound/compound.js.map +1 -0
- package/dist/country/CountryField.css +42 -0
- package/dist/country/CountryField.d.ts +32 -0
- package/dist/country/CountryField.d.ts.map +1 -0
- package/dist/country/CountryField.js +424 -0
- package/dist/country/CountryField.js.map +1 -0
- package/dist/country/CountryField.module.js +20 -0
- package/dist/country/CountryField.module.js.map +1 -0
- package/dist/country/codes.d.ts +6 -0
- package/dist/country/codes.d.ts.map +1 -0
- package/dist/country/codes.js +261 -0
- package/dist/country/codes.js.map +1 -0
- package/dist/country/countries.d.ts +32 -0
- package/dist/country/countries.d.ts.map +1 -0
- package/dist/country/countries.js +60 -0
- package/dist/country/countries.js.map +1 -0
- package/dist/country/index.d.ts +3 -0
- package/dist/country/index.d.ts.map +1 -0
- package/dist/country/index.js +4 -0
- package/dist/credits/CreditsField.d.ts +15 -0
- package/dist/credits/CreditsField.d.ts.map +1 -0
- package/dist/credits/CreditsField.js +58 -0
- package/dist/credits/CreditsField.js.map +1 -0
- package/dist/credits/credits.d.ts +18 -0
- package/dist/credits/credits.d.ts.map +1 -0
- package/dist/credits/credits.js +33 -0
- package/dist/credits/credits.js.map +1 -0
- package/dist/credits/index.d.ts +5 -0
- package/dist/credits/index.d.ts.map +1 -0
- package/dist/credits/index.js +3 -0
- package/dist/date/DateField.d.ts +1 -1
- package/dist/date/DateField.js.map +1 -1
- package/dist/date/index.d.ts +1 -1
- package/dist/daterange/DateRangeField.css +9 -0
- package/dist/daterange/DateRangeField.d.ts +31 -0
- package/dist/daterange/DateRangeField.d.ts.map +1 -0
- package/dist/daterange/DateRangeField.js +372 -0
- package/dist/daterange/DateRangeField.js.map +1 -0
- package/dist/daterange/DateRangeField.module.js +12 -0
- package/dist/daterange/DateRangeField.module.js.map +1 -0
- package/dist/daterange/index.d.ts +3 -0
- package/dist/daterange/index.d.ts.map +1 -0
- package/dist/daterange/index.js +3 -0
- package/dist/daterange/range.d.ts +61 -0
- package/dist/daterange/range.d.ts.map +1 -0
- package/dist/daterange/range.js +119 -0
- package/dist/daterange/range.js.map +1 -0
- package/dist/datetime/DateTimeField.d.ts +1 -1
- package/dist/datetime/DateTimeField.js +107 -20
- package/dist/datetime/DateTimeField.js.map +1 -1
- package/dist/datetime/index.d.ts +1 -1
- package/dist/duration/DurationField.css +11 -0
- package/dist/duration/DurationField.d.ts +67 -0
- package/dist/duration/DurationField.d.ts.map +1 -0
- package/dist/duration/DurationField.js +260 -0
- package/dist/duration/DurationField.js.map +1 -0
- package/dist/duration/DurationField.module.js +12 -0
- package/dist/duration/DurationField.module.js.map +1 -0
- package/dist/duration/index.d.ts +2 -0
- package/dist/duration/index.d.ts.map +1 -0
- package/dist/duration/index.js +1 -0
- package/dist/email/EmailField.d.ts +2 -2
- package/dist/email/EmailField.js.map +1 -1
- package/dist/email/index.d.ts +1 -1
- package/dist/embed/EmbedField.css +60 -0
- package/dist/embed/EmbedField.d.ts +29 -0
- package/dist/embed/EmbedField.d.ts.map +1 -0
- package/dist/embed/EmbedField.js +309 -0
- package/dist/embed/EmbedField.js.map +1 -0
- package/dist/embed/EmbedField.module.js +22 -0
- package/dist/embed/EmbedField.module.js.map +1 -0
- package/dist/embed/index.d.ts +3 -0
- package/dist/embed/index.d.ts.map +1 -0
- package/dist/embed/index.js +3 -0
- package/dist/file/FileField.css +54 -0
- package/dist/file/FileField.d.ts +50 -0
- package/dist/file/FileField.d.ts.map +1 -0
- package/dist/file/FileField.js +288 -0
- package/dist/file/FileField.js.map +1 -0
- package/dist/file/FileField.module.js +22 -0
- package/dist/file/FileField.module.js.map +1 -0
- package/dist/file/index.d.ts +3 -0
- package/dist/file/index.d.ts.map +1 -0
- package/dist/file/index.js +1 -0
- package/dist/group/GroupField.css +20 -3
- package/dist/group/GroupField.d.ts +10 -4
- package/dist/group/GroupField.d.ts.map +1 -1
- package/dist/group/GroupField.js +71 -66
- package/dist/group/GroupField.js.map +1 -1
- package/dist/group/GroupField.module.js +10 -2
- package/dist/group/GroupField.module.js.map +1 -1
- package/dist/group/index.d.ts +1 -1
- package/dist/index.d.ts +21 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -2
- package/dist/json/JsonField.css +7 -0
- package/dist/json/JsonField.d.ts +22 -0
- package/dist/json/JsonField.d.ts.map +1 -0
- package/dist/json/JsonField.js +207 -0
- package/dist/json/JsonField.js.map +1 -0
- package/dist/json/JsonField.module.js +8 -0
- package/dist/json/JsonField.module.js.map +1 -0
- package/dist/json/index.d.ts +2 -0
- package/dist/json/index.d.ts.map +1 -0
- package/dist/json/index.js +1 -0
- package/dist/link/LinkField.css +12 -0
- package/dist/link/LinkField.d.ts +38 -0
- package/dist/link/LinkField.d.ts.map +1 -0
- package/dist/link/LinkField.js +742 -0
- package/dist/link/LinkField.js.map +1 -0
- package/dist/link/LinkField.module.js +8 -0
- package/dist/link/LinkField.module.js.map +1 -0
- package/dist/link/index.d.ts +3 -0
- package/dist/link/index.d.ts.map +1 -0
- package/dist/link/index.js +3 -0
- package/dist/link/link.d.ts +30 -0
- package/dist/link/link.d.ts.map +1 -0
- package/dist/link/link.js +63 -0
- package/dist/link/link.js.map +1 -0
- package/dist/link/pages.d.ts +17 -0
- package/dist/link/pages.d.ts.map +1 -0
- package/dist/link/pages.js +104 -0
- package/dist/link/pages.js.map +1 -0
- package/dist/locales/index.js.map +1 -1
- package/dist/localized/LocalizedField.css +27 -6
- package/dist/localized/LocalizedField.d.ts +19 -8
- package/dist/localized/LocalizedField.d.ts.map +1 -1
- package/dist/localized/LocalizedField.js +238 -105
- package/dist/localized/LocalizedField.js.map +1 -1
- package/dist/localized/LocalizedField.module.js +10 -4
- package/dist/localized/LocalizedField.module.js.map +1 -1
- package/dist/localized/index.d.ts +1 -1
- package/dist/location/LocationField.css +54 -0
- package/dist/location/LocationField.d.ts +31 -0
- package/dist/location/LocationField.d.ts.map +1 -0
- package/dist/location/LocationField.js +487 -0
- package/dist/location/LocationField.js.map +1 -0
- package/dist/location/LocationField.module.js +22 -0
- package/dist/location/LocationField.module.js.map +1 -0
- package/dist/location/LocationMap.d.ts +25 -0
- package/dist/location/LocationMap.d.ts.map +1 -0
- package/dist/location/LocationMap.js +205 -0
- package/dist/location/LocationMap.js.map +1 -0
- package/dist/location/index.d.ts +5 -0
- package/dist/location/index.d.ts.map +1 -0
- package/dist/location/index.js +4 -0
- package/dist/location/leafletCss.d.ts +2 -0
- package/dist/location/leafletCss.d.ts.map +1 -0
- package/dist/location/leafletCss.js +6 -0
- package/dist/location/leafletCss.js.map +1 -0
- package/dist/location/nominatim.d.ts +23 -0
- package/dist/location/nominatim.d.ts.map +1 -0
- package/dist/location/nominatim.js +79 -0
- package/dist/location/nominatim.js.map +1 -0
- package/dist/location/search.d.ts +10 -0
- package/dist/location/search.d.ts.map +1 -0
- package/dist/location/search.js +83 -0
- package/dist/location/search.js.map +1 -0
- package/dist/location/types.d.ts +46 -0
- package/dist/location/types.d.ts.map +1 -0
- package/dist/missing/MissingField.d.ts +4 -3
- package/dist/missing/MissingField.d.ts.map +1 -1
- package/dist/missing/MissingField.js +3 -2
- package/dist/missing/MissingField.js.map +1 -1
- package/dist/money/MoneyField.d.ts +28 -0
- package/dist/money/MoneyField.d.ts.map +1 -0
- package/dist/money/MoneyField.js +269 -0
- package/dist/money/MoneyField.js.map +1 -0
- package/dist/money/index.d.ts +3 -0
- package/dist/money/index.d.ts.map +1 -0
- package/dist/money/index.js +3 -0
- package/dist/money/money.d.ts +27 -0
- package/dist/money/money.d.ts.map +1 -0
- package/dist/money/money.js +56 -0
- package/dist/money/money.js.map +1 -0
- package/dist/number/NumberField.d.ts +1 -1
- package/dist/number/NumberField.js.map +1 -1
- package/dist/number/index.d.ts +1 -1
- package/dist/range/RangeField.d.ts +22 -0
- package/dist/range/RangeField.d.ts.map +1 -0
- package/dist/range/RangeField.js +203 -0
- package/dist/range/RangeField.js.map +1 -0
- package/dist/range/index.d.ts +2 -0
- package/dist/range/index.d.ts.map +1 -0
- package/dist/range/index.js +1 -0
- package/dist/region/RegionField.d.ts +23 -0
- package/dist/region/RegionField.d.ts.map +1 -0
- package/dist/region/RegionField.js +174 -0
- package/dist/region/RegionField.js.map +1 -0
- package/dist/region/RegionFlag.css +9 -0
- package/dist/region/RegionFlag.d.ts +20 -0
- package/dist/region/RegionFlag.d.ts.map +1 -0
- package/dist/region/RegionFlag.js +61 -0
- package/dist/region/RegionFlag.js.map +1 -0
- package/dist/region/RegionFlag.module.js +8 -0
- package/dist/region/RegionFlag.module.js.map +1 -0
- package/dist/region/data.d.ts +5 -0
- package/dist/region/data.d.ts.map +1 -0
- package/dist/region/data.js +513 -0
- package/dist/region/data.js.map +1 -0
- package/dist/region/flags/CA.d.ts +4 -0
- package/dist/region/flags/CA.d.ts.map +1 -0
- package/dist/region/flags/CA.js +21 -0
- package/dist/region/flags/CA.js.map +1 -0
- package/dist/region/flags/US.d.ts +4 -0
- package/dist/region/flags/US.d.ts.map +1 -0
- package/dist/region/flags/US.js +65 -0
- package/dist/region/flags/US.js.map +1 -0
- package/dist/region/flags.d.ts +17 -0
- package/dist/region/flags.d.ts.map +1 -0
- package/dist/region/flags.js +84 -0
- package/dist/region/flags.js.map +1 -0
- package/dist/region/index.d.ts +5 -0
- package/dist/region/index.d.ts.map +1 -0
- package/dist/region/index.js +5 -0
- package/dist/region/regions.d.ts +15 -0
- package/dist/region/regions.d.ts.map +1 -0
- package/dist/region/regions.js +29 -0
- package/dist/region/regions.js.map +1 -0
- package/dist/relation/RelationField.d.ts +2 -2
- package/dist/relation/RelationField.d.ts.map +1 -1
- package/dist/relation/RelationField.js +511 -171
- package/dist/relation/RelationField.js.map +1 -1
- package/dist/relation/index.d.ts +2 -2
- package/dist/repeater/RepeaterField.d.ts +13 -2
- package/dist/repeater/RepeaterField.d.ts.map +1 -1
- package/dist/repeater/RepeaterField.js +138 -50
- package/dist/repeater/RepeaterField.js.map +1 -1
- package/dist/repeater/index.d.ts +1 -1
- package/dist/select/SelectField.d.ts +1 -1
- package/dist/select/SelectField.js.map +1 -1
- package/dist/select/index.d.ts +1 -1
- package/dist/sessions/SessionsField.d.ts +15 -0
- package/dist/sessions/SessionsField.d.ts.map +1 -0
- package/dist/sessions/SessionsField.js +49 -0
- package/dist/sessions/SessionsField.js.map +1 -0
- package/dist/sessions/index.d.ts +4 -0
- package/dist/sessions/index.d.ts.map +1 -0
- package/dist/sessions/index.js +1 -0
- package/dist/shared/CodeComboBox.d.ts +21 -0
- package/dist/shared/CodeComboBox.d.ts.map +1 -0
- package/dist/shared/CodeComboBox.js +238 -0
- package/dist/shared/CodeComboBox.js.map +1 -0
- package/dist/shared/DefinitionField.d.ts +9 -4
- package/dist/shared/DefinitionField.d.ts.map +1 -1
- package/dist/shared/DefinitionField.js +98 -78
- package/dist/shared/DefinitionField.js.map +1 -1
- package/dist/shared/builtIn.d.ts +7 -3
- package/dist/shared/builtIn.d.ts.map +1 -1
- package/dist/shared/builtIn.js +39 -7
- package/dist/shared/builtIn.js.map +1 -1
- package/dist/shared/check.d.ts +27 -0
- package/dist/shared/check.d.ts.map +1 -0
- package/dist/shared/check.js +18 -0
- package/dist/shared/check.js.map +1 -0
- package/dist/shared/context.d.ts +33 -5
- package/dist/shared/context.d.ts.map +1 -1
- package/dist/shared/context.js +36 -20
- package/dist/shared/context.js.map +1 -1
- package/dist/shared/cx.js.map +1 -1
- package/dist/shared/dates.js +2 -2
- package/dist/shared/dates.js.map +1 -1
- package/dist/shared/embed.d.ts +19 -0
- package/dist/shared/embed.d.ts.map +1 -0
- package/dist/shared/embed.js +14 -0
- package/dist/shared/embed.js.map +1 -0
- package/dist/shared/entry.d.ts +13 -4
- package/dist/shared/entry.d.ts.map +1 -1
- package/dist/shared/entry.js +24 -7
- package/dist/shared/entry.js.map +1 -1
- package/dist/shared/flow.d.ts +8 -0
- package/dist/shared/flow.d.ts.map +1 -0
- package/dist/shared/flow.js +38 -0
- package/dist/shared/flow.js.map +1 -0
- package/dist/shared/part.d.ts +26 -0
- package/dist/shared/part.d.ts.map +1 -0
- package/dist/shared/part.js +64 -0
- package/dist/shared/part.js.map +1 -0
- package/dist/shared/relation.js.map +1 -1
- package/dist/shared/reveal.d.ts +16 -0
- package/dist/shared/reveal.d.ts.map +1 -0
- package/dist/shared/reveal.js +46 -0
- package/dist/shared/reveal.js.map +1 -0
- package/dist/shared/types.d.ts +12 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/slug/SlugField.css +18 -0
- package/dist/slug/SlugField.d.ts +33 -5
- package/dist/slug/SlugField.d.ts.map +1 -1
- package/dist/slug/SlugField.js +346 -126
- package/dist/slug/SlugField.js.map +1 -1
- package/dist/slug/SlugField.module.js +14 -0
- package/dist/slug/SlugField.module.js.map +1 -0
- package/dist/slug/index.d.ts +1 -1
- package/dist/slug/index.d.ts.map +1 -1
- package/dist/slug/index.js +1 -1
- package/dist/tags/TagsField.d.ts +17 -0
- package/dist/tags/TagsField.d.ts.map +1 -0
- package/dist/tags/TagsField.js +120 -0
- package/dist/tags/TagsField.js.map +1 -0
- package/dist/tags/index.d.ts +2 -0
- package/dist/tags/index.d.ts.map +1 -0
- package/dist/tags/index.js +1 -0
- package/dist/tel/TelField.css +25 -0
- package/dist/tel/TelField.d.ts +34 -0
- package/dist/tel/TelField.d.ts.map +1 -0
- package/dist/tel/TelField.js +390 -0
- package/dist/tel/TelField.js.map +1 -0
- package/dist/tel/TelField.module.js +12 -0
- package/dist/tel/TelField.module.js.map +1 -0
- package/dist/tel/index.d.ts +3 -0
- package/dist/tel/index.d.ts.map +1 -0
- package/dist/tel/index.js +3 -0
- package/dist/tel/phone.d.ts +59 -0
- package/dist/tel/phone.d.ts.map +1 -0
- package/dist/tel/phone.js +107 -0
- package/dist/tel/phone.js.map +1 -0
- package/dist/text/TextField.d.ts +12 -4
- package/dist/text/TextField.d.ts.map +1 -1
- package/dist/text/TextField.js +104 -60
- package/dist/text/TextField.js.map +1 -1
- package/dist/text/index.d.ts +1 -1
- package/dist/textarea/TextAreaField.d.ts +1 -1
- package/dist/textarea/TextAreaField.js.map +1 -1
- package/dist/textarea/index.d.ts +1 -1
- package/dist/time/TimeField.d.ts +1 -1
- package/dist/time/TimeField.js +64 -10
- package/dist/time/TimeField.js.map +1 -1
- package/dist/time/index.d.ts +1 -1
- package/dist/upload/FilePicker.css +24 -0
- package/dist/upload/FilePicker.d.ts +14 -0
- package/dist/upload/FilePicker.d.ts.map +1 -0
- package/dist/upload/FilePicker.js +130 -0
- package/dist/upload/FilePicker.js.map +1 -0
- package/dist/upload/FilePicker.module.js +12 -0
- package/dist/upload/FilePicker.module.js.map +1 -0
- package/dist/upload/UploadList.css +93 -0
- package/dist/upload/UploadList.d.ts +18 -0
- package/dist/upload/UploadList.d.ts.map +1 -0
- package/dist/upload/UploadList.js +144 -0
- package/dist/upload/UploadList.js.map +1 -0
- package/dist/upload/UploadList.module.js +32 -0
- package/dist/upload/UploadList.module.js.map +1 -0
- package/dist/upload/files.d.ts +5 -0
- package/dist/upload/files.d.ts.map +1 -0
- package/dist/upload/files.js +26 -0
- package/dist/upload/files.js.map +1 -0
- package/dist/upload/types.d.ts +58 -0
- package/dist/upload/types.d.ts.map +1 -0
- package/dist/upload/useRejectionMessage.d.ts +4 -0
- package/dist/upload/useRejectionMessage.d.ts.map +1 -0
- package/dist/upload/useRejectionMessage.js +25 -0
- package/dist/upload/useRejectionMessage.js.map +1 -0
- package/dist/upload/useUploads.d.ts +30 -0
- package/dist/upload/useUploads.d.ts.map +1 -0
- package/dist/upload/useUploads.js +115 -0
- package/dist/upload/useUploads.js.map +1 -0
- package/dist/uppy/index.d.ts +3 -0
- package/dist/uppy/index.d.ts.map +1 -0
- package/dist/uppy/index.js +1 -0
- package/dist/uppy/uploader.d.ts +44 -0
- package/dist/uppy/uploader.d.ts.map +1 -0
- package/dist/uppy/uploader.js +139 -0
- package/dist/uppy/uploader.js.map +1 -0
- package/dist/url/UrlField.d.ts +2 -2
- package/dist/url/UrlField.d.ts.map +1 -1
- package/dist/url/UrlField.js +69 -14
- package/dist/url/UrlField.js.map +1 -1
- package/dist/url/index.d.ts +1 -1
- package/package.json +110 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range.js","names":["DateRangeOpenBound","DateRangeFieldValue","start","end","allDay","timeZone","DateRangeSettings","time","open","chooseTimeZone","DAY","isBound","value","undefined","isDateRangeValue","Array","isArray","getDateRangeSettings","settings","Record","isTimeZone","zone","Intl","DateTimeFormat","getTimeZones","zones","supportedValuesOf","filter","pad","length","String","padStart","dayIn","date","Date","parts","year","month","day","formatToParts","part","type","Number","find","entry","getBoundDay","bound","test","isNaN","getTime","getRangeDays","fieldTimeZone","first","last","FormattedDateRange","kind","text","formatDateRange","locale","bounds","map","days","every","toDate","local","resolvedOptions","format","hour","minute","timeZoneName","dates","some","from","to","formatRange"],"sources":["../../src/daterange/range.ts"],"sourcesContent":["import type { DateRangeOpenBound } from '@panneau/protocol/runtime';\n\n/**\n * A `daterange` value as a field holds it (decision 0053): days (`2026-11-04`) or date-times with\n * an offset, either `null` while it is empty, with `allDay` for an all-day range and the `timeZone`\n * the user chose.\n */\nexport interface DateRangeFieldValue {\n start: string | null;\n end: string | null;\n allDay?: boolean;\n timeZone?: string;\n}\n\n/** The settings of a `daterange` field, from its definition. */\nexport interface DateRangeSettings {\n /** The bounds are date-times. */\n time: boolean;\n /** The field has an \"All day\" switch. */\n allDay: boolean;\n /** The bounds that can be `null`. */\n open: DateRangeOpenBound | null;\n /** The time zone the date-times are shown and typed in. */\n timeZone: string | null;\n /** The field has a menu of time zones, kept in the value. */\n chooseTimeZone: boolean;\n}\n\nconst DAY = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nconst isBound = (value: unknown): value is string | null =>\n value === null || value === undefined || typeof value === 'string';\n\n/** Whether a value is a `daterange` value: an object with a start and an end. */\nexport function isDateRangeValue(value: unknown): value is DateRangeFieldValue {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n ('start' in value || 'end' in value) &&\n isBound((value as { start?: unknown }).start) &&\n isBound((value as { end?: unknown }).end)\n );\n}\n\n/** The settings of a `daterange` field (`settings.time`, `allDay`, `open`, `timeZone`…). */\nexport function getDateRangeSettings(\n settings: Record<string, unknown> | undefined,\n): DateRangeSettings {\n const open = settings?.open;\n const timeZone = settings?.timeZone;\n return {\n time: settings?.time === true,\n allDay: settings?.allDay === true && settings.time === true,\n open: open === 'start' || open === 'end' || open === 'both' ? open : null,\n timeZone: typeof timeZone === 'string' && isTimeZone(timeZone) ? timeZone : null,\n chooseTimeZone: settings?.chooseTimeZone === true && settings.time === true,\n };\n}\n\n/** Whether a string is an IANA time zone that the browser knows (`America/Toronto`). */\nexport function isTimeZone(zone: string): boolean {\n try {\n new Intl.DateTimeFormat('en', { timeZone: zone });\n return true;\n } catch {\n return false;\n }\n}\n\n/** The time zones the browser knows, `UTC` first. */\nexport function getTimeZones(): string[] {\n const zones =\n typeof Intl.supportedValuesOf === 'function' ? Intl.supportedValuesOf('timeZone') : [];\n return ['UTC', ...zones.filter((zone) => zone !== 'UTC')];\n}\n\nfunction pad(value: number, length = 2): string {\n return String(value).padStart(length, '0');\n}\n\n/** The day of a date-time in a time zone (the browser's without one), as `2026-11-04`. */\nfunction dayIn(date: Date, timeZone: string | undefined): string {\n const parts = new Intl.DateTimeFormat('en-US', {\n timeZone,\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n }).formatToParts(date);\n const part = (type: string) => Number(parts.find((entry) => entry.type === type)?.value);\n return `${pad(part('year'), 4)}-${pad(part('month'))}-${pad(part('day'))}`;\n}\n\n/** The day of a bound: a day as it is, a date-time in the time zone. `null` when invalid. */\nexport function getBoundDay(bound: string | null | undefined, timeZone?: string): string | null {\n if (bound === null || bound === undefined || bound === '') {\n return null;\n }\n if (DAY.test(bound)) {\n return bound;\n }\n const date = new Date(bound);\n return Number.isNaN(date.getTime()) ? null : dayIn(date, timeZone);\n}\n\n/**\n * The first and the last day of a range, in its time zone: the value's, the field's, or the\n * browser's. A day bound is that day.\n */\nexport function getRangeDays(\n value: unknown,\n fieldTimeZone?: string | null,\n): { first: string | null; last: string | null } {\n if (!isDateRangeValue(value)) {\n return { first: null, last: null };\n }\n const zone = value.timeZone ?? fieldTimeZone ?? undefined;\n return { first: getBoundDay(value.start, zone), last: getBoundDay(value.end, zone) };\n}\n\n/** A range in a locale: both bounds, or one of them for a range open at the other end. */\nexport type FormattedDateRange =\n | { kind: 'range'; text: string }\n | { kind: 'from'; text: string }\n | { kind: 'until'; text: string };\n\n/**\n * A range in the format of a locale, with `Intl.DateTimeFormat.formatRange`: `Nov 4 – 6, 2026`,\n * `Nov 4, 2026, 7:30 – 9:00 PM`. Date-times show in the zone of the value, or the field's, with\n * the zone's short name when it isn't the browser's. `null` for an empty or invalid value.\n */\nexport function formatDateRange(\n value: unknown,\n locale: string,\n fieldTimeZone?: string | null,\n): FormattedDateRange | null {\n if (!isDateRangeValue(value)) {\n return null;\n }\n const bounds = [value.start, value.end].map((bound) =>\n bound === null || bound === undefined || bound === '' ? null : bound,\n );\n const days = bounds.every((bound) => bound === null || DAY.test(bound));\n const toDate = (bound: string) => new Date(DAY.test(bound) ? `${bound}T00:00:00Z` : bound);\n const local = Intl.DateTimeFormat().resolvedOptions().timeZone;\n const zone = value.timeZone ?? fieldTimeZone ?? undefined;\n const format = new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n ...(days\n ? { timeZone: 'UTC' }\n : {\n hour: 'numeric',\n minute: '2-digit',\n ...(zone !== undefined ? { timeZone: zone } : {}),\n ...(zone !== undefined && zone !== local ? { timeZoneName: 'short' } : {}),\n }),\n });\n const dates = bounds.map((bound) => (bound !== null ? toDate(bound) : null));\n if (dates.some((date) => date !== null && Number.isNaN(date.getTime()))) {\n return null;\n }\n const [from, to] = dates;\n if (from !== null && from !== undefined && to !== null && to !== undefined) {\n try {\n return { kind: 'range', text: format.formatRange(from, to) };\n } catch {\n // An end before its start, which some engines refuse to format as a range.\n return { kind: 'range', text: `${format.format(from)} – ${format.format(to)}` };\n }\n }\n if (from !== null && from !== undefined) {\n return { kind: 'from', text: format.format(from) };\n }\n if (to !== null && to !== undefined) {\n return { kind: 'until', text: format.format(to) };\n }\n return null;\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FieldEntryProps, FieldProps } from '../shared/types';
|
|
1
|
+
import type { FieldEntryProps, FieldProps } from '../shared/types.js';
|
|
2
2
|
export interface DateTimeFieldProps extends FieldProps<string> {
|
|
3
3
|
/**
|
|
4
4
|
* Time zone the date and time are shown and typed in, for values with an offset. Defaults to
|
|
@@ -10,28 +10,115 @@ import { getLocalTimeZone, now } from "@internationalized/date";
|
|
|
10
10
|
* the time zone of the browser and written back in UTC. Values without one
|
|
11
11
|
* (`2026-10-15T09:30:00`) are kept without one.
|
|
12
12
|
*/
|
|
13
|
-
function DateTimeField(
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
13
|
+
function DateTimeField(t0) {
|
|
14
|
+
const $ = c(34);
|
|
15
|
+
let disabled;
|
|
16
|
+
let onChange;
|
|
17
|
+
let props;
|
|
18
|
+
let readOnly;
|
|
19
|
+
let required;
|
|
20
|
+
let t1;
|
|
21
|
+
let t2;
|
|
22
|
+
let value;
|
|
23
|
+
if ($[0] !== t0) {
|
|
24
|
+
({value, onChange, timeZone: t1, withSeconds: t2, disabled, readOnly, required, ...props} = t0);
|
|
25
|
+
$[0] = t0;
|
|
26
|
+
$[1] = disabled;
|
|
27
|
+
$[2] = onChange;
|
|
28
|
+
$[3] = props;
|
|
29
|
+
$[4] = readOnly;
|
|
30
|
+
$[5] = required;
|
|
31
|
+
$[6] = t1;
|
|
32
|
+
$[7] = t2;
|
|
33
|
+
$[8] = value;
|
|
34
|
+
} else {
|
|
35
|
+
disabled = $[1];
|
|
36
|
+
onChange = $[2];
|
|
37
|
+
props = $[3];
|
|
38
|
+
readOnly = $[4];
|
|
39
|
+
required = $[5];
|
|
40
|
+
t1 = $[6];
|
|
41
|
+
t2 = $[7];
|
|
42
|
+
value = $[8];
|
|
43
|
+
}
|
|
44
|
+
let T0;
|
|
45
|
+
let t3;
|
|
46
|
+
let t4;
|
|
47
|
+
let t5;
|
|
48
|
+
let t6;
|
|
49
|
+
let t7;
|
|
50
|
+
let t8;
|
|
51
|
+
if ($[9] !== onChange || $[10] !== props || $[11] !== t1 || $[12] !== t2 || $[13] !== value) {
|
|
52
|
+
const timeZone = t1 === void 0 ? getLocalTimeZone() : t1;
|
|
53
|
+
const withSeconds = t2 === void 0 ? false : t2;
|
|
54
|
+
const current = toDateTime(value, timeZone);
|
|
55
|
+
T0 = DatePicker;
|
|
56
|
+
t3 = props;
|
|
57
|
+
t4 = withSeconds ? "second" : "minute";
|
|
58
|
+
t5 = true;
|
|
59
|
+
t6 = current;
|
|
60
|
+
if ($[21] !== onChange) {
|
|
61
|
+
t7 = (next) => {
|
|
62
|
+
if (next === null) {
|
|
63
|
+
onChange?.(null);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if ("hour" in next) onChange?.(fromDateTime(next));
|
|
67
|
+
};
|
|
68
|
+
$[21] = onChange;
|
|
69
|
+
$[22] = t7;
|
|
70
|
+
} else t7 = $[22];
|
|
71
|
+
t8 = current ?? now(timeZone).set({
|
|
28
72
|
second: 0,
|
|
29
73
|
millisecond: 0
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
74
|
+
});
|
|
75
|
+
$[9] = onChange;
|
|
76
|
+
$[10] = props;
|
|
77
|
+
$[11] = t1;
|
|
78
|
+
$[12] = t2;
|
|
79
|
+
$[13] = value;
|
|
80
|
+
$[14] = T0;
|
|
81
|
+
$[15] = t3;
|
|
82
|
+
$[16] = t4;
|
|
83
|
+
$[17] = t5;
|
|
84
|
+
$[18] = t6;
|
|
85
|
+
$[19] = t7;
|
|
86
|
+
$[20] = t8;
|
|
87
|
+
} else {
|
|
88
|
+
T0 = $[14];
|
|
89
|
+
t3 = $[15];
|
|
90
|
+
t4 = $[16];
|
|
91
|
+
t5 = $[17];
|
|
92
|
+
t6 = $[18];
|
|
93
|
+
t7 = $[19];
|
|
94
|
+
t8 = $[20];
|
|
95
|
+
}
|
|
96
|
+
let t9;
|
|
97
|
+
if ($[23] !== T0 || $[24] !== disabled || $[25] !== readOnly || $[26] !== required || $[27] !== t3 || $[28] !== t4 || $[29] !== t5 || $[30] !== t6 || $[31] !== t7 || $[32] !== t8) {
|
|
98
|
+
t9 = /* @__PURE__ */ jsx(T0, {
|
|
99
|
+
...t3,
|
|
100
|
+
granularity: t4,
|
|
101
|
+
hideTimeZone: t5,
|
|
102
|
+
value: t6,
|
|
103
|
+
onChange: t7,
|
|
104
|
+
placeholderValue: t8,
|
|
105
|
+
isDisabled: disabled,
|
|
106
|
+
isReadOnly: readOnly,
|
|
107
|
+
isRequired: required
|
|
108
|
+
});
|
|
109
|
+
$[23] = T0;
|
|
110
|
+
$[24] = disabled;
|
|
111
|
+
$[25] = readOnly;
|
|
112
|
+
$[26] = required;
|
|
113
|
+
$[27] = t3;
|
|
114
|
+
$[28] = t4;
|
|
115
|
+
$[29] = t5;
|
|
116
|
+
$[30] = t6;
|
|
117
|
+
$[31] = t7;
|
|
118
|
+
$[32] = t8;
|
|
119
|
+
$[33] = t9;
|
|
120
|
+
} else t9 = $[33];
|
|
121
|
+
return t9;
|
|
35
122
|
}
|
|
36
123
|
/** The `datetime` type: setting `timeZone`. */
|
|
37
124
|
function DateTimeFieldEntry(props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeField.js","names":["_c"],"sources":["../../src/datetime/DateTimeField.tsx"],"sourcesContent":["import { getLocalTimeZone, now } from '@internationalized/date';\n\nimport { DatePicker } from '@panneau/ui';\n\nimport { fromDateTime, toDateTime } from '../shared/dates';\nimport { getFieldProps, getSetting, isString } from '../shared/entry';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\n\nexport interface DateTimeFieldProps extends FieldProps<string> {\n /**\n * Time zone the date and time are shown and typed in, for values with an offset. Defaults to\n * the browser's.\n */\n timeZone?: string;\n /** Shows seconds. */\n withSeconds?: boolean;\n /** Defaults to the locale's. */\n hourCycle?: 12 | 24;\n controlClassName?: string;\n}\n\n/**\n * A date and a time as an ISO string. Values with an offset (`2026-10-15T13:30:00Z`) are shown in\n * the time zone of the browser and written back in UTC. Values without one\n * (`2026-10-15T09:30:00`) are kept without one.\n */\nexport function DateTimeField({\n value,\n onChange,\n timeZone = getLocalTimeZone(),\n withSeconds = false,\n disabled,\n readOnly,\n required,\n ...props\n}: DateTimeFieldProps) {\n const current = toDateTime(value, timeZone);\n return (\n <DatePicker\n {...props}\n granularity={withSeconds ? 'second' : 'minute'}\n hideTimeZone\n value={current}\n onChange={(next) => {\n if (next === null) {\n onChange?.(null);\n return;\n }\n if ('hour' in next) {\n onChange?.(fromDateTime(next));\n }\n }}\n // Typed from empty, a value is in the field's time zone, and written in UTC.\n placeholderValue={current ?? now(timeZone).set({ second: 0, millisecond: 0 })}\n isDisabled={disabled}\n isReadOnly={readOnly}\n isRequired={required}\n />\n );\n}\n\n/** The `datetime` type: setting `timeZone`. */\nexport function DateTimeFieldEntry(props: FieldEntryProps) {\n const timeZone = getSetting(props.field, 'timeZone', isString);\n return (\n <DateTimeField\n {...getFieldProps(props)}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n {...(timeZone !== undefined ? { timeZone } : {})}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;AA0BA,
|
|
1
|
+
{"version":3,"file":"DateTimeField.js","names":["getLocalTimeZone","now","DatePicker","fromDateTime","toDateTime","getFieldProps","getSetting","isString","FieldEntryProps","FieldProps","DateTimeFieldProps","timeZone","withSeconds","hourCycle","controlClassName","DateTimeField","t0","$","_c","disabled","onChange","props","readOnly","required","t1","t2","value","T0","t3","t4","t5","t6","t7","t8","undefined","current","next","set","second","millisecond","t9","DateTimeFieldEntry","field","_c"],"sources":["../../src/datetime/DateTimeField.tsx"],"sourcesContent":["import { getLocalTimeZone, now } from '@internationalized/date';\n\nimport { DatePicker } from '@panneau/ui';\n\nimport { fromDateTime, toDateTime } from '../shared/dates';\nimport { getFieldProps, getSetting, isString } from '../shared/entry';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\n\nexport interface DateTimeFieldProps extends FieldProps<string> {\n /**\n * Time zone the date and time are shown and typed in, for values with an offset. Defaults to\n * the browser's.\n */\n timeZone?: string;\n /** Shows seconds. */\n withSeconds?: boolean;\n /** Defaults to the locale's. */\n hourCycle?: 12 | 24;\n controlClassName?: string;\n}\n\n/**\n * A date and a time as an ISO string. Values with an offset (`2026-10-15T13:30:00Z`) are shown in\n * the time zone of the browser and written back in UTC. Values without one\n * (`2026-10-15T09:30:00`) are kept without one.\n */\nexport function DateTimeField({\n value,\n onChange,\n timeZone = getLocalTimeZone(),\n withSeconds = false,\n disabled,\n readOnly,\n required,\n ...props\n}: DateTimeFieldProps) {\n const current = toDateTime(value, timeZone);\n return (\n <DatePicker\n {...props}\n granularity={withSeconds ? 'second' : 'minute'}\n hideTimeZone\n value={current}\n onChange={(next) => {\n if (next === null) {\n onChange?.(null);\n return;\n }\n if ('hour' in next) {\n onChange?.(fromDateTime(next));\n }\n }}\n // Typed from empty, a value is in the field's time zone, and written in UTC.\n placeholderValue={current ?? now(timeZone).set({ second: 0, millisecond: 0 })}\n isDisabled={disabled}\n isReadOnly={readOnly}\n isRequired={required}\n />\n );\n}\n\n/** The `datetime` type: setting `timeZone`. */\nexport function DateTimeFieldEntry(props: FieldEntryProps) {\n const timeZone = getSetting(props.field, 'timeZone', isString);\n return (\n <DateTimeField\n {...getFieldProps(props)}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n {...(timeZone !== undefined ? { timeZone } : {})}\n />\n );\n}\n"],"mappings":"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"}
|
package/dist/datetime/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { DateTimeField, DateTimeFieldEntry, type DateTimeFieldProps } from './DateTimeField';
|
|
1
|
+
export { DateTimeField, DateTimeFieldEntry, type DateTimeFieldProps } from './DateTimeField.js';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* The parts of the duration side by side: days, hours, minutes and seconds. */
|
|
2
|
+
.panneau-duration-field-parts {
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-wrap: wrap;
|
|
5
|
+
gap: var(--panneau-space-2);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.panneau-duration-field-part {
|
|
9
|
+
flex: 0 1 7rem;
|
|
10
|
+
min-width: 5rem;
|
|
11
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { Field } from '@panneau/protocol';
|
|
2
|
+
import { type DurationUnit } from '@panneau/protocol/runtime';
|
|
3
|
+
import type { FieldEntryProps, FieldProps } from '../shared/types.js';
|
|
4
|
+
export type { DurationUnit };
|
|
5
|
+
/**
|
|
6
|
+
* The unit of a duration's value and the parts that show it (decision 0056). Every unit is
|
|
7
|
+
* `seconds`, `minutes`, `hours` or `days`, and a day is 24 hours.
|
|
8
|
+
*/
|
|
9
|
+
export interface DurationUnits {
|
|
10
|
+
/** The unit of the value, a whole number: `seconds` by default. */
|
|
11
|
+
unit?: DurationUnit;
|
|
12
|
+
/** The smallest part shown. Defaults to `unit`; a precision finer than `unit` is raised to it. */
|
|
13
|
+
precision?: DurationUnit;
|
|
14
|
+
/**
|
|
15
|
+
* The largest part shown, which has no upper bound. Defaults to the larger of `hours` and
|
|
16
|
+
* `precision`; a largest unit smaller than `precision` is raised to it.
|
|
17
|
+
*/
|
|
18
|
+
largestUnit?: DurationUnit;
|
|
19
|
+
}
|
|
20
|
+
/** The parts of a duration, from its largest unit to its precision. */
|
|
21
|
+
export type DurationParts = Partial<Record<DurationUnit, number>>;
|
|
22
|
+
/** Options of `formatDuration()`. */
|
|
23
|
+
export interface FormatDurationOptions extends DurationUnits {
|
|
24
|
+
/** The abbreviations of the units: `d`, `h`, `min` and `s` by default. */
|
|
25
|
+
labels?: Partial<Record<DurationUnit, string>>;
|
|
26
|
+
}
|
|
27
|
+
/** Whether a value is a unit of a duration: `seconds`, `minutes`, `hours` or `days`. */
|
|
28
|
+
export declare function isDurationUnit(value: unknown): value is DurationUnit;
|
|
29
|
+
/**
|
|
30
|
+
* The units of a duration with their defaults: `seconds` for the value, a precision of the unit
|
|
31
|
+
* of the value, and a largest unit of `hours` or the precision, whichever is larger.
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveDurationUnits({ unit, precision, largestUnit, }?: DurationUnits): Required<DurationUnits>;
|
|
34
|
+
/** The units of a `duration` field, from its settings `unit`, `precision` and `largestUnit`. */
|
|
35
|
+
export declare function getDurationUnits(field: Field): DurationUnits;
|
|
36
|
+
/**
|
|
37
|
+
* The parts of a duration, from its largest unit to its precision: hours, minutes and seconds of
|
|
38
|
+
* a number of seconds by default. The largest part takes what the larger units would have held
|
|
39
|
+
* (`48` hours for 2 days), and what is finer than the precision is dropped.
|
|
40
|
+
*/
|
|
41
|
+
export declare function splitDuration(seconds: number): {
|
|
42
|
+
hours: number;
|
|
43
|
+
minutes: number;
|
|
44
|
+
seconds: number;
|
|
45
|
+
};
|
|
46
|
+
/** The parts of a duration in `units.unit`, from `units.largestUnit` to `units.precision`. */
|
|
47
|
+
export declare function splitDuration(value: number, units: DurationUnits): DurationParts;
|
|
48
|
+
/**
|
|
49
|
+
* A duration with its units, without the empty ones: `1 h 5 min 30 s`, `3 min`, `2 d 4 h`. The
|
|
50
|
+
* value is in `unit` (seconds by default), and is rounded to the precision.
|
|
51
|
+
*/
|
|
52
|
+
export declare function formatDuration(value: number, options?: FormatDurationOptions): string;
|
|
53
|
+
/** Props of `DurationField`: those of every field, and the units of the duration. */
|
|
54
|
+
export interface DurationFieldProps extends FieldProps<number>, DurationUnits {
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* A duration, a whole number of `unit` (seconds by default), typed in parts from `largestUnit`
|
|
58
|
+
* to `precision`: hours, minutes and seconds by default. The largest part has no upper bound.
|
|
59
|
+
* It is `null` while every part is empty.
|
|
60
|
+
*/
|
|
61
|
+
export declare function DurationField({ value, onChange, onBlur, unit: unitProp, precision: precisionProp, largestUnit: largestUnitProp, label, description, errors, disabled, readOnly, required, name, className, }: DurationFieldProps): import("react").JSX.Element;
|
|
62
|
+
/**
|
|
63
|
+
* The `duration` type: a whole number of `settings.unit`, with settings `precision` and
|
|
64
|
+
* `largestUnit` for the parts its input shows.
|
|
65
|
+
*/
|
|
66
|
+
export declare function DurationFieldEntry(props: FieldEntryProps): import("react").JSX.Element;
|
|
67
|
+
//# sourceMappingURL=DurationField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DurationField.d.ts","sourceRoot":"","sources":["../../src/duration/DurationField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAK9E,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGnE,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B,mEAAmE;IACnE,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,kGAAkG;IAClG,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,YAAY,CAAC;CAC9B;AAED,uEAAuE;AACvE,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;AAElE,qCAAqC;AACrC,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IACxD,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;CAClD;AAmBD,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,IAAgB,EAChB,SAAS,EACT,WAAW,GACd,GAAE,aAAkB,GAAG,QAAQ,CAAC,aAAa,CAAC,CAG9C;AAED,gGAAgG;AAChG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa,CAS5D;AAOD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AACpG,8FAA8F;AAC9F,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,aAAa,CAAC;AAalF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,MAAM,CAUzF;AAED,qFAAqF;AACrF,MAAM,WAAW,kBAAmB,SAAQ,UAAU,CAAC,MAAM,CAAC,EAAE,aAAa;CAAG;AAEhF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,aAAa,EACxB,WAAW,EAAE,eAAe,EAC5B,KAAK,EACL,WAAW,EACX,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,SAAS,GACZ,EAAE,kBAAkB,+BA4DpB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,+BAUxD"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { getFieldProps, getSetting, isNumber } from "../shared/entry.js";
|
|
2
|
+
import { messages } from "../shared/messages.js";
|
|
3
|
+
import DurationField_module_default from "./DurationField.module.js";
|
|
4
|
+
import { c } from "react/compiler-runtime";
|
|
5
|
+
import { DURATION_UNITS } from "@panneau/protocol/runtime";
|
|
6
|
+
import { Fieldset, NumberInput, usePanneauIntl } from "@panneau/ui";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
//#region src/duration/DurationField.tsx
|
|
9
|
+
var SECONDS = {
|
|
10
|
+
seconds: 1,
|
|
11
|
+
minutes: 60,
|
|
12
|
+
hours: 3600,
|
|
13
|
+
days: 86400
|
|
14
|
+
};
|
|
15
|
+
var LABELS = {
|
|
16
|
+
days: "d",
|
|
17
|
+
hours: "h",
|
|
18
|
+
minutes: "min",
|
|
19
|
+
seconds: "s"
|
|
20
|
+
};
|
|
21
|
+
var rank = (unit) => DURATION_UNITS.indexOf(unit);
|
|
22
|
+
var larger = (a, b) => rank(a) >= rank(b) ? a : b;
|
|
23
|
+
/** Whether a value is a unit of a duration: `seconds`, `minutes`, `hours` or `days`. */
|
|
24
|
+
function isDurationUnit(value) {
|
|
25
|
+
return typeof value === "string" && DURATION_UNITS.includes(value);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The units of a duration with their defaults: `seconds` for the value, a precision of the unit
|
|
29
|
+
* of the value, and a largest unit of `hours` or the precision, whichever is larger.
|
|
30
|
+
*/
|
|
31
|
+
function resolveDurationUnits({ unit = "seconds", precision, largestUnit } = {}) {
|
|
32
|
+
const smallest = larger(precision ?? unit, unit);
|
|
33
|
+
return {
|
|
34
|
+
unit,
|
|
35
|
+
precision: smallest,
|
|
36
|
+
largestUnit: larger(largestUnit ?? "hours", smallest)
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/** The units of a `duration` field, from its settings `unit`, `precision` and `largestUnit`. */
|
|
40
|
+
function getDurationUnits(field) {
|
|
41
|
+
const unit = getSetting(field, "unit", isDurationUnit);
|
|
42
|
+
const precision = getSetting(field, "precision", isDurationUnit);
|
|
43
|
+
const largestUnit = getSetting(field, "largestUnit", isDurationUnit);
|
|
44
|
+
return {
|
|
45
|
+
...unit !== void 0 ? { unit } : {},
|
|
46
|
+
...precision !== void 0 ? { precision } : {},
|
|
47
|
+
...largestUnit !== void 0 ? { largestUnit } : {}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/** The units from the largest to the smallest, both included. */
|
|
51
|
+
function unitsBetween(largest, smallest) {
|
|
52
|
+
return DURATION_UNITS.slice(rank(smallest), rank(largest) + 1).reverse();
|
|
53
|
+
}
|
|
54
|
+
function splitDuration(value, units = {}) {
|
|
55
|
+
const { unit, precision, largestUnit } = resolveDurationUnits(units);
|
|
56
|
+
let rest = Math.max(0, Math.round(value)) * SECONDS[unit];
|
|
57
|
+
const parts = {};
|
|
58
|
+
for (const part of unitsBetween(largestUnit, precision)) {
|
|
59
|
+
const count = Math.floor(rest / SECONDS[part]);
|
|
60
|
+
parts[part] = count;
|
|
61
|
+
rest -= count * SECONDS[part];
|
|
62
|
+
}
|
|
63
|
+
return parts;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* A duration with its units, without the empty ones: `1 h 5 min 30 s`, `3 min`, `2 d 4 h`. The
|
|
67
|
+
* value is in `unit` (seconds by default), and is rounded to the precision.
|
|
68
|
+
*/
|
|
69
|
+
function formatDuration(value, options = {}) {
|
|
70
|
+
const units = resolveDurationUnits(options);
|
|
71
|
+
const labels = {
|
|
72
|
+
...LABELS,
|
|
73
|
+
...options.labels
|
|
74
|
+
};
|
|
75
|
+
const step = SECONDS[units.precision] / SECONDS[units.unit];
|
|
76
|
+
const parts = splitDuration(Math.round(value / step) * step, units);
|
|
77
|
+
const shown = unitsBetween(units.largestUnit, units.precision).flatMap((part) => {
|
|
78
|
+
const count = parts[part] ?? 0;
|
|
79
|
+
return count > 0 ? [`${String(count)} ${labels[part]}`] : [];
|
|
80
|
+
});
|
|
81
|
+
return shown.length > 0 ? shown.join(" ") : `0 ${labels[units.precision]}`;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* A duration, a whole number of `unit` (seconds by default), typed in parts from `largestUnit`
|
|
85
|
+
* to `precision`: hours, minutes and seconds by default. The largest part has no upper bound.
|
|
86
|
+
* It is `null` while every part is empty.
|
|
87
|
+
*/
|
|
88
|
+
function DurationField(t0) {
|
|
89
|
+
const $ = c(36);
|
|
90
|
+
const { value, onChange, onBlur, unit: unitProp, precision: precisionProp, largestUnit: largestUnitProp, label, description, errors, disabled, readOnly, required, name, className } = t0;
|
|
91
|
+
const intl = usePanneauIntl();
|
|
92
|
+
let T0;
|
|
93
|
+
let t1;
|
|
94
|
+
let t2;
|
|
95
|
+
let t3;
|
|
96
|
+
let t4;
|
|
97
|
+
let t5;
|
|
98
|
+
let t6;
|
|
99
|
+
let t7;
|
|
100
|
+
let t8;
|
|
101
|
+
if ($[0] !== className || $[1] !== description || $[2] !== disabled || $[3] !== errors || $[4] !== intl || $[5] !== label || $[6] !== largestUnitProp || $[7] !== name || $[8] !== onBlur || $[9] !== onChange || $[10] !== precisionProp || $[11] !== readOnly || $[12] !== required || $[13] !== unitProp || $[14] !== value) {
|
|
102
|
+
const { unit, precision, largestUnit } = resolveDurationUnits({
|
|
103
|
+
...unitProp !== void 0 ? { unit: unitProp } : {},
|
|
104
|
+
...precisionProp !== void 0 ? { precision: precisionProp } : {},
|
|
105
|
+
...largestUnitProp !== void 0 ? { largestUnit: largestUnitProp } : {}
|
|
106
|
+
});
|
|
107
|
+
const all = unitsBetween(largestUnit, unit);
|
|
108
|
+
const parts = value !== null && value !== void 0 ? splitDuration(value, {
|
|
109
|
+
unit,
|
|
110
|
+
precision: unit,
|
|
111
|
+
largestUnit
|
|
112
|
+
}) : null;
|
|
113
|
+
const change = (part, next) => {
|
|
114
|
+
const updated = {
|
|
115
|
+
...parts,
|
|
116
|
+
[part]: next ?? 0
|
|
117
|
+
};
|
|
118
|
+
const total = all.reduce((sum, current) => sum + (updated[current] ?? 0) * SECONDS[current] / SECONDS[unit], 0);
|
|
119
|
+
onChange?.(total === 0 && next === null ? null : total);
|
|
120
|
+
};
|
|
121
|
+
const input = (part_0) => {
|
|
122
|
+
const above = DURATION_UNITS[rank(part_0) + 1];
|
|
123
|
+
return /* @__PURE__ */ jsx(NumberInput, {
|
|
124
|
+
"aria-label": intl.formatMessage(messages[part_0]),
|
|
125
|
+
value: parts?.[part_0] ?? null,
|
|
126
|
+
onChange: (next_0) => change(part_0, next_0),
|
|
127
|
+
onBlur: () => onBlur?.(),
|
|
128
|
+
minValue: 0,
|
|
129
|
+
...part_0 !== largestUnit && above !== void 0 ? { maxValue: SECONDS[above] / SECONDS[part_0] - 1 } : {},
|
|
130
|
+
formatOptions: { maximumFractionDigits: 0 },
|
|
131
|
+
suffix: intl.formatMessage(messages[`${part_0}Unit`]),
|
|
132
|
+
isDisabled: disabled,
|
|
133
|
+
isReadOnly: readOnly,
|
|
134
|
+
...name !== void 0 ? { name: `${name}[${part_0}]` } : {},
|
|
135
|
+
className: DurationField_module_default.part
|
|
136
|
+
}, part_0);
|
|
137
|
+
};
|
|
138
|
+
T0 = Fieldset;
|
|
139
|
+
t3 = label;
|
|
140
|
+
t4 = description;
|
|
141
|
+
t5 = errors;
|
|
142
|
+
t6 = required;
|
|
143
|
+
t7 = disabled;
|
|
144
|
+
t8 = className;
|
|
145
|
+
t1 = DurationField_module_default.parts;
|
|
146
|
+
t2 = unitsBetween(largestUnit, precision).map((part_1) => input(part_1));
|
|
147
|
+
$[0] = className;
|
|
148
|
+
$[1] = description;
|
|
149
|
+
$[2] = disabled;
|
|
150
|
+
$[3] = errors;
|
|
151
|
+
$[4] = intl;
|
|
152
|
+
$[5] = label;
|
|
153
|
+
$[6] = largestUnitProp;
|
|
154
|
+
$[7] = name;
|
|
155
|
+
$[8] = onBlur;
|
|
156
|
+
$[9] = onChange;
|
|
157
|
+
$[10] = precisionProp;
|
|
158
|
+
$[11] = readOnly;
|
|
159
|
+
$[12] = required;
|
|
160
|
+
$[13] = unitProp;
|
|
161
|
+
$[14] = value;
|
|
162
|
+
$[15] = T0;
|
|
163
|
+
$[16] = t1;
|
|
164
|
+
$[17] = t2;
|
|
165
|
+
$[18] = t3;
|
|
166
|
+
$[19] = t4;
|
|
167
|
+
$[20] = t5;
|
|
168
|
+
$[21] = t6;
|
|
169
|
+
$[22] = t7;
|
|
170
|
+
$[23] = t8;
|
|
171
|
+
} else {
|
|
172
|
+
T0 = $[15];
|
|
173
|
+
t1 = $[16];
|
|
174
|
+
t2 = $[17];
|
|
175
|
+
t3 = $[18];
|
|
176
|
+
t4 = $[19];
|
|
177
|
+
t5 = $[20];
|
|
178
|
+
t6 = $[21];
|
|
179
|
+
t7 = $[22];
|
|
180
|
+
t8 = $[23];
|
|
181
|
+
}
|
|
182
|
+
let t9;
|
|
183
|
+
if ($[24] !== t1 || $[25] !== t2) {
|
|
184
|
+
t9 = /* @__PURE__ */ jsx("div", {
|
|
185
|
+
className: t1,
|
|
186
|
+
children: t2
|
|
187
|
+
});
|
|
188
|
+
$[24] = t1;
|
|
189
|
+
$[25] = t2;
|
|
190
|
+
$[26] = t9;
|
|
191
|
+
} else t9 = $[26];
|
|
192
|
+
let t10;
|
|
193
|
+
if ($[27] !== T0 || $[28] !== t3 || $[29] !== t4 || $[30] !== t5 || $[31] !== t6 || $[32] !== t7 || $[33] !== t8 || $[34] !== t9) {
|
|
194
|
+
t10 = /* @__PURE__ */ jsx(T0, {
|
|
195
|
+
legend: t3,
|
|
196
|
+
description: t4,
|
|
197
|
+
errors: t5,
|
|
198
|
+
isRequired: t6,
|
|
199
|
+
isDisabled: t7,
|
|
200
|
+
className: t8,
|
|
201
|
+
children: t9
|
|
202
|
+
});
|
|
203
|
+
$[27] = T0;
|
|
204
|
+
$[28] = t3;
|
|
205
|
+
$[29] = t4;
|
|
206
|
+
$[30] = t5;
|
|
207
|
+
$[31] = t6;
|
|
208
|
+
$[32] = t7;
|
|
209
|
+
$[33] = t8;
|
|
210
|
+
$[34] = t9;
|
|
211
|
+
$[35] = t10;
|
|
212
|
+
} else t10 = $[35];
|
|
213
|
+
return t10;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* The `duration` type: a whole number of `settings.unit`, with settings `precision` and
|
|
217
|
+
* `largestUnit` for the parts its input shows.
|
|
218
|
+
*/
|
|
219
|
+
function DurationFieldEntry(props) {
|
|
220
|
+
const $ = c(11);
|
|
221
|
+
let t0;
|
|
222
|
+
if ($[0] !== props) {
|
|
223
|
+
t0 = getFieldProps(props);
|
|
224
|
+
$[0] = props;
|
|
225
|
+
$[1] = t0;
|
|
226
|
+
} else t0 = $[1];
|
|
227
|
+
let fieldProps;
|
|
228
|
+
if ($[2] !== t0) {
|
|
229
|
+
const { placeholder: _placeholder, ...t1 } = t0;
|
|
230
|
+
fieldProps = t1;
|
|
231
|
+
$[2] = t0;
|
|
232
|
+
$[3] = fieldProps;
|
|
233
|
+
} else fieldProps = $[3];
|
|
234
|
+
let t1;
|
|
235
|
+
if ($[4] !== props.field) {
|
|
236
|
+
t1 = getDurationUnits(props.field);
|
|
237
|
+
$[4] = props.field;
|
|
238
|
+
$[5] = t1;
|
|
239
|
+
} else t1 = $[5];
|
|
240
|
+
const t2 = isNumber(props.value) ? props.value : null;
|
|
241
|
+
let t3;
|
|
242
|
+
if ($[6] !== fieldProps || $[7] !== props.onChange || $[8] !== t1 || $[9] !== t2) {
|
|
243
|
+
t3 = /* @__PURE__ */ jsx(DurationField, {
|
|
244
|
+
...fieldProps,
|
|
245
|
+
...t1,
|
|
246
|
+
value: t2,
|
|
247
|
+
onChange: props.onChange
|
|
248
|
+
});
|
|
249
|
+
$[6] = fieldProps;
|
|
250
|
+
$[7] = props.onChange;
|
|
251
|
+
$[8] = t1;
|
|
252
|
+
$[9] = t2;
|
|
253
|
+
$[10] = t3;
|
|
254
|
+
} else t3 = $[10];
|
|
255
|
+
return t3;
|
|
256
|
+
}
|
|
257
|
+
//#endregion
|
|
258
|
+
export { DurationField, DurationFieldEntry, formatDuration, getDurationUnits, isDurationUnit, resolveDurationUnits, splitDuration };
|
|
259
|
+
|
|
260
|
+
//# sourceMappingURL=DurationField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DurationField.js","names":["Field","DURATION_UNITS","DurationUnit","Fieldset","NumberInput","usePanneauIntl","getFieldProps","getSetting","isNumber","messages","FieldEntryProps","FieldProps","styles","DurationUnits","unit","precision","largestUnit","DurationParts","Partial","Record","FormatDurationOptions","labels","SECONDS","Readonly","seconds","minutes","hours","days","LABELS","rank","indexOf","larger","a","b","isDurationUnit","value","includes","resolveDurationUnits","Required","smallest","getDurationUnits","field","undefined","unitsBetween","largest","slice","reverse","splitDuration","units","rest","Math","max","round","parts","part","count","floor","formatDuration","options","step","shown","flatMap","String","length","join","DurationFieldProps","DurationField","t0","$","_c","onChange","onBlur","unitProp","precisionProp","largestUnitProp","label","description","errors","disabled","readOnly","required","name","className","intl","T0","t1","t2","t3","t4","t5","t6","t7","t8","all","change","next","updated","total","reduce","sum","current","input","part_0","above","formatMessage","next_0","maxValue","maximumFractionDigits","map","part_1","t9","t10","DurationFieldEntry","props","fieldProps","placeholder","_placeholder","_c","styles"],"sources":["../../src/duration/DurationField.tsx"],"sourcesContent":["import type { Field } from '@panneau/protocol';\nimport { DURATION_UNITS, type DurationUnit } from '@panneau/protocol/runtime';\nimport { Fieldset, NumberInput, usePanneauIntl } from '@panneau/ui';\n\nimport { getFieldProps, getSetting, isNumber } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\nimport styles from './DurationField.module.css';\n\nexport type { DurationUnit };\n\n/**\n * The unit of a duration's value and the parts that show it (decision 0056). Every unit is\n * `seconds`, `minutes`, `hours` or `days`, and a day is 24 hours.\n */\nexport interface DurationUnits {\n /** The unit of the value, a whole number: `seconds` by default. */\n unit?: DurationUnit;\n /** The smallest part shown. Defaults to `unit`; a precision finer than `unit` is raised to it. */\n precision?: DurationUnit;\n /**\n * The largest part shown, which has no upper bound. Defaults to the larger of `hours` and\n * `precision`; a largest unit smaller than `precision` is raised to it.\n */\n largestUnit?: DurationUnit;\n}\n\n/** The parts of a duration, from its largest unit to its precision. */\nexport type DurationParts = Partial<Record<DurationUnit, number>>;\n\n/** Options of `formatDuration()`. */\nexport interface FormatDurationOptions extends DurationUnits {\n /** The abbreviations of the units: `d`, `h`, `min` and `s` by default. */\n labels?: Partial<Record<DurationUnit, string>>;\n}\n\nconst SECONDS: Readonly<Record<DurationUnit, number>> = {\n seconds: 1,\n minutes: 60,\n hours: 3600,\n days: 86_400,\n};\n\nconst LABELS: Readonly<Record<DurationUnit, string>> = {\n days: 'd',\n hours: 'h',\n minutes: 'min',\n seconds: 's',\n};\n\nconst rank = (unit: DurationUnit) => DURATION_UNITS.indexOf(unit);\nconst larger = (a: DurationUnit, b: DurationUnit) => (rank(a) >= rank(b) ? a : b);\n\n/** Whether a value is a unit of a duration: `seconds`, `minutes`, `hours` or `days`. */\nexport function isDurationUnit(value: unknown): value is DurationUnit {\n return typeof value === 'string' && (DURATION_UNITS as readonly string[]).includes(value);\n}\n\n/**\n * The units of a duration with their defaults: `seconds` for the value, a precision of the unit\n * of the value, and a largest unit of `hours` or the precision, whichever is larger.\n */\nexport function resolveDurationUnits({\n unit = 'seconds',\n precision,\n largestUnit,\n}: DurationUnits = {}): Required<DurationUnits> {\n const smallest = larger(precision ?? unit, unit);\n return { unit, precision: smallest, largestUnit: larger(largestUnit ?? 'hours', smallest) };\n}\n\n/** The units of a `duration` field, from its settings `unit`, `precision` and `largestUnit`. */\nexport function getDurationUnits(field: Field): DurationUnits {\n const unit = getSetting(field, 'unit', isDurationUnit);\n const precision = getSetting(field, 'precision', isDurationUnit);\n const largestUnit = getSetting(field, 'largestUnit', isDurationUnit);\n return {\n ...(unit !== undefined ? { unit } : {}),\n ...(precision !== undefined ? { precision } : {}),\n ...(largestUnit !== undefined ? { largestUnit } : {}),\n };\n}\n\n/** The units from the largest to the smallest, both included. */\nfunction unitsBetween(largest: DurationUnit, smallest: DurationUnit): DurationUnit[] {\n return DURATION_UNITS.slice(rank(smallest), rank(largest) + 1).reverse();\n}\n\n/**\n * The parts of a duration, from its largest unit to its precision: hours, minutes and seconds of\n * a number of seconds by default. The largest part takes what the larger units would have held\n * (`48` hours for 2 days), and what is finer than the precision is dropped.\n */\nexport function splitDuration(seconds: number): { hours: number; minutes: number; seconds: number };\n/** The parts of a duration in `units.unit`, from `units.largestUnit` to `units.precision`. */\nexport function splitDuration(value: number, units: DurationUnits): DurationParts;\nexport function splitDuration(value: number, units: DurationUnits = {}): DurationParts {\n const { unit, precision, largestUnit } = resolveDurationUnits(units);\n let rest = Math.max(0, Math.round(value)) * SECONDS[unit];\n const parts: DurationParts = {};\n for (const part of unitsBetween(largestUnit, precision)) {\n const count = Math.floor(rest / SECONDS[part]);\n parts[part] = count;\n rest -= count * SECONDS[part];\n }\n return parts;\n}\n\n/**\n * A duration with its units, without the empty ones: `1 h 5 min 30 s`, `3 min`, `2 d 4 h`. The\n * value is in `unit` (seconds by default), and is rounded to the precision.\n */\nexport function formatDuration(value: number, options: FormatDurationOptions = {}): string {\n const units = resolveDurationUnits(options);\n const labels = { ...LABELS, ...options.labels };\n const step = SECONDS[units.precision] / SECONDS[units.unit];\n const parts = splitDuration(Math.round(value / step) * step, units);\n const shown = unitsBetween(units.largestUnit, units.precision).flatMap((part) => {\n const count = parts[part] ?? 0;\n return count > 0 ? [`${String(count)} ${labels[part]}`] : [];\n });\n return shown.length > 0 ? shown.join(' ') : `0 ${labels[units.precision]}`;\n}\n\n/** Props of `DurationField`: those of every field, and the units of the duration. */\nexport interface DurationFieldProps extends FieldProps<number>, DurationUnits {}\n\n/**\n * A duration, a whole number of `unit` (seconds by default), typed in parts from `largestUnit`\n * to `precision`: hours, minutes and seconds by default. The largest part has no upper bound.\n * It is `null` while every part is empty.\n */\nexport function DurationField({\n value,\n onChange,\n onBlur,\n unit: unitProp,\n precision: precisionProp,\n largestUnit: largestUnitProp,\n label,\n description,\n errors,\n disabled,\n readOnly,\n required,\n name,\n className,\n}: DurationFieldProps) {\n const intl = usePanneauIntl();\n const { unit, precision, largestUnit } = resolveDurationUnits({\n ...(unitProp !== undefined ? { unit: unitProp } : {}),\n ...(precisionProp !== undefined ? { precision: precisionProp } : {}),\n ...(largestUnitProp !== undefined ? { largestUnit: largestUnitProp } : {}),\n });\n // Every part down to the unit of the value: parts finer than the precision are kept as they\n // are when another part changes.\n const all = unitsBetween(largestUnit, unit);\n const parts =\n value !== null && value !== undefined\n ? splitDuration(value, { unit, precision: unit, largestUnit })\n : null;\n const change = (part: DurationUnit, next: number | null) => {\n const updated: DurationParts = { ...parts, [part]: next ?? 0 };\n const total = all.reduce(\n (sum, current) => sum + ((updated[current] ?? 0) * SECONDS[current]) / SECONDS[unit],\n 0,\n );\n // Clearing the last part that had a value empties the field\n onChange?.(total === 0 && next === null ? null : total);\n };\n const input = (part: DurationUnit) => {\n const above = DURATION_UNITS[rank(part) + 1];\n return (\n <NumberInput\n key={part}\n aria-label={intl.formatMessage(messages[part])}\n value={parts?.[part] ?? null}\n onChange={(next) => change(part, next)}\n onBlur={() => onBlur?.()}\n minValue={0}\n // The largest part has no upper bound: 90 minutes, or 48 hours without days\n {...(part !== largestUnit && above !== undefined\n ? { maxValue: SECONDS[above] / SECONDS[part] - 1 }\n : {})}\n formatOptions={{ maximumFractionDigits: 0 }}\n suffix={intl.formatMessage(messages[`${part}Unit`])}\n isDisabled={disabled}\n isReadOnly={readOnly}\n {...(name !== undefined ? { name: `${name}[${part}]` } : {})}\n className={styles.part}\n />\n );\n };\n return (\n <Fieldset\n legend={label}\n description={description}\n errors={errors}\n isRequired={required}\n isDisabled={disabled}\n className={className}\n >\n <div className={styles.parts}>\n {unitsBetween(largestUnit, precision).map((part) => input(part))}\n </div>\n </Fieldset>\n );\n}\n\n/**\n * The `duration` type: a whole number of `settings.unit`, with settings `precision` and\n * `largestUnit` for the parts its input shows.\n */\nexport function DurationFieldEntry(props: FieldEntryProps) {\n const { placeholder: _placeholder, ...fieldProps } = getFieldProps(props);\n return (\n <DurationField\n {...fieldProps}\n {...getDurationUnits(props.field)}\n value={isNumber(props.value) ? props.value : null}\n onChange={props.onChange}\n />\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import "./DurationField.css";
|
|
2
|
+
//#region src/duration/DurationField.module.css
|
|
3
|
+
var parts = "panneau-duration-field-parts";
|
|
4
|
+
var part = "panneau-duration-field-part";
|
|
5
|
+
var DurationField_module_default = {
|
|
6
|
+
parts,
|
|
7
|
+
part
|
|
8
|
+
};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { DurationField_module_default as default, part, parts };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=DurationField.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DurationField.module.js","names":[],"sources":["../../src/duration/DurationField.module.css"],"sourcesContent":["/* The parts of the duration side by side: days, hours, minutes and seconds. */\n.parts {\n display: flex;\n flex-wrap: wrap;\n gap: var(--panneau-space-2);\n}\n\n.part {\n flex: 0 1 7rem;\n min-width: 5rem;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { DurationField, DurationFieldEntry, type DurationFieldProps, type DurationParts, type DurationUnit, type DurationUnits, type FormatDurationOptions, formatDuration, getDurationUnits, isDurationUnit, resolveDurationUnits, splitDuration, } from './DurationField.js';
|
|
2
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/duration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EACb,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,aAAa,GAChB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DurationField, DurationFieldEntry, formatDuration, getDurationUnits, isDurationUnit, resolveDurationUnits, splitDuration } from "./DurationField.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { FieldEntryProps } from '../shared/types';
|
|
2
|
-
import { type TextFieldProps } from '../text/TextField';
|
|
1
|
+
import type { FieldEntryProps } from '../shared/types.js';
|
|
2
|
+
import { type TextFieldProps } from '../text/TextField.js';
|
|
3
3
|
export type EmailFieldProps = Omit<TextFieldProps, 'type' | 'inputMode'>;
|
|
4
4
|
/** An email address, with the email keyboard on phones. Spaces around it are removed on blur. */
|
|
5
5
|
export declare function EmailField({ value, onChange, onBlur, ...props }: EmailFieldProps): import("react").JSX.Element;
|