@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.
Files changed (445) hide show
  1. package/LICENSE.md +71 -0
  2. package/README.md +628 -0
  3. package/dist/access/accessors.d.ts +22 -0
  4. package/dist/access/accessors.d.ts.map +1 -0
  5. package/dist/access/accessors.js +20 -0
  6. package/dist/access/accessors.js.map +1 -0
  7. package/dist/access/builders.d.ts +4 -0
  8. package/dist/access/builders.d.ts.map +1 -0
  9. package/dist/access/builders.js +26 -0
  10. package/dist/access/builders.js.map +1 -0
  11. package/dist/access/index.d.ts +4 -0
  12. package/dist/access/index.d.ts.map +1 -0
  13. package/dist/access/index.js +5 -0
  14. package/dist/access/index.js.map +1 -0
  15. package/dist/access/roles.d.ts +38 -0
  16. package/dist/access/roles.d.ts.map +1 -0
  17. package/dist/access/roles.js +33 -0
  18. package/dist/access/roles.js.map +1 -0
  19. package/dist/collections/users/access.d.ts +30 -0
  20. package/dist/collections/users/access.d.ts.map +1 -0
  21. package/dist/collections/users/access.js +96 -0
  22. package/dist/collections/users/access.js.map +1 -0
  23. package/dist/collections/users/config.d.ts +9 -0
  24. package/dist/collections/users/config.d.ts.map +1 -0
  25. package/dist/collections/users/config.js +55 -0
  26. package/dist/collections/users/config.js.map +1 -0
  27. package/dist/collections/users/fields.d.ts +4 -0
  28. package/dist/collections/users/fields.d.ts.map +1 -0
  29. package/dist/collections/users/fields.js +97 -0
  30. package/dist/collections/users/fields.js.map +1 -0
  31. package/dist/collections/users/hooks.d.ts +25 -0
  32. package/dist/collections/users/hooks.d.ts.map +1 -0
  33. package/dist/collections/users/hooks.js +50 -0
  34. package/dist/collections/users/hooks.js.map +1 -0
  35. package/dist/collections/users/types.d.ts +18 -0
  36. package/dist/collections/users/types.d.ts.map +1 -0
  37. package/dist/collections/users/types.js +8 -0
  38. package/dist/collections/users/types.js.map +1 -0
  39. package/dist/constants.d.ts +45 -0
  40. package/dist/constants.d.ts.map +1 -0
  41. package/dist/constants.js +46 -0
  42. package/dist/constants.js.map +1 -0
  43. package/dist/exports/access/index.d.ts +2 -0
  44. package/dist/exports/access/index.d.ts.map +1 -0
  45. package/dist/exports/access/index.js +3 -0
  46. package/dist/exports/access/index.js.map +1 -0
  47. package/dist/exports/fields/AlertBox/client.d.ts +2 -0
  48. package/dist/exports/fields/AlertBox/client.d.ts.map +1 -0
  49. package/dist/exports/fields/AlertBox/client.js +3 -0
  50. package/dist/exports/fields/AlertBox/client.js.map +1 -0
  51. package/dist/exports/fields/AlertBox/index.d.ts +2 -0
  52. package/dist/exports/fields/AlertBox/index.d.ts.map +1 -0
  53. package/dist/exports/fields/AlertBox/index.js +3 -0
  54. package/dist/exports/fields/AlertBox/index.js.map +1 -0
  55. package/dist/exports/fields/ColourText/client.d.ts +2 -0
  56. package/dist/exports/fields/ColourText/client.d.ts.map +1 -0
  57. package/dist/exports/fields/ColourText/client.js +3 -0
  58. package/dist/exports/fields/ColourText/client.js.map +1 -0
  59. package/dist/exports/fields/ColourText/index.d.ts +2 -0
  60. package/dist/exports/fields/ColourText/index.d.ts.map +1 -0
  61. package/dist/exports/fields/ColourText/index.js +3 -0
  62. package/dist/exports/fields/ColourText/index.js.map +1 -0
  63. package/dist/exports/fields/Combo/client.d.ts +2 -0
  64. package/dist/exports/fields/Combo/client.d.ts.map +1 -0
  65. package/dist/exports/fields/Combo/client.js +3 -0
  66. package/dist/exports/fields/Combo/client.js.map +1 -0
  67. package/dist/exports/fields/Combo/index.d.ts +2 -0
  68. package/dist/exports/fields/Combo/index.d.ts.map +1 -0
  69. package/dist/exports/fields/Combo/index.js +3 -0
  70. package/dist/exports/fields/Combo/index.js.map +1 -0
  71. package/dist/exports/fields/Countries/index.d.ts +2 -0
  72. package/dist/exports/fields/Countries/index.d.ts.map +1 -0
  73. package/dist/exports/fields/Countries/index.js +3 -0
  74. package/dist/exports/fields/Countries/index.js.map +1 -0
  75. package/dist/exports/fields/Number/client.d.ts +2 -0
  76. package/dist/exports/fields/Number/client.d.ts.map +1 -0
  77. package/dist/exports/fields/Number/client.js +3 -0
  78. package/dist/exports/fields/Number/client.js.map +1 -0
  79. package/dist/exports/fields/Number/index.d.ts +2 -0
  80. package/dist/exports/fields/Number/index.d.ts.map +1 -0
  81. package/dist/exports/fields/Number/index.js +3 -0
  82. package/dist/exports/fields/Number/index.js.map +1 -0
  83. package/dist/exports/fields/OpeningHours/client.d.ts +2 -0
  84. package/dist/exports/fields/OpeningHours/client.d.ts.map +1 -0
  85. package/dist/exports/fields/OpeningHours/client.js +3 -0
  86. package/dist/exports/fields/OpeningHours/client.js.map +1 -0
  87. package/dist/exports/fields/OpeningHours/index.d.ts +2 -0
  88. package/dist/exports/fields/OpeningHours/index.d.ts.map +1 -0
  89. package/dist/exports/fields/OpeningHours/index.js +3 -0
  90. package/dist/exports/fields/OpeningHours/index.js.map +1 -0
  91. package/dist/exports/fields/Pattern/client.d.ts +2 -0
  92. package/dist/exports/fields/Pattern/client.d.ts.map +1 -0
  93. package/dist/exports/fields/Pattern/client.js +3 -0
  94. package/dist/exports/fields/Pattern/client.js.map +1 -0
  95. package/dist/exports/fields/Pattern/index.d.ts +2 -0
  96. package/dist/exports/fields/Pattern/index.d.ts.map +1 -0
  97. package/dist/exports/fields/Pattern/index.js +3 -0
  98. package/dist/exports/fields/Pattern/index.js.map +1 -0
  99. package/dist/exports/fields/Range/client.d.ts +2 -0
  100. package/dist/exports/fields/Range/client.d.ts.map +1 -0
  101. package/dist/exports/fields/Range/client.js +3 -0
  102. package/dist/exports/fields/Range/client.js.map +1 -0
  103. package/dist/exports/fields/Range/index.d.ts +2 -0
  104. package/dist/exports/fields/Range/index.d.ts.map +1 -0
  105. package/dist/exports/fields/Range/index.js +3 -0
  106. package/dist/exports/fields/Range/index.js.map +1 -0
  107. package/dist/exports/fields/Telephone/client.d.ts +2 -0
  108. package/dist/exports/fields/Telephone/client.d.ts.map +1 -0
  109. package/dist/exports/fields/Telephone/client.js +3 -0
  110. package/dist/exports/fields/Telephone/client.js.map +1 -0
  111. package/dist/exports/fields/Telephone/index.d.ts +2 -0
  112. package/dist/exports/fields/Telephone/index.d.ts.map +1 -0
  113. package/dist/exports/fields/Telephone/index.js +3 -0
  114. package/dist/exports/fields/Telephone/index.js.map +1 -0
  115. package/dist/exports/fields/client.d.ts +2 -0
  116. package/dist/exports/fields/client.d.ts.map +1 -0
  117. package/dist/exports/fields/client.js +2 -0
  118. package/dist/exports/fields/client.js.map +1 -0
  119. package/dist/exports/fields/index.d.ts +10 -0
  120. package/dist/exports/fields/index.d.ts.map +1 -0
  121. package/dist/exports/fields/index.js +11 -0
  122. package/dist/exports/fields/index.js.map +1 -0
  123. package/dist/exports/translations/index.d.ts +2 -0
  124. package/dist/exports/translations/index.d.ts.map +1 -0
  125. package/dist/exports/translations/index.js +3 -0
  126. package/dist/exports/translations/index.js.map +1 -0
  127. package/dist/exports/users/index.d.ts +4 -0
  128. package/dist/exports/users/index.d.ts.map +1 -0
  129. package/dist/exports/users/index.js +5 -0
  130. package/dist/exports/users/index.js.map +1 -0
  131. package/dist/exports/validations/index.d.ts +4 -0
  132. package/dist/exports/validations/index.d.ts.map +1 -0
  133. package/dist/exports/validations/index.js +5 -0
  134. package/dist/exports/validations/index.js.map +1 -0
  135. package/dist/fields/AlertBox/Component.d.ts +14 -0
  136. package/dist/fields/AlertBox/Component.d.ts.map +1 -0
  137. package/dist/fields/AlertBox/Component.js +32 -0
  138. package/dist/fields/AlertBox/Component.js.map +1 -0
  139. package/dist/fields/AlertBox/icons/AlertIcon.d.ts +3 -0
  140. package/dist/fields/AlertBox/icons/AlertIcon.d.ts.map +1 -0
  141. package/dist/fields/AlertBox/icons/AlertIcon.js +27 -0
  142. package/dist/fields/AlertBox/icons/AlertIcon.js.map +1 -0
  143. package/dist/fields/AlertBox/icons/ErrorIcon.d.ts +3 -0
  144. package/dist/fields/AlertBox/icons/ErrorIcon.d.ts.map +1 -0
  145. package/dist/fields/AlertBox/icons/ErrorIcon.js +35 -0
  146. package/dist/fields/AlertBox/icons/ErrorIcon.js.map +1 -0
  147. package/dist/fields/AlertBox/icons/InfoIcon.d.ts +3 -0
  148. package/dist/fields/AlertBox/icons/InfoIcon.d.ts.map +1 -0
  149. package/dist/fields/AlertBox/icons/InfoIcon.js +29 -0
  150. package/dist/fields/AlertBox/icons/InfoIcon.js.map +1 -0
  151. package/dist/fields/AlertBox/index.d.ts +76 -0
  152. package/dist/fields/AlertBox/index.d.ts.map +1 -0
  153. package/dist/fields/AlertBox/index.js +64 -0
  154. package/dist/fields/AlertBox/index.js.map +1 -0
  155. package/dist/fields/AlertBox/styles.css +42 -0
  156. package/dist/fields/ColourText/Component.d.ts +8 -0
  157. package/dist/fields/ColourText/Component.d.ts.map +1 -0
  158. package/dist/fields/ColourText/Component.js +102 -0
  159. package/dist/fields/ColourText/Component.js.map +1 -0
  160. package/dist/fields/ColourText/index.d.ts +35 -0
  161. package/dist/fields/ColourText/index.d.ts.map +1 -0
  162. package/dist/fields/ColourText/index.js +41 -0
  163. package/dist/fields/ColourText/index.js.map +1 -0
  164. package/dist/fields/ColourText/styles.css +21 -0
  165. package/dist/fields/ColourText/validate.d.ts +3 -0
  166. package/dist/fields/ColourText/validate.d.ts.map +1 -0
  167. package/dist/fields/ColourText/validate.js +30 -0
  168. package/dist/fields/ColourText/validate.js.map +1 -0
  169. package/dist/fields/Combo/Component.d.ts +16 -0
  170. package/dist/fields/Combo/Component.d.ts.map +1 -0
  171. package/dist/fields/Combo/Component.js +105 -0
  172. package/dist/fields/Combo/Component.js.map +1 -0
  173. package/dist/fields/Combo/beforeValidate.d.ts +4 -0
  174. package/dist/fields/Combo/beforeValidate.d.ts.map +1 -0
  175. package/dist/fields/Combo/beforeValidate.js +30 -0
  176. package/dist/fields/Combo/beforeValidate.js.map +1 -0
  177. package/dist/fields/Combo/index.d.ts +58 -0
  178. package/dist/fields/Combo/index.d.ts.map +1 -0
  179. package/dist/fields/Combo/index.js +74 -0
  180. package/dist/fields/Combo/index.js.map +1 -0
  181. package/dist/fields/Countries/index.d.ts +49 -0
  182. package/dist/fields/Countries/index.d.ts.map +1 -0
  183. package/dist/fields/Countries/index.js +59 -0
  184. package/dist/fields/Countries/index.js.map +1 -0
  185. package/dist/fields/Number/Component.d.ts +14 -0
  186. package/dist/fields/Number/Component.d.ts.map +1 -0
  187. package/dist/fields/Number/Component.js +108 -0
  188. package/dist/fields/Number/Component.js.map +1 -0
  189. package/dist/fields/Number/index.d.ts +64 -0
  190. package/dist/fields/Number/index.d.ts.map +1 -0
  191. package/dist/fields/Number/index.js +66 -0
  192. package/dist/fields/Number/index.js.map +1 -0
  193. package/dist/fields/Number/styles.css +0 -0
  194. package/dist/fields/OpeningHours/Component.d.ts +7 -0
  195. package/dist/fields/OpeningHours/Component.d.ts.map +1 -0
  196. package/dist/fields/OpeningHours/Component.js +161 -0
  197. package/dist/fields/OpeningHours/Component.js.map +1 -0
  198. package/dist/fields/OpeningHours/index.d.ts +51 -0
  199. package/dist/fields/OpeningHours/index.d.ts.map +1 -0
  200. package/dist/fields/OpeningHours/index.js +49 -0
  201. package/dist/fields/OpeningHours/index.js.map +1 -0
  202. package/dist/fields/OpeningHours/styles.css +124 -0
  203. package/dist/fields/OpeningHours/validate.d.ts +3 -0
  204. package/dist/fields/OpeningHours/validate.d.ts.map +1 -0
  205. package/dist/fields/OpeningHours/validate.js +39 -0
  206. package/dist/fields/OpeningHours/validate.js.map +1 -0
  207. package/dist/fields/Pattern/Component.d.ts +14 -0
  208. package/dist/fields/Pattern/Component.d.ts.map +1 -0
  209. package/dist/fields/Pattern/Component.js +88 -0
  210. package/dist/fields/Pattern/Component.js.map +1 -0
  211. package/dist/fields/Pattern/index.d.ts +59 -0
  212. package/dist/fields/Pattern/index.d.ts.map +1 -0
  213. package/dist/fields/Pattern/index.js +55 -0
  214. package/dist/fields/Pattern/index.js.map +1 -0
  215. package/dist/fields/Pattern/styles.css +34 -0
  216. package/dist/fields/Range/Component.d.ts +13 -0
  217. package/dist/fields/Range/Component.d.ts.map +1 -0
  218. package/dist/fields/Range/Component.js +138 -0
  219. package/dist/fields/Range/Component.js.map +1 -0
  220. package/dist/fields/Range/index.d.ts +82 -0
  221. package/dist/fields/Range/index.d.ts.map +1 -0
  222. package/dist/fields/Range/index.js +63 -0
  223. package/dist/fields/Range/index.js.map +1 -0
  224. package/dist/fields/Range/range.scss +138 -0
  225. package/dist/fields/Range/types.d.ts +5 -0
  226. package/dist/fields/Range/types.d.ts.map +1 -0
  227. package/dist/fields/Range/types.js +3 -0
  228. package/dist/fields/Range/types.js.map +1 -0
  229. package/dist/fields/Telephone/Component.d.ts +13 -0
  230. package/dist/fields/Telephone/Component.d.ts.map +1 -0
  231. package/dist/fields/Telephone/Component.js +92 -0
  232. package/dist/fields/Telephone/Component.js.map +1 -0
  233. package/dist/fields/Telephone/index.d.ts +99 -0
  234. package/dist/fields/Telephone/index.d.ts.map +1 -0
  235. package/dist/fields/Telephone/index.js +59 -0
  236. package/dist/fields/Telephone/index.js.map +1 -0
  237. package/dist/fields/Telephone/validate.d.ts +3 -0
  238. package/dist/fields/Telephone/validate.d.ts.map +1 -0
  239. package/dist/fields/Telephone/validate.js +13 -0
  240. package/dist/fields/Telephone/validate.js.map +1 -0
  241. package/dist/index.d.ts +10 -0
  242. package/dist/index.d.ts.map +1 -0
  243. package/dist/index.js +35 -0
  244. package/dist/index.js.map +1 -0
  245. package/dist/translations/index.d.ts +6 -0
  246. package/dist/translations/index.d.ts.map +1 -0
  247. package/dist/translations/index.js +92 -0
  248. package/dist/translations/index.js.map +1 -0
  249. package/dist/translations/languages/ar.d.ts +576 -0
  250. package/dist/translations/languages/ar.d.ts.map +1 -0
  251. package/dist/translations/languages/ar.js +329 -0
  252. package/dist/translations/languages/ar.js.map +1 -0
  253. package/dist/translations/languages/az.d.ts +576 -0
  254. package/dist/translations/languages/az.d.ts.map +1 -0
  255. package/dist/translations/languages/az.js +329 -0
  256. package/dist/translations/languages/az.js.map +1 -0
  257. package/dist/translations/languages/bg.d.ts +576 -0
  258. package/dist/translations/languages/bg.d.ts.map +1 -0
  259. package/dist/translations/languages/bg.js +329 -0
  260. package/dist/translations/languages/bg.js.map +1 -0
  261. package/dist/translations/languages/bnBd.d.ts +576 -0
  262. package/dist/translations/languages/bnBd.d.ts.map +1 -0
  263. package/dist/translations/languages/bnBd.js +329 -0
  264. package/dist/translations/languages/bnBd.js.map +1 -0
  265. package/dist/translations/languages/bnIn.d.ts +576 -0
  266. package/dist/translations/languages/bnIn.d.ts.map +1 -0
  267. package/dist/translations/languages/bnIn.js +329 -0
  268. package/dist/translations/languages/bnIn.js.map +1 -0
  269. package/dist/translations/languages/ca.d.ts +576 -0
  270. package/dist/translations/languages/ca.d.ts.map +1 -0
  271. package/dist/translations/languages/ca.js +329 -0
  272. package/dist/translations/languages/ca.js.map +1 -0
  273. package/dist/translations/languages/cs.d.ts +576 -0
  274. package/dist/translations/languages/cs.d.ts.map +1 -0
  275. package/dist/translations/languages/cs.js +329 -0
  276. package/dist/translations/languages/cs.js.map +1 -0
  277. package/dist/translations/languages/da.d.ts +576 -0
  278. package/dist/translations/languages/da.d.ts.map +1 -0
  279. package/dist/translations/languages/da.js +329 -0
  280. package/dist/translations/languages/da.js.map +1 -0
  281. package/dist/translations/languages/de.d.ts +576 -0
  282. package/dist/translations/languages/de.d.ts.map +1 -0
  283. package/dist/translations/languages/de.js +329 -0
  284. package/dist/translations/languages/de.js.map +1 -0
  285. package/dist/translations/languages/en.d.ts +576 -0
  286. package/dist/translations/languages/en.d.ts.map +1 -0
  287. package/dist/translations/languages/en.js +329 -0
  288. package/dist/translations/languages/en.js.map +1 -0
  289. package/dist/translations/languages/es.d.ts +576 -0
  290. package/dist/translations/languages/es.d.ts.map +1 -0
  291. package/dist/translations/languages/es.js +329 -0
  292. package/dist/translations/languages/es.js.map +1 -0
  293. package/dist/translations/languages/et.d.ts +576 -0
  294. package/dist/translations/languages/et.d.ts.map +1 -0
  295. package/dist/translations/languages/et.js +329 -0
  296. package/dist/translations/languages/et.js.map +1 -0
  297. package/dist/translations/languages/fa.d.ts +576 -0
  298. package/dist/translations/languages/fa.d.ts.map +1 -0
  299. package/dist/translations/languages/fa.js +329 -0
  300. package/dist/translations/languages/fa.js.map +1 -0
  301. package/dist/translations/languages/fr.d.ts +576 -0
  302. package/dist/translations/languages/fr.d.ts.map +1 -0
  303. package/dist/translations/languages/fr.js +329 -0
  304. package/dist/translations/languages/fr.js.map +1 -0
  305. package/dist/translations/languages/he.d.ts +576 -0
  306. package/dist/translations/languages/he.d.ts.map +1 -0
  307. package/dist/translations/languages/he.js +329 -0
  308. package/dist/translations/languages/he.js.map +1 -0
  309. package/dist/translations/languages/hr.d.ts +576 -0
  310. package/dist/translations/languages/hr.d.ts.map +1 -0
  311. package/dist/translations/languages/hr.js +329 -0
  312. package/dist/translations/languages/hr.js.map +1 -0
  313. package/dist/translations/languages/hu.d.ts +576 -0
  314. package/dist/translations/languages/hu.d.ts.map +1 -0
  315. package/dist/translations/languages/hu.js +329 -0
  316. package/dist/translations/languages/hu.js.map +1 -0
  317. package/dist/translations/languages/hy.d.ts +576 -0
  318. package/dist/translations/languages/hy.d.ts.map +1 -0
  319. package/dist/translations/languages/hy.js +329 -0
  320. package/dist/translations/languages/hy.js.map +1 -0
  321. package/dist/translations/languages/id.d.ts +576 -0
  322. package/dist/translations/languages/id.d.ts.map +1 -0
  323. package/dist/translations/languages/id.js +329 -0
  324. package/dist/translations/languages/id.js.map +1 -0
  325. package/dist/translations/languages/is.d.ts +576 -0
  326. package/dist/translations/languages/is.d.ts.map +1 -0
  327. package/dist/translations/languages/is.js +329 -0
  328. package/dist/translations/languages/is.js.map +1 -0
  329. package/dist/translations/languages/it.d.ts +576 -0
  330. package/dist/translations/languages/it.d.ts.map +1 -0
  331. package/dist/translations/languages/it.js +329 -0
  332. package/dist/translations/languages/it.js.map +1 -0
  333. package/dist/translations/languages/ja.d.ts +576 -0
  334. package/dist/translations/languages/ja.d.ts.map +1 -0
  335. package/dist/translations/languages/ja.js +329 -0
  336. package/dist/translations/languages/ja.js.map +1 -0
  337. package/dist/translations/languages/ko.d.ts +576 -0
  338. package/dist/translations/languages/ko.d.ts.map +1 -0
  339. package/dist/translations/languages/ko.js +329 -0
  340. package/dist/translations/languages/ko.js.map +1 -0
  341. package/dist/translations/languages/lt.d.ts +576 -0
  342. package/dist/translations/languages/lt.d.ts.map +1 -0
  343. package/dist/translations/languages/lt.js +329 -0
  344. package/dist/translations/languages/lt.js.map +1 -0
  345. package/dist/translations/languages/lv.d.ts +576 -0
  346. package/dist/translations/languages/lv.d.ts.map +1 -0
  347. package/dist/translations/languages/lv.js +329 -0
  348. package/dist/translations/languages/lv.js.map +1 -0
  349. package/dist/translations/languages/my.d.ts +576 -0
  350. package/dist/translations/languages/my.d.ts.map +1 -0
  351. package/dist/translations/languages/my.js +329 -0
  352. package/dist/translations/languages/my.js.map +1 -0
  353. package/dist/translations/languages/nb.d.ts +576 -0
  354. package/dist/translations/languages/nb.d.ts.map +1 -0
  355. package/dist/translations/languages/nb.js +329 -0
  356. package/dist/translations/languages/nb.js.map +1 -0
  357. package/dist/translations/languages/nl.d.ts +576 -0
  358. package/dist/translations/languages/nl.d.ts.map +1 -0
  359. package/dist/translations/languages/nl.js +329 -0
  360. package/dist/translations/languages/nl.js.map +1 -0
  361. package/dist/translations/languages/pl.d.ts +576 -0
  362. package/dist/translations/languages/pl.d.ts.map +1 -0
  363. package/dist/translations/languages/pl.js +329 -0
  364. package/dist/translations/languages/pl.js.map +1 -0
  365. package/dist/translations/languages/pt.d.ts +576 -0
  366. package/dist/translations/languages/pt.d.ts.map +1 -0
  367. package/dist/translations/languages/pt.js +329 -0
  368. package/dist/translations/languages/pt.js.map +1 -0
  369. package/dist/translations/languages/ro.d.ts +576 -0
  370. package/dist/translations/languages/ro.d.ts.map +1 -0
  371. package/dist/translations/languages/ro.js +329 -0
  372. package/dist/translations/languages/ro.js.map +1 -0
  373. package/dist/translations/languages/rs.d.ts +576 -0
  374. package/dist/translations/languages/rs.d.ts.map +1 -0
  375. package/dist/translations/languages/rs.js +329 -0
  376. package/dist/translations/languages/rs.js.map +1 -0
  377. package/dist/translations/languages/rsLatin.d.ts +576 -0
  378. package/dist/translations/languages/rsLatin.d.ts.map +1 -0
  379. package/dist/translations/languages/rsLatin.js +329 -0
  380. package/dist/translations/languages/rsLatin.js.map +1 -0
  381. package/dist/translations/languages/ru.d.ts +576 -0
  382. package/dist/translations/languages/ru.d.ts.map +1 -0
  383. package/dist/translations/languages/ru.js +329 -0
  384. package/dist/translations/languages/ru.js.map +1 -0
  385. package/dist/translations/languages/sk.d.ts +576 -0
  386. package/dist/translations/languages/sk.d.ts.map +1 -0
  387. package/dist/translations/languages/sk.js +329 -0
  388. package/dist/translations/languages/sk.js.map +1 -0
  389. package/dist/translations/languages/sl.d.ts +576 -0
  390. package/dist/translations/languages/sl.d.ts.map +1 -0
  391. package/dist/translations/languages/sl.js +329 -0
  392. package/dist/translations/languages/sl.js.map +1 -0
  393. package/dist/translations/languages/sv.d.ts +576 -0
  394. package/dist/translations/languages/sv.d.ts.map +1 -0
  395. package/dist/translations/languages/sv.js +329 -0
  396. package/dist/translations/languages/sv.js.map +1 -0
  397. package/dist/translations/languages/ta.d.ts +576 -0
  398. package/dist/translations/languages/ta.d.ts.map +1 -0
  399. package/dist/translations/languages/ta.js +329 -0
  400. package/dist/translations/languages/ta.js.map +1 -0
  401. package/dist/translations/languages/th.d.ts +576 -0
  402. package/dist/translations/languages/th.d.ts.map +1 -0
  403. package/dist/translations/languages/th.js +329 -0
  404. package/dist/translations/languages/th.js.map +1 -0
  405. package/dist/translations/languages/tr.d.ts +576 -0
  406. package/dist/translations/languages/tr.d.ts.map +1 -0
  407. package/dist/translations/languages/tr.js +329 -0
  408. package/dist/translations/languages/tr.js.map +1 -0
  409. package/dist/translations/languages/uk.d.ts +576 -0
  410. package/dist/translations/languages/uk.d.ts.map +1 -0
  411. package/dist/translations/languages/uk.js +329 -0
  412. package/dist/translations/languages/uk.js.map +1 -0
  413. package/dist/translations/languages/vi.d.ts +576 -0
  414. package/dist/translations/languages/vi.d.ts.map +1 -0
  415. package/dist/translations/languages/vi.js +329 -0
  416. package/dist/translations/languages/vi.js.map +1 -0
  417. package/dist/translations/languages/zh.d.ts +576 -0
  418. package/dist/translations/languages/zh.d.ts.map +1 -0
  419. package/dist/translations/languages/zh.js +329 -0
  420. package/dist/translations/languages/zh.js.map +1 -0
  421. package/dist/translations/languages/zhTw.d.ts +576 -0
  422. package/dist/translations/languages/zhTw.d.ts.map +1 -0
  423. package/dist/translations/languages/zhTw.js +329 -0
  424. package/dist/translations/languages/zhTw.js.map +1 -0
  425. package/dist/types.d.ts +269 -0
  426. package/dist/types.d.ts.map +1 -0
  427. package/dist/types.js +257 -0
  428. package/dist/types.js.map +1 -0
  429. package/dist/utils.d.ts +32 -0
  430. package/dist/utils.d.ts.map +1 -0
  431. package/dist/utils.js +82 -0
  432. package/dist/utils.js.map +1 -0
  433. package/dist/validations/dates.d.ts +230 -0
  434. package/dist/validations/dates.d.ts.map +1 -0
  435. package/dist/validations/dates.js +254 -0
  436. package/dist/validations/dates.js.map +1 -0
  437. package/dist/validations/numbers.d.ts +118 -0
  438. package/dist/validations/numbers.d.ts.map +1 -0
  439. package/dist/validations/numbers.js +151 -0
  440. package/dist/validations/numbers.js.map +1 -0
  441. package/dist/validations/relationLinkedUser.d.ts +43 -0
  442. package/dist/validations/relationLinkedUser.d.ts.map +1 -0
  443. package/dist/validations/relationLinkedUser.js +54 -0
  444. package/dist/validations/relationLinkedUser.js.map +1 -0
  445. 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":"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"}
@@ -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,7 @@
1
+ import type { JSONFieldClientProps } from 'payload';
2
+ import React from 'react';
3
+ import './styles.css';
4
+ type Props = JSONFieldClientProps;
5
+ export declare const OpeningHoursComponent: React.FC<Props>;
6
+ export {};
7
+ //# sourceMappingURL=Component.d.ts.map
@@ -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,3 @@
1
+ import type { Validate } from 'payload';
2
+ export declare const validate: Validate;
3
+ //# sourceMappingURL=validate.d.ts.map
@@ -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"}