@loadspark/core 0.0.1
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/LICENSE.md +71 -0
- package/README.md +628 -0
- package/dist/access/accessors.d.ts +22 -0
- package/dist/access/accessors.d.ts.map +1 -0
- package/dist/access/accessors.js +20 -0
- package/dist/access/accessors.js.map +1 -0
- package/dist/access/builders.d.ts +4 -0
- package/dist/access/builders.d.ts.map +1 -0
- package/dist/access/builders.js +26 -0
- package/dist/access/builders.js.map +1 -0
- package/dist/access/index.d.ts +4 -0
- package/dist/access/index.d.ts.map +1 -0
- package/dist/access/index.js +5 -0
- package/dist/access/index.js.map +1 -0
- package/dist/access/roles.d.ts +38 -0
- package/dist/access/roles.d.ts.map +1 -0
- package/dist/access/roles.js +33 -0
- package/dist/access/roles.js.map +1 -0
- package/dist/collections/users/access.d.ts +30 -0
- package/dist/collections/users/access.d.ts.map +1 -0
- package/dist/collections/users/access.js +96 -0
- package/dist/collections/users/access.js.map +1 -0
- package/dist/collections/users/config.d.ts +9 -0
- package/dist/collections/users/config.d.ts.map +1 -0
- package/dist/collections/users/config.js +55 -0
- package/dist/collections/users/config.js.map +1 -0
- package/dist/collections/users/fields.d.ts +4 -0
- package/dist/collections/users/fields.d.ts.map +1 -0
- package/dist/collections/users/fields.js +97 -0
- package/dist/collections/users/fields.js.map +1 -0
- package/dist/collections/users/hooks.d.ts +25 -0
- package/dist/collections/users/hooks.d.ts.map +1 -0
- package/dist/collections/users/hooks.js +50 -0
- package/dist/collections/users/hooks.js.map +1 -0
- package/dist/collections/users/types.d.ts +18 -0
- package/dist/collections/users/types.d.ts.map +1 -0
- package/dist/collections/users/types.js +8 -0
- package/dist/collections/users/types.js.map +1 -0
- package/dist/constants.d.ts +45 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +46 -0
- package/dist/constants.js.map +1 -0
- package/dist/exports/access/index.d.ts +2 -0
- package/dist/exports/access/index.d.ts.map +1 -0
- package/dist/exports/access/index.js +3 -0
- package/dist/exports/access/index.js.map +1 -0
- package/dist/exports/fields/AlertBox/client.d.ts +2 -0
- package/dist/exports/fields/AlertBox/client.d.ts.map +1 -0
- package/dist/exports/fields/AlertBox/client.js +3 -0
- package/dist/exports/fields/AlertBox/client.js.map +1 -0
- package/dist/exports/fields/AlertBox/index.d.ts +2 -0
- package/dist/exports/fields/AlertBox/index.d.ts.map +1 -0
- package/dist/exports/fields/AlertBox/index.js +3 -0
- package/dist/exports/fields/AlertBox/index.js.map +1 -0
- package/dist/exports/fields/ColourText/client.d.ts +2 -0
- package/dist/exports/fields/ColourText/client.d.ts.map +1 -0
- package/dist/exports/fields/ColourText/client.js +3 -0
- package/dist/exports/fields/ColourText/client.js.map +1 -0
- package/dist/exports/fields/ColourText/index.d.ts +2 -0
- package/dist/exports/fields/ColourText/index.d.ts.map +1 -0
- package/dist/exports/fields/ColourText/index.js +3 -0
- package/dist/exports/fields/ColourText/index.js.map +1 -0
- package/dist/exports/fields/Combo/client.d.ts +2 -0
- package/dist/exports/fields/Combo/client.d.ts.map +1 -0
- package/dist/exports/fields/Combo/client.js +3 -0
- package/dist/exports/fields/Combo/client.js.map +1 -0
- package/dist/exports/fields/Combo/index.d.ts +2 -0
- package/dist/exports/fields/Combo/index.d.ts.map +1 -0
- package/dist/exports/fields/Combo/index.js +3 -0
- package/dist/exports/fields/Combo/index.js.map +1 -0
- package/dist/exports/fields/Countries/index.d.ts +2 -0
- package/dist/exports/fields/Countries/index.d.ts.map +1 -0
- package/dist/exports/fields/Countries/index.js +3 -0
- package/dist/exports/fields/Countries/index.js.map +1 -0
- package/dist/exports/fields/Number/client.d.ts +2 -0
- package/dist/exports/fields/Number/client.d.ts.map +1 -0
- package/dist/exports/fields/Number/client.js +3 -0
- package/dist/exports/fields/Number/client.js.map +1 -0
- package/dist/exports/fields/Number/index.d.ts +2 -0
- package/dist/exports/fields/Number/index.d.ts.map +1 -0
- package/dist/exports/fields/Number/index.js +3 -0
- package/dist/exports/fields/Number/index.js.map +1 -0
- package/dist/exports/fields/OpeningHours/client.d.ts +2 -0
- package/dist/exports/fields/OpeningHours/client.d.ts.map +1 -0
- package/dist/exports/fields/OpeningHours/client.js +3 -0
- package/dist/exports/fields/OpeningHours/client.js.map +1 -0
- package/dist/exports/fields/OpeningHours/index.d.ts +2 -0
- package/dist/exports/fields/OpeningHours/index.d.ts.map +1 -0
- package/dist/exports/fields/OpeningHours/index.js +3 -0
- package/dist/exports/fields/OpeningHours/index.js.map +1 -0
- package/dist/exports/fields/Pattern/client.d.ts +2 -0
- package/dist/exports/fields/Pattern/client.d.ts.map +1 -0
- package/dist/exports/fields/Pattern/client.js +3 -0
- package/dist/exports/fields/Pattern/client.js.map +1 -0
- package/dist/exports/fields/Pattern/index.d.ts +2 -0
- package/dist/exports/fields/Pattern/index.d.ts.map +1 -0
- package/dist/exports/fields/Pattern/index.js +3 -0
- package/dist/exports/fields/Pattern/index.js.map +1 -0
- package/dist/exports/fields/Range/client.d.ts +2 -0
- package/dist/exports/fields/Range/client.d.ts.map +1 -0
- package/dist/exports/fields/Range/client.js +3 -0
- package/dist/exports/fields/Range/client.js.map +1 -0
- package/dist/exports/fields/Range/index.d.ts +2 -0
- package/dist/exports/fields/Range/index.d.ts.map +1 -0
- package/dist/exports/fields/Range/index.js +3 -0
- package/dist/exports/fields/Range/index.js.map +1 -0
- package/dist/exports/fields/Telephone/client.d.ts +2 -0
- package/dist/exports/fields/Telephone/client.d.ts.map +1 -0
- package/dist/exports/fields/Telephone/client.js +3 -0
- package/dist/exports/fields/Telephone/client.js.map +1 -0
- package/dist/exports/fields/Telephone/index.d.ts +2 -0
- package/dist/exports/fields/Telephone/index.d.ts.map +1 -0
- package/dist/exports/fields/Telephone/index.js +3 -0
- package/dist/exports/fields/Telephone/index.js.map +1 -0
- package/dist/exports/fields/client.d.ts +2 -0
- package/dist/exports/fields/client.d.ts.map +1 -0
- package/dist/exports/fields/client.js +2 -0
- package/dist/exports/fields/client.js.map +1 -0
- package/dist/exports/fields/index.d.ts +10 -0
- package/dist/exports/fields/index.d.ts.map +1 -0
- package/dist/exports/fields/index.js +11 -0
- package/dist/exports/fields/index.js.map +1 -0
- package/dist/exports/translations/index.d.ts +2 -0
- package/dist/exports/translations/index.d.ts.map +1 -0
- package/dist/exports/translations/index.js +3 -0
- package/dist/exports/translations/index.js.map +1 -0
- package/dist/exports/users/index.d.ts +4 -0
- package/dist/exports/users/index.d.ts.map +1 -0
- package/dist/exports/users/index.js +5 -0
- package/dist/exports/users/index.js.map +1 -0
- package/dist/exports/validations/index.d.ts +4 -0
- package/dist/exports/validations/index.d.ts.map +1 -0
- package/dist/exports/validations/index.js +5 -0
- package/dist/exports/validations/index.js.map +1 -0
- package/dist/fields/AlertBox/Component.d.ts +14 -0
- package/dist/fields/AlertBox/Component.d.ts.map +1 -0
- package/dist/fields/AlertBox/Component.js +32 -0
- package/dist/fields/AlertBox/Component.js.map +1 -0
- package/dist/fields/AlertBox/icons/AlertIcon.d.ts +3 -0
- package/dist/fields/AlertBox/icons/AlertIcon.d.ts.map +1 -0
- package/dist/fields/AlertBox/icons/AlertIcon.js +27 -0
- package/dist/fields/AlertBox/icons/AlertIcon.js.map +1 -0
- package/dist/fields/AlertBox/icons/ErrorIcon.d.ts +3 -0
- package/dist/fields/AlertBox/icons/ErrorIcon.d.ts.map +1 -0
- package/dist/fields/AlertBox/icons/ErrorIcon.js +35 -0
- package/dist/fields/AlertBox/icons/ErrorIcon.js.map +1 -0
- package/dist/fields/AlertBox/icons/InfoIcon.d.ts +3 -0
- package/dist/fields/AlertBox/icons/InfoIcon.d.ts.map +1 -0
- package/dist/fields/AlertBox/icons/InfoIcon.js +29 -0
- package/dist/fields/AlertBox/icons/InfoIcon.js.map +1 -0
- package/dist/fields/AlertBox/index.d.ts +76 -0
- package/dist/fields/AlertBox/index.d.ts.map +1 -0
- package/dist/fields/AlertBox/index.js +64 -0
- package/dist/fields/AlertBox/index.js.map +1 -0
- package/dist/fields/AlertBox/styles.css +42 -0
- package/dist/fields/ColourText/Component.d.ts +8 -0
- package/dist/fields/ColourText/Component.d.ts.map +1 -0
- package/dist/fields/ColourText/Component.js +102 -0
- package/dist/fields/ColourText/Component.js.map +1 -0
- package/dist/fields/ColourText/index.d.ts +35 -0
- package/dist/fields/ColourText/index.d.ts.map +1 -0
- package/dist/fields/ColourText/index.js +41 -0
- package/dist/fields/ColourText/index.js.map +1 -0
- package/dist/fields/ColourText/styles.css +21 -0
- package/dist/fields/ColourText/validate.d.ts +3 -0
- package/dist/fields/ColourText/validate.d.ts.map +1 -0
- package/dist/fields/ColourText/validate.js +30 -0
- package/dist/fields/ColourText/validate.js.map +1 -0
- package/dist/fields/Combo/Component.d.ts +16 -0
- package/dist/fields/Combo/Component.d.ts.map +1 -0
- package/dist/fields/Combo/Component.js +105 -0
- package/dist/fields/Combo/Component.js.map +1 -0
- package/dist/fields/Combo/beforeValidate.d.ts +4 -0
- package/dist/fields/Combo/beforeValidate.d.ts.map +1 -0
- package/dist/fields/Combo/beforeValidate.js +30 -0
- package/dist/fields/Combo/beforeValidate.js.map +1 -0
- package/dist/fields/Combo/index.d.ts +58 -0
- package/dist/fields/Combo/index.d.ts.map +1 -0
- package/dist/fields/Combo/index.js +74 -0
- package/dist/fields/Combo/index.js.map +1 -0
- package/dist/fields/Countries/index.d.ts +49 -0
- package/dist/fields/Countries/index.d.ts.map +1 -0
- package/dist/fields/Countries/index.js +59 -0
- package/dist/fields/Countries/index.js.map +1 -0
- package/dist/fields/Number/Component.d.ts +14 -0
- package/dist/fields/Number/Component.d.ts.map +1 -0
- package/dist/fields/Number/Component.js +108 -0
- package/dist/fields/Number/Component.js.map +1 -0
- package/dist/fields/Number/index.d.ts +64 -0
- package/dist/fields/Number/index.d.ts.map +1 -0
- package/dist/fields/Number/index.js +66 -0
- package/dist/fields/Number/index.js.map +1 -0
- package/dist/fields/Number/styles.css +0 -0
- package/dist/fields/OpeningHours/Component.d.ts +7 -0
- package/dist/fields/OpeningHours/Component.d.ts.map +1 -0
- package/dist/fields/OpeningHours/Component.js +161 -0
- package/dist/fields/OpeningHours/Component.js.map +1 -0
- package/dist/fields/OpeningHours/index.d.ts +51 -0
- package/dist/fields/OpeningHours/index.d.ts.map +1 -0
- package/dist/fields/OpeningHours/index.js +49 -0
- package/dist/fields/OpeningHours/index.js.map +1 -0
- package/dist/fields/OpeningHours/styles.css +124 -0
- package/dist/fields/OpeningHours/validate.d.ts +3 -0
- package/dist/fields/OpeningHours/validate.d.ts.map +1 -0
- package/dist/fields/OpeningHours/validate.js +39 -0
- package/dist/fields/OpeningHours/validate.js.map +1 -0
- package/dist/fields/Pattern/Component.d.ts +14 -0
- package/dist/fields/Pattern/Component.d.ts.map +1 -0
- package/dist/fields/Pattern/Component.js +88 -0
- package/dist/fields/Pattern/Component.js.map +1 -0
- package/dist/fields/Pattern/index.d.ts +59 -0
- package/dist/fields/Pattern/index.d.ts.map +1 -0
- package/dist/fields/Pattern/index.js +55 -0
- package/dist/fields/Pattern/index.js.map +1 -0
- package/dist/fields/Pattern/styles.css +34 -0
- package/dist/fields/Range/Component.d.ts +13 -0
- package/dist/fields/Range/Component.d.ts.map +1 -0
- package/dist/fields/Range/Component.js +138 -0
- package/dist/fields/Range/Component.js.map +1 -0
- package/dist/fields/Range/index.d.ts +82 -0
- package/dist/fields/Range/index.d.ts.map +1 -0
- package/dist/fields/Range/index.js +63 -0
- package/dist/fields/Range/index.js.map +1 -0
- package/dist/fields/Range/range.scss +138 -0
- package/dist/fields/Range/types.d.ts +5 -0
- package/dist/fields/Range/types.d.ts.map +1 -0
- package/dist/fields/Range/types.js +3 -0
- package/dist/fields/Range/types.js.map +1 -0
- package/dist/fields/Telephone/Component.d.ts +13 -0
- package/dist/fields/Telephone/Component.d.ts.map +1 -0
- package/dist/fields/Telephone/Component.js +92 -0
- package/dist/fields/Telephone/Component.js.map +1 -0
- package/dist/fields/Telephone/index.d.ts +99 -0
- package/dist/fields/Telephone/index.d.ts.map +1 -0
- package/dist/fields/Telephone/index.js +59 -0
- package/dist/fields/Telephone/index.js.map +1 -0
- package/dist/fields/Telephone/validate.d.ts +3 -0
- package/dist/fields/Telephone/validate.d.ts.map +1 -0
- package/dist/fields/Telephone/validate.js +13 -0
- package/dist/fields/Telephone/validate.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/translations/index.d.ts +6 -0
- package/dist/translations/index.d.ts.map +1 -0
- package/dist/translations/index.js +92 -0
- package/dist/translations/index.js.map +1 -0
- package/dist/translations/languages/ar.d.ts +576 -0
- package/dist/translations/languages/ar.d.ts.map +1 -0
- package/dist/translations/languages/ar.js +329 -0
- package/dist/translations/languages/ar.js.map +1 -0
- package/dist/translations/languages/az.d.ts +576 -0
- package/dist/translations/languages/az.d.ts.map +1 -0
- package/dist/translations/languages/az.js +329 -0
- package/dist/translations/languages/az.js.map +1 -0
- package/dist/translations/languages/bg.d.ts +576 -0
- package/dist/translations/languages/bg.d.ts.map +1 -0
- package/dist/translations/languages/bg.js +329 -0
- package/dist/translations/languages/bg.js.map +1 -0
- package/dist/translations/languages/bnBd.d.ts +576 -0
- package/dist/translations/languages/bnBd.d.ts.map +1 -0
- package/dist/translations/languages/bnBd.js +329 -0
- package/dist/translations/languages/bnBd.js.map +1 -0
- package/dist/translations/languages/bnIn.d.ts +576 -0
- package/dist/translations/languages/bnIn.d.ts.map +1 -0
- package/dist/translations/languages/bnIn.js +329 -0
- package/dist/translations/languages/bnIn.js.map +1 -0
- package/dist/translations/languages/ca.d.ts +576 -0
- package/dist/translations/languages/ca.d.ts.map +1 -0
- package/dist/translations/languages/ca.js +329 -0
- package/dist/translations/languages/ca.js.map +1 -0
- package/dist/translations/languages/cs.d.ts +576 -0
- package/dist/translations/languages/cs.d.ts.map +1 -0
- package/dist/translations/languages/cs.js +329 -0
- package/dist/translations/languages/cs.js.map +1 -0
- package/dist/translations/languages/da.d.ts +576 -0
- package/dist/translations/languages/da.d.ts.map +1 -0
- package/dist/translations/languages/da.js +329 -0
- package/dist/translations/languages/da.js.map +1 -0
- package/dist/translations/languages/de.d.ts +576 -0
- package/dist/translations/languages/de.d.ts.map +1 -0
- package/dist/translations/languages/de.js +329 -0
- package/dist/translations/languages/de.js.map +1 -0
- package/dist/translations/languages/en.d.ts +576 -0
- package/dist/translations/languages/en.d.ts.map +1 -0
- package/dist/translations/languages/en.js +329 -0
- package/dist/translations/languages/en.js.map +1 -0
- package/dist/translations/languages/es.d.ts +576 -0
- package/dist/translations/languages/es.d.ts.map +1 -0
- package/dist/translations/languages/es.js +329 -0
- package/dist/translations/languages/es.js.map +1 -0
- package/dist/translations/languages/et.d.ts +576 -0
- package/dist/translations/languages/et.d.ts.map +1 -0
- package/dist/translations/languages/et.js +329 -0
- package/dist/translations/languages/et.js.map +1 -0
- package/dist/translations/languages/fa.d.ts +576 -0
- package/dist/translations/languages/fa.d.ts.map +1 -0
- package/dist/translations/languages/fa.js +329 -0
- package/dist/translations/languages/fa.js.map +1 -0
- package/dist/translations/languages/fr.d.ts +576 -0
- package/dist/translations/languages/fr.d.ts.map +1 -0
- package/dist/translations/languages/fr.js +329 -0
- package/dist/translations/languages/fr.js.map +1 -0
- package/dist/translations/languages/he.d.ts +576 -0
- package/dist/translations/languages/he.d.ts.map +1 -0
- package/dist/translations/languages/he.js +329 -0
- package/dist/translations/languages/he.js.map +1 -0
- package/dist/translations/languages/hr.d.ts +576 -0
- package/dist/translations/languages/hr.d.ts.map +1 -0
- package/dist/translations/languages/hr.js +329 -0
- package/dist/translations/languages/hr.js.map +1 -0
- package/dist/translations/languages/hu.d.ts +576 -0
- package/dist/translations/languages/hu.d.ts.map +1 -0
- package/dist/translations/languages/hu.js +329 -0
- package/dist/translations/languages/hu.js.map +1 -0
- package/dist/translations/languages/hy.d.ts +576 -0
- package/dist/translations/languages/hy.d.ts.map +1 -0
- package/dist/translations/languages/hy.js +329 -0
- package/dist/translations/languages/hy.js.map +1 -0
- package/dist/translations/languages/id.d.ts +576 -0
- package/dist/translations/languages/id.d.ts.map +1 -0
- package/dist/translations/languages/id.js +329 -0
- package/dist/translations/languages/id.js.map +1 -0
- package/dist/translations/languages/is.d.ts +576 -0
- package/dist/translations/languages/is.d.ts.map +1 -0
- package/dist/translations/languages/is.js +329 -0
- package/dist/translations/languages/is.js.map +1 -0
- package/dist/translations/languages/it.d.ts +576 -0
- package/dist/translations/languages/it.d.ts.map +1 -0
- package/dist/translations/languages/it.js +329 -0
- package/dist/translations/languages/it.js.map +1 -0
- package/dist/translations/languages/ja.d.ts +576 -0
- package/dist/translations/languages/ja.d.ts.map +1 -0
- package/dist/translations/languages/ja.js +329 -0
- package/dist/translations/languages/ja.js.map +1 -0
- package/dist/translations/languages/ko.d.ts +576 -0
- package/dist/translations/languages/ko.d.ts.map +1 -0
- package/dist/translations/languages/ko.js +329 -0
- package/dist/translations/languages/ko.js.map +1 -0
- package/dist/translations/languages/lt.d.ts +576 -0
- package/dist/translations/languages/lt.d.ts.map +1 -0
- package/dist/translations/languages/lt.js +329 -0
- package/dist/translations/languages/lt.js.map +1 -0
- package/dist/translations/languages/lv.d.ts +576 -0
- package/dist/translations/languages/lv.d.ts.map +1 -0
- package/dist/translations/languages/lv.js +329 -0
- package/dist/translations/languages/lv.js.map +1 -0
- package/dist/translations/languages/my.d.ts +576 -0
- package/dist/translations/languages/my.d.ts.map +1 -0
- package/dist/translations/languages/my.js +329 -0
- package/dist/translations/languages/my.js.map +1 -0
- package/dist/translations/languages/nb.d.ts +576 -0
- package/dist/translations/languages/nb.d.ts.map +1 -0
- package/dist/translations/languages/nb.js +329 -0
- package/dist/translations/languages/nb.js.map +1 -0
- package/dist/translations/languages/nl.d.ts +576 -0
- package/dist/translations/languages/nl.d.ts.map +1 -0
- package/dist/translations/languages/nl.js +329 -0
- package/dist/translations/languages/nl.js.map +1 -0
- package/dist/translations/languages/pl.d.ts +576 -0
- package/dist/translations/languages/pl.d.ts.map +1 -0
- package/dist/translations/languages/pl.js +329 -0
- package/dist/translations/languages/pl.js.map +1 -0
- package/dist/translations/languages/pt.d.ts +576 -0
- package/dist/translations/languages/pt.d.ts.map +1 -0
- package/dist/translations/languages/pt.js +329 -0
- package/dist/translations/languages/pt.js.map +1 -0
- package/dist/translations/languages/ro.d.ts +576 -0
- package/dist/translations/languages/ro.d.ts.map +1 -0
- package/dist/translations/languages/ro.js +329 -0
- package/dist/translations/languages/ro.js.map +1 -0
- package/dist/translations/languages/rs.d.ts +576 -0
- package/dist/translations/languages/rs.d.ts.map +1 -0
- package/dist/translations/languages/rs.js +329 -0
- package/dist/translations/languages/rs.js.map +1 -0
- package/dist/translations/languages/rsLatin.d.ts +576 -0
- package/dist/translations/languages/rsLatin.d.ts.map +1 -0
- package/dist/translations/languages/rsLatin.js +329 -0
- package/dist/translations/languages/rsLatin.js.map +1 -0
- package/dist/translations/languages/ru.d.ts +576 -0
- package/dist/translations/languages/ru.d.ts.map +1 -0
- package/dist/translations/languages/ru.js +329 -0
- package/dist/translations/languages/ru.js.map +1 -0
- package/dist/translations/languages/sk.d.ts +576 -0
- package/dist/translations/languages/sk.d.ts.map +1 -0
- package/dist/translations/languages/sk.js +329 -0
- package/dist/translations/languages/sk.js.map +1 -0
- package/dist/translations/languages/sl.d.ts +576 -0
- package/dist/translations/languages/sl.d.ts.map +1 -0
- package/dist/translations/languages/sl.js +329 -0
- package/dist/translations/languages/sl.js.map +1 -0
- package/dist/translations/languages/sv.d.ts +576 -0
- package/dist/translations/languages/sv.d.ts.map +1 -0
- package/dist/translations/languages/sv.js +329 -0
- package/dist/translations/languages/sv.js.map +1 -0
- package/dist/translations/languages/ta.d.ts +576 -0
- package/dist/translations/languages/ta.d.ts.map +1 -0
- package/dist/translations/languages/ta.js +329 -0
- package/dist/translations/languages/ta.js.map +1 -0
- package/dist/translations/languages/th.d.ts +576 -0
- package/dist/translations/languages/th.d.ts.map +1 -0
- package/dist/translations/languages/th.js +329 -0
- package/dist/translations/languages/th.js.map +1 -0
- package/dist/translations/languages/tr.d.ts +576 -0
- package/dist/translations/languages/tr.d.ts.map +1 -0
- package/dist/translations/languages/tr.js +329 -0
- package/dist/translations/languages/tr.js.map +1 -0
- package/dist/translations/languages/uk.d.ts +576 -0
- package/dist/translations/languages/uk.d.ts.map +1 -0
- package/dist/translations/languages/uk.js +329 -0
- package/dist/translations/languages/uk.js.map +1 -0
- package/dist/translations/languages/vi.d.ts +576 -0
- package/dist/translations/languages/vi.d.ts.map +1 -0
- package/dist/translations/languages/vi.js +329 -0
- package/dist/translations/languages/vi.js.map +1 -0
- package/dist/translations/languages/zh.d.ts +576 -0
- package/dist/translations/languages/zh.d.ts.map +1 -0
- package/dist/translations/languages/zh.js +329 -0
- package/dist/translations/languages/zh.js.map +1 -0
- package/dist/translations/languages/zhTw.d.ts +576 -0
- package/dist/translations/languages/zhTw.d.ts.map +1 -0
- package/dist/translations/languages/zhTw.js +329 -0
- package/dist/translations/languages/zhTw.js.map +1 -0
- package/dist/types.d.ts +269 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +257 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +32 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +82 -0
- package/dist/utils.js.map +1 -0
- package/dist/validations/dates.d.ts +230 -0
- package/dist/validations/dates.d.ts.map +1 -0
- package/dist/validations/dates.js +254 -0
- package/dist/validations/dates.js.map +1 -0
- package/dist/validations/numbers.d.ts +118 -0
- package/dist/validations/numbers.d.ts.map +1 -0
- package/dist/validations/numbers.js +151 -0
- package/dist/validations/numbers.js.map +1 -0
- package/dist/validations/relationLinkedUser.d.ts +43 -0
- package/dist/validations/relationLinkedUser.d.ts.map +1 -0
- package/dist/validations/relationLinkedUser.js +54 -0
- package/dist/validations/relationLinkedUser.js.map +1 -0
- package/package.json +228 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Number/Component.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n'use client'\n\nimport type { NumberFieldClientProps, TextFieldClientProps } from 'payload'\n\nimport {\n FieldDescription,\n FieldError,\n FieldLabel,\n RenderCustomComponent,\n useField,\n} from '@payloadcms/ui'\nimport React, { useCallback } from 'react'\nimport { NumericFormat } from 'react-number-format'\n\nimport type { Config } from './index.js'\n\nimport './styles.css'\n\ntype Props = {\n className?: string\n config: Config\n path: string\n placeholder?: string\n readOnly?: boolean\n} & (NumberFieldClientProps | TextFieldClientProps)\n\nexport const NumberComponent: React.FC<Props> = (props) => {\n const { config, field, path, readOnly, validate } = props\n\n const {\n type,\n admin: { className, description, placeholder, readOnly: adminReadOnly } = {},\n label,\n required,\n } = field\n\n const memoizedValidate = useCallback(\n (value: any, options: any) => {\n if (typeof validate === 'function') {\n return validate(value, { ...options, required })\n }\n },\n [validate, required],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Label } = {},\n errorMessage,\n setValue,\n showError,\n value,\n } = useField<any>({\n path,\n // @ts-expect-error - memoizedValidate is not typed\n validate: memoizedValidate,\n })\n\n const { ...componentProps } = config\n\n const formatValue = useCallback(\n (value: string) => {\n const prefix = componentProps.prefix\n const suffix = componentProps.suffix\n const thousandSeparator = componentProps.thousandSeparator\n\n if (type === 'number') {\n let cleanValue: number | string = value\n\n if (prefix) {\n cleanValue = cleanValue.replaceAll(prefix, '')\n }\n\n if (suffix) {\n cleanValue = cleanValue.replaceAll(suffix, '')\n }\n\n if (thousandSeparator) {\n cleanValue =\n typeof thousandSeparator === 'string'\n ? cleanValue.replaceAll(thousandSeparator, '')\n : cleanValue.replaceAll(',', '')\n }\n\n return cleanValue\n } else {\n return value\n }\n },\n [type, componentProps],\n )\n\n const classes = [\n 'field-type',\n 'text',\n className,\n showError && 'error',\n readOnly && 'read-only',\n 'container',\n ]\n .filter(Boolean)\n .join(' ')\n\n const isReadonly = Boolean(readOnly) || Boolean(adminReadOnly)\n\n return (\n <div className={`bfNumericFieldWrapper field-type`}>\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={<FieldLabel label={label} path={path} required={required} />}\n />\n\n {BeforeInput}\n\n <div className={classes}>\n <FieldError message={errorMessage ?? ''} showError={showError} />\n <NumericFormat\n className=\"numberInput\"\n id={`field-${path.replace(/\\./g, '__')}`}\n name={path}\n onChange={(e) => {\n const cleaned = formatValue(e.target.value)\n const numeric = cleaned === '' || cleaned === null ? null : Number(cleaned)\n setValue(Number.isNaN(numeric as number) ? null : numeric)\n }}\n placeholder={typeof placeholder === 'string' ? placeholder : ''}\n readOnly={isReadonly}\n required={required}\n value={value ?? ''}\n {...componentProps}\n />\n </div>\n\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={\n <FieldDescription\n className={`field-description-${path.replace(/\\./g, '__')}`}\n description={description ?? ''}\n path={path}\n />\n }\n />\n\n {AfterInput}\n </div>\n )\n}\n"],"names":["FieldDescription","FieldError","FieldLabel","RenderCustomComponent","useField","React","useCallback","NumericFormat","NumberComponent","props","config","field","path","readOnly","validate","type","admin","className","description","placeholder","adminReadOnly","label","required","memoizedValidate","value","options","customComponents","AfterInput","BeforeInput","Description","Label","errorMessage","setValue","showError","componentProps","formatValue","prefix","suffix","thousandSeparator","cleanValue","replaceAll","classes","filter","Boolean","join","isReadonly","div","CustomComponent","Fallback","message","id","replace","name","onChange","e","cleaned","target","numeric","Number","isNaN"],"mappings":"AAAA,qDAAqD,GACrD;;AAIA,SACEA,gBAAgB,EAChBC,UAAU,EACVC,UAAU,EACVC,qBAAqB,EACrBC,QAAQ,QACH,iBAAgB;AACvB,OAAOC,SAASC,WAAW,QAAQ,QAAO;AAC1C,SAASC,aAAa,QAAQ,sBAAqB;AAInD,OAAO,eAAc;AAUrB,OAAO,MAAMC,kBAAmC,CAACC;IAC/C,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,QAAQ,EAAE,GAAGL;IAEpD,MAAM,EACJM,IAAI,EACJC,OAAO,EAAEC,SAAS,EAAEC,WAAW,EAAEC,WAAW,EAAEN,UAAUO,aAAa,EAAE,GAAG,CAAC,CAAC,EAC5EC,KAAK,EACLC,QAAQ,EACT,GAAGX;IAEJ,MAAMY,mBAAmBjB,YACvB,CAACkB,OAAYC;QACX,IAAI,OAAOX,aAAa,YAAY;YAClC,OAAOA,SAASU,OAAO;gBAAE,GAAGC,OAAO;gBAAEH;YAAS;QAChD;IACF,GACA;QAACR;QAAUQ;KAAS;IAGtB,MAAM,EACJI,kBAAkB,EAAEC,UAAU,EAAEC,WAAW,EAAEC,WAAW,EAAEC,KAAK,EAAE,GAAG,CAAC,CAAC,EACtEC,YAAY,EACZC,QAAQ,EACRC,SAAS,EACTT,KAAK,EACN,GAAGpB,SAAc;QAChBQ;QACA,mDAAmD;QACnDE,UAAUS;IACZ;IAEA,MAAM,EAAE,GAAGW,gBAAgB,GAAGxB;IAE9B,MAAMyB,cAAc7B,YAClB,CAACkB;QACC,MAAMY,SAASF,eAAeE,MAAM;QACpC,MAAMC,SAASH,eAAeG,MAAM;QACpC,MAAMC,oBAAoBJ,eAAeI,iBAAiB;QAE1D,IAAIvB,SAAS,UAAU;YACrB,IAAIwB,aAA8Bf;YAElC,IAAIY,QAAQ;gBACVG,aAAaA,WAAWC,UAAU,CAACJ,QAAQ;YAC7C;YAEA,IAAIC,QAAQ;gBACVE,aAAaA,WAAWC,UAAU,CAACH,QAAQ;YAC7C;YAEA,IAAIC,mBAAmB;gBACrBC,aACE,OAAOD,sBAAsB,WACzBC,WAAWC,UAAU,CAACF,mBAAmB,MACzCC,WAAWC,UAAU,CAAC,KAAK;YACnC;YAEA,OAAOD;QACT,OAAO;YACL,OAAOf;QACT;IACF,GACA;QAACT;QAAMmB;KAAe;IAGxB,MAAMO,UAAU;QACd;QACA;QACAxB;QACAgB,aAAa;QACbpB,YAAY;QACZ;KACD,CACE6B,MAAM,CAACC,SACPC,IAAI,CAAC;IAER,MAAMC,aAAaF,QAAQ9B,aAAa8B,QAAQvB;IAEhD,qBACE,MAAC0B;QAAI7B,WAAW,CAAC,gCAAgC,CAAC;;0BAChD,KAACd;gBACC4C,iBAAiBjB;gBACjBkB,wBAAU,KAAC9C;oBAAWmB,OAAOA;oBAAOT,MAAMA;oBAAMU,UAAUA;;;YAG3DM;0BAED,MAACkB;gBAAI7B,WAAWwB;;kCACd,KAACxC;wBAAWgD,SAASlB,gBAAgB;wBAAIE,WAAWA;;kCACpD,KAAC1B;wBACCU,WAAU;wBACViC,IAAI,CAAC,MAAM,EAAEtC,KAAKuC,OAAO,CAAC,OAAO,OAAO;wBACxCC,MAAMxC;wBACNyC,UAAU,CAACC;4BACT,MAAMC,UAAUpB,YAAYmB,EAAEE,MAAM,CAAChC,KAAK;4BAC1C,MAAMiC,UAAUF,YAAY,MAAMA,YAAY,OAAO,OAAOG,OAAOH;4BACnEvB,SAAS0B,OAAOC,KAAK,CAACF,WAAqB,OAAOA;wBACpD;wBACAtC,aAAa,OAAOA,gBAAgB,WAAWA,cAAc;wBAC7DN,UAAUgC;wBACVvB,UAAUA;wBACVE,OAAOA,SAAS;wBACf,GAAGU,cAAc;;;;0BAItB,KAAC/B;gBACC4C,iBAAiBlB;gBACjBmB,wBACE,KAAChD;oBACCiB,WAAW,CAAC,kBAAkB,EAAEL,KAAKuC,OAAO,CAAC,OAAO,OAAO;oBAC3DjC,aAAaA,eAAe;oBAC5BN,MAAMA;;;YAKXe;;;AAGP,EAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { Field, NumberField as NumberFieldType } from 'payload';
|
|
2
|
+
import type { NumericFormatProps } from 'react-number-format';
|
|
3
|
+
type FieldTypes = NumberFieldType;
|
|
4
|
+
type NumericConfig = NumericFormatProps;
|
|
5
|
+
export type Config = {} & NumericConfig;
|
|
6
|
+
/**
|
|
7
|
+
* Factory function type for creating a Number field.
|
|
8
|
+
*
|
|
9
|
+
* @param overrides - Any Payload NumberField properties to override (except type)
|
|
10
|
+
* @param config - Numeric format configuration (see react-number-format docs)
|
|
11
|
+
*
|
|
12
|
+
* @returns A Payload Field configuration
|
|
13
|
+
*/
|
|
14
|
+
export type Number = (
|
|
15
|
+
/**
|
|
16
|
+
* Field overrides
|
|
17
|
+
*/
|
|
18
|
+
overrides: Omit<FieldTypes, 'type'>,
|
|
19
|
+
/**
|
|
20
|
+
* Config mapping to Numeric or Pattern formats from https://s-yadav.github.io/react-number-format/docs/numeric_format
|
|
21
|
+
*/
|
|
22
|
+
config: Config) => Field;
|
|
23
|
+
/**
|
|
24
|
+
* Creates an enhanced Number field with custom formatting.
|
|
25
|
+
*
|
|
26
|
+
* This field provides advanced number formatting capabilities using react-number-format:
|
|
27
|
+
* - Custom thousand separators
|
|
28
|
+
* - Decimal precision control
|
|
29
|
+
* - Prefix/suffix support (e.g., currency symbols)
|
|
30
|
+
* - Custom number masks
|
|
31
|
+
* - Read-only mode
|
|
32
|
+
*
|
|
33
|
+
* See https://s-yadav.github.io/react-number-format/docs/numeric_format for all configuration options.
|
|
34
|
+
*
|
|
35
|
+
* @param overrides - Any Payload NumberField properties to override (name, label, required, min, max, etc.)
|
|
36
|
+
* @param config - Numeric format configuration from react-number-format
|
|
37
|
+
* @param config.thousandSeparator - Character to use for thousand separator (e.g., ',')
|
|
38
|
+
* @param config.decimalSeparator - Character to use for decimal separator (e.g., '.')
|
|
39
|
+
* @param config.decimalScale - Number of decimal places
|
|
40
|
+
* @param config.prefix - Prefix to display before the number (e.g., '$')
|
|
41
|
+
* @param config.suffix - Suffix to display after the number (e.g., 'kg')
|
|
42
|
+
* @param config.readOnly - Make the field read-only
|
|
43
|
+
*
|
|
44
|
+
* @returns A Payload Field configuration
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* NumberField(
|
|
49
|
+
* {
|
|
50
|
+
* name: 'price',
|
|
51
|
+
* label: { en: 'Price', de: 'Preis' },
|
|
52
|
+
* required: true
|
|
53
|
+
* },
|
|
54
|
+
* {
|
|
55
|
+
* thousandSeparator: ',',
|
|
56
|
+
* decimalScale: 2,
|
|
57
|
+
* prefix: '$'
|
|
58
|
+
* }
|
|
59
|
+
* )
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare const NumberField: Number;
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Number/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,SAAS,CAAA;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAI7D,KAAK,UAAU,GAAG,eAAe,CAAA;AAEjC,KAAK,aAAa,GAAG,kBAAkB,CAAA;AAEvC,MAAM,MAAM,MAAM,GAAG,EAAE,GAAG,aAAa,CAAA;AAEvC;;;;;;;GAOG;AACH,MAAM,MAAM,MAAM,GAAG;AACnB;;GAEG;AACH,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;AACnC;;GAEG;AACH,MAAM,EAAE,MAAM,KACX,KAAK,CAAA;AAEV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,eAAO,MAAM,WAAW,EAAE,MAiCzB,CAAA"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { deepMerge } from 'payload';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an enhanced Number field with custom formatting.
|
|
4
|
+
*
|
|
5
|
+
* This field provides advanced number formatting capabilities using react-number-format:
|
|
6
|
+
* - Custom thousand separators
|
|
7
|
+
* - Decimal precision control
|
|
8
|
+
* - Prefix/suffix support (e.g., currency symbols)
|
|
9
|
+
* - Custom number masks
|
|
10
|
+
* - Read-only mode
|
|
11
|
+
*
|
|
12
|
+
* See https://s-yadav.github.io/react-number-format/docs/numeric_format for all configuration options.
|
|
13
|
+
*
|
|
14
|
+
* @param overrides - Any Payload NumberField properties to override (name, label, required, min, max, etc.)
|
|
15
|
+
* @param config - Numeric format configuration from react-number-format
|
|
16
|
+
* @param config.thousandSeparator - Character to use for thousand separator (e.g., ',')
|
|
17
|
+
* @param config.decimalSeparator - Character to use for decimal separator (e.g., '.')
|
|
18
|
+
* @param config.decimalScale - Number of decimal places
|
|
19
|
+
* @param config.prefix - Prefix to display before the number (e.g., '$')
|
|
20
|
+
* @param config.suffix - Suffix to display after the number (e.g., 'kg')
|
|
21
|
+
* @param config.readOnly - Make the field read-only
|
|
22
|
+
*
|
|
23
|
+
* @returns A Payload Field configuration
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* NumberField(
|
|
28
|
+
* {
|
|
29
|
+
* name: 'price',
|
|
30
|
+
* label: { en: 'Price', de: 'Preis' },
|
|
31
|
+
* required: true
|
|
32
|
+
* },
|
|
33
|
+
* {
|
|
34
|
+
* thousandSeparator: ',',
|
|
35
|
+
* decimalScale: 2,
|
|
36
|
+
* prefix: '$'
|
|
37
|
+
* }
|
|
38
|
+
* )
|
|
39
|
+
* ```
|
|
40
|
+
*/ export const NumberField = (overrides, config)=>{
|
|
41
|
+
const numberField = deepMerge({
|
|
42
|
+
name: 'number',
|
|
43
|
+
type: 'number',
|
|
44
|
+
required: config.required,
|
|
45
|
+
...config?.min ? {
|
|
46
|
+
min: typeof config.min === 'string' ? parseInt(config.min) : config.min
|
|
47
|
+
} : {},
|
|
48
|
+
...config?.max ? {
|
|
49
|
+
max: typeof config.max === 'string' ? parseInt(config.max) : config.max
|
|
50
|
+
} : {},
|
|
51
|
+
admin: {
|
|
52
|
+
components: {
|
|
53
|
+
Field: {
|
|
54
|
+
clientProps: {
|
|
55
|
+
config
|
|
56
|
+
},
|
|
57
|
+
path: '@loadspark/core/fields/Number/client#NumberComponent'
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
readOnly: config.readOnly
|
|
61
|
+
}
|
|
62
|
+
}, overrides);
|
|
63
|
+
return numberField;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Number/index.ts"],"sourcesContent":["import type { Field, NumberField as NumberFieldType } from 'payload'\nimport type { NumericFormatProps } from 'react-number-format'\n\nimport { deepMerge } from 'payload'\n\ntype FieldTypes = NumberFieldType\n\ntype NumericConfig = NumericFormatProps\n\nexport type Config = {} & NumericConfig\n\n/**\n * Factory function type for creating a Number field.\n *\n * @param overrides - Any Payload NumberField properties to override (except type)\n * @param config - Numeric format configuration (see react-number-format docs)\n *\n * @returns A Payload Field configuration\n */\nexport type Number = (\n /**\n * Field overrides\n */\n overrides: Omit<FieldTypes, 'type'>,\n /**\n * Config mapping to Numeric or Pattern formats from https://s-yadav.github.io/react-number-format/docs/numeric_format\n */\n config: Config,\n) => Field\n\n/**\n * Creates an enhanced Number field with custom formatting.\n *\n * This field provides advanced number formatting capabilities using react-number-format:\n * - Custom thousand separators\n * - Decimal precision control\n * - Prefix/suffix support (e.g., currency symbols)\n * - Custom number masks\n * - Read-only mode\n *\n * See https://s-yadav.github.io/react-number-format/docs/numeric_format for all configuration options.\n *\n * @param overrides - Any Payload NumberField properties to override (name, label, required, min, max, etc.)\n * @param config - Numeric format configuration from react-number-format\n * @param config.thousandSeparator - Character to use for thousand separator (e.g., ',')\n * @param config.decimalSeparator - Character to use for decimal separator (e.g., '.')\n * @param config.decimalScale - Number of decimal places\n * @param config.prefix - Prefix to display before the number (e.g., '$')\n * @param config.suffix - Suffix to display after the number (e.g., 'kg')\n * @param config.readOnly - Make the field read-only\n *\n * @returns A Payload Field configuration\n *\n * @example\n * ```ts\n * NumberField(\n * {\n * name: 'price',\n * label: { en: 'Price', de: 'Preis' },\n * required: true\n * },\n * {\n * thousandSeparator: ',',\n * decimalScale: 2,\n * prefix: '$'\n * }\n * )\n * ```\n */\nexport const NumberField: Number = (overrides, config) => {\n const numberField = deepMerge<FieldTypes, Omit<FieldTypes, 'type'>>(\n {\n name: 'number',\n type: 'number',\n required: config.required,\n ...(config?.min\n ? {\n min: typeof config.min === 'string' ? parseInt(config.min) : config.min,\n }\n : {}),\n ...(config?.max\n ? {\n max: typeof config.max === 'string' ? parseInt(config.max) : config.max,\n }\n : {}),\n\n admin: {\n components: {\n Field: {\n clientProps: {\n config,\n },\n path: '@loadspark/core/fields/Number/client#NumberComponent',\n },\n },\n readOnly: config.readOnly,\n },\n },\n overrides,\n )\n\n return numberField\n}\n"],"names":["deepMerge","NumberField","overrides","config","numberField","name","type","required","min","parseInt","max","admin","components","Field","clientProps","path","readOnly"],"mappings":"AAGA,SAASA,SAAS,QAAQ,UAAS;AA2BnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCC,GACD,OAAO,MAAMC,cAAsB,CAACC,WAAWC;IAC7C,MAAMC,cAAcJ,UAClB;QACEK,MAAM;QACNC,MAAM;QACNC,UAAUJ,OAAOI,QAAQ;QACzB,GAAIJ,QAAQK,MACR;YACEA,KAAK,OAAOL,OAAOK,GAAG,KAAK,WAAWC,SAASN,OAAOK,GAAG,IAAIL,OAAOK,GAAG;QACzE,IACA,CAAC,CAAC;QACN,GAAIL,QAAQO,MACR;YACEA,KAAK,OAAOP,OAAOO,GAAG,KAAK,WAAWD,SAASN,OAAOO,GAAG,IAAIP,OAAOO,GAAG;QACzE,IACA,CAAC,CAAC;QAENC,OAAO;YACLC,YAAY;gBACVC,OAAO;oBACLC,aAAa;wBACXX;oBACF;oBACAY,MAAM;gBACR;YACF;YACAC,UAAUb,OAAOa,QAAQ;QAC3B;IACF,GACAd;IAGF,OAAOE;AACT,EAAC"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Component.d.ts","sourceRoot":"","sources":["../../../src/fields/OpeningHours/Component.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAWnD,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,OAAO,cAAc,CAAA;AAErB,KAAK,KAAK,GAAG,oBAAoB,CAAA;AA4CjC,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAiIjD,CAAA"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/* eslint-disable jsx-a11y/control-has-associated-label */ 'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { FieldDescription, FieldError, FieldLabel, RenderCustomComponent, useField, useTranslation } from '@payloadcms/ui';
|
|
4
|
+
import React, { useMemo } from 'react';
|
|
5
|
+
import './styles.css';
|
|
6
|
+
const days = {
|
|
7
|
+
0: 'monday',
|
|
8
|
+
1: 'tuesday',
|
|
9
|
+
2: 'wednesday',
|
|
10
|
+
3: 'thursday',
|
|
11
|
+
4: 'friday',
|
|
12
|
+
5: 'saturday',
|
|
13
|
+
6: 'sunday'
|
|
14
|
+
};
|
|
15
|
+
/* -------------------------
|
|
16
|
+
Simple AM/PM or 24h validator
|
|
17
|
+
------------------------- */ const isValidTime = (value)=>{
|
|
18
|
+
if (!value) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
const v = value.trim();
|
|
22
|
+
// 24h HH:mm
|
|
23
|
+
if (/^(?:[01]?\d|2[0-3]):[0-5]\d$/.test(v)) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
// 12h h:mm AM/PM
|
|
27
|
+
if (/^\d{1,2}:[0-5]\d\s?(?:am|pm|AM|PM)$/.test(v)) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
};
|
|
32
|
+
/* -------------------------
|
|
33
|
+
Component
|
|
34
|
+
------------------------- */ export const OpeningHoursComponent = ({ field, path, readOnly })=>{
|
|
35
|
+
const { admin: { className, description } = {}, label, required } = field;
|
|
36
|
+
const { t } = useTranslation();
|
|
37
|
+
const { customComponents: { AfterInput, BeforeInput, Description, Label } = {}, errorMessage, setValue, showError, value } = useField({
|
|
38
|
+
path
|
|
39
|
+
});
|
|
40
|
+
const current = useMemo(()=>value ?? {}, [
|
|
41
|
+
value
|
|
42
|
+
]);
|
|
43
|
+
const isReadonly = Boolean(readOnly);
|
|
44
|
+
const classes = [
|
|
45
|
+
'field-type',
|
|
46
|
+
className,
|
|
47
|
+
showError && 'error',
|
|
48
|
+
isReadonly && 'read-only',
|
|
49
|
+
'container'
|
|
50
|
+
].filter(Boolean).join(' ');
|
|
51
|
+
const handleToggle = (day)=>(e)=>{
|
|
52
|
+
setValue({
|
|
53
|
+
...current,
|
|
54
|
+
[day]: {
|
|
55
|
+
...current?.[day] || {},
|
|
56
|
+
open: e.target.checked
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
const handleTime = (day, key)=>(e)=>{
|
|
61
|
+
setValue({
|
|
62
|
+
...current,
|
|
63
|
+
[day]: {
|
|
64
|
+
...current?.[day] || {},
|
|
65
|
+
[key]: e.target.value
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
70
|
+
className: "bfOpeningHoursFieldWrapper field-type",
|
|
71
|
+
children: [
|
|
72
|
+
/*#__PURE__*/ _jsx(RenderCustomComponent, {
|
|
73
|
+
CustomComponent: Label,
|
|
74
|
+
Fallback: /*#__PURE__*/ _jsx(FieldLabel, {
|
|
75
|
+
label: label,
|
|
76
|
+
path: path,
|
|
77
|
+
required: required
|
|
78
|
+
})
|
|
79
|
+
}),
|
|
80
|
+
BeforeInput,
|
|
81
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
82
|
+
className: classes,
|
|
83
|
+
children: [
|
|
84
|
+
/*#__PURE__*/ _jsx(FieldError, {
|
|
85
|
+
message: errorMessage ?? '',
|
|
86
|
+
showError: showError
|
|
87
|
+
}),
|
|
88
|
+
/*#__PURE__*/ _jsx("div", {
|
|
89
|
+
className: "opening-hours-list",
|
|
90
|
+
children: Array.from({
|
|
91
|
+
length: 7
|
|
92
|
+
}).map((_, day)=>{
|
|
93
|
+
const d = day;
|
|
94
|
+
const entry = current[d];
|
|
95
|
+
const open = Boolean(entry?.open);
|
|
96
|
+
const from = entry?.from ?? '';
|
|
97
|
+
const to = entry?.to ?? '';
|
|
98
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
99
|
+
className: "opening-hours-row",
|
|
100
|
+
children: [
|
|
101
|
+
/*#__PURE__*/ _jsxs("label", {
|
|
102
|
+
className: "oh-open",
|
|
103
|
+
children: [
|
|
104
|
+
/*#__PURE__*/ _jsx("div", {
|
|
105
|
+
className: "oh-open-label",
|
|
106
|
+
children: t('loadspark-core:fields:openingHours:openLabel')
|
|
107
|
+
}),
|
|
108
|
+
/*#__PURE__*/ _jsx("input", {
|
|
109
|
+
checked: open,
|
|
110
|
+
disabled: isReadonly,
|
|
111
|
+
onChange: handleToggle(d),
|
|
112
|
+
type: "checkbox"
|
|
113
|
+
})
|
|
114
|
+
]
|
|
115
|
+
}),
|
|
116
|
+
/*#__PURE__*/ _jsx("div", {
|
|
117
|
+
className: "oh-day",
|
|
118
|
+
children: t(`loadspark-core:general:weekdays:long:${days[d]}`)
|
|
119
|
+
}),
|
|
120
|
+
/*#__PURE__*/ _jsx("input", {
|
|
121
|
+
"aria-invalid": open && !isValidTime(from),
|
|
122
|
+
className: "oh-time",
|
|
123
|
+
disabled: !open || isReadonly,
|
|
124
|
+
onChange: handleTime(d, 'from'),
|
|
125
|
+
placeholder: "07:00/7:00 AM",
|
|
126
|
+
type: "text",
|
|
127
|
+
value: from
|
|
128
|
+
}),
|
|
129
|
+
/*#__PURE__*/ _jsx("span", {
|
|
130
|
+
className: "oh-sep",
|
|
131
|
+
children: "–"
|
|
132
|
+
}),
|
|
133
|
+
/*#__PURE__*/ _jsx("input", {
|
|
134
|
+
"aria-invalid": open && !isValidTime(to),
|
|
135
|
+
className: "oh-time",
|
|
136
|
+
disabled: !open || isReadonly,
|
|
137
|
+
onChange: handleTime(d, 'to'),
|
|
138
|
+
placeholder: "17:00/5:00 PM",
|
|
139
|
+
type: "text",
|
|
140
|
+
value: to
|
|
141
|
+
})
|
|
142
|
+
]
|
|
143
|
+
}, day);
|
|
144
|
+
})
|
|
145
|
+
})
|
|
146
|
+
]
|
|
147
|
+
}),
|
|
148
|
+
/*#__PURE__*/ _jsx(RenderCustomComponent, {
|
|
149
|
+
CustomComponent: Description,
|
|
150
|
+
Fallback: /*#__PURE__*/ _jsx(FieldDescription, {
|
|
151
|
+
className: `field-description-${path.replace(/\./g, '__')}`,
|
|
152
|
+
description: description ?? '',
|
|
153
|
+
path: path
|
|
154
|
+
})
|
|
155
|
+
}),
|
|
156
|
+
AfterInput
|
|
157
|
+
]
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
//# sourceMappingURL=Component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/OpeningHours/Component.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/control-has-associated-label */\n'use client'\n\nimport type { TFunction } from '@payloadcms/translations'\nimport type { JSONFieldClientProps } from 'payload'\nimport type { loadsparkCoreTranslationsKeys } from 'src/translations/index.js'\n\nimport {\n FieldDescription,\n FieldError,\n FieldLabel,\n RenderCustomComponent,\n useField,\n useTranslation,\n} from '@payloadcms/ui'\nimport React, { useMemo } from 'react'\n\nimport './styles.css'\n\ntype Props = JSONFieldClientProps\n\ntype DayKey = 0 | 1 | 2 | 3 | 4 | 5 | 6\ninterface DayHours {\n from?: string\n open: boolean\n to?: string\n}\n\nconst days: Record<DayKey, string> = {\n 0: 'monday',\n 1: 'tuesday',\n 2: 'wednesday',\n 3: 'thursday',\n 4: 'friday',\n 5: 'saturday',\n 6: 'sunday',\n}\n\n/* -------------------------\n Simple AM/PM or 24h validator\n------------------------- */\nconst isValidTime = (value?: string) => {\n if (!value) {\n return true\n }\n const v = value.trim()\n\n // 24h HH:mm\n if (/^(?:[01]?\\d|2[0-3]):[0-5]\\d$/.test(v)) {\n return true\n }\n\n // 12h h:mm AM/PM\n if (/^\\d{1,2}:[0-5]\\d\\s?(?:am|pm|AM|PM)$/.test(v)) {\n return true\n }\n\n return false\n}\n\n/* -------------------------\n Component\n------------------------- */\nexport const OpeningHoursComponent: React.FC<Props> = ({ field, path, readOnly }) => {\n const { admin: { className, description } = {}, label, required } = field\n const { t } = useTranslation()\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Label } = {},\n errorMessage,\n setValue,\n showError,\n value,\n } = useField<null | Partial<Record<DayKey, DayHours>>>({ path })\n\n const current = useMemo(() => value ?? {}, [value])\n const isReadonly = Boolean(readOnly)\n\n const classes = [\n 'field-type',\n className,\n showError && 'error',\n isReadonly && 'read-only',\n 'container',\n ]\n .filter(Boolean)\n .join(' ')\n\n const handleToggle = (day: DayKey) => (e: React.ChangeEvent<HTMLInputElement>) => {\n setValue({\n ...current,\n [day]: {\n ...(current?.[day] || {}),\n open: e.target.checked,\n },\n })\n }\n\n const handleTime =\n (day: DayKey, key: 'from' | 'to') => (e: React.ChangeEvent<HTMLInputElement>) => {\n setValue({\n ...current,\n [day]: {\n ...(current?.[day] || {}),\n [key]: e.target.value,\n },\n })\n }\n\n return (\n <div className=\"bfOpeningHoursFieldWrapper field-type\">\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={<FieldLabel label={label} path={path} required={required} />}\n />\n\n {BeforeInput}\n\n <div className={classes}>\n <FieldError message={errorMessage ?? ''} showError={showError} />\n\n <div className=\"opening-hours-list\">\n {Array.from({ length: 7 }).map((_, day) => {\n const d = day as DayKey\n const entry = current[d]\n const open = Boolean(entry?.open)\n const from = entry?.from ?? ''\n const to = entry?.to ?? ''\n\n return (\n <div className=\"opening-hours-row\" key={day}>\n <label className=\"oh-open\">\n <div className=\"oh-open-label\">\n {(t as TFunction<loadsparkCoreTranslationsKeys>)(\n 'loadspark-core:fields:openingHours:openLabel',\n )}\n </div>\n <input\n checked={open}\n disabled={isReadonly}\n onChange={handleToggle(d)}\n type=\"checkbox\"\n />\n </label>\n\n <div className=\"oh-day\">\n {(t as TFunction<loadsparkCoreTranslationsKeys>)(\n `loadspark-core:general:weekdays:long:${days[d]}`,\n )}\n </div>\n\n <input\n aria-invalid={open && !isValidTime(from)}\n className=\"oh-time\"\n disabled={!open || isReadonly}\n onChange={handleTime(d, 'from')}\n placeholder=\"07:00/7:00 AM\"\n type=\"text\"\n value={from}\n />\n\n <span className=\"oh-sep\">–</span>\n\n <input\n aria-invalid={open && !isValidTime(to)}\n className=\"oh-time\"\n disabled={!open || isReadonly}\n onChange={handleTime(d, 'to')}\n placeholder=\"17:00/5:00 PM\"\n type=\"text\"\n value={to}\n />\n </div>\n )\n })}\n </div>\n </div>\n\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={\n <FieldDescription\n className={`field-description-${path.replace(/\\./g, '__')}`}\n description={description ?? ''}\n path={path}\n />\n }\n />\n\n {AfterInput}\n </div>\n )\n}\n"],"names":["FieldDescription","FieldError","FieldLabel","RenderCustomComponent","useField","useTranslation","React","useMemo","days","isValidTime","value","v","trim","test","OpeningHoursComponent","field","path","readOnly","admin","className","description","label","required","t","customComponents","AfterInput","BeforeInput","Description","Label","errorMessage","setValue","showError","current","isReadonly","Boolean","classes","filter","join","handleToggle","day","e","open","target","checked","handleTime","key","div","CustomComponent","Fallback","message","Array","from","length","map","_","d","entry","to","input","disabled","onChange","type","aria-invalid","placeholder","span","replace"],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { Field, JSONField } from 'payload';
|
|
2
|
+
export type DayKey = 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
3
|
+
export type DayHours = {
|
|
4
|
+
from?: string;
|
|
5
|
+
open: boolean;
|
|
6
|
+
to?: string;
|
|
7
|
+
};
|
|
8
|
+
export type OpeningHoursValue = Partial<Record<DayKey, DayHours>>;
|
|
9
|
+
/**
|
|
10
|
+
* Factory function type for creating an OpeningHours field.
|
|
11
|
+
*
|
|
12
|
+
* @param overrides - Any Payload JSONField properties to override (except type)
|
|
13
|
+
*
|
|
14
|
+
* @returns A Payload Field configuration
|
|
15
|
+
*/
|
|
16
|
+
export type OpeningHours = (
|
|
17
|
+
/** Field overrides */
|
|
18
|
+
overrides: Omit<JSONField, 'type'>) => Field;
|
|
19
|
+
/**
|
|
20
|
+
* Creates an OpeningHours field for managing business hours schedules.
|
|
21
|
+
*
|
|
22
|
+
* This field stores structured opening hours data as JSON with:
|
|
23
|
+
* - Day-based organization (Monday = 0, Sunday = 6)
|
|
24
|
+
* - Open/closed status per day
|
|
25
|
+
* - Time ranges (from/to) for each day
|
|
26
|
+
* - Custom UI component for easy editing
|
|
27
|
+
*
|
|
28
|
+
* The stored value structure:
|
|
29
|
+
* ```ts
|
|
30
|
+
* {
|
|
31
|
+
* 0?: { open: boolean, from?: string, to?: string }, // Monday
|
|
32
|
+
* 1?: { open: boolean, from?: string, to?: string }, // Tuesday
|
|
33
|
+
* // ... etc
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @param overrides - Any Payload JSONField properties to override (name, label, required, etc.)
|
|
38
|
+
*
|
|
39
|
+
* @returns A Payload Field configuration
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* OpeningHoursField({
|
|
44
|
+
* name: 'businessHours',
|
|
45
|
+
* label: { en: 'Business Hours', de: 'Öffnungszeiten' },
|
|
46
|
+
* required: true
|
|
47
|
+
* })
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare const OpeningHoursField: OpeningHours;
|
|
51
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/OpeningHours/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAO/C,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAE9C,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;AAEjE;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG;AACzB,sBAAsB;AACtB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,KAC/B,KAAK,CAAA;AAEV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,iBAAiB,EAAE,YAkB/B,CAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { deepMerge } from 'payload';
|
|
2
|
+
import { validate } from './validate.js';
|
|
3
|
+
/**
|
|
4
|
+
* Creates an OpeningHours field for managing business hours schedules.
|
|
5
|
+
*
|
|
6
|
+
* This field stores structured opening hours data as JSON with:
|
|
7
|
+
* - Day-based organization (Monday = 0, Sunday = 6)
|
|
8
|
+
* - Open/closed status per day
|
|
9
|
+
* - Time ranges (from/to) for each day
|
|
10
|
+
* - Custom UI component for easy editing
|
|
11
|
+
*
|
|
12
|
+
* The stored value structure:
|
|
13
|
+
* ```ts
|
|
14
|
+
* {
|
|
15
|
+
* 0?: { open: boolean, from?: string, to?: string }, // Monday
|
|
16
|
+
* 1?: { open: boolean, from?: string, to?: string }, // Tuesday
|
|
17
|
+
* // ... etc
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @param overrides - Any Payload JSONField properties to override (name, label, required, etc.)
|
|
22
|
+
*
|
|
23
|
+
* @returns A Payload Field configuration
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* OpeningHoursField({
|
|
28
|
+
* name: 'businessHours',
|
|
29
|
+
* label: { en: 'Business Hours', de: 'Öffnungszeiten' },
|
|
30
|
+
* required: true
|
|
31
|
+
* })
|
|
32
|
+
* ```
|
|
33
|
+
*/ export const OpeningHoursField = (overrides)=>{
|
|
34
|
+
const openingHoursField = deepMerge({
|
|
35
|
+
name: 'openingHours',
|
|
36
|
+
type: 'json',
|
|
37
|
+
admin: {
|
|
38
|
+
components: {
|
|
39
|
+
Field: {
|
|
40
|
+
path: '@loadspark/core/fields/OpeningHours/client#OpeningHoursComponent'
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
validate
|
|
45
|
+
}, overrides);
|
|
46
|
+
return openingHoursField;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/OpeningHours/index.ts"],"sourcesContent":["import type { Field, JSONField } from 'payload'\n\nimport { deepMerge } from 'payload'\n\nimport { validate } from './validate.js'\n\n// Monday = 0 ... Sunday = 6\nexport type DayKey = 0 | 1 | 2 | 3 | 4 | 5 | 6\n\nexport type DayHours = {\n from?: string\n open: boolean\n to?: string\n}\n\nexport type OpeningHoursValue = Partial<Record<DayKey, DayHours>>\n\n/**\n * Factory function type for creating an OpeningHours field.\n *\n * @param overrides - Any Payload JSONField properties to override (except type)\n *\n * @returns A Payload Field configuration\n */\nexport type OpeningHours = (\n /** Field overrides */\n overrides: Omit<JSONField, 'type'>,\n) => Field\n\n/**\n * Creates an OpeningHours field for managing business hours schedules.\n *\n * This field stores structured opening hours data as JSON with:\n * - Day-based organization (Monday = 0, Sunday = 6)\n * - Open/closed status per day\n * - Time ranges (from/to) for each day\n * - Custom UI component for easy editing\n *\n * The stored value structure:\n * ```ts\n * {\n * 0?: { open: boolean, from?: string, to?: string }, // Monday\n * 1?: { open: boolean, from?: string, to?: string }, // Tuesday\n * // ... etc\n * }\n * ```\n *\n * @param overrides - Any Payload JSONField properties to override (name, label, required, etc.)\n *\n * @returns A Payload Field configuration\n *\n * @example\n * ```ts\n * OpeningHoursField({\n * name: 'businessHours',\n * label: { en: 'Business Hours', de: 'Öffnungszeiten' },\n * required: true\n * })\n * ```\n */\nexport const OpeningHoursField: OpeningHours = (overrides) => {\n const openingHoursField = deepMerge<JSONField, Omit<JSONField, 'type'>>(\n {\n name: 'openingHours',\n type: 'json',\n admin: {\n components: {\n Field: {\n path: '@loadspark/core/fields/OpeningHours/client#OpeningHoursComponent',\n },\n },\n },\n validate,\n },\n overrides,\n )\n\n return openingHoursField\n}\n"],"names":["deepMerge","validate","OpeningHoursField","overrides","openingHoursField","name","type","admin","components","Field","path"],"mappings":"AAEA,SAASA,SAAS,QAAQ,UAAS;AAEnC,SAASC,QAAQ,QAAQ,gBAAe;AAyBxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BC,GACD,OAAO,MAAMC,oBAAkC,CAACC;IAC9C,MAAMC,oBAAoBJ,UACxB;QACEK,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,YAAY;gBACVC,OAAO;oBACLC,MAAM;gBACR;YACF;QACF;QACAT;IACF,GACAE;IAGF,OAAOC;AACT,EAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/* =========================
|
|
2
|
+
Base layout (existing)
|
|
3
|
+
========================= */
|
|
4
|
+
|
|
5
|
+
.bfOpeningHoursFieldWrapper .opening-hours-list {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
gap: calc(var(--base) * 0.5);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.bfOpeningHoursFieldWrapper .opening-hours-row {
|
|
12
|
+
display: grid;
|
|
13
|
+
grid-template-columns: 4rem 6rem 1fr auto 1fr;
|
|
14
|
+
align-items: center;
|
|
15
|
+
gap: calc(var(--base) * 0.5);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.bfOpeningHoursFieldWrapper .oh-day {
|
|
19
|
+
color: var(--theme-elevation-500);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.bfOpeningHoursFieldWrapper .oh-open {
|
|
23
|
+
display: flex;
|
|
24
|
+
flex-direction: column;
|
|
25
|
+
align-items: flex-start;
|
|
26
|
+
gap: 0.25rem;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.bfOpeningHoursFieldWrapper .oh-time {
|
|
30
|
+
padding: 0.75rem;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.bfOpeningHoursFieldWrapper .oh-time[aria-invalid="true"] {
|
|
34
|
+
outline: 1px solid var(--theme-error-500);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.bfOpeningHoursFieldWrapper .oh-sep {
|
|
38
|
+
text-align: center;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* =========================
|
|
42
|
+
NEW: checkbox label
|
|
43
|
+
========================= */
|
|
44
|
+
|
|
45
|
+
.bfOpeningHoursFieldWrapper .oh-open-label {
|
|
46
|
+
font-size: 0.75rem;
|
|
47
|
+
color: var(--theme-elevation-400);
|
|
48
|
+
line-height: 1;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* =========================
|
|
52
|
+
NEW: helper / hint text
|
|
53
|
+
========================= */
|
|
54
|
+
|
|
55
|
+
.bfOpeningHoursFieldWrapper .oh-hint {
|
|
56
|
+
display: block;
|
|
57
|
+
margin-top: calc(var(--base) * 0.5);
|
|
58
|
+
font-size: 0.75rem;
|
|
59
|
+
color: var(--theme-elevation-400);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* =========================
|
|
63
|
+
NEW: focus & accessibility
|
|
64
|
+
========================= */
|
|
65
|
+
|
|
66
|
+
.bfOpeningHoursFieldWrapper .oh-time:focus {
|
|
67
|
+
outline: 1px solid var(--theme-elevation-300);
|
|
68
|
+
outline-offset: 1px;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* =========================
|
|
72
|
+
Responsive layout
|
|
73
|
+
========================= */
|
|
74
|
+
|
|
75
|
+
/* Tablet & down */
|
|
76
|
+
@media (max-width: 768px) {
|
|
77
|
+
.bfOpeningHoursFieldWrapper .opening-hours-row {
|
|
78
|
+
grid-template-columns: 3.5rem 1fr 1fr auto 1fr;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.bfOpeningHoursFieldWrapper .oh-day {
|
|
82
|
+
font-size: 0.875rem;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* Mobile */
|
|
87
|
+
@media (max-width: 480px) {
|
|
88
|
+
.bfOpeningHoursFieldWrapper .opening-hours-row {
|
|
89
|
+
grid-template-columns: 1fr;
|
|
90
|
+
grid-template-areas:
|
|
91
|
+
"open"
|
|
92
|
+
"day"
|
|
93
|
+
"from"
|
|
94
|
+
"sep"
|
|
95
|
+
"to";
|
|
96
|
+
gap: calc(var(--base) * 0.4);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.bfOpeningHoursFieldWrapper .oh-open {
|
|
100
|
+
grid-area: open;
|
|
101
|
+
flex-direction: row;
|
|
102
|
+
align-items: center;
|
|
103
|
+
gap: 0.5rem;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.bfOpeningHoursFieldWrapper .oh-open-label {
|
|
107
|
+
font-size: 0.7rem;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.bfOpeningHoursFieldWrapper .oh-day {
|
|
111
|
+
grid-area: day;
|
|
112
|
+
font-weight: 500;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.bfOpeningHoursFieldWrapper .oh-time {
|
|
116
|
+
width: 100%;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.bfOpeningHoursFieldWrapper .oh-sep {
|
|
120
|
+
grid-area: sep;
|
|
121
|
+
text-align: center;
|
|
122
|
+
color: var(--theme-elevation-400);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/fields/OpeningHours/validate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAKvC,eAAO,MAAM,QAAQ,EAAE,QA4CtB,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export const validate = (value, ctx)=>{
|
|
2
|
+
const t = ctx.req.t;
|
|
3
|
+
if (value == null || value === '') {
|
|
4
|
+
return true;
|
|
5
|
+
}
|
|
6
|
+
try {
|
|
7
|
+
const obj = value;
|
|
8
|
+
const timeRe = /^(?:[01]?\d|2[0-3]):[0-5]\d(?:\s?(?:AM|PM|am|pm))?$/ // HH:MM (optional AM/PM)
|
|
9
|
+
;
|
|
10
|
+
for (const key of Object.keys(obj)){
|
|
11
|
+
const day = Number(key);
|
|
12
|
+
if (!Number.isInteger(day) || day < 0 || day > 6) {
|
|
13
|
+
return t('loadspark-core:validation:openingHours:invalidDay');
|
|
14
|
+
}
|
|
15
|
+
const entry = obj[day];
|
|
16
|
+
if (!entry) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
if (typeof entry.open !== 'boolean') {
|
|
20
|
+
return t('loadspark-core:validation:openingHours:invalidDay');
|
|
21
|
+
}
|
|
22
|
+
if (entry.open) {
|
|
23
|
+
const from = entry.from?.trim();
|
|
24
|
+
const to = entry.to?.trim();
|
|
25
|
+
if (!from || !timeRe.test(from)) {
|
|
26
|
+
return t('loadspark-core:validation:openingHours:invalidFrom');
|
|
27
|
+
}
|
|
28
|
+
if (!to || !timeRe.test(to)) {
|
|
29
|
+
return t('loadspark-core:validation:openingHours:invalidTo');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return true;
|
|
34
|
+
} catch {
|
|
35
|
+
return t('loadspark-core:validation:openingHours:invalidDay');
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/OpeningHours/validate.ts"],"sourcesContent":["import type { TFunction } from '@payloadcms/translations'\nimport type { Validate } from 'payload'\n\nimport type { loadsparkCoreTranslationsKeys } from '../../translations/index.js'\nimport type { DayKey, OpeningHoursValue } from './index.js'\n\nexport const validate: Validate = (value, ctx) => {\n const t = ctx.req.t as TFunction<loadsparkCoreTranslationsKeys>\n\n if (value == null || value === '') {\n return true\n }\n\n try {\n const obj = value as OpeningHoursValue\n const timeRe = /^(?:[01]?\\d|2[0-3]):[0-5]\\d(?:\\s?(?:AM|PM|am|pm))?$/ // HH:MM (optional AM/PM)\n\n for (const key of Object.keys(obj)) {\n const day = Number(key)\n\n if (!Number.isInteger(day) || day < 0 || day > 6) {\n return t('loadspark-core:validation:openingHours:invalidDay')\n }\n\n const entry = obj[day as DayKey]\n if (!entry) {\n continue\n }\n\n if (typeof entry.open !== 'boolean') {\n return t('loadspark-core:validation:openingHours:invalidDay')\n }\n\n if (entry.open) {\n const from = entry.from?.trim()\n const to = entry.to?.trim()\n\n if (!from || !timeRe.test(from)) {\n return t('loadspark-core:validation:openingHours:invalidFrom')\n }\n if (!to || !timeRe.test(to)) {\n return t('loadspark-core:validation:openingHours:invalidTo')\n }\n }\n }\n\n return true\n } catch {\n return t('loadspark-core:validation:openingHours:invalidDay')\n }\n}\n"],"names":["validate","value","ctx","t","req","obj","timeRe","key","Object","keys","day","Number","isInteger","entry","open","from","trim","to","test"],"mappings":"AAMA,OAAO,MAAMA,WAAqB,CAACC,OAAOC;IACxC,MAAMC,IAAID,IAAIE,GAAG,CAACD,CAAC;IAEnB,IAAIF,SAAS,QAAQA,UAAU,IAAI;QACjC,OAAO;IACT;IAEA,IAAI;QACF,MAAMI,MAAMJ;QACZ,MAAMK,SAAS,sDAAsD,yBAAyB;;QAE9F,KAAK,MAAMC,OAAOC,OAAOC,IAAI,CAACJ,KAAM;YAClC,MAAMK,MAAMC,OAAOJ;YAEnB,IAAI,CAACI,OAAOC,SAAS,CAACF,QAAQA,MAAM,KAAKA,MAAM,GAAG;gBAChD,OAAOP,EAAE;YACX;YAEA,MAAMU,QAAQR,GAAG,CAACK,IAAc;YAChC,IAAI,CAACG,OAAO;gBACV;YACF;YAEA,IAAI,OAAOA,MAAMC,IAAI,KAAK,WAAW;gBACnC,OAAOX,EAAE;YACX;YAEA,IAAIU,MAAMC,IAAI,EAAE;gBACd,MAAMC,OAAOF,MAAME,IAAI,EAAEC;gBACzB,MAAMC,KAAKJ,MAAMI,EAAE,EAAED;gBAErB,IAAI,CAACD,QAAQ,CAACT,OAAOY,IAAI,CAACH,OAAO;oBAC/B,OAAOZ,EAAE;gBACX;gBACA,IAAI,CAACc,MAAM,CAACX,OAAOY,IAAI,CAACD,KAAK;oBAC3B,OAAOd,EAAE;gBACX;YACF;QACF;QAEA,OAAO;IACT,EAAE,OAAM;QACN,OAAOA,EAAE;IACX;AACF,EAAC"}
|