@panneau/fields 5.0.0-alpha.2 → 5.0.0-alpha.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. package/README.md +186 -20
  2. package/dist/address/AddressField.css +44 -0
  3. package/dist/address/AddressField.d.ts +37 -0
  4. package/dist/address/AddressField.d.ts.map +1 -0
  5. package/dist/address/AddressField.js +411 -0
  6. package/dist/address/AddressField.js.map +1 -0
  7. package/dist/address/AddressField.module.js +22 -0
  8. package/dist/address/AddressField.module.js.map +1 -0
  9. package/dist/address/address.d.ts +23 -0
  10. package/dist/address/address.d.ts.map +1 -0
  11. package/dist/address/address.js +58 -0
  12. package/dist/address/address.js.map +1 -0
  13. package/dist/address/index.d.ts +3 -0
  14. package/dist/address/index.d.ts.map +1 -0
  15. package/dist/address/index.js +3 -0
  16. package/dist/boolean/BooleanField.d.ts +1 -1
  17. package/dist/boolean/BooleanField.js +78 -17
  18. package/dist/boolean/BooleanField.js.map +1 -1
  19. package/dist/boolean/index.d.ts +1 -1
  20. package/dist/color/ColorField.css +9 -0
  21. package/dist/color/ColorField.d.ts +12 -5
  22. package/dist/color/ColorField.d.ts.map +1 -1
  23. package/dist/color/ColorField.js +341 -81
  24. package/dist/color/ColorField.js.map +1 -1
  25. package/dist/color/ColorField.module.js +4 -2
  26. package/dist/color/ColorField.module.js.map +1 -1
  27. package/dist/color/index.d.ts +2 -1
  28. package/dist/color/index.d.ts.map +1 -1
  29. package/dist/color/index.js +3 -1
  30. package/dist/color/palette.d.ts +23 -0
  31. package/dist/color/palette.d.ts.map +1 -0
  32. package/dist/color/palette.js +34 -0
  33. package/dist/color/palette.js.map +1 -0
  34. package/dist/compound/Compound.css +26 -0
  35. package/dist/compound/Compound.module.js +16 -0
  36. package/dist/compound/Compound.module.js.map +1 -0
  37. package/dist/compound/compound.d.ts +56 -0
  38. package/dist/compound/compound.d.ts.map +1 -0
  39. package/dist/compound/compound.js +186 -0
  40. package/dist/compound/compound.js.map +1 -0
  41. package/dist/country/CountryField.css +42 -0
  42. package/dist/country/CountryField.d.ts +32 -0
  43. package/dist/country/CountryField.d.ts.map +1 -0
  44. package/dist/country/CountryField.js +424 -0
  45. package/dist/country/CountryField.js.map +1 -0
  46. package/dist/country/CountryField.module.js +20 -0
  47. package/dist/country/CountryField.module.js.map +1 -0
  48. package/dist/country/codes.d.ts +6 -0
  49. package/dist/country/codes.d.ts.map +1 -0
  50. package/dist/country/codes.js +261 -0
  51. package/dist/country/codes.js.map +1 -0
  52. package/dist/country/countries.d.ts +32 -0
  53. package/dist/country/countries.d.ts.map +1 -0
  54. package/dist/country/countries.js +60 -0
  55. package/dist/country/countries.js.map +1 -0
  56. package/dist/country/index.d.ts +3 -0
  57. package/dist/country/index.d.ts.map +1 -0
  58. package/dist/country/index.js +4 -0
  59. package/dist/credits/CreditsField.d.ts +15 -0
  60. package/dist/credits/CreditsField.d.ts.map +1 -0
  61. package/dist/credits/CreditsField.js +58 -0
  62. package/dist/credits/CreditsField.js.map +1 -0
  63. package/dist/credits/credits.d.ts +18 -0
  64. package/dist/credits/credits.d.ts.map +1 -0
  65. package/dist/credits/credits.js +33 -0
  66. package/dist/credits/credits.js.map +1 -0
  67. package/dist/credits/index.d.ts +5 -0
  68. package/dist/credits/index.d.ts.map +1 -0
  69. package/dist/credits/index.js +3 -0
  70. package/dist/date/DateField.d.ts +1 -1
  71. package/dist/date/DateField.js.map +1 -1
  72. package/dist/date/index.d.ts +1 -1
  73. package/dist/daterange/DateRangeField.css +9 -0
  74. package/dist/daterange/DateRangeField.d.ts +31 -0
  75. package/dist/daterange/DateRangeField.d.ts.map +1 -0
  76. package/dist/daterange/DateRangeField.js +372 -0
  77. package/dist/daterange/DateRangeField.js.map +1 -0
  78. package/dist/daterange/DateRangeField.module.js +12 -0
  79. package/dist/daterange/DateRangeField.module.js.map +1 -0
  80. package/dist/daterange/index.d.ts +3 -0
  81. package/dist/daterange/index.d.ts.map +1 -0
  82. package/dist/daterange/index.js +3 -0
  83. package/dist/daterange/range.d.ts +61 -0
  84. package/dist/daterange/range.d.ts.map +1 -0
  85. package/dist/daterange/range.js +119 -0
  86. package/dist/daterange/range.js.map +1 -0
  87. package/dist/datetime/DateTimeField.d.ts +1 -1
  88. package/dist/datetime/DateTimeField.js +107 -20
  89. package/dist/datetime/DateTimeField.js.map +1 -1
  90. package/dist/datetime/index.d.ts +1 -1
  91. package/dist/duration/DurationField.css +11 -0
  92. package/dist/duration/DurationField.d.ts +67 -0
  93. package/dist/duration/DurationField.d.ts.map +1 -0
  94. package/dist/duration/DurationField.js +260 -0
  95. package/dist/duration/DurationField.js.map +1 -0
  96. package/dist/duration/DurationField.module.js +12 -0
  97. package/dist/duration/DurationField.module.js.map +1 -0
  98. package/dist/duration/index.d.ts +2 -0
  99. package/dist/duration/index.d.ts.map +1 -0
  100. package/dist/duration/index.js +1 -0
  101. package/dist/email/EmailField.d.ts +2 -2
  102. package/dist/email/EmailField.js.map +1 -1
  103. package/dist/email/index.d.ts +1 -1
  104. package/dist/embed/EmbedField.css +60 -0
  105. package/dist/embed/EmbedField.d.ts +29 -0
  106. package/dist/embed/EmbedField.d.ts.map +1 -0
  107. package/dist/embed/EmbedField.js +309 -0
  108. package/dist/embed/EmbedField.js.map +1 -0
  109. package/dist/embed/EmbedField.module.js +22 -0
  110. package/dist/embed/EmbedField.module.js.map +1 -0
  111. package/dist/embed/index.d.ts +3 -0
  112. package/dist/embed/index.d.ts.map +1 -0
  113. package/dist/embed/index.js +3 -0
  114. package/dist/file/FileField.css +54 -0
  115. package/dist/file/FileField.d.ts +50 -0
  116. package/dist/file/FileField.d.ts.map +1 -0
  117. package/dist/file/FileField.js +288 -0
  118. package/dist/file/FileField.js.map +1 -0
  119. package/dist/file/FileField.module.js +22 -0
  120. package/dist/file/FileField.module.js.map +1 -0
  121. package/dist/file/index.d.ts +3 -0
  122. package/dist/file/index.d.ts.map +1 -0
  123. package/dist/file/index.js +1 -0
  124. package/dist/group/GroupField.css +20 -3
  125. package/dist/group/GroupField.d.ts +10 -4
  126. package/dist/group/GroupField.d.ts.map +1 -1
  127. package/dist/group/GroupField.js +71 -66
  128. package/dist/group/GroupField.js.map +1 -1
  129. package/dist/group/GroupField.module.js +10 -2
  130. package/dist/group/GroupField.module.js.map +1 -1
  131. package/dist/group/index.d.ts +1 -1
  132. package/dist/index.d.ts +21 -7
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +14 -2
  135. package/dist/json/JsonField.css +7 -0
  136. package/dist/json/JsonField.d.ts +22 -0
  137. package/dist/json/JsonField.d.ts.map +1 -0
  138. package/dist/json/JsonField.js +207 -0
  139. package/dist/json/JsonField.js.map +1 -0
  140. package/dist/json/JsonField.module.js +8 -0
  141. package/dist/json/JsonField.module.js.map +1 -0
  142. package/dist/json/index.d.ts +2 -0
  143. package/dist/json/index.d.ts.map +1 -0
  144. package/dist/json/index.js +1 -0
  145. package/dist/link/LinkField.css +12 -0
  146. package/dist/link/LinkField.d.ts +38 -0
  147. package/dist/link/LinkField.d.ts.map +1 -0
  148. package/dist/link/LinkField.js +742 -0
  149. package/dist/link/LinkField.js.map +1 -0
  150. package/dist/link/LinkField.module.js +8 -0
  151. package/dist/link/LinkField.module.js.map +1 -0
  152. package/dist/link/index.d.ts +3 -0
  153. package/dist/link/index.d.ts.map +1 -0
  154. package/dist/link/index.js +3 -0
  155. package/dist/link/link.d.ts +30 -0
  156. package/dist/link/link.d.ts.map +1 -0
  157. package/dist/link/link.js +63 -0
  158. package/dist/link/link.js.map +1 -0
  159. package/dist/link/pages.d.ts +17 -0
  160. package/dist/link/pages.d.ts.map +1 -0
  161. package/dist/link/pages.js +104 -0
  162. package/dist/link/pages.js.map +1 -0
  163. package/dist/locales/index.js.map +1 -1
  164. package/dist/localized/LocalizedField.css +27 -6
  165. package/dist/localized/LocalizedField.d.ts +19 -8
  166. package/dist/localized/LocalizedField.d.ts.map +1 -1
  167. package/dist/localized/LocalizedField.js +238 -105
  168. package/dist/localized/LocalizedField.js.map +1 -1
  169. package/dist/localized/LocalizedField.module.js +10 -4
  170. package/dist/localized/LocalizedField.module.js.map +1 -1
  171. package/dist/localized/index.d.ts +1 -1
  172. package/dist/location/LocationField.css +54 -0
  173. package/dist/location/LocationField.d.ts +31 -0
  174. package/dist/location/LocationField.d.ts.map +1 -0
  175. package/dist/location/LocationField.js +487 -0
  176. package/dist/location/LocationField.js.map +1 -0
  177. package/dist/location/LocationField.module.js +22 -0
  178. package/dist/location/LocationField.module.js.map +1 -0
  179. package/dist/location/LocationMap.d.ts +25 -0
  180. package/dist/location/LocationMap.d.ts.map +1 -0
  181. package/dist/location/LocationMap.js +205 -0
  182. package/dist/location/LocationMap.js.map +1 -0
  183. package/dist/location/index.d.ts +5 -0
  184. package/dist/location/index.d.ts.map +1 -0
  185. package/dist/location/index.js +4 -0
  186. package/dist/location/leafletCss.d.ts +2 -0
  187. package/dist/location/leafletCss.d.ts.map +1 -0
  188. package/dist/location/leafletCss.js +6 -0
  189. package/dist/location/leafletCss.js.map +1 -0
  190. package/dist/location/nominatim.d.ts +23 -0
  191. package/dist/location/nominatim.d.ts.map +1 -0
  192. package/dist/location/nominatim.js +79 -0
  193. package/dist/location/nominatim.js.map +1 -0
  194. package/dist/location/search.d.ts +10 -0
  195. package/dist/location/search.d.ts.map +1 -0
  196. package/dist/location/search.js +83 -0
  197. package/dist/location/search.js.map +1 -0
  198. package/dist/location/types.d.ts +46 -0
  199. package/dist/location/types.d.ts.map +1 -0
  200. package/dist/missing/MissingField.d.ts +4 -3
  201. package/dist/missing/MissingField.d.ts.map +1 -1
  202. package/dist/missing/MissingField.js +3 -2
  203. package/dist/missing/MissingField.js.map +1 -1
  204. package/dist/money/MoneyField.d.ts +28 -0
  205. package/dist/money/MoneyField.d.ts.map +1 -0
  206. package/dist/money/MoneyField.js +269 -0
  207. package/dist/money/MoneyField.js.map +1 -0
  208. package/dist/money/index.d.ts +3 -0
  209. package/dist/money/index.d.ts.map +1 -0
  210. package/dist/money/index.js +3 -0
  211. package/dist/money/money.d.ts +27 -0
  212. package/dist/money/money.d.ts.map +1 -0
  213. package/dist/money/money.js +56 -0
  214. package/dist/money/money.js.map +1 -0
  215. package/dist/number/NumberField.d.ts +1 -1
  216. package/dist/number/NumberField.js.map +1 -1
  217. package/dist/number/index.d.ts +1 -1
  218. package/dist/range/RangeField.d.ts +22 -0
  219. package/dist/range/RangeField.d.ts.map +1 -0
  220. package/dist/range/RangeField.js +203 -0
  221. package/dist/range/RangeField.js.map +1 -0
  222. package/dist/range/index.d.ts +2 -0
  223. package/dist/range/index.d.ts.map +1 -0
  224. package/dist/range/index.js +1 -0
  225. package/dist/region/RegionField.d.ts +23 -0
  226. package/dist/region/RegionField.d.ts.map +1 -0
  227. package/dist/region/RegionField.js +174 -0
  228. package/dist/region/RegionField.js.map +1 -0
  229. package/dist/region/RegionFlag.css +9 -0
  230. package/dist/region/RegionFlag.d.ts +20 -0
  231. package/dist/region/RegionFlag.d.ts.map +1 -0
  232. package/dist/region/RegionFlag.js +61 -0
  233. package/dist/region/RegionFlag.js.map +1 -0
  234. package/dist/region/RegionFlag.module.js +8 -0
  235. package/dist/region/RegionFlag.module.js.map +1 -0
  236. package/dist/region/data.d.ts +5 -0
  237. package/dist/region/data.d.ts.map +1 -0
  238. package/dist/region/data.js +513 -0
  239. package/dist/region/data.js.map +1 -0
  240. package/dist/region/flags/CA.d.ts +4 -0
  241. package/dist/region/flags/CA.d.ts.map +1 -0
  242. package/dist/region/flags/CA.js +21 -0
  243. package/dist/region/flags/CA.js.map +1 -0
  244. package/dist/region/flags/US.d.ts +4 -0
  245. package/dist/region/flags/US.d.ts.map +1 -0
  246. package/dist/region/flags/US.js +65 -0
  247. package/dist/region/flags/US.js.map +1 -0
  248. package/dist/region/flags.d.ts +17 -0
  249. package/dist/region/flags.d.ts.map +1 -0
  250. package/dist/region/flags.js +84 -0
  251. package/dist/region/flags.js.map +1 -0
  252. package/dist/region/index.d.ts +5 -0
  253. package/dist/region/index.d.ts.map +1 -0
  254. package/dist/region/index.js +5 -0
  255. package/dist/region/regions.d.ts +15 -0
  256. package/dist/region/regions.d.ts.map +1 -0
  257. package/dist/region/regions.js +29 -0
  258. package/dist/region/regions.js.map +1 -0
  259. package/dist/relation/RelationField.d.ts +2 -2
  260. package/dist/relation/RelationField.d.ts.map +1 -1
  261. package/dist/relation/RelationField.js +511 -171
  262. package/dist/relation/RelationField.js.map +1 -1
  263. package/dist/relation/index.d.ts +2 -2
  264. package/dist/repeater/RepeaterField.d.ts +13 -2
  265. package/dist/repeater/RepeaterField.d.ts.map +1 -1
  266. package/dist/repeater/RepeaterField.js +138 -50
  267. package/dist/repeater/RepeaterField.js.map +1 -1
  268. package/dist/repeater/index.d.ts +1 -1
  269. package/dist/select/SelectField.d.ts +1 -1
  270. package/dist/select/SelectField.js.map +1 -1
  271. package/dist/select/index.d.ts +1 -1
  272. package/dist/sessions/SessionsField.d.ts +15 -0
  273. package/dist/sessions/SessionsField.d.ts.map +1 -0
  274. package/dist/sessions/SessionsField.js +49 -0
  275. package/dist/sessions/SessionsField.js.map +1 -0
  276. package/dist/sessions/index.d.ts +4 -0
  277. package/dist/sessions/index.d.ts.map +1 -0
  278. package/dist/sessions/index.js +1 -0
  279. package/dist/shared/CodeComboBox.d.ts +21 -0
  280. package/dist/shared/CodeComboBox.d.ts.map +1 -0
  281. package/dist/shared/CodeComboBox.js +238 -0
  282. package/dist/shared/CodeComboBox.js.map +1 -0
  283. package/dist/shared/DefinitionField.d.ts +9 -4
  284. package/dist/shared/DefinitionField.d.ts.map +1 -1
  285. package/dist/shared/DefinitionField.js +98 -78
  286. package/dist/shared/DefinitionField.js.map +1 -1
  287. package/dist/shared/builtIn.d.ts +7 -3
  288. package/dist/shared/builtIn.d.ts.map +1 -1
  289. package/dist/shared/builtIn.js +39 -7
  290. package/dist/shared/builtIn.js.map +1 -1
  291. package/dist/shared/check.d.ts +27 -0
  292. package/dist/shared/check.d.ts.map +1 -0
  293. package/dist/shared/check.js +18 -0
  294. package/dist/shared/check.js.map +1 -0
  295. package/dist/shared/context.d.ts +33 -5
  296. package/dist/shared/context.d.ts.map +1 -1
  297. package/dist/shared/context.js +36 -20
  298. package/dist/shared/context.js.map +1 -1
  299. package/dist/shared/cx.js.map +1 -1
  300. package/dist/shared/dates.js +2 -2
  301. package/dist/shared/dates.js.map +1 -1
  302. package/dist/shared/embed.d.ts +19 -0
  303. package/dist/shared/embed.d.ts.map +1 -0
  304. package/dist/shared/embed.js +14 -0
  305. package/dist/shared/embed.js.map +1 -0
  306. package/dist/shared/entry.d.ts +13 -4
  307. package/dist/shared/entry.d.ts.map +1 -1
  308. package/dist/shared/entry.js +24 -7
  309. package/dist/shared/entry.js.map +1 -1
  310. package/dist/shared/flow.d.ts +8 -0
  311. package/dist/shared/flow.d.ts.map +1 -0
  312. package/dist/shared/flow.js +38 -0
  313. package/dist/shared/flow.js.map +1 -0
  314. package/dist/shared/part.d.ts +26 -0
  315. package/dist/shared/part.d.ts.map +1 -0
  316. package/dist/shared/part.js +64 -0
  317. package/dist/shared/part.js.map +1 -0
  318. package/dist/shared/relation.js.map +1 -1
  319. package/dist/shared/reveal.d.ts +16 -0
  320. package/dist/shared/reveal.d.ts.map +1 -0
  321. package/dist/shared/reveal.js +46 -0
  322. package/dist/shared/reveal.js.map +1 -0
  323. package/dist/shared/types.d.ts +12 -0
  324. package/dist/shared/types.d.ts.map +1 -1
  325. package/dist/slug/SlugField.css +18 -0
  326. package/dist/slug/SlugField.d.ts +33 -5
  327. package/dist/slug/SlugField.d.ts.map +1 -1
  328. package/dist/slug/SlugField.js +346 -126
  329. package/dist/slug/SlugField.js.map +1 -1
  330. package/dist/slug/SlugField.module.js +14 -0
  331. package/dist/slug/SlugField.module.js.map +1 -0
  332. package/dist/slug/index.d.ts +1 -1
  333. package/dist/slug/index.d.ts.map +1 -1
  334. package/dist/slug/index.js +1 -1
  335. package/dist/tags/TagsField.d.ts +17 -0
  336. package/dist/tags/TagsField.d.ts.map +1 -0
  337. package/dist/tags/TagsField.js +120 -0
  338. package/dist/tags/TagsField.js.map +1 -0
  339. package/dist/tags/index.d.ts +2 -0
  340. package/dist/tags/index.d.ts.map +1 -0
  341. package/dist/tags/index.js +1 -0
  342. package/dist/tel/TelField.css +25 -0
  343. package/dist/tel/TelField.d.ts +34 -0
  344. package/dist/tel/TelField.d.ts.map +1 -0
  345. package/dist/tel/TelField.js +390 -0
  346. package/dist/tel/TelField.js.map +1 -0
  347. package/dist/tel/TelField.module.js +12 -0
  348. package/dist/tel/TelField.module.js.map +1 -0
  349. package/dist/tel/index.d.ts +3 -0
  350. package/dist/tel/index.d.ts.map +1 -0
  351. package/dist/tel/index.js +3 -0
  352. package/dist/tel/phone.d.ts +59 -0
  353. package/dist/tel/phone.d.ts.map +1 -0
  354. package/dist/tel/phone.js +107 -0
  355. package/dist/tel/phone.js.map +1 -0
  356. package/dist/text/TextField.d.ts +12 -4
  357. package/dist/text/TextField.d.ts.map +1 -1
  358. package/dist/text/TextField.js +104 -60
  359. package/dist/text/TextField.js.map +1 -1
  360. package/dist/text/index.d.ts +1 -1
  361. package/dist/textarea/TextAreaField.d.ts +1 -1
  362. package/dist/textarea/TextAreaField.js.map +1 -1
  363. package/dist/textarea/index.d.ts +1 -1
  364. package/dist/time/TimeField.d.ts +1 -1
  365. package/dist/time/TimeField.js +64 -10
  366. package/dist/time/TimeField.js.map +1 -1
  367. package/dist/time/index.d.ts +1 -1
  368. package/dist/upload/FilePicker.css +24 -0
  369. package/dist/upload/FilePicker.d.ts +14 -0
  370. package/dist/upload/FilePicker.d.ts.map +1 -0
  371. package/dist/upload/FilePicker.js +130 -0
  372. package/dist/upload/FilePicker.js.map +1 -0
  373. package/dist/upload/FilePicker.module.js +12 -0
  374. package/dist/upload/FilePicker.module.js.map +1 -0
  375. package/dist/upload/UploadList.css +93 -0
  376. package/dist/upload/UploadList.d.ts +18 -0
  377. package/dist/upload/UploadList.d.ts.map +1 -0
  378. package/dist/upload/UploadList.js +144 -0
  379. package/dist/upload/UploadList.js.map +1 -0
  380. package/dist/upload/UploadList.module.js +32 -0
  381. package/dist/upload/UploadList.module.js.map +1 -0
  382. package/dist/upload/files.d.ts +5 -0
  383. package/dist/upload/files.d.ts.map +1 -0
  384. package/dist/upload/files.js +26 -0
  385. package/dist/upload/files.js.map +1 -0
  386. package/dist/upload/types.d.ts +58 -0
  387. package/dist/upload/types.d.ts.map +1 -0
  388. package/dist/upload/useRejectionMessage.d.ts +4 -0
  389. package/dist/upload/useRejectionMessage.d.ts.map +1 -0
  390. package/dist/upload/useRejectionMessage.js +25 -0
  391. package/dist/upload/useRejectionMessage.js.map +1 -0
  392. package/dist/upload/useUploads.d.ts +30 -0
  393. package/dist/upload/useUploads.d.ts.map +1 -0
  394. package/dist/upload/useUploads.js +115 -0
  395. package/dist/upload/useUploads.js.map +1 -0
  396. package/dist/uppy/index.d.ts +3 -0
  397. package/dist/uppy/index.d.ts.map +1 -0
  398. package/dist/uppy/index.js +1 -0
  399. package/dist/uppy/uploader.d.ts +44 -0
  400. package/dist/uppy/uploader.d.ts.map +1 -0
  401. package/dist/uppy/uploader.js +139 -0
  402. package/dist/uppy/uploader.js.map +1 -0
  403. package/dist/url/UrlField.d.ts +2 -2
  404. package/dist/url/UrlField.d.ts.map +1 -1
  405. package/dist/url/UrlField.js +69 -14
  406. package/dist/url/UrlField.js.map +1 -1
  407. package/dist/url/index.d.ts +1 -1
  408. package/package.json +110 -7
package/README.md CHANGED
@@ -4,6 +4,7 @@ Controlled field components for the protocol's built-in field types, built on [`
4
4
 
5
5
  ```bash
6
6
  npm install @panneau/fields@^5.0.0-alpha.0 @panneau/ui@^5.0.0-alpha.0 react-aria-components react-intl
7
+ npm install @uppy/core@^6.3.0 @uppy/aws-s3@^6.3.0 # only for @panneau/fields/uppy
7
8
  ```
8
9
 
9
10
  ```tsx
@@ -19,25 +20,40 @@ import { PanneauRoot } from '@panneau/ui';
19
20
 
20
21
  Every field takes `value`, `onChange`, `onBlur`, `errors`, `disabled`, `readOnly`, `required`, `label` and `description`, plus `className` and `xxxClassName` props for its inner elements. Fields keep no value of their own, and an empty value is `null`.
21
22
 
22
- | Import | Components | Value |
23
- | --------------------------- | -------------------------------------------- | ---------------------------------------------- |
24
- | `@panneau/fields/text` | `TextField` | `string` |
25
- | `@panneau/fields/textarea` | `TextAreaField` | `string` |
26
- | `@panneau/fields/number` | `NumberField` | `number` |
27
- | `@panneau/fields/boolean` | `BooleanField` (checkbox, switch) | `boolean` |
28
- | `@panneau/fields/date` | `DateField` | `'2026-10-15'` |
29
- | `@panneau/fields/datetime` | `DateTimeField` | `'2026-10-15T13:30:00Z'`, or without an offset |
30
- | `@panneau/fields/time` | `TimeField` | `'09:30'` |
31
- | `@panneau/fields/select` | `SelectField` (dropdown, radios, checkboxes) | an option's value, or a list with `multiple` |
32
- | `@panneau/fields/email` | `EmailField` | `string` |
33
- | `@panneau/fields/url` | `UrlField` | `string`, with `https://` added on blur |
34
- | `@panneau/fields/color` | `ColorField` | `'#1d4ed8'` |
35
- | `@panneau/fields/slug` | `SlugField`, `slugify()` | `string`, following a `source` until edited |
36
- | `@panneau/fields/localized` | `LocalizedField` | `{ fr: …, en: … }` |
37
- | `@panneau/fields/group` | `GroupField` | an object |
38
- | `@panneau/fields/repeater` | `RepeaterField` (items or typed blocks) | a list of objects; blocks have a `type` |
39
- | `@panneau/fields/relation` | `RelationField`, `createRelationSource()` | `{ id, label }`, or a list with `multiple` |
40
- | `@panneau/fields/locales` | `en`, `fr` | deprecated: use `@panneau/intl` |
23
+ | Import | Components | Value |
24
+ | --------------------------- | -------------------------------------------- | ------------------------------------------------------------------- |
25
+ | `@panneau/fields/text` | `TextField` | `string` |
26
+ | `@panneau/fields/textarea` | `TextAreaField` | `string` |
27
+ | `@panneau/fields/number` | `NumberField` | `number` |
28
+ | `@panneau/fields/boolean` | `BooleanField` (checkbox, switch) | `boolean` |
29
+ | `@panneau/fields/date` | `DateField` | `'2026-10-15'` |
30
+ | `@panneau/fields/datetime` | `DateTimeField` | `'2026-10-15T13:30:00Z'`, or without an offset |
31
+ | `@panneau/fields/time` | `TimeField` | `'09:30'` |
32
+ | `@panneau/fields/select` | `SelectField` (dropdown, radios, checkboxes) | an option's value, or a list with `multiple` |
33
+ | `@panneau/fields/email` | `EmailField` | `string` |
34
+ | `@panneau/fields/url` | `UrlField` | `string`, with `https://` added on blur |
35
+ | `@panneau/fields/color` | `ColorField`, `getColorPalette()` | `'#1d4ed8'`, or a `value` of its `palette` |
36
+ | `@panneau/fields/slug` | `SlugField`, `slugify()`, `sourceText()` | `string`, following a `source` until edited, checked with `onCheck` |
37
+ | `@panneau/fields/tel` | `TelField`, `parsePhone()` | E.164, `'+15145550199'`; the text until the number is complete |
38
+ | `@panneau/fields/country` | `CountryField`, `getCountryName()` | `'CA'`, ISO 3166-1 alpha-2, or a list with `multiple` |
39
+ | `@panneau/fields/region` | `RegionField`, `getRegions()` | `'QC'`, the region of its country; the text for other countries |
40
+ | `@panneau/fields/address` | `AddressField`, `formatAddress()` | `{ street, unit, city, region, postalCode, country, point }` |
41
+ | `@panneau/fields/link` | `LinkField`, `getLinkText()` | `{ type, url, page, file, label, newTab }` |
42
+ | `@panneau/fields/daterange` | `DateRangeField`, `formatDateRange()` | `{ start, end }`, days or date-times, either `null` when open |
43
+ | `@panneau/fields/money` | `MoneyField`, `formatMoney()` | `{ amount, currency }`, the amount in minor units (`1250`) |
44
+ | `@panneau/fields/range` | `RangeField` (a slider) | `number`, `null` until moved |
45
+ | `@panneau/fields/duration` | `DurationField`, `formatDuration()` | a whole number of its `unit`, seconds by default |
46
+ | `@panneau/fields/json` | `JsonField`, `parseJson()` | an object or an array; the text while it doesn't parse |
47
+ | `@panneau/fields/tags` | `TagsField` | a list of strings, free or among suggestions |
48
+ | `@panneau/fields/embed` | `EmbedField` | `{ url, title, thumbnailUrl, … }`, from the backend (below) |
49
+ | `@panneau/fields/location` | `LocationField`, `createNominatimSource()` | `{ lat, lng, address }`, on a map (below) |
50
+ | `@panneau/fields/localized` | `LocalizedField` | `{ fr: …, en: … }` |
51
+ | `@panneau/fields/group` | `GroupField` | an object |
52
+ | `@panneau/fields/repeater` | `RepeaterField` (items or typed blocks) | a list of objects; blocks have a `type` |
53
+ | `@panneau/fields/relation` | `RelationField`, `createRelationSource()` | `{ id, label }`, or a list with `multiple` |
54
+ | `@panneau/fields/file` | `FileField` | a file, or a list with `multiple` (below) |
55
+ | `@panneau/fields/uppy` | `createUppyUploadSource()` | the upload source on Uppy 6 (below) |
56
+ | `@panneau/fields/locales` | `en`, `fr` | deprecated: use `@panneau/intl` |
41
57
 
42
58
  ## From a definition
43
59
 
@@ -65,10 +81,160 @@ import {
65
81
  - **Relations** search a `RelationSource`. `createRelationSource()` makes one from any adapter with a `list()` method, such as the `DataAdapter` of `@panneau/data`. Labels come from the resource's `itemTitle`. Without a source, a relation field shows its references, read-only.
66
82
  - **Plain ids.** Values can be ids (`"12"`, `["12", "13"]`), as a product's own API gives them. The field shows their labels once the source's optional `resolve(resource, ids)` gives them (`createRelationSource()` implements it with the adapter's `get()`), and their ids until then. Fields that show the same ids share one request. `useRelationReferences()` does the same for other components.
67
83
  - **Creating from the picker.** When the source has `create(resource, text)`, the picker offers "Create “…”" for a text that matches no item, and adds the new item. `createRelationSource(adapter, { create: true })` creates it with the adapter's `create()`, with the text as its `itemTitle` (in every locale when it is localized), on the resources that allow `create`; a function gives other values. A field's `onCreate` prop replaces the source's, and can open a dialog with a full form: it resolves with the new reference, or `null`. `onCreate={null}` turns creating off.
68
- - **Plugin slot:** a type without an entry, such as `richtext` and `media` until Phase 2, renders a placeholder that names it. A plugin that provides the type replaces it.
84
+ - **Files** upload through the `uploadSource` of the provider (below). Without one, the value holds the files themselves.
85
+ - **Plugin slot:** a type without an entry, such as `richtext` and `media` without their plugins (`@panneau/editor`, `@panneau/media`), renders a placeholder that names it. A plugin that provides the type replaces it.
86
+
87
+ ### Compound fields
88
+
89
+ A compound field (decision 0065) is a type of a plugin that carries its sub-fields in `fields`: an object of them, or a list with `multiple`. Without its plugin, it renders as a group, or as a repeater. `defineCompoundField()` makes the entry of such a type: `layout` places the rendered sub-fields of one value by name, and `summarize` gives one value as text, for the title of an item and for lists and details.
90
+
91
+ ```tsx
92
+ import { defineCompoundField, restParts } from '@panneau/fields';
93
+
94
+ export const TeamFieldEntry = defineCompoundField({
95
+ layout: ({ parts }) => (
96
+ <div className={styles.row}>
97
+ {parts.person}
98
+ {parts.role}
99
+ {restParts(parts, ['person', 'role'])}
100
+ </div>
101
+ ),
102
+ summarize: (member) => (typeof member.role === 'string' ? member.role : null),
103
+ });
104
+
105
+ const teamPlugin = { id: 'team', fields: { team: TeamFieldEntry } };
106
+ ```
107
+
108
+ Two are ready to load: `creditsPlugin` (`@panneau/fields/credits`: `person`, `name`, `roles`, `featured`) and `sessionsPlugin` (`@panneau/fields/sessions`: `dates`, `venue`). The definition gives the sub-fields: those a site adds come after.
109
+
110
+ ## Files and uploads
111
+
112
+ `FileField` (the `file` type) holds files that belong to an item, outside the media library: an attachment, a PDF, a CSV ([decision 0025](../../docs/decisions/0025-presigned-uploads.md)). Its value is a file, or a list of them with `multiple`:
113
+
114
+ - a **stored file**, `{ name, url, mime, size }`, as items give it: the field shows it with a link;
115
+ - an **uploaded file**, `{ upload, name, mime, size }`, once the browser sent the file to storage: requests send its `upload`;
116
+ - the **`File` itself**, without an upload source: the adapter sends it in `multipart/form-data`.
117
+
118
+ A new file replaces the file of a single value, and is added to a multiple one. `accept` and `maxSize` (from the field's `accept`, its `accept` rule and its `maxSize` rule) refuse files before they are sent. A read-only field only shows its files.
119
+
120
+ **Upload sources.** An `UploadSource` makes an uploader for each field, which reports each file's progress and gives its upload once it is done. `createUppyUploadSource()` of `@panneau/fields/uppy` makes one on Uppy 6: files go to S3-compatible storage with URLs that the backend signs, in parts when they are large (they can pause and resume), and each upload is completed with the backend. `@uppy/core` and `@uppy/aws-s3` 6 are optional peer dependencies, only for that entry point: nothing else in the package imports Uppy. Make the source once, and pass it as `uploadSource` to `FieldsProvider`, or to `FormView` of `@panneau/forms`, when the definition announces direct uploads:
121
+
122
+ ```tsx
123
+ import { createUppyUploadSource } from '@panneau/fields/uppy';
124
+
125
+ const uploadSource =
126
+ definition.uploads?.mode === 'presigned' && adapter.presignedUploads !== undefined
127
+ ? createUppyUploadSource(
128
+ adapter.presignedUploads({ endpoint: definition.uploads.endpoint }),
129
+ )
130
+ : null;
131
+
132
+ <FieldsProvider components={builtInFields} uploadSource={uploadSource}>
133
+ …
134
+ </FieldsProvider>;
135
+ ```
136
+
137
+ `adapter.presignedUploads()` comes from `@panneau/data`; `createUppyUploadSource()` only needs an object with its `signRequest()` and `complete()` (`PresignedUploadsLike`), so fields don't depend on `@panneau/data`. A field's `uploadSource` prop overrides the provider's, and `null` turns uploads off.
138
+
139
+ **Building blocks.** `@panneau/fields` also exports what the file field is made of, for other fields that take files (the media field of `@panneau/media`): `useUploads()` (checks files, uploads them through a source, and gives their state), `UploadList` (a progress bar per file, with pause, resume, cancel and retry), `FilePicker` (a button and a drop zone), and `formatSize()`, `matchesMime()`, `getAccept()`, `getMaxSize()`.
69
140
 
70
141
  ## Messages
71
142
 
72
143
  Strings go through react-intl, with English defaults. Add the messages of every Panneau package to the app's with `withPanneauMessages()` from [`@panneau/intl`](../intl), or use `fieldsPlugin`, which carries the French messages of every package (`ui`, `fields` and `forms`).
73
144
 
74
145
  The package layout, scripts and API reports are explained in [`docs/packages.md`](../../docs/packages.md).
146
+
147
+ ## Checking a value
148
+
149
+ A field with `check` in the definition, such as a `slug`, checks its value with the backend as it is typed ([decision 0032](../../docs/decisions/0032-field-checks-and-slugs.md)). The slug field then shows the URL the backend gives, says when the slug is taken with a free one to use, and is read-only when the backend says the field doesn't apply to the item. Give forms a check source for the item they edit:
150
+
151
+ ```tsx
152
+ import { createFieldCheckSource } from '@panneau/fields';
153
+
154
+ <FormView form={form} checkSource={createFieldCheckSource(adapter, 'pages', item?.id ?? null)} />;
155
+ ```
156
+
157
+ Without one, fields don't check, and the slug shows its fixed `settings.prefix`.
158
+
159
+ ## Embeds and places
160
+
161
+ An `embed` field shows the title and the thumbnail of a URL's video, sound or post. It gets them from the backend (`GET /embeds`), through the embed source of the provider; without one, it keeps the URL alone:
162
+
163
+ ```tsx
164
+ import { createEmbedSource } from '@panneau/fields';
165
+
166
+ <FieldsProvider embedSource={createEmbedSource(adapter)}>…</FieldsProvider>;
167
+ ```
168
+
169
+ `providers` (the `providers` rule of a definition) lists the providers an embed may come from, `['YouTube', 'Vimeo']`: the field names them under its help, and refuses an embed of another provider as soon as its preview comes back ([decision 0058](../../docs/decisions/0058-multiple-countries-embed-providers-color-palettes.md)).
170
+
171
+ A `tel` field shows the country of the number, its flag and calling code, in a menu at the start of its input, and formats the number as it is typed. Its value is in E.164 once the number is complete, and the text as typed until then, which the `tel` rule refuses. `country` (`settings.country`) is the country of a new number, the region of the user's locale without it. Formats come from `libphonenumber-js`, with its smallest metadata.
172
+
173
+ With `extension` (`settings.extension`), an input after the number takes the digits of an extension, kept with the number after `;ext=`: `+15145550199;ext=123`. An extension typed or pasted after the number (`ext. 123`, `x123`, `poste 123`) moves to that input when the field is left. To send a number to a service that has no extensions, such as SMS, take the `number` of `splitExtension(value)` ([decision 0057](../../docs/decisions/0057-phone-extensions.md)).
174
+
175
+ A `duration` field keeps a whole number of its `unit` (`settings.unit`: `seconds` by default, `minutes`, `hours` or `days`), typed in parts from `largestUnit` (hours by default, or `days`) down to `precision` (the unit by default). The largest part has no upper bound; hours stop at 23 below days. `formatDuration(value, { unit, precision, largestUnit })` writes it as lists show it, `2 d 4 h` ([decision 0056](../../docs/decisions/0056-duration-units.md)).
176
+
177
+ A `country` field picks a country by its name in the user's locale, with its flag; `countries` limits the choices and `preferred` puts some first. A `region` field picks a state, a province or a territory of its `country` (a field's `from`, or `settings.country`): for Argentina, Australia, Brazil, Canada, China, India, Japan, Mexico and the United States, among their regions, named in English or French, and its value is the code without the country (`QC`); for other countries, it is a text ([decision 0047](../../docs/decisions/0047-countries-regions-and-phone-numbers.md)).
178
+
179
+ ```tsx
180
+ <CountryField label="Country" preferred={['CA', 'US']} value={country} onChange={setCountry} />
181
+ <RegionField label="Province" country={country} value={province} onChange={setProvince} />
182
+ <TelField label="Phone" country="CA" value={phone} onChange={setPhone} />
183
+ ```
184
+
185
+ With `multiple`, a `country` field holds several countries, in the order they were chosen: each one shows with its flag and a button that removes it, and the combo box adds another. A `color` field with a `palette` only offers its colors, in a select with their swatches: `value` is what it stores, `color` draws the swatch, and `label` names it ([decision 0058](../../docs/decisions/0058-multiple-countries-embed-providers-color-palettes.md)).
186
+
187
+ ```tsx
188
+ <CountryField multiple label="Countries" value={countries} onChange={setCountries} />
189
+ <ColorField
190
+ label="Background"
191
+ palette={[
192
+ { value: 'white', label: 'White', color: '#ffffff' },
193
+ { value: 'purple', label: 'Purple', color: '#6b21a8' },
194
+ ]}
195
+ value={background}
196
+ onChange={setBackground}
197
+ />
198
+ ```
199
+
200
+ An `address` field edits the parts of a postal address: the country first, which sets the labels (_Province_, _State_), the order (the postal code last in Canada and the United States, first elsewhere) and the regions of the others, then the street, the unit, the city, the region and the postal code, normalized for its country when it loses focus (`H2X 1Y4`). `country` is the country of a new address; with one country in `countries`, the field doesn't show it. With the address search of the `FieldsProvider`'s maps, a place found fills every part, when the source gives them (`createNominatimSource()` does); with `point`, a map places the address ([decision 0054](../../docs/decisions/0054-addresses.md)).
201
+
202
+ A `link` field picks the type of a link, then its URL (`https://…`), its page (searched in the resources of `pages` with the relation source), its email address (`mailto:…`), its phone number (`tel:+…`), its file (with the `media` entry of the fields context), or the text of a type of the site, with a label per locale and whether it opens in a new tab ([decision 0055](../../docs/decisions/0055-links.md)). In a form, the parts of both fields show the errors of their own paths (`address.postalCode`, `link.url`).
203
+
204
+ ```tsx
205
+ <AddressField label="Address" country="CA" preferred={['CA', 'US']} value={address} onChange={setAddress} />
206
+ <LinkField
207
+ label="Button"
208
+ types={[{ id: 'page' }, { id: 'url' }, { id: 'email' }]}
209
+ pages={['pages', 'events']}
210
+ newTab="external"
211
+ value={link}
212
+ onChange={setLink}
213
+ />
214
+ ```
215
+
216
+ A `daterange` field edits a start and an end in one control, with one calendar for both ([decision 0053](../../docs/decisions/0053-date-ranges-and-money.md)). Its bounds are days (`2026-11-04`, both inclusive), or date-times with `time`, shown in the zone of the value, then `timeZone`, then the browser's, and written in UTC. `allDay` adds an "All day" switch, whose ranges have days as bounds and `allDay: true`; `chooseTimeZone` adds a menu of zones, kept in the value as `timeZone`. A bound left empty is `null`, which the `daterange` rule refuses unless the field's `open` allows it.
217
+
218
+ A `money` field types an amount in the currency format of the locale, with the digits of its currency in ISO 4217, and keeps it in minor units, without floating point errors: `{ amount: 1250, currency: 'CAD' }` is 12.50 $. `currency` fixes the currency; `currencies` lists those a menu after the amount offers, every currency without either.
219
+
220
+ ```tsx
221
+ <DateRangeField label="Dates" time allDay timeZone="America/Toronto" value={dates} onChange={setDates} />
222
+ <MoneyField label="Price" currency="CAD" min={0} value={price} onChange={setPrice} />
223
+ ```
224
+
225
+ A `location` field places a point on a Leaflet map, loaded when the field is first shown. The tiles are OpenStreetMap's by default. `maps` sets other tiles and an address search, a `GeocodingSource`: `createNominatimSource()` searches OpenStreetMap's Nominatim, whose [usage policy](https://operations.osmfoundation.org/policies/nominatim/) suits small volumes; a product with more uses its own service. Without a geocoding source, the field has no address search, and the latitude and longitude are typed or picked on the map.
226
+
227
+ ```tsx
228
+ import { createNominatimSource } from '@panneau/fields';
229
+
230
+ <FieldsProvider
231
+ maps={{
232
+ tiles: { url: 'https://tiles.example.com/{z}/{x}/{y}.png', attribution: '© Example' },
233
+ geocoding: createNominatimSource({ email: 'dev@example.com', countryCodes: ['ca'] }),
234
+ }}
235
+ >
236
+ …
237
+ </FieldsProvider>;
238
+ ```
239
+
240
+ `<Panneau>` and `createPanneauApp()` give the embed source of their adapter, and take `maps`.
@@ -0,0 +1,44 @@
1
+ /* The search, the parts, then the map. */
2
+ .panneau-address-field-address {
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: var(--panneau-space-3);
6
+ }
7
+
8
+ /* The parts on a grid of six columns: the street and its unit, then the city, the region and the
9
+ postal code in the order of the country. */
10
+ .panneau-address-field-parts {
11
+ display: grid;
12
+ grid-template-columns: repeat(6, minmax(0, 1fr));
13
+ gap: var(--panneau-space-3);
14
+ }
15
+
16
+ .panneau-address-field-part {
17
+ grid-column: span 2;
18
+ min-width: 0;
19
+ }
20
+
21
+ .panneau-address-field-country {
22
+ grid-column: 1 / -1;
23
+ }
24
+
25
+ .panneau-address-field-street {
26
+ grid-column: span 4;
27
+ }
28
+
29
+ .panneau-address-field-map {
30
+ display: flex;
31
+ flex-direction: column;
32
+ gap: var(--panneau-space-2);
33
+ }
34
+
35
+ .panneau-address-field-remove {
36
+ align-self: flex-start;
37
+ }
38
+
39
+ @media (max-width: 40rem) {
40
+ .panneau-address-field-part,
41
+ .panneau-address-field-street {
42
+ grid-column: 1 / -1;
43
+ }
44
+ }
@@ -0,0 +1,37 @@
1
+ import type { AddressPart, AddressValue } from '@panneau/protocol';
2
+ import type { GeocodingSource, MapTiles } from '../location/types.js';
3
+ import type { FieldEntryProps, FieldProps } from '../shared/types.js';
4
+ export interface AddressFieldProps extends FieldProps<AddressValue> {
5
+ /** Dot path of the value, the prefix of the paths of its parts. Defaults to `name`. */
6
+ path?: string;
7
+ /** The country of a new address (`CA`), set as soon as a part is typed. */
8
+ country?: string | null;
9
+ /** The countries the field allows. With one, the field doesn't show the country. */
10
+ countries?: readonly string[];
11
+ /** Countries shown first: `['CA', 'US']`. */
12
+ preferred?: readonly string[];
13
+ /** The parts a filled address must have, marked as required. */
14
+ requiredParts?: readonly AddressPart[];
15
+ /** Adds a map under the parts, and the point of the address to the value. */
16
+ point?: boolean;
17
+ /** The address search. Defaults to that of the `FieldsProvider`; without one, there is none. */
18
+ geocoding?: GeocodingSource | null;
19
+ /** The tiles of the map. Defaults to those of the `FieldsProvider`, or OpenStreetMap's. */
20
+ tiles?: MapTiles;
21
+ /** Zoom of the map on a point. Defaults to 16. */
22
+ zoom?: number;
23
+ }
24
+ /**
25
+ * A postal address (decision 0054): the country first, which sets the labels, the order and the
26
+ * regions of the other parts, then the street, the unit, the city, the region and the postal
27
+ * code, which is normalized for the country when it loses focus. With an address search, a place
28
+ * found fills every part; with `point`, a map places the address. Each part shows the errors of
29
+ * its own path (`address.postalCode`) in a form.
30
+ */
31
+ export declare function AddressField({ value, onChange, onBlur, path, name, country: countryProp, countries, preferred, requiredParts, point: withPoint, geocoding: geocodingProp, tiles: tilesProp, zoom, label, description, errors, disabled, readOnly, required, className, }: AddressFieldProps): import("react").JSX.Element;
32
+ /**
33
+ * The `address` type: settings `country`, `countries`, `preferred`, `required` (the parts a
34
+ * filled address must have) and `point`, over the maps of the `FieldsProvider`.
35
+ */
36
+ export declare function AddressFieldEntry(props: FieldEntryProps): import("react").JSX.Element;
37
+ //# sourceMappingURL=AddressField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddressField.d.ts","sourceRoot":"","sources":["../../src/address/AddressField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAS,MAAM,mBAAmB,CAAC;AAY1E,OAAO,KAAK,EAAmB,eAAe,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAOpF,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKnE,MAAM,WAAW,iBAAkB,SAAQ,UAAU,CAAC,YAAY,CAAC;IAC/D,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,oFAAoF;IACpF,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,gEAAgE;IAChE,aAAa,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gGAAgG;IAChG,SAAS,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,2FAA2F;IAC3F,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAcD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,OAAO,EAAE,WAAW,EACpB,SAAS,EACT,SAAS,EACT,aAA8C,EAC9C,KAAK,EAAE,SAAiB,EACxB,SAAS,EAAE,aAAa,EACxB,KAAK,EAAE,SAAS,EAChB,IAAS,EACT,KAAK,EACL,WAAW,EACX,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,SAAS,GACZ,EAAE,iBAAiB,+BAuNnB;AAUD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,+BAoBvD"}