@rjsf/daisyui 6.0.0-beta.2

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 (315) hide show
  1. package/README.md +231 -0
  2. package/dist/chakra-ui.esm.js +2192 -0
  3. package/dist/chakra-ui.esm.js.map +7 -0
  4. package/dist/chakra-ui.umd.js +2011 -0
  5. package/dist/index.js +2180 -0
  6. package/dist/index.js.map +7 -0
  7. package/lib/DaisyUIForm.d.ts +5 -0
  8. package/lib/DaisyUIForm.js +8 -0
  9. package/lib/DaisyUIForm.js.map +1 -0
  10. package/lib/DaisyUIFrameProvider.d.ts +35 -0
  11. package/lib/DaisyUIFrameProvider.js +93 -0
  12. package/lib/DaisyUIFrameProvider.js.map +1 -0
  13. package/lib/daisyForm/DaisyForm.d.ts +12 -0
  14. package/lib/daisyForm/DaisyForm.js +15 -0
  15. package/lib/daisyForm/DaisyForm.js.map +1 -0
  16. package/lib/daisyForm/index.d.ts +2 -0
  17. package/lib/daisyForm/index.js +3 -0
  18. package/lib/daisyForm/index.js.map +1 -0
  19. package/lib/index.d.ts +10 -0
  20. package/lib/index.js +11 -0
  21. package/lib/index.js.map +1 -0
  22. package/lib/templates/ArrayFieldDescriptionTemplate/ArrayFieldDescriptionTemplate.d.ts +7 -0
  23. package/lib/templates/ArrayFieldDescriptionTemplate/ArrayFieldDescriptionTemplate.js +11 -0
  24. package/lib/templates/ArrayFieldDescriptionTemplate/ArrayFieldDescriptionTemplate.js.map +1 -0
  25. package/lib/templates/ArrayFieldDescriptionTemplate/index.d.ts +2 -0
  26. package/lib/templates/ArrayFieldDescriptionTemplate/index.js +3 -0
  27. package/lib/templates/ArrayFieldDescriptionTemplate/index.js.map +1 -0
  28. package/lib/templates/ArrayFieldItemButtonsTemplate/ArrayFieldItemButtonsTemplate.d.ts +5 -0
  29. package/lib/templates/ArrayFieldItemButtonsTemplate/ArrayFieldItemButtonsTemplate.js +20 -0
  30. package/lib/templates/ArrayFieldItemButtonsTemplate/ArrayFieldItemButtonsTemplate.js.map +1 -0
  31. package/lib/templates/ArrayFieldItemButtonsTemplate/index.d.ts +2 -0
  32. package/lib/templates/ArrayFieldItemButtonsTemplate/index.js +3 -0
  33. package/lib/templates/ArrayFieldItemButtonsTemplate/index.js.map +1 -0
  34. package/lib/templates/ArrayFieldItemTemplate/ArrayFieldItemTemplate.d.ts +14 -0
  35. package/lib/templates/ArrayFieldItemTemplate/ArrayFieldItemTemplate.js +27 -0
  36. package/lib/templates/ArrayFieldItemTemplate/ArrayFieldItemTemplate.js.map +1 -0
  37. package/lib/templates/ArrayFieldItemTemplate/index.d.ts +2 -0
  38. package/lib/templates/ArrayFieldItemTemplate/index.js +3 -0
  39. package/lib/templates/ArrayFieldItemTemplate/index.js.map +1 -0
  40. package/lib/templates/ArrayFieldTemplate/ArrayFieldTemplate.d.ts +15 -0
  41. package/lib/templates/ArrayFieldTemplate/ArrayFieldTemplate.js +37 -0
  42. package/lib/templates/ArrayFieldTemplate/ArrayFieldTemplate.js.map +1 -0
  43. package/lib/templates/ArrayFieldTemplate/index.d.ts +2 -0
  44. package/lib/templates/ArrayFieldTemplate/index.js +3 -0
  45. package/lib/templates/ArrayFieldTemplate/index.js.map +1 -0
  46. package/lib/templates/ArrayFieldTitleTemplate/ArrayFieldTitleTemplate.d.ts +7 -0
  47. package/lib/templates/ArrayFieldTitleTemplate/ArrayFieldTitleTemplate.js +11 -0
  48. package/lib/templates/ArrayFieldTitleTemplate/ArrayFieldTitleTemplate.js.map +1 -0
  49. package/lib/templates/ArrayFieldTitleTemplate/index.d.ts +2 -0
  50. package/lib/templates/ArrayFieldTitleTemplate/index.js +3 -0
  51. package/lib/templates/ArrayFieldTitleTemplate/index.js.map +1 -0
  52. package/lib/templates/BaseInputTemplate/BaseInputTemplate.d.ts +16 -0
  53. package/lib/templates/BaseInputTemplate/BaseInputTemplate.js +33 -0
  54. package/lib/templates/BaseInputTemplate/BaseInputTemplate.js.map +1 -0
  55. package/lib/templates/BaseInputTemplate/index.d.ts +2 -0
  56. package/lib/templates/BaseInputTemplate/index.js +3 -0
  57. package/lib/templates/BaseInputTemplate/index.js.map +1 -0
  58. package/lib/templates/ButtonTemplates/AddButton.d.ts +6 -0
  59. package/lib/templates/ButtonTemplates/AddButton.js +15 -0
  60. package/lib/templates/ButtonTemplates/AddButton.js.map +1 -0
  61. package/lib/templates/ButtonTemplates/DaisyUIButton.d.ts +18 -0
  62. package/lib/templates/ButtonTemplates/DaisyUIButton.js +15 -0
  63. package/lib/templates/ButtonTemplates/DaisyUIButton.js.map +1 -0
  64. package/lib/templates/ButtonTemplates/IconButton.d.ts +5 -0
  65. package/lib/templates/ButtonTemplates/IconButton.js +21 -0
  66. package/lib/templates/ButtonTemplates/IconButton.js.map +1 -0
  67. package/lib/templates/ButtonTemplates/SubmitButton.d.ts +4 -0
  68. package/lib/templates/ButtonTemplates/SubmitButton.js +12 -0
  69. package/lib/templates/ButtonTemplates/SubmitButton.js.map +1 -0
  70. package/lib/templates/ButtonTemplates/index.d.ts +15 -0
  71. package/lib/templates/ButtonTemplates/index.js +17 -0
  72. package/lib/templates/ButtonTemplates/index.js.map +1 -0
  73. package/lib/templates/DescriptionField/DescriptionField.d.ts +8 -0
  74. package/lib/templates/DescriptionField/DescriptionField.js +16 -0
  75. package/lib/templates/DescriptionField/DescriptionField.js.map +1 -0
  76. package/lib/templates/DescriptionField/index.d.ts +2 -0
  77. package/lib/templates/DescriptionField/index.js +3 -0
  78. package/lib/templates/DescriptionField/index.js.map +1 -0
  79. package/lib/templates/ErrorList/ErrorList.d.ts +7 -0
  80. package/lib/templates/ErrorList/ErrorList.js +11 -0
  81. package/lib/templates/ErrorList/ErrorList.js.map +1 -0
  82. package/lib/templates/ErrorList/index.d.ts +2 -0
  83. package/lib/templates/ErrorList/index.js +3 -0
  84. package/lib/templates/ErrorList/index.js.map +1 -0
  85. package/lib/templates/FieldErrorTemplate/FieldErrorTemplate.d.ts +10 -0
  86. package/lib/templates/FieldErrorTemplate/FieldErrorTemplate.js +15 -0
  87. package/lib/templates/FieldErrorTemplate/FieldErrorTemplate.js.map +1 -0
  88. package/lib/templates/FieldErrorTemplate/index.d.ts +2 -0
  89. package/lib/templates/FieldErrorTemplate/index.js +3 -0
  90. package/lib/templates/FieldErrorTemplate/index.js.map +1 -0
  91. package/lib/templates/FieldHelpTemplate/FieldHelpTemplate.d.ts +11 -0
  92. package/lib/templates/FieldHelpTemplate/FieldHelpTemplate.js +15 -0
  93. package/lib/templates/FieldHelpTemplate/FieldHelpTemplate.js.map +1 -0
  94. package/lib/templates/FieldHelpTemplate/index.d.ts +2 -0
  95. package/lib/templates/FieldHelpTemplate/index.js +3 -0
  96. package/lib/templates/FieldHelpTemplate/index.js.map +1 -0
  97. package/lib/templates/FieldTemplate/FieldTemplate.d.ts +15 -0
  98. package/lib/templates/FieldTemplate/FieldTemplate.js +23 -0
  99. package/lib/templates/FieldTemplate/FieldTemplate.js.map +1 -0
  100. package/lib/templates/FieldTemplate/index.d.ts +2 -0
  101. package/lib/templates/FieldTemplate/index.js +3 -0
  102. package/lib/templates/FieldTemplate/index.js.map +1 -0
  103. package/lib/templates/GridTemplate/GridTemplate.d.ts +7 -0
  104. package/lib/templates/GridTemplate/GridTemplate.js +16 -0
  105. package/lib/templates/GridTemplate/GridTemplate.js.map +1 -0
  106. package/lib/templates/GridTemplate/index.d.ts +2 -0
  107. package/lib/templates/GridTemplate/index.js +3 -0
  108. package/lib/templates/GridTemplate/index.js.map +1 -0
  109. package/lib/templates/ObjectFieldTemplate/ObjectFieldTemplate.d.ts +13 -0
  110. package/lib/templates/ObjectFieldTemplate/ObjectFieldTemplate.js +25 -0
  111. package/lib/templates/ObjectFieldTemplate/ObjectFieldTemplate.js.map +1 -0
  112. package/lib/templates/ObjectFieldTemplate/index.d.ts +2 -0
  113. package/lib/templates/ObjectFieldTemplate/index.js +3 -0
  114. package/lib/templates/ObjectFieldTemplate/index.js.map +1 -0
  115. package/lib/templates/Templates.d.ts +19 -0
  116. package/lib/templates/Templates.js +56 -0
  117. package/lib/templates/Templates.js.map +1 -0
  118. package/lib/templates/TitleField/TitleField.d.ts +13 -0
  119. package/lib/templates/TitleField/TitleField.js +19 -0
  120. package/lib/templates/TitleField/TitleField.js.map +1 -0
  121. package/lib/templates/TitleField/index.d.ts +2 -0
  122. package/lib/templates/TitleField/index.js +3 -0
  123. package/lib/templates/TitleField/index.js.map +1 -0
  124. package/lib/templates/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.d.ts +7 -0
  125. package/lib/templates/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.js +20 -0
  126. package/lib/templates/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.js.map +1 -0
  127. package/lib/templates/WrapIfAdditionalTemplate/index.d.ts +2 -0
  128. package/lib/templates/WrapIfAdditionalTemplate/index.js +3 -0
  129. package/lib/templates/WrapIfAdditionalTemplate/index.js.map +1 -0
  130. package/lib/templates/index.d.ts +19 -0
  131. package/lib/templates/index.js +20 -0
  132. package/lib/templates/index.js.map +1 -0
  133. package/lib/theme/Theme.d.ts +43 -0
  134. package/lib/theme/Theme.js +68 -0
  135. package/lib/theme/Theme.js.map +1 -0
  136. package/lib/theme/index.d.ts +2 -0
  137. package/lib/theme/index.js +3 -0
  138. package/lib/theme/index.js.map +1 -0
  139. package/lib/tsconfig.tsbuildinfo +1 -0
  140. package/lib/types/DaisyProps.d.ts +5 -0
  141. package/lib/types/DaisyProps.js +2 -0
  142. package/lib/types/DaisyProps.js.map +1 -0
  143. package/lib/utils.d.ts +13 -0
  144. package/lib/utils.js +5 -0
  145. package/lib/utils.js.map +1 -0
  146. package/lib/widgets/AltDateTimeWidget/AltDateTimeWidget.d.ts +6 -0
  147. package/lib/widgets/AltDateTimeWidget/AltDateTimeWidget.js +10 -0
  148. package/lib/widgets/AltDateTimeWidget/AltDateTimeWidget.js.map +1 -0
  149. package/lib/widgets/AltDateTimeWidget/index.d.ts +2 -0
  150. package/lib/widgets/AltDateTimeWidget/index.js +3 -0
  151. package/lib/widgets/AltDateTimeWidget/index.js.map +1 -0
  152. package/lib/widgets/AltDateWidget/AltDateWidget.d.ts +15 -0
  153. package/lib/widgets/AltDateWidget/AltDateWidget.js +138 -0
  154. package/lib/widgets/AltDateWidget/AltDateWidget.js.map +1 -0
  155. package/lib/widgets/AltDateWidget/index.d.ts +2 -0
  156. package/lib/widgets/AltDateWidget/index.js +3 -0
  157. package/lib/widgets/AltDateWidget/index.js.map +1 -0
  158. package/lib/widgets/CheckboxWidget/CheckboxWidget.d.ts +13 -0
  159. package/lib/widgets/CheckboxWidget/CheckboxWidget.js +43 -0
  160. package/lib/widgets/CheckboxWidget/CheckboxWidget.js.map +1 -0
  161. package/lib/widgets/CheckboxWidget/index.d.ts +2 -0
  162. package/lib/widgets/CheckboxWidget/index.js +3 -0
  163. package/lib/widgets/CheckboxWidget/index.js.map +1 -0
  164. package/lib/widgets/CheckboxesWidget/CheckboxesWidget.d.ts +16 -0
  165. package/lib/widgets/CheckboxesWidget/CheckboxesWidget.js +73 -0
  166. package/lib/widgets/CheckboxesWidget/CheckboxesWidget.js.map +1 -0
  167. package/lib/widgets/CheckboxesWidget/index.d.ts +2 -0
  168. package/lib/widgets/CheckboxesWidget/index.js +3 -0
  169. package/lib/widgets/CheckboxesWidget/index.js.map +1 -0
  170. package/lib/widgets/DateTimeWidget/DateTimeWidget.d.ts +14 -0
  171. package/lib/widgets/DateTimeWidget/DateTimeWidget.js +207 -0
  172. package/lib/widgets/DateTimeWidget/DateTimeWidget.js.map +1 -0
  173. package/lib/widgets/DateTimeWidget/index.d.ts +2 -0
  174. package/lib/widgets/DateTimeWidget/index.js +3 -0
  175. package/lib/widgets/DateTimeWidget/index.js.map +1 -0
  176. package/lib/widgets/DateWidget/DateWidget.d.ts +14 -0
  177. package/lib/widgets/DateWidget/DateWidget.js +274 -0
  178. package/lib/widgets/DateWidget/DateWidget.js.map +1 -0
  179. package/lib/widgets/DateWidget/index.d.ts +2 -0
  180. package/lib/widgets/DateWidget/index.js +3 -0
  181. package/lib/widgets/DateWidget/index.js.map +1 -0
  182. package/lib/widgets/FileWidget/FileWidget.d.ts +12 -0
  183. package/lib/widgets/FileWidget/FileWidget.js +57 -0
  184. package/lib/widgets/FileWidget/FileWidget.js.map +1 -0
  185. package/lib/widgets/FileWidget/index.d.ts +2 -0
  186. package/lib/widgets/FileWidget/index.js +3 -0
  187. package/lib/widgets/FileWidget/index.js.map +1 -0
  188. package/lib/widgets/RadioWidget/RadioWidget.d.ts +14 -0
  189. package/lib/widgets/RadioWidget/RadioWidget.js +67 -0
  190. package/lib/widgets/RadioWidget/RadioWidget.js.map +1 -0
  191. package/lib/widgets/RadioWidget/index.d.ts +2 -0
  192. package/lib/widgets/RadioWidget/index.js +3 -0
  193. package/lib/widgets/RadioWidget/index.js.map +1 -0
  194. package/lib/widgets/RangeWidget/RangeWidget.d.ts +13 -0
  195. package/lib/widgets/RangeWidget/RangeWidget.js +42 -0
  196. package/lib/widgets/RangeWidget/RangeWidget.js.map +1 -0
  197. package/lib/widgets/RangeWidget/index.d.ts +2 -0
  198. package/lib/widgets/RangeWidget/index.js +3 -0
  199. package/lib/widgets/RangeWidget/index.js.map +1 -0
  200. package/lib/widgets/RatingWidget/RatingWidget.d.ts +17 -0
  201. package/lib/widgets/RatingWidget/RatingWidget.js +64 -0
  202. package/lib/widgets/RatingWidget/RatingWidget.js.map +1 -0
  203. package/lib/widgets/RatingWidget/index.d.ts +2 -0
  204. package/lib/widgets/RatingWidget/index.js +3 -0
  205. package/lib/widgets/RatingWidget/index.js.map +1 -0
  206. package/lib/widgets/SelectWidget/SelectWidget.d.ts +14 -0
  207. package/lib/widgets/SelectWidget/SelectWidget.js +74 -0
  208. package/lib/widgets/SelectWidget/SelectWidget.js.map +1 -0
  209. package/lib/widgets/SelectWidget/index.d.ts +2 -0
  210. package/lib/widgets/SelectWidget/index.js +3 -0
  211. package/lib/widgets/SelectWidget/index.js.map +1 -0
  212. package/lib/widgets/TextareaWidget/TextareaWidget.d.ts +12 -0
  213. package/lib/widgets/TextareaWidget/TextareaWidget.js +44 -0
  214. package/lib/widgets/TextareaWidget/TextareaWidget.js.map +1 -0
  215. package/lib/widgets/TextareaWidget/index.d.ts +2 -0
  216. package/lib/widgets/TextareaWidget/index.js +3 -0
  217. package/lib/widgets/TextareaWidget/index.js.map +1 -0
  218. package/lib/widgets/TimeWidget/TimeWidget.d.ts +12 -0
  219. package/lib/widgets/TimeWidget/TimeWidget.js +42 -0
  220. package/lib/widgets/TimeWidget/TimeWidget.js.map +1 -0
  221. package/lib/widgets/TimeWidget/index.d.ts +2 -0
  222. package/lib/widgets/TimeWidget/index.js +3 -0
  223. package/lib/widgets/TimeWidget/index.js.map +1 -0
  224. package/lib/widgets/ToggleWidget/ToggleWidget.d.ts +13 -0
  225. package/lib/widgets/ToggleWidget/ToggleWidget.js +40 -0
  226. package/lib/widgets/ToggleWidget/ToggleWidget.js.map +1 -0
  227. package/lib/widgets/ToggleWidget/index.d.ts +2 -0
  228. package/lib/widgets/ToggleWidget/index.js +3 -0
  229. package/lib/widgets/ToggleWidget/index.js.map +1 -0
  230. package/lib/widgets/Widgets.d.ts +18 -0
  231. package/lib/widgets/Widgets.js +35 -0
  232. package/lib/widgets/Widgets.js.map +1 -0
  233. package/lib/widgets/index.d.ts +2 -0
  234. package/lib/widgets/index.js +3 -0
  235. package/lib/widgets/index.js.map +1 -0
  236. package/package.json +95 -0
  237. package/src/DaisyUIForm.tsx +9 -0
  238. package/src/DaisyUIFrameProvider.tsx +107 -0
  239. package/src/daisyForm/DaisyForm.tsx +20 -0
  240. package/src/daisyForm/index.ts +2 -0
  241. package/src/index.ts +13 -0
  242. package/src/styles.css +9 -0
  243. package/src/templates/ArrayFieldDescriptionTemplate/ArrayFieldDescriptionTemplate.tsx +19 -0
  244. package/src/templates/ArrayFieldDescriptionTemplate/index.ts +2 -0
  245. package/src/templates/ArrayFieldItemButtonsTemplate/ArrayFieldItemButtonsTemplate.tsx +89 -0
  246. package/src/templates/ArrayFieldItemButtonsTemplate/index.ts +2 -0
  247. package/src/templates/ArrayFieldItemTemplate/ArrayFieldItemTemplate.tsx +55 -0
  248. package/src/templates/ArrayFieldItemTemplate/index.ts +2 -0
  249. package/src/templates/ArrayFieldTemplate/ArrayFieldTemplate.tsx +120 -0
  250. package/src/templates/ArrayFieldTemplate/index.ts +2 -0
  251. package/src/templates/ArrayFieldTitleTemplate/ArrayFieldTitleTemplate.tsx +15 -0
  252. package/src/templates/ArrayFieldTitleTemplate/index.ts +2 -0
  253. package/src/templates/BaseInputTemplate/BaseInputTemplate.tsx +104 -0
  254. package/src/templates/BaseInputTemplate/index.ts +2 -0
  255. package/src/templates/ButtonTemplates/AddButton.tsx +38 -0
  256. package/src/templates/ButtonTemplates/DaisyUIButton.tsx +31 -0
  257. package/src/templates/ButtonTemplates/IconButton.tsx +62 -0
  258. package/src/templates/ButtonTemplates/SubmitButton.tsx +25 -0
  259. package/src/templates/ButtonTemplates/index.ts +19 -0
  260. package/src/templates/DescriptionField/DescriptionField.tsx +26 -0
  261. package/src/templates/DescriptionField/index.ts +2 -0
  262. package/src/templates/ErrorList/ErrorList.tsx +21 -0
  263. package/src/templates/ErrorList/index.ts +2 -0
  264. package/src/templates/FieldErrorTemplate/FieldErrorTemplate.tsx +22 -0
  265. package/src/templates/FieldErrorTemplate/index.ts +2 -0
  266. package/src/templates/FieldHelpTemplate/FieldHelpTemplate.tsx +23 -0
  267. package/src/templates/FieldHelpTemplate/index.ts +2 -0
  268. package/src/templates/FieldTemplate/FieldTemplate.tsx +66 -0
  269. package/src/templates/FieldTemplate/index.ts +2 -0
  270. package/src/templates/GridTemplate/GridTemplate.tsx +26 -0
  271. package/src/templates/GridTemplate/index.ts +2 -0
  272. package/src/templates/ObjectFieldTemplate/ObjectFieldTemplate.tsx +108 -0
  273. package/src/templates/ObjectFieldTemplate/index.ts +2 -0
  274. package/src/templates/Templates.tsx +63 -0
  275. package/src/templates/TitleField/TitleField.tsx +26 -0
  276. package/src/templates/TitleField/index.ts +2 -0
  277. package/src/templates/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.tsx +74 -0
  278. package/src/templates/WrapIfAdditionalTemplate/index.ts +2 -0
  279. package/src/templates/index.ts +22 -0
  280. package/src/theme/Theme.tsx +93 -0
  281. package/src/theme/index.ts +2 -0
  282. package/src/tsconfig.json +26 -0
  283. package/src/types/DaisyProps.ts +5 -0
  284. package/src/types.d.ts +4 -0
  285. package/src/utils.ts +18 -0
  286. package/src/widgets/AltDateTimeWidget/AltDateTimeWidget.tsx +14 -0
  287. package/src/widgets/AltDateTimeWidget/index.ts +2 -0
  288. package/src/widgets/AltDateWidget/AltDateWidget.tsx +328 -0
  289. package/src/widgets/AltDateWidget/index.ts +2 -0
  290. package/src/widgets/CheckboxWidget/CheckboxWidget.tsx +108 -0
  291. package/src/widgets/CheckboxWidget/index.ts +2 -0
  292. package/src/widgets/CheckboxesWidget/CheckboxesWidget.tsx +124 -0
  293. package/src/widgets/CheckboxesWidget/index.ts +2 -0
  294. package/src/widgets/DateTimeWidget/DateTimeWidget.tsx +343 -0
  295. package/src/widgets/DateTimeWidget/index.ts +2 -0
  296. package/src/widgets/DateWidget/DateWidget.tsx +393 -0
  297. package/src/widgets/DateWidget/index.ts +2 -0
  298. package/src/widgets/FileWidget/FileWidget.tsx +86 -0
  299. package/src/widgets/FileWidget/index.ts +2 -0
  300. package/src/widgets/RadioWidget/RadioWidget.tsx +114 -0
  301. package/src/widgets/RadioWidget/index.ts +2 -0
  302. package/src/widgets/RangeWidget/RangeWidget.tsx +78 -0
  303. package/src/widgets/RangeWidget/index.ts +2 -0
  304. package/src/widgets/RatingWidget/RatingWidget.tsx +120 -0
  305. package/src/widgets/RatingWidget/index.ts +2 -0
  306. package/src/widgets/SelectWidget/SelectWidget.tsx +161 -0
  307. package/src/widgets/SelectWidget/index.ts +2 -0
  308. package/src/widgets/TextareaWidget/TextareaWidget.tsx +77 -0
  309. package/src/widgets/TextareaWidget/index.ts +2 -0
  310. package/src/widgets/TimeWidget/TimeWidget.tsx +72 -0
  311. package/src/widgets/TimeWidget/index.ts +2 -0
  312. package/src/widgets/ToggleWidget/ToggleWidget.tsx +70 -0
  313. package/src/widgets/ToggleWidget/index.ts +2 -0
  314. package/src/widgets/Widgets.tsx +58 -0
  315. package/src/widgets/index.ts +2 -0
@@ -0,0 +1,2011 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@rjsf/core'), require('react'), require('@rjsf/utils'), require('react/jsx-runtime'), require('@fortawesome/fontawesome-svg-core'), require('@fortawesome/free-solid-svg-icons'), require('@fortawesome/react-fontawesome'), require('date-fns'), require('react-day-picker'), require('react-day-picker/dist/style.css')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', '@rjsf/core', 'react', '@rjsf/utils', 'react/jsx-runtime', '@fortawesome/fontawesome-svg-core', '@fortawesome/free-solid-svg-icons', '@fortawesome/react-fontawesome', 'date-fns', 'react-day-picker', 'react-day-picker/dist/style.css'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@rjsf/chakra-ui"] = {}, global.core, global.react, global.utils, global.jsxRuntime, global.fontawesomeSvgCore, global.freeSolidSvgIcons, global.reactFontawesome, global.dateFns, global.reactDayPicker));
5
+ })(this, (function (exports, core, react, utils, jsxRuntime, fontawesomeSvgCore, freeSolidSvgIcons, reactFontawesome, dateFns, reactDayPicker) { 'use strict';
6
+
7
+ // src/index.ts
8
+ function ArrayFieldItemButtonsTemplate(props) {
9
+ const {
10
+ disabled,
11
+ hasCopy,
12
+ hasMoveDown,
13
+ hasMoveUp,
14
+ hasRemove,
15
+ idSchema,
16
+ index,
17
+ onCopyIndexClick,
18
+ onDropIndexClick,
19
+ onReorderClick,
20
+ readonly,
21
+ registry,
22
+ uiSchema
23
+ } = props;
24
+ const { CopyButton: CopyButton2, MoveDownButton: MoveDownButton2, MoveUpButton: MoveUpButton2, RemoveButton: RemoveButton2 } = registry.templates.ButtonTemplates;
25
+ const onCopyClick = react.useMemo(() => onCopyIndexClick(index), [index, onCopyIndexClick]);
26
+ const onRemoveClick = react.useMemo(() => onDropIndexClick(index), [index, onDropIndexClick]);
27
+ const onArrowUpClick = react.useMemo(() => onReorderClick(index, index - 1), [index, onReorderClick]);
28
+ const onArrowDownClick = react.useMemo(() => onReorderClick(index, index + 1), [index, onReorderClick]);
29
+ const renderMany = [hasMoveUp || hasMoveDown, hasCopy, hasRemove].filter(Boolean).length > 1;
30
+ const btnClass = renderMany ? "join-item btn btn-sm px-2" : "btn btn-sm px-2 rounded-sm";
31
+ const removeBtnClass = renderMany ? "join-item btn btn-sm btn-error px-2" : "btn btn-sm btn-error px-2 rounded-sm";
32
+ const buttons = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
33
+ (hasMoveUp || hasMoveDown) && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
34
+ /* @__PURE__ */ jsxRuntime.jsx(
35
+ MoveUpButton2,
36
+ {
37
+ id: utils.buttonId(idSchema, "moveUp"),
38
+ className: `rjsf-array-item-move-up ${btnClass}`,
39
+ disabled: disabled || readonly || !hasMoveUp,
40
+ onClick: onArrowUpClick,
41
+ uiSchema,
42
+ registry
43
+ }
44
+ ),
45
+ /* @__PURE__ */ jsxRuntime.jsx(
46
+ MoveDownButton2,
47
+ {
48
+ id: utils.buttonId(idSchema, "moveDown"),
49
+ className: `rjsf-array-item-move-down ${btnClass}`,
50
+ disabled: disabled || readonly || !hasMoveDown,
51
+ onClick: onArrowDownClick,
52
+ uiSchema,
53
+ registry
54
+ }
55
+ )
56
+ ] }),
57
+ hasCopy && /* @__PURE__ */ jsxRuntime.jsx(
58
+ CopyButton2,
59
+ {
60
+ id: utils.buttonId(idSchema, "copy"),
61
+ className: `rjsf-array-item-copy ${btnClass}`,
62
+ disabled: disabled || readonly,
63
+ onClick: onCopyClick,
64
+ uiSchema,
65
+ registry
66
+ }
67
+ ),
68
+ hasRemove && /* @__PURE__ */ jsxRuntime.jsx(
69
+ RemoveButton2,
70
+ {
71
+ id: utils.buttonId(idSchema, "remove"),
72
+ className: `rjsf-array-item-remove ${removeBtnClass}`,
73
+ disabled: disabled || readonly,
74
+ onClick: onRemoveClick,
75
+ uiSchema,
76
+ registry
77
+ }
78
+ )
79
+ ] });
80
+ return renderMany ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "join", children: buttons }) : buttons;
81
+ }
82
+ function ArrayFieldItemTemplate(props) {
83
+ const { children, buttonsProps, hasToolbar, registry, uiSchema, index, totalItems } = props;
84
+ const uiOptions = utils.getUiOptions(uiSchema);
85
+ const ArrayFieldItemButtonsTemplate2 = utils.getTemplate(
86
+ "ArrayFieldItemButtonsTemplate",
87
+ registry,
88
+ uiOptions
89
+ );
90
+ const isFirstItem = index === 0;
91
+ const isLastItem = index === totalItems - 1;
92
+ const borderRadius = isFirstItem ? "rounded-t-lg" : isLastItem ? "rounded-b-lg" : "";
93
+ const marginBottom = isLastItem ? "" : "mb-[-1px]";
94
+ const zIndex = index === void 0 ? "" : "z-" + (10 - Math.min(index, 9));
95
+ return /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { className: `fieldset bg-base-100 border border-base-300 p-4 ${borderRadius} ${marginBottom} ${zIndex}`, children: [
96
+ children,
97
+ hasToolbar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end mt-2", children: /* @__PURE__ */ jsxRuntime.jsx(ArrayFieldItemButtonsTemplate2, { ...buttonsProps }) })
98
+ ] });
99
+ }
100
+ function ArrayFieldTemplate(props) {
101
+ const {
102
+ canAdd,
103
+ className,
104
+ disabled,
105
+ idSchema,
106
+ items,
107
+ onAddClick,
108
+ readonly,
109
+ registry,
110
+ required,
111
+ schema,
112
+ title,
113
+ uiSchema
114
+ } = props;
115
+ const uiOptions = utils.getUiOptions(uiSchema);
116
+ const ArrayFieldDescriptionTemplate = utils.getTemplate(
117
+ "ArrayFieldDescriptionTemplate",
118
+ registry,
119
+ uiOptions
120
+ );
121
+ const ArrayFieldItemTemplate2 = utils.getTemplate(
122
+ "ArrayFieldItemTemplate",
123
+ registry,
124
+ uiOptions
125
+ );
126
+ const ArrayFieldTitleTemplate = utils.getTemplate(
127
+ "ArrayFieldTitleTemplate",
128
+ registry,
129
+ uiOptions
130
+ );
131
+ const {
132
+ ButtonTemplates: { AddButton: AddButton2 }
133
+ } = registry.templates;
134
+ const handleAddClick = react.useCallback(
135
+ (e) => {
136
+ e.preventDefault();
137
+ e.stopPropagation();
138
+ onAddClick(e);
139
+ },
140
+ [onAddClick]
141
+ );
142
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `array-field-template ${className}`, children: [
143
+ /* @__PURE__ */ jsxRuntime.jsx(
144
+ ArrayFieldTitleTemplate,
145
+ {
146
+ idSchema,
147
+ title: uiOptions.title || title,
148
+ schema,
149
+ uiSchema,
150
+ required,
151
+ registry
152
+ }
153
+ ),
154
+ /* @__PURE__ */ jsxRuntime.jsx(
155
+ ArrayFieldDescriptionTemplate,
156
+ {
157
+ idSchema,
158
+ description: uiOptions.description || schema.description,
159
+ schema,
160
+ uiSchema,
161
+ registry
162
+ }
163
+ ),
164
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4", children: [
165
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rjsf-array-item-list", children: [
166
+ items && items.map(({ key, ...itemProps }, index) => /* @__PURE__ */ jsxRuntime.jsx(ArrayFieldItemTemplate2, { ...itemProps, index, totalItems: items.length }, key)),
167
+ items && items.length === 0 && canAdd && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center italic text-base-content/70", children: utils.TranslatableString.EmptyArray })
168
+ ] }),
169
+ canAdd && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsx(
170
+ AddButton2,
171
+ {
172
+ id: utils.buttonId(idSchema, "add"),
173
+ className: "rjsf-array-item-add btn btn-primary btn-sm",
174
+ onClick: handleAddClick,
175
+ disabled: disabled || readonly,
176
+ uiSchema,
177
+ registry
178
+ }
179
+ ) })
180
+ ] })
181
+ ] });
182
+ }
183
+ function BaseInputTemplate(props) {
184
+ const {
185
+ id,
186
+ value,
187
+ required,
188
+ disabled,
189
+ readonly,
190
+ autofocus,
191
+ onChange,
192
+ onBlur,
193
+ onFocus,
194
+ onChangeOverride,
195
+ options,
196
+ schema,
197
+ type,
198
+ label,
199
+ placeholder
200
+ } = props;
201
+ const inputProps = utils.getInputProps(schema, type, options);
202
+ const { step, min, max, accept, ...rest } = inputProps;
203
+ const htmlInputProps = { step, min, max, accept, ...schema.examples ? { list: utils.examplesId(id) } : void 0 };
204
+ const _onChange = react.useCallback(
205
+ ({ target: { value: value2 } }) => onChange(value2 === "" ? options.emptyValue : value2),
206
+ [onChange, options]
207
+ );
208
+ const _onBlur = react.useCallback(
209
+ ({ target }) => onBlur && onBlur(id, target.value),
210
+ [onBlur, id]
211
+ );
212
+ const _onFocus = react.useCallback(
213
+ ({ target }) => onFocus && onFocus(id, target.value),
214
+ [onFocus, id]
215
+ );
216
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
217
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "form-control", children: [
218
+ /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: id, className: "label hidden", style: { display: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-text", children: label }) }),
219
+ /* @__PURE__ */ jsxRuntime.jsx(
220
+ "input",
221
+ {
222
+ id,
223
+ name: id,
224
+ value: value || value === 0 ? value : "",
225
+ placeholder,
226
+ required,
227
+ disabled: disabled || readonly,
228
+ autoFocus: autofocus,
229
+ className: "input input-bordered",
230
+ ...rest,
231
+ ...htmlInputProps,
232
+ onChange: onChangeOverride || _onChange,
233
+ onBlur: _onBlur,
234
+ onFocus: _onFocus,
235
+ "aria-describedby": utils.ariaDescribedByIds(id, !!schema.examples)
236
+ }
237
+ )
238
+ ] }),
239
+ Array.isArray(schema.examples) && /* @__PURE__ */ jsxRuntime.jsx("datalist", { id: utils.examplesId(id), children: schema.examples.concat(schema.default && !schema.examples.includes(schema.default) ? [schema.default] : []).map((example) => {
240
+ return /* @__PURE__ */ jsxRuntime.jsx("option", { value: example }, example);
241
+ }) })
242
+ ] });
243
+ }
244
+ function DaisyUIButton(props) {
245
+ const { icon, iconType, uiSchema, registry, className, ...otherProps } = props;
246
+ return /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className, "aria-label": props.title, ...otherProps, children: /* @__PURE__ */ jsxRuntime.jsx(reactFontawesome.FontAwesomeIcon, { icon, className: "h-5 w-5" }) });
247
+ }
248
+ DaisyUIButton.displayName = "DaisyUIButton";
249
+ var DaisyUIButton_default = react.memo(DaisyUIButton);
250
+ fontawesomeSvgCore.library.add(freeSolidSvgIcons.faPlus, freeSolidSvgIcons.faCopy, freeSolidSvgIcons.faArrowDown, freeSolidSvgIcons.faArrowUp, freeSolidSvgIcons.faTrash);
251
+ function AddButton({
252
+ className,
253
+ onClick,
254
+ disabled,
255
+ registry,
256
+ ...otherProps
257
+ }) {
258
+ const { translateString } = registry;
259
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "row", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: `col-xs-3 col-xs-offset-9 text-right ${className}`, children: /* @__PURE__ */ jsxRuntime.jsx(
260
+ DaisyUIButton_default,
261
+ {
262
+ ...otherProps,
263
+ iconType: "info",
264
+ icon: freeSolidSvgIcons.faPlus,
265
+ className: "btn-add col-xs-12 btn-primary btn-primary-content",
266
+ title: translateString(utils.TranslatableString.AddButton),
267
+ onClick,
268
+ disabled,
269
+ registry
270
+ }
271
+ ) }) });
272
+ }
273
+ function SubmitButton({ uiSchema }) {
274
+ const { submitText, norender, props: submitButtonProps = {} } = utils.getSubmitButtonOptions(uiSchema);
275
+ if (norender) {
276
+ return null;
277
+ }
278
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
279
+ "button",
280
+ {
281
+ type: "submit",
282
+ ...submitButtonProps,
283
+ className: `btn btn-primary btn-primary-content ${submitButtonProps.className || ""}`,
284
+ children: submitText
285
+ }
286
+ ) });
287
+ }
288
+ function CopyButton(props) {
289
+ const {
290
+ registry: { translateString }
291
+ } = props;
292
+ return /* @__PURE__ */ jsxRuntime.jsx(DaisyUIButton_default, { ...props, title: translateString(utils.TranslatableString.CopyButton), icon: freeSolidSvgIcons.faCopy });
293
+ }
294
+ function MoveDownButton(props) {
295
+ const {
296
+ registry: { translateString }
297
+ } = props;
298
+ return /* @__PURE__ */ jsxRuntime.jsx(
299
+ DaisyUIButton_default,
300
+ {
301
+ ...props,
302
+ title: translateString(utils.TranslatableString.MoveDownButton),
303
+ icon: freeSolidSvgIcons.faArrowDown
304
+ }
305
+ );
306
+ }
307
+ function MoveUpButton(props) {
308
+ const {
309
+ registry: { translateString }
310
+ } = props;
311
+ return /* @__PURE__ */ jsxRuntime.jsx(
312
+ DaisyUIButton_default,
313
+ {
314
+ ...props,
315
+ title: translateString(utils.TranslatableString.MoveUpButton),
316
+ icon: freeSolidSvgIcons.faArrowUp
317
+ }
318
+ );
319
+ }
320
+ function RemoveButton(props) {
321
+ const {
322
+ registry: { translateString }
323
+ } = props;
324
+ return /* @__PURE__ */ jsxRuntime.jsx(
325
+ DaisyUIButton_default,
326
+ {
327
+ ...props,
328
+ title: translateString(utils.TranslatableString.RemoveButton),
329
+ iconType: "danger",
330
+ icon: freeSolidSvgIcons.faTrash
331
+ }
332
+ );
333
+ }
334
+ function DescriptionField(props) {
335
+ const { id, description, registry, uiSchema } = props;
336
+ if (!description) {
337
+ return null;
338
+ }
339
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { id, className: "description-field my-4", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-base-content/80", children: /* @__PURE__ */ jsxRuntime.jsx(core.RichDescription, { description, registry, uiSchema }) }) });
340
+ }
341
+ function ErrorList(props) {
342
+ const { errors } = props;
343
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "error-list", children: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "list-disc list-inside text-red-600", children: errors.map((error, index) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: error.stack }, index)) }) });
344
+ }
345
+ function FieldErrorTemplate(props) {
346
+ const { errors } = props;
347
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rjsf-field-error-template text-red-600", children: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "list-disc list-inside", children: errors?.map((error, index) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: error }, index)) ?? [] }) });
348
+ }
349
+ function FieldHelpTemplate(props) {
350
+ const { help } = props;
351
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rjsf-field-help-template text-gray-500 text-sm", children: /* @__PURE__ */ jsxRuntime.jsx("div", { children: help }) });
352
+ }
353
+ function FieldTemplate(props) {
354
+ const {
355
+ id,
356
+ label,
357
+ children,
358
+ errors,
359
+ formContext,
360
+ formData,
361
+ help,
362
+ hideError,
363
+ displayLabel,
364
+ classNames,
365
+ // Destructure props we don't want to pass to div
366
+ onKeyChange,
367
+ onDropPropertyClick,
368
+ uiSchema,
369
+ schema,
370
+ readonly,
371
+ required,
372
+ rawErrors,
373
+ rawHelp,
374
+ rawDescription,
375
+ hidden,
376
+ onChange,
377
+ registry,
378
+ ...divProps
379
+ } = props;
380
+ const isCheckbox = schema.type === "boolean";
381
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `field-template mb-3 ${classNames || ""}`, ...divProps, children: [
382
+ displayLabel && !isCheckbox && /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: id, className: "label", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "label-text font-medium", children: [
383
+ label,
384
+ required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-error ml-1", children: "*" })
385
+ ] }) }),
386
+ children,
387
+ errors,
388
+ help
389
+ ] });
390
+ }
391
+ function GridTemplate(props) {
392
+ const { children, column, ...rest } = props;
393
+ if (column) {
394
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-grow", ...rest, children });
395
+ }
396
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-4", ...rest, children });
397
+ }
398
+ function ObjectFieldTemplate(props) {
399
+ const {
400
+ description,
401
+ title,
402
+ properties,
403
+ required,
404
+ disabled,
405
+ readonly,
406
+ uiSchema,
407
+ idSchema,
408
+ schema,
409
+ formData,
410
+ onAddClick,
411
+ registry
412
+ } = props;
413
+ const uiOptions = utils.getUiOptions(uiSchema);
414
+ const TitleFieldTemplate = utils.getTemplate("TitleFieldTemplate", registry, uiOptions);
415
+ const DescriptionFieldTemplate = utils.getTemplate(
416
+ "DescriptionFieldTemplate",
417
+ registry,
418
+ uiOptions
419
+ );
420
+ const {
421
+ ButtonTemplates: { AddButton: AddButton2 }
422
+ } = registry.templates;
423
+ const isRoot = idSchema.$id === "root";
424
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `form-control ${isRoot ? "bg-base-100 p-6 rounded-xl shadow-lg" : ""}`, children: [
425
+ title && /* @__PURE__ */ jsxRuntime.jsx(
426
+ TitleFieldTemplate,
427
+ {
428
+ id: utils.titleId(idSchema),
429
+ title,
430
+ required,
431
+ schema,
432
+ uiSchema,
433
+ registry
434
+ }
435
+ ),
436
+ description && /* @__PURE__ */ jsxRuntime.jsx(
437
+ DescriptionFieldTemplate,
438
+ {
439
+ id: utils.descriptionId(idSchema),
440
+ description,
441
+ schema,
442
+ uiSchema,
443
+ registry
444
+ }
445
+ ),
446
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `grid grid-cols-1 gap-${description ? 3 : 4} ${isRoot ? "" : "mb-4"}`, children: [
447
+ properties.map(
448
+ (element, index) => element.hidden ? element.content : /* @__PURE__ */ jsxRuntime.jsx(
449
+ "div",
450
+ {
451
+ className: idSchema.$id === "root" && element.name === "tasks" ? "mt-2" : "",
452
+ children: element.content
453
+ },
454
+ `${idSchema.$id}-${element.name}-${index}`
455
+ )
456
+ ),
457
+ utils.canExpand(schema, uiSchema, formData) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsx(
458
+ AddButton2,
459
+ {
460
+ id: utils.buttonId(idSchema, "add"),
461
+ className: "rjsf-object-property-expand btn btn-primary btn-sm",
462
+ onClick: onAddClick(schema),
463
+ disabled: disabled || readonly,
464
+ uiSchema,
465
+ registry
466
+ }
467
+ ) })
468
+ ] })
469
+ ] });
470
+ }
471
+ function TitleField(props) {
472
+ const { id, title, uiSchema } = props;
473
+ const uiOptions = utils.getUiOptions(uiSchema);
474
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { id, className: "title-field mb-6", children: [
475
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-3xl font-bold text-primary mb-2", children: uiOptions.title || title }),
476
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divider divider-primary" })
477
+ ] });
478
+ }
479
+ function WrapIfAdditionalTemplate(props) {
480
+ const {
481
+ children,
482
+ classNames,
483
+ disabled,
484
+ id,
485
+ label,
486
+ readonly,
487
+ required,
488
+ schema,
489
+ onKeyChange,
490
+ onDropPropertyClick,
491
+ registry,
492
+ ...rest
493
+ } = props;
494
+ const { translateString } = registry;
495
+ const handleBlur = react.useCallback(
496
+ (event) => {
497
+ onKeyChange(event.target.value);
498
+ },
499
+ [onKeyChange]
500
+ );
501
+ const handleRemove = react.useCallback(() => {
502
+ onDropPropertyClick(label)();
503
+ }, [onDropPropertyClick, label]);
504
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `wrap-if-additional-template ${classNames}`, ...rest, children: [
505
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center", children: [
506
+ /* @__PURE__ */ jsxRuntime.jsx(
507
+ "input",
508
+ {
509
+ type: "text",
510
+ className: "input input-bordered",
511
+ id: `${id}-key`,
512
+ onBlur: handleBlur,
513
+ defaultValue: label,
514
+ disabled: disabled || readonly
515
+ }
516
+ ),
517
+ schema.additionalProperties && /* @__PURE__ */ jsxRuntime.jsx(
518
+ "button",
519
+ {
520
+ id: utils.buttonId(id, "remove"),
521
+ className: "rjsf-array-item-remove btn btn-danger ml-2",
522
+ onClick: handleRemove,
523
+ disabled: disabled || readonly,
524
+ children: translateString(utils.TranslatableString.RemoveButton)
525
+ }
526
+ )
527
+ ] }),
528
+ children
529
+ ] });
530
+ }
531
+
532
+ // src/templates/Templates.tsx
533
+ function generateTemplates() {
534
+ return {
535
+ ArrayFieldItemTemplate,
536
+ ArrayFieldTemplate,
537
+ ArrayFieldItemButtonsTemplate,
538
+ BaseInputTemplate,
539
+ ButtonTemplates: {
540
+ AddButton,
541
+ SubmitButton,
542
+ CopyButton,
543
+ MoveDownButton,
544
+ MoveUpButton,
545
+ RemoveButton
546
+ },
547
+ DescriptionFieldTemplate: DescriptionField,
548
+ ErrorListTemplate: ErrorList,
549
+ FieldErrorTemplate,
550
+ FieldHelpTemplate,
551
+ FieldTemplate,
552
+ GridTemplate,
553
+ ObjectFieldTemplate,
554
+ TitleFieldTemplate: TitleField,
555
+ WrapIfAdditionalTemplate
556
+ };
557
+ }
558
+ var Templates_default = generateTemplates();
559
+ function AltDateTimeWidget({
560
+ time = true,
561
+ ...props
562
+ }) {
563
+ const { AltDateWidget: AltDateWidget2 } = props.registry.widgets;
564
+ return /* @__PURE__ */ jsxRuntime.jsx(AltDateWidget2, { time, ...props });
565
+ }
566
+ var AltDateTimeWidget_default = AltDateTimeWidget;
567
+ function readyForChange(state, time = false) {
568
+ return state.year && state.month && state.day && (!time || state.hour && state.minute && state.second);
569
+ }
570
+ function getDateElementProps(state, time, yearsRange, format3 = "YMD") {
571
+ const rangeOptions = yearsRange ?? [1900, (/* @__PURE__ */ new Date()).getFullYear() + 2];
572
+ const formats = {
573
+ YMD: ["year", "month", "day"],
574
+ MDY: ["month", "day", "year"],
575
+ DMY: ["day", "month", "year"]
576
+ };
577
+ const dateElements = formats[format3].map((key) => ({
578
+ type: key,
579
+ value: state[key],
580
+ range: key === "year" ? rangeOptions : key === "month" ? [1, 12] : key === "day" ? [1, 31] : [0, 59]
581
+ }));
582
+ if (time) {
583
+ dateElements.push(
584
+ { type: "hour", value: state.hour, range: [0, 23] },
585
+ { type: "minute", value: state.minute, range: [0, 59] },
586
+ { type: "second", value: state.second, range: [0, 59] }
587
+ );
588
+ }
589
+ return dateElements;
590
+ }
591
+ function DateElement({
592
+ type,
593
+ range,
594
+ value,
595
+ select,
596
+ rootId,
597
+ name,
598
+ disabled,
599
+ readonly,
600
+ autofocus,
601
+ registry,
602
+ onBlur,
603
+ onFocus
604
+ }) {
605
+ const id = `${rootId}_${type}`;
606
+ const { SelectWidget: SelectWidget2 } = registry.widgets;
607
+ const handleChange = react.useCallback(
608
+ (value2) => {
609
+ select(type, value2);
610
+ },
611
+ [select, type]
612
+ );
613
+ return /* @__PURE__ */ jsxRuntime.jsx(
614
+ SelectWidget2,
615
+ {
616
+ schema: { type: "integer" },
617
+ id,
618
+ name,
619
+ className: "select select-bordered select-sm w-full",
620
+ options: { enumOptions: utils.dateRangeOptions(range[0], range[1]) },
621
+ placeholder: type,
622
+ value,
623
+ disabled,
624
+ readonly,
625
+ autofocus,
626
+ onChange: handleChange,
627
+ onBlur,
628
+ onFocus,
629
+ registry,
630
+ label: "",
631
+ "aria-describedby": utils.ariaDescribedByIds(rootId),
632
+ required: false
633
+ }
634
+ );
635
+ }
636
+ function convertToRJSFDateObject(dateObj) {
637
+ return {
638
+ year: dateObj.year ? parseInt(dateObj.year) : 0,
639
+ month: dateObj.month ? parseInt(dateObj.month) : 0,
640
+ day: dateObj.day ? parseInt(dateObj.day) : 0,
641
+ hour: dateObj.hour ? parseInt(dateObj.hour) : 0,
642
+ minute: dateObj.minute ? parseInt(dateObj.minute) : 0,
643
+ second: dateObj.second ? parseInt(dateObj.second) : 0
644
+ };
645
+ }
646
+ function AltDateWidget({
647
+ time = false,
648
+ disabled = false,
649
+ readonly = false,
650
+ autofocus = false,
651
+ options = {},
652
+ id,
653
+ name,
654
+ registry,
655
+ onBlur,
656
+ onFocus,
657
+ onChange,
658
+ value
659
+ }) {
660
+ const { translateString } = registry;
661
+ const [lastValue, setLastValue] = react.useState(value);
662
+ const initialState = utils.parseDateString(value, time);
663
+ const dateReducer = (state2, action) => {
664
+ return { ...state2, ...action };
665
+ };
666
+ const [state, setState] = react.useReducer(dateReducer, initialState);
667
+ react.useEffect(() => {
668
+ const rjsfDateObj = convertToRJSFDateObject(state);
669
+ const stateValue = utils.toDateString(rjsfDateObj, time);
670
+ if (readyForChange(state, time) && stateValue !== value) {
671
+ onChange(stateValue);
672
+ } else if (lastValue !== value) {
673
+ setLastValue(value);
674
+ setState(utils.parseDateString(value, time));
675
+ }
676
+ }, [time, value, onChange, state, lastValue]);
677
+ const handleChange = react.useCallback((property, value2) => {
678
+ setState({ [property]: value2 });
679
+ }, []);
680
+ const handleSetNow = react.useCallback(
681
+ (event) => {
682
+ event.preventDefault();
683
+ if (disabled || readonly) {
684
+ return;
685
+ }
686
+ const nextState = utils.parseDateString((/* @__PURE__ */ new Date()).toJSON(), time);
687
+ const rjsfDateObj = convertToRJSFDateObject(nextState);
688
+ onChange(utils.toDateString(rjsfDateObj, time));
689
+ },
690
+ [disabled, readonly, time, onChange]
691
+ );
692
+ const handleClear = react.useCallback(
693
+ (event) => {
694
+ event.preventDefault();
695
+ if (disabled || readonly) {
696
+ return;
697
+ }
698
+ onChange(void 0);
699
+ },
700
+ [disabled, readonly, onChange]
701
+ );
702
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
703
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-2", children: getDateElementProps(
704
+ state,
705
+ time,
706
+ options.yearsRange,
707
+ options.format
708
+ ).map((elemProps, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "form-control", children: [
709
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: "label", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-text capitalize", children: elemProps.type }) }),
710
+ /* @__PURE__ */ jsxRuntime.jsx(
711
+ DateElement,
712
+ {
713
+ rootId: id,
714
+ name,
715
+ select: handleChange,
716
+ type: elemProps.type,
717
+ range: elemProps.range,
718
+ value: elemProps.value,
719
+ disabled,
720
+ readonly,
721
+ registry,
722
+ onBlur,
723
+ onFocus,
724
+ autofocus: autofocus && i === 0
725
+ }
726
+ )
727
+ ] }, i)) }),
728
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-start space-x-2", children: [
729
+ (options.hideNowButton !== void 0 ? !options.hideNowButton : true) && /* @__PURE__ */ jsxRuntime.jsx(
730
+ "button",
731
+ {
732
+ type: "button",
733
+ className: "btn btn-sm btn-primary",
734
+ onClick: handleSetNow,
735
+ disabled: disabled || readonly,
736
+ children: translateString(utils.TranslatableString.NowLabel)
737
+ }
738
+ ),
739
+ (options.hideClearButton !== void 0 ? !options.hideClearButton : true) && /* @__PURE__ */ jsxRuntime.jsx(
740
+ "button",
741
+ {
742
+ type: "button",
743
+ className: "btn btn-sm btn-secondary",
744
+ onClick: handleClear,
745
+ disabled: disabled || readonly,
746
+ children: translateString(utils.TranslatableString.ClearLabel)
747
+ }
748
+ )
749
+ ] })
750
+ ] });
751
+ }
752
+ function CheckboxWidget(props) {
753
+ const {
754
+ id,
755
+ value,
756
+ required,
757
+ disabled,
758
+ hideLabel,
759
+ label,
760
+ readonly,
761
+ registry,
762
+ options,
763
+ schema,
764
+ uiSchema,
765
+ onChange,
766
+ onFocus,
767
+ onBlur
768
+ } = props;
769
+ const DescriptionFieldTemplate = utils.getTemplate(
770
+ "DescriptionFieldTemplate",
771
+ registry,
772
+ options
773
+ );
774
+ const description = options.description || schema.description;
775
+ const handleFocus = react.useCallback(() => {
776
+ if (onFocus) {
777
+ onFocus(id, value);
778
+ }
779
+ }, [onFocus, id, value]);
780
+ const handleBlur = react.useCallback(() => {
781
+ if (onBlur) {
782
+ onBlur(id, value);
783
+ }
784
+ }, [onBlur, id, value]);
785
+ const handleChange = react.useCallback(
786
+ (event) => {
787
+ onChange(event.target.checked);
788
+ },
789
+ [onChange]
790
+ );
791
+ const input = /* @__PURE__ */ jsxRuntime.jsx(
792
+ "input",
793
+ {
794
+ type: "checkbox",
795
+ id,
796
+ checked: value,
797
+ required,
798
+ disabled: disabled || readonly,
799
+ onChange: handleChange,
800
+ onFocus: handleFocus,
801
+ onBlur: handleBlur,
802
+ className: "checkbox"
803
+ }
804
+ );
805
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "form-control", children: [
806
+ !hideLabel && description && /* @__PURE__ */ jsxRuntime.jsx(
807
+ DescriptionFieldTemplate,
808
+ {
809
+ id: utils.descriptionId(id),
810
+ description,
811
+ schema,
812
+ uiSchema,
813
+ registry
814
+ }
815
+ ),
816
+ hideLabel || !label ? input : /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "label cursor-pointer justify-start", children: [
817
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mr-2", children: input }),
818
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "label-text", children: [
819
+ label,
820
+ required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-error ml-1", children: "*" })
821
+ ] })
822
+ ] })
823
+ ] });
824
+ }
825
+ function CheckboxesWidget({
826
+ id,
827
+ disabled,
828
+ options,
829
+ value,
830
+ readonly,
831
+ required,
832
+ onChange,
833
+ onFocus,
834
+ onBlur
835
+ }) {
836
+ const { enumOptions } = options;
837
+ const isEnumeratedObject = enumOptions && enumOptions[0]?.value && typeof enumOptions[0].value === "object";
838
+ const isChecked = react.useCallback(
839
+ (option) => {
840
+ if (!Array.isArray(value)) {
841
+ return false;
842
+ }
843
+ if (isEnumeratedObject) {
844
+ return value.some((v) => v.name === option.value.name);
845
+ }
846
+ return value.includes(option.value);
847
+ },
848
+ [value, isEnumeratedObject]
849
+ );
850
+ const handleChange = react.useCallback(
851
+ (event) => {
852
+ const index = Number(event.target.dataset.index);
853
+ const option = enumOptions?.[index];
854
+ if (!option) {
855
+ return;
856
+ }
857
+ const newValue = Array.isArray(value) ? [...value] : [];
858
+ const optionValue = isEnumeratedObject ? option.value : option.value;
859
+ if (isChecked(option)) {
860
+ onChange(newValue.filter((v) => isEnumeratedObject ? v.name !== optionValue.name : v !== optionValue));
861
+ } else {
862
+ onChange([...newValue, optionValue]);
863
+ }
864
+ },
865
+ [onChange, value, isChecked, isEnumeratedObject, enumOptions]
866
+ );
867
+ const handleFocus = react.useCallback(
868
+ (event) => {
869
+ if (onFocus) {
870
+ const index = Number(event.target.dataset.index);
871
+ const option = enumOptions?.[index];
872
+ if (option) {
873
+ onFocus(id, option.value);
874
+ }
875
+ }
876
+ },
877
+ [onFocus, id, enumOptions]
878
+ );
879
+ const handleBlur = react.useCallback(
880
+ (event) => {
881
+ if (onBlur) {
882
+ const index = Number(event.target.dataset.index);
883
+ const option = enumOptions?.[index];
884
+ if (option) {
885
+ onBlur(id, option.value);
886
+ }
887
+ }
888
+ },
889
+ [onBlur, id, enumOptions]
890
+ );
891
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "form-control", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-2 mt-1", children: enumOptions?.map((option, index) => /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center cursor-pointer gap-2", children: [
892
+ /* @__PURE__ */ jsxRuntime.jsx(
893
+ "input",
894
+ {
895
+ type: "checkbox",
896
+ id: `${id}-${option.value}`,
897
+ className: "checkbox",
898
+ name: id,
899
+ checked: isChecked(option),
900
+ required,
901
+ disabled: disabled || readonly,
902
+ "data-index": index,
903
+ onChange: handleChange,
904
+ onFocus: handleFocus,
905
+ onBlur: handleBlur
906
+ }
907
+ ),
908
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-text", children: option.label })
909
+ ] }, option.value)) }) });
910
+ }
911
+ function useDatePickerState(initialDate) {
912
+ const [isOpen, setIsOpen] = react.useState(false);
913
+ const [month, setMonth] = react.useState(initialDate ?? /* @__PURE__ */ new Date());
914
+ return { isOpen, setIsOpen, month, setMonth };
915
+ }
916
+ function useClickOutside(ref, callback) {
917
+ react.useEffect(() => {
918
+ const handleClickOutside = (event) => {
919
+ if (ref.current && !ref.current.contains(event.target)) {
920
+ callback();
921
+ }
922
+ };
923
+ document.addEventListener("mousedown", handleClickOutside);
924
+ return () => document.removeEventListener("mousedown", handleClickOutside);
925
+ }, [ref, callback]);
926
+ }
927
+ var dayPickerStyles = {
928
+ classNames: {
929
+ [reactDayPicker.UI.Root]: "relative",
930
+ [reactDayPicker.UI.Nav]: "hidden",
931
+ [reactDayPicker.UI.Chevron]: "hidden",
932
+ [reactDayPicker.UI.CaptionLabel]: "hidden",
933
+ [reactDayPicker.UI.Dropdowns]: "flex justify-between gap-4 px-4 pb-4",
934
+ [reactDayPicker.UI.Dropdown]: "select select-bordered select-sm w-32",
935
+ [reactDayPicker.UI.MonthsDropdown]: "select select-bordered select-sm",
936
+ [reactDayPicker.UI.YearsDropdown]: "select select-bordered select-sm",
937
+ [reactDayPicker.UI.Months]: "flex justify-center",
938
+ [reactDayPicker.UI.Month]: "w-full",
939
+ [reactDayPicker.UI.MonthCaption]: "flex justify-center",
940
+ [reactDayPicker.UI.MonthGrid]: "w-full",
941
+ [reactDayPicker.UI.Weekdays]: "grid grid-cols-7 text-center border-b mb-2 pb-1 text-base-content/60 uppercase",
942
+ [reactDayPicker.UI.Weekday]: "p-1 font-medium text-base-content/60 text-sm",
943
+ [reactDayPicker.UI.Week]: "grid grid-cols-7",
944
+ [reactDayPicker.UI.Day]: "w-10 h-8 p-0 relative rounded-md",
945
+ [reactDayPicker.UI.DayButton]: "btn btn-ghost absolute inset-0 flex items-center justify-center w-full h-full cursor-pointer rounded-md hover:btn-primary"
946
+ },
947
+ modifiers: {
948
+ selected: "btn btn-accent min-h-0 h-full",
949
+ outside: "text-base-content/30 hover:btn-ghost",
950
+ disabled: "opacity-50 cursor-not-allowed hover:btn-disabled"
951
+ }
952
+ };
953
+ function DateTimePickerPopup({ selectedDate, month, onMonthChange, onSelect, onTimeChange }) {
954
+ const customDayModifiers = {
955
+ selected: selectedDate,
956
+ "custom-today": (date) => dateFns.isToday(date) && !(selectedDate && dateFns.isSameDay(date, selectedDate))
957
+ };
958
+ const customModifiersClassNames = {
959
+ ...dayPickerStyles.modifiers,
960
+ "custom-today": "btn btn-outline btn-info min-h-0 h-full"
961
+ };
962
+ const handleClick = react.useCallback((e) => {
963
+ e.stopPropagation();
964
+ }, []);
965
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-3", children: [
966
+ /* @__PURE__ */ jsxRuntime.jsx(
967
+ reactDayPicker.DayPicker,
968
+ {
969
+ mode: "single",
970
+ selected: selectedDate,
971
+ month,
972
+ onMonthChange,
973
+ onSelect,
974
+ captionLayout: "dropdown",
975
+ fromYear: 1900,
976
+ toYear: (/* @__PURE__ */ new Date()).getFullYear() + 10,
977
+ showOutsideDays: true,
978
+ classNames: dayPickerStyles.classNames,
979
+ modifiers: customDayModifiers,
980
+ modifiersClassNames: customModifiersClassNames
981
+ }
982
+ ),
983
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 border-t border-base-300 pt-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "form-control w-full", children: [
984
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: "label", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-text", children: "Time" }) }),
985
+ /* @__PURE__ */ jsxRuntime.jsx(
986
+ "input",
987
+ {
988
+ type: "time",
989
+ className: "input input-bordered w-full",
990
+ value: selectedDate ? dateFns.format(selectedDate, "HH:mm") : "",
991
+ onChange: onTimeChange,
992
+ onClick: handleClick
993
+ }
994
+ )
995
+ ] }) })
996
+ ] });
997
+ }
998
+ var MemoizedDateTimePickerPopup = react.memo(DateTimePickerPopup);
999
+ function DateTimeWidget(props) {
1000
+ const { id, value, onChange, onFocus, onBlur, schema } = props;
1001
+ const initialDate = react.useMemo(() => value ? new Date(value) : void 0, [value]);
1002
+ const [localDate, setLocalDate] = react.useState(initialDate);
1003
+ react.useEffect(() => {
1004
+ setLocalDate(initialDate);
1005
+ }, [initialDate]);
1006
+ const { isOpen, setIsOpen, month, setMonth } = useDatePickerState(initialDate);
1007
+ const containerRef = react.useRef(null);
1008
+ const inputRef = react.useRef(null);
1009
+ useClickOutside(containerRef, () => {
1010
+ if (isOpen) {
1011
+ setIsOpen(false);
1012
+ onChange(localDate ? localDate.toISOString() : "");
1013
+ if (onBlur) {
1014
+ onBlur(id, value);
1015
+ }
1016
+ }
1017
+ });
1018
+ react.useEffect(() => {
1019
+ if (localDate) {
1020
+ setMonth(localDate);
1021
+ }
1022
+ }, [localDate, setMonth]);
1023
+ const handleMonthChange = react.useCallback((date) => setMonth(date), [setMonth]);
1024
+ const handleSelect = react.useCallback(
1025
+ (date) => {
1026
+ if (date) {
1027
+ if (localDate) {
1028
+ date.setHours(localDate.getHours(), localDate.getMinutes());
1029
+ }
1030
+ setLocalDate(date);
1031
+ }
1032
+ },
1033
+ [localDate]
1034
+ );
1035
+ const handleTimeChange = react.useCallback(
1036
+ (e) => {
1037
+ if (localDate) {
1038
+ const [hours, minutes] = e.target.value.split(":");
1039
+ const newDate = new Date(localDate);
1040
+ newDate.setHours(parseInt(hours, 10), parseInt(minutes, 10));
1041
+ setLocalDate(newDate);
1042
+ }
1043
+ },
1044
+ [localDate]
1045
+ );
1046
+ const togglePicker = react.useCallback(
1047
+ (e) => {
1048
+ e.stopPropagation();
1049
+ setIsOpen((prev) => !prev);
1050
+ if (!isOpen && onFocus) {
1051
+ onFocus(id, value);
1052
+ }
1053
+ },
1054
+ [isOpen, id, onFocus, setIsOpen, value]
1055
+ );
1056
+ const handleFocus = react.useCallback(() => {
1057
+ if (onFocus) {
1058
+ onFocus(id, value);
1059
+ }
1060
+ }, [id, onFocus, value]);
1061
+ const handleBlur = react.useCallback(() => {
1062
+ if (!isOpen && onBlur) {
1063
+ onBlur(id, value);
1064
+ }
1065
+ }, [id, onBlur, value, isOpen]);
1066
+ const handleKeyDown = react.useCallback(
1067
+ (e) => {
1068
+ if (e.key === "Enter" || e.key === " ") {
1069
+ togglePicker(e);
1070
+ }
1071
+ },
1072
+ [togglePicker]
1073
+ );
1074
+ const handleContainerClick = react.useCallback((e) => {
1075
+ e.stopPropagation();
1076
+ }, []);
1077
+ react.useEffect(() => {
1078
+ const handleEscape = (e) => {
1079
+ if (e.key === "Escape" && isOpen) {
1080
+ setIsOpen(false);
1081
+ if (onBlur) {
1082
+ onBlur(id, value);
1083
+ }
1084
+ }
1085
+ };
1086
+ document.addEventListener("keydown", handleEscape);
1087
+ return () => document.removeEventListener("keydown", handleEscape);
1088
+ }, [id, isOpen, onBlur, value]);
1089
+ const handleDoneClick = react.useCallback(() => {
1090
+ setIsOpen(false);
1091
+ onChange(localDate ? localDate.toISOString() : "");
1092
+ if (onBlur) {
1093
+ onBlur(id, value);
1094
+ }
1095
+ inputRef.current?.focus();
1096
+ }, [localDate, onChange, onBlur, id, value]);
1097
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "form-control my-4 w-full relative", children: /* @__PURE__ */ jsxRuntime.jsxs(
1098
+ "div",
1099
+ {
1100
+ className: "w-full",
1101
+ tabIndex: 0,
1102
+ onKeyDown: handleKeyDown,
1103
+ onFocus: handleFocus,
1104
+ onBlur: handleBlur,
1105
+ ref: inputRef,
1106
+ children: [
1107
+ /* @__PURE__ */ jsxRuntime.jsxs(
1108
+ "div",
1109
+ {
1110
+ id,
1111
+ className: `input input-bordered w-full flex items-center justify-between cursor-pointer ${isOpen ? "ring-2 ring-primary/50" : ""}`,
1112
+ onClick: togglePicker,
1113
+ role: "button",
1114
+ "aria-haspopup": "true",
1115
+ "aria-expanded": isOpen,
1116
+ tabIndex: -1,
1117
+ children: [
1118
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: localDate && dateFns.isValid(localDate) ? "" : "text-base-content/50", children: localDate && dateFns.isValid(localDate) ? dateFns.format(localDate, "PP p") : schema.title }),
1119
+ /* @__PURE__ */ jsxRuntime.jsx(reactFontawesome.FontAwesomeIcon, { icon: freeSolidSvgIcons.faCalendar, className: "ml-2 h-4 w-4 text-primary" })
1120
+ ]
1121
+ }
1122
+ ),
1123
+ isOpen && /* @__PURE__ */ jsxRuntime.jsxs(
1124
+ "div",
1125
+ {
1126
+ ref: containerRef,
1127
+ className: "absolute z-[100] mt-2 w-full max-w-xs bg-base-100 border border-base-300 shadow-lg rounded-box",
1128
+ onClick: handleContainerClick,
1129
+ children: [
1130
+ /* @__PURE__ */ jsxRuntime.jsx(
1131
+ MemoizedDateTimePickerPopup,
1132
+ {
1133
+ selectedDate: localDate,
1134
+ month,
1135
+ onMonthChange: handleMonthChange,
1136
+ onSelect: handleSelect,
1137
+ onTimeChange: handleTimeChange
1138
+ }
1139
+ ),
1140
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-3 flex justify-end border-t border-base-300", children: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "btn btn-sm btn-primary", onClick: handleDoneClick, children: "Done" }) })
1141
+ ]
1142
+ }
1143
+ )
1144
+ ]
1145
+ }
1146
+ ) });
1147
+ }
1148
+ function useDatePickerState2(initialDate) {
1149
+ const [isOpen, setIsOpen] = react.useState(false);
1150
+ const [month, setMonth] = react.useState(initialDate ?? /* @__PURE__ */ new Date());
1151
+ return { isOpen, setIsOpen, month, setMonth };
1152
+ }
1153
+ function useClickOutside2(ref, callback) {
1154
+ react.useEffect(() => {
1155
+ const handleClickOutside = (event) => {
1156
+ if (ref.current && !ref.current.contains(event.target)) {
1157
+ callback();
1158
+ }
1159
+ };
1160
+ document.addEventListener("mousedown", handleClickOutside);
1161
+ return () => document.removeEventListener("mousedown", handleClickOutside);
1162
+ }, [ref, callback]);
1163
+ }
1164
+ var dayPickerStyles2 = {
1165
+ classNames: {
1166
+ [reactDayPicker.UI.Root]: "relative",
1167
+ [reactDayPicker.UI.Nav]: "hidden",
1168
+ [reactDayPicker.UI.Chevron]: "hidden",
1169
+ [reactDayPicker.UI.CaptionLabel]: "hidden",
1170
+ [reactDayPicker.UI.Dropdowns]: "flex justify-between gap-4 px-4 pb-4",
1171
+ [reactDayPicker.UI.Dropdown]: "select select-bordered select-sm w-32",
1172
+ [reactDayPicker.UI.MonthsDropdown]: "select select-bordered select-sm",
1173
+ [reactDayPicker.UI.YearsDropdown]: "select select-bordered select-sm",
1174
+ [reactDayPicker.UI.Months]: "flex justify-center",
1175
+ [reactDayPicker.UI.Month]: "w-full",
1176
+ [reactDayPicker.UI.MonthCaption]: "flex justify-center",
1177
+ [reactDayPicker.UI.MonthGrid]: "w-full",
1178
+ [reactDayPicker.UI.Weekdays]: "grid grid-cols-7 text-center border-b mb-2 pb-1 text-base-content/60 uppercase",
1179
+ [reactDayPicker.UI.Weekday]: "p-1 font-medium text-base-content/60 text-sm",
1180
+ [reactDayPicker.UI.Week]: "grid grid-cols-7",
1181
+ [reactDayPicker.UI.Day]: "w-10 h-8 p-0 relative rounded-md",
1182
+ [reactDayPicker.UI.DayButton]: "btn btn-ghost absolute inset-0 flex items-center justify-center w-full h-full cursor-pointer rounded-md hover:btn-primary"
1183
+ },
1184
+ modifiers: {
1185
+ selected: "btn btn-accent min-h-0 h-full",
1186
+ outside: "text-base-content/30 hover:btn-ghost",
1187
+ disabled: "opacity-50 cursor-not-allowed hover:btn-disabled"
1188
+ }
1189
+ };
1190
+ function DatePickerPopup({ selectedDate, month, onMonthChange, onSelect }) {
1191
+ const customDayModifiers = {
1192
+ selected: selectedDate,
1193
+ "custom-today": (date) => dateFns.isToday(date) && !(selectedDate && dateFns.isSameDay(date, selectedDate))
1194
+ };
1195
+ const customModifiersClassNames = {
1196
+ ...dayPickerStyles2.modifiers,
1197
+ "custom-today": "btn btn-outline btn-info min-h-0 h-full"
1198
+ };
1199
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-3", style: { minWidth: "320px", minHeight: "350px" }, children: /* @__PURE__ */ jsxRuntime.jsx(
1200
+ reactDayPicker.DayPicker,
1201
+ {
1202
+ mode: "single",
1203
+ selected: selectedDate,
1204
+ month,
1205
+ onMonthChange,
1206
+ onSelect,
1207
+ captionLayout: "dropdown",
1208
+ fromYear: 1900,
1209
+ toYear: (/* @__PURE__ */ new Date()).getFullYear() + 10,
1210
+ showOutsideDays: true,
1211
+ classNames: dayPickerStyles2.classNames,
1212
+ modifiers: customDayModifiers,
1213
+ modifiersClassNames: customModifiersClassNames
1214
+ }
1215
+ ) });
1216
+ }
1217
+ var MemoizedDatePickerPopup = react.memo(DatePickerPopup);
1218
+ function DateWidget(props) {
1219
+ const { id, value, onChange, onFocus, onBlur, schema } = props;
1220
+ const initialDate = react.useMemo(() => value ? new Date(value) : void 0, [value]);
1221
+ const [localDate, setLocalDate] = react.useState(initialDate);
1222
+ react.useEffect(() => {
1223
+ setLocalDate(initialDate);
1224
+ }, [initialDate]);
1225
+ const { isOpen, setIsOpen, month, setMonth } = useDatePickerState2(initialDate);
1226
+ const containerRef = react.useRef(null);
1227
+ const inputRef = react.useRef(null);
1228
+ useClickOutside2(containerRef, () => {
1229
+ if (isOpen) {
1230
+ setIsOpen(false);
1231
+ onChange(localDate ? localDate.toISOString() : "");
1232
+ if (onBlur) {
1233
+ onBlur(id, value);
1234
+ }
1235
+ }
1236
+ });
1237
+ react.useEffect(() => {
1238
+ if (localDate) {
1239
+ setMonth(localDate);
1240
+ }
1241
+ }, [localDate, setMonth]);
1242
+ const handleMonthChange = react.useCallback((date) => setMonth(date), [setMonth]);
1243
+ const handleSelect = react.useCallback((date) => {
1244
+ if (date) {
1245
+ date.setHours(0, 0, 0, 0);
1246
+ setLocalDate(date);
1247
+ }
1248
+ }, []);
1249
+ react.useEffect(() => {
1250
+ let portalContainer = document.getElementById("date-picker-portal");
1251
+ if (!portalContainer) {
1252
+ portalContainer = document.createElement("div");
1253
+ portalContainer.id = "date-picker-portal";
1254
+ document.body.appendChild(portalContainer);
1255
+ }
1256
+ return () => {
1257
+ const container = document.getElementById("date-picker-portal");
1258
+ if (container && document.querySelectorAll(".date-picker-popup").length === 0) {
1259
+ container.remove();
1260
+ }
1261
+ };
1262
+ }, []);
1263
+ const getDocumentAndWindow = () => {
1264
+ let doc = document;
1265
+ let win = window;
1266
+ try {
1267
+ if (window.frameElement) {
1268
+ const iframe = window.frameElement;
1269
+ if (iframe.contentDocument) {
1270
+ doc = iframe.contentDocument;
1271
+ }
1272
+ if (iframe.contentWindow) {
1273
+ win = iframe.contentWindow;
1274
+ }
1275
+ }
1276
+ } catch (e) {
1277
+ console.log("Unable to access parent frame:", e);
1278
+ }
1279
+ return { doc, win };
1280
+ };
1281
+ const renderCalendar = react.useCallback(() => {
1282
+ if (!containerRef.current || !inputRef.current) {
1283
+ return;
1284
+ }
1285
+ const { win } = getDocumentAndWindow();
1286
+ const inputRect = inputRef.current.getBoundingClientRect();
1287
+ const containerWidth = 320;
1288
+ containerRef.current.style.position = "fixed";
1289
+ containerRef.current.style.top = `${inputRect.bottom + 5}px`;
1290
+ const rightEdge = inputRect.left + containerWidth;
1291
+ const windowWidth = win.innerWidth;
1292
+ if (rightEdge > windowWidth - 20) {
1293
+ containerRef.current.style.left = `${Math.max(20, windowWidth - 20 - containerWidth)}px`;
1294
+ } else {
1295
+ containerRef.current.style.left = `${inputRect.left}px`;
1296
+ }
1297
+ containerRef.current.style.zIndex = "99999";
1298
+ }, [containerRef, inputRef]);
1299
+ react.useEffect(() => {
1300
+ if (!isOpen) {
1301
+ return;
1302
+ }
1303
+ renderCalendar();
1304
+ window.addEventListener("resize", renderCalendar);
1305
+ window.addEventListener("scroll", renderCalendar);
1306
+ return () => {
1307
+ window.removeEventListener("resize", renderCalendar);
1308
+ window.removeEventListener("scroll", renderCalendar);
1309
+ };
1310
+ }, [isOpen, renderCalendar]);
1311
+ const togglePicker = react.useCallback(
1312
+ (e) => {
1313
+ e.stopPropagation();
1314
+ setIsOpen((prev) => !prev);
1315
+ if (!isOpen && onFocus) {
1316
+ onFocus(id, value);
1317
+ }
1318
+ },
1319
+ [isOpen, id, onFocus, setIsOpen, value]
1320
+ );
1321
+ const handleFocus = react.useCallback(() => {
1322
+ if (onFocus) {
1323
+ onFocus(id, value);
1324
+ }
1325
+ }, [id, onFocus, value]);
1326
+ const handleBlur = react.useCallback(() => {
1327
+ if (!isOpen && onBlur) {
1328
+ onBlur(id, value);
1329
+ }
1330
+ }, [id, onBlur, value, isOpen]);
1331
+ react.useEffect(() => {
1332
+ const handleEscape = (e) => {
1333
+ if (e.key === "Escape" && isOpen) {
1334
+ setIsOpen(false);
1335
+ if (onBlur) {
1336
+ onBlur(id, value);
1337
+ }
1338
+ }
1339
+ };
1340
+ document.addEventListener("keydown", handleEscape);
1341
+ return () => document.removeEventListener("keydown", handleEscape);
1342
+ }, [id, isOpen, onBlur, value]);
1343
+ const handleDoneClick = react.useCallback(() => {
1344
+ setIsOpen(false);
1345
+ onChange(localDate ? localDate.toISOString() : "");
1346
+ if (onBlur) {
1347
+ onBlur(id, value);
1348
+ }
1349
+ inputRef.current?.focus();
1350
+ }, [localDate, onChange, onBlur, id, value]);
1351
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "form-control my-4 w-full relative", children: /* @__PURE__ */ jsxRuntime.jsxs(
1352
+ "div",
1353
+ {
1354
+ className: "w-full",
1355
+ tabIndex: 0,
1356
+ onKeyDown: (e) => {
1357
+ if (e.key === "Enter" || e.key === " ") {
1358
+ togglePicker(e);
1359
+ }
1360
+ },
1361
+ onFocus: handleFocus,
1362
+ onBlur: handleBlur,
1363
+ ref: inputRef,
1364
+ children: [
1365
+ /* @__PURE__ */ jsxRuntime.jsxs(
1366
+ "div",
1367
+ {
1368
+ id,
1369
+ className: `input input-bordered w-full flex items-center justify-between cursor-pointer ${isOpen ? "ring-2 ring-primary/50" : ""}`,
1370
+ onClick: togglePicker,
1371
+ role: "button",
1372
+ "aria-haspopup": "true",
1373
+ "aria-expanded": isOpen,
1374
+ tabIndex: -1,
1375
+ children: [
1376
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: localDate && dateFns.isValid(localDate) ? "" : "text-base-content/50", children: localDate && dateFns.isValid(localDate) ? dateFns.format(localDate, "PP") : schema.title }),
1377
+ /* @__PURE__ */ jsxRuntime.jsx(reactFontawesome.FontAwesomeIcon, { icon: freeSolidSvgIcons.faCalendar, className: "ml-2 h-4 w-4 text-primary" })
1378
+ ]
1379
+ }
1380
+ ),
1381
+ isOpen && /* @__PURE__ */ jsxRuntime.jsxs(
1382
+ "div",
1383
+ {
1384
+ ref: containerRef,
1385
+ className: "date-picker-popup fixed z-[99999] w-full max-w-xs bg-base-100 border border-base-300 shadow-lg rounded-box",
1386
+ style: {
1387
+ maxHeight: "none",
1388
+ overflow: "visible"
1389
+ },
1390
+ onClick: (e) => e.stopPropagation(),
1391
+ children: [
1392
+ /* @__PURE__ */ jsxRuntime.jsx(
1393
+ MemoizedDatePickerPopup,
1394
+ {
1395
+ selectedDate: localDate,
1396
+ month,
1397
+ onMonthChange: handleMonthChange,
1398
+ onSelect: handleSelect
1399
+ }
1400
+ ),
1401
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-3 flex justify-end border-t border-base-300", children: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "btn btn-sm btn-primary", onClick: handleDoneClick, children: "Done" }) })
1402
+ ]
1403
+ }
1404
+ )
1405
+ ]
1406
+ }
1407
+ ) });
1408
+ }
1409
+ function FileWidget(props) {
1410
+ const { id, required, disabled, readonly, schema, onChange, onFocus, onBlur, options = {} } = props;
1411
+ const isMulti = schema.type === "array" || Boolean(options.multiple);
1412
+ const accept = typeof options.accept === "string" ? options.accept : void 0;
1413
+ const handleChange = react.useCallback(
1414
+ (event) => {
1415
+ if (!event.target.files) {
1416
+ return;
1417
+ }
1418
+ const fileList = Array.from(event.target.files);
1419
+ if (isMulti) {
1420
+ onChange(fileList);
1421
+ } else {
1422
+ onChange(fileList[0] || null);
1423
+ }
1424
+ },
1425
+ [onChange, isMulti]
1426
+ );
1427
+ const handleFocus = react.useCallback(
1428
+ (event) => {
1429
+ if (onFocus) {
1430
+ onFocus(id, event.target.files ? Array.from(event.target.files) : null);
1431
+ }
1432
+ },
1433
+ [onFocus, id]
1434
+ );
1435
+ const handleBlur = react.useCallback(
1436
+ (event) => {
1437
+ if (onBlur) {
1438
+ onBlur(id, event.target.files ? Array.from(event.target.files) : null);
1439
+ }
1440
+ },
1441
+ [onBlur, id]
1442
+ );
1443
+ return /* @__PURE__ */ jsxRuntime.jsx(
1444
+ "input",
1445
+ {
1446
+ id,
1447
+ type: "file",
1448
+ className: "file-input w-full",
1449
+ required,
1450
+ disabled: disabled || readonly,
1451
+ onChange: handleChange,
1452
+ onFocus: handleFocus,
1453
+ onBlur: handleBlur,
1454
+ multiple: isMulti,
1455
+ accept
1456
+ }
1457
+ );
1458
+ }
1459
+ function RadioWidget({
1460
+ id,
1461
+ options,
1462
+ value,
1463
+ required,
1464
+ disabled,
1465
+ readonly,
1466
+ onChange,
1467
+ onFocus,
1468
+ onBlur
1469
+ }) {
1470
+ const { enumOptions } = options;
1471
+ const isEnumeratedObject = enumOptions && enumOptions[0]?.value && typeof enumOptions[0].value === "object";
1472
+ const getValue = (option) => {
1473
+ return option.value;
1474
+ };
1475
+ const isChecked = (option) => {
1476
+ if (isEnumeratedObject) {
1477
+ return value && value.name === option.value.name;
1478
+ }
1479
+ return value === option.value;
1480
+ };
1481
+ const handleFocus = react.useCallback(
1482
+ (event) => {
1483
+ if (onFocus) {
1484
+ const index = Number(event.target.dataset.index);
1485
+ const optionValue = enumOptions?.[index]?.value;
1486
+ onFocus(id, optionValue);
1487
+ }
1488
+ },
1489
+ [onFocus, id, enumOptions]
1490
+ );
1491
+ const handleBlur = react.useCallback(
1492
+ (event) => {
1493
+ if (onBlur) {
1494
+ const index = Number(event.target.dataset.index);
1495
+ const optionValue = enumOptions?.[index]?.value;
1496
+ onBlur(id, optionValue);
1497
+ }
1498
+ },
1499
+ [onBlur, id, enumOptions]
1500
+ );
1501
+ const handleChange = react.useCallback(
1502
+ (event) => {
1503
+ const index = Number(event.target.dataset.index);
1504
+ const option = enumOptions?.[index];
1505
+ if (option) {
1506
+ onChange(isEnumeratedObject ? option.value : option.value);
1507
+ event.target.blur();
1508
+ }
1509
+ },
1510
+ [onChange, isEnumeratedObject, enumOptions]
1511
+ );
1512
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "form-control", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-2 mt-1", children: enumOptions?.map((option, index) => /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center cursor-pointer gap-2", children: [
1513
+ /* @__PURE__ */ jsxRuntime.jsx(
1514
+ "input",
1515
+ {
1516
+ type: "radio",
1517
+ id: `${id}-${option.value}`,
1518
+ className: "radio",
1519
+ name: id,
1520
+ value: getValue(option),
1521
+ checked: isChecked(option),
1522
+ required,
1523
+ disabled: disabled || readonly,
1524
+ "data-index": index,
1525
+ onChange: handleChange,
1526
+ onFocus: handleFocus,
1527
+ onBlur: handleBlur
1528
+ }
1529
+ ),
1530
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-text", children: option.label })
1531
+ ] }, option.value)) }) });
1532
+ }
1533
+ function RangeWidget({
1534
+ id,
1535
+ value,
1536
+ required,
1537
+ disabled,
1538
+ readonly,
1539
+ onChange,
1540
+ onFocus,
1541
+ onBlur,
1542
+ schema
1543
+ }) {
1544
+ const handleFocus = (event) => {
1545
+ if (onFocus) {
1546
+ onFocus(id, event.target.value);
1547
+ }
1548
+ };
1549
+ const handleBlur = (event) => {
1550
+ if (onBlur) {
1551
+ onBlur(id, event.target.value);
1552
+ }
1553
+ };
1554
+ const handleChange = react.useCallback(
1555
+ (event) => {
1556
+ onChange(event.target.value);
1557
+ },
1558
+ [onChange]
1559
+ );
1560
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "form-control", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center", children: [
1561
+ /* @__PURE__ */ jsxRuntime.jsx(
1562
+ "input",
1563
+ {
1564
+ type: "range",
1565
+ id,
1566
+ className: "range",
1567
+ value: value || schema.default,
1568
+ required,
1569
+ disabled: disabled || readonly,
1570
+ min: schema.minimum,
1571
+ max: schema.maximum,
1572
+ step: schema.multipleOf || 1,
1573
+ onChange: handleChange,
1574
+ onFocus: handleFocus,
1575
+ onBlur: handleBlur
1576
+ }
1577
+ ),
1578
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-text ml-4", children: value })
1579
+ ] }) });
1580
+ }
1581
+ function RatingWidget({
1582
+ id,
1583
+ value,
1584
+ required,
1585
+ disabled,
1586
+ readonly,
1587
+ autofocus,
1588
+ onChange,
1589
+ onFocus,
1590
+ onBlur,
1591
+ schema,
1592
+ options
1593
+ }) {
1594
+ const { stars = 5, shape = "star", color = "orange", size = "md", colorGradient = false } = options;
1595
+ const numStars = schema.maximum ? Math.min(schema.maximum, 5) : Math.min(Math.max(stars, 1), 5);
1596
+ const min = schema.minimum || 0;
1597
+ const maskClass = shape === "heart" ? "mask-heart" : "mask-star-2";
1598
+ const sizeClass = size === "md" ? "" : `rating-${size}`;
1599
+ const _onChange = react.useCallback(
1600
+ ({ target: { value: value2 } }) => {
1601
+ onChange(parseInt(value2));
1602
+ },
1603
+ [onChange]
1604
+ );
1605
+ const handleFocus = react.useCallback(
1606
+ (event) => {
1607
+ if (onFocus) {
1608
+ const starValue = Number(event.target.value);
1609
+ onFocus(id, starValue);
1610
+ }
1611
+ },
1612
+ [onFocus, id]
1613
+ );
1614
+ const handleBlur = react.useCallback(
1615
+ (event) => {
1616
+ if (onBlur) {
1617
+ const starValue = Number(event.target.value);
1618
+ onBlur(id, starValue);
1619
+ }
1620
+ },
1621
+ [onBlur, id]
1622
+ );
1623
+ const getColorClass = (index) => {
1624
+ if (!colorGradient) {
1625
+ return `bg-${color}-400`;
1626
+ }
1627
+ const colors = ["red", "orange", "yellow", "lime", "green"];
1628
+ const colorIdx = Math.min(index, colors.length - 1);
1629
+ return `bg-${colors[colorIdx]}-400`;
1630
+ };
1631
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "form-control w-full", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: `rating gap-1 ${sizeClass}`, children: [...Array(numStars)].map((_, index) => {
1632
+ const starValue = min + index;
1633
+ return /* @__PURE__ */ jsxRuntime.jsx(
1634
+ "input",
1635
+ {
1636
+ type: "radio",
1637
+ name: id,
1638
+ value: starValue,
1639
+ checked: value === starValue,
1640
+ onChange: _onChange,
1641
+ onFocus: handleFocus,
1642
+ onBlur: handleBlur,
1643
+ className: `mask ${maskClass} ${getColorClass(index)}`,
1644
+ disabled: disabled || readonly,
1645
+ required,
1646
+ autoFocus: autofocus && index === 0,
1647
+ "aria-label": `${starValue} ${shape === "heart" ? "heart" : "star"}${starValue === 1 ? "" : "s"}`
1648
+ },
1649
+ index
1650
+ );
1651
+ }) }) });
1652
+ }
1653
+ function SelectWidget({
1654
+ schema,
1655
+ id,
1656
+ options,
1657
+ label,
1658
+ disabled,
1659
+ placeholder,
1660
+ readonly,
1661
+ value,
1662
+ multiple,
1663
+ onChange,
1664
+ onBlur,
1665
+ onFocus
1666
+ }) {
1667
+ const { enumOptions, emptyValue: optEmptyVal } = options;
1668
+ multiple = typeof multiple === "undefined" ? false : !!multiple;
1669
+ const getDisplayValue = (val) => {
1670
+ if (!val) {
1671
+ return "";
1672
+ }
1673
+ if (typeof val === "object") {
1674
+ if (val.name) {
1675
+ return val.name;
1676
+ }
1677
+ return val.label || JSON.stringify(val);
1678
+ }
1679
+ return String(val);
1680
+ };
1681
+ const isEnumeratedObject = enumOptions && enumOptions[0]?.value && typeof enumOptions[0].value === "object";
1682
+ const handleOptionClick = react.useCallback(
1683
+ (event) => {
1684
+ const index = Number(event.currentTarget.dataset.value);
1685
+ if (isNaN(index)) {
1686
+ return;
1687
+ }
1688
+ if (multiple) {
1689
+ const currentValue = Array.isArray(value) ? value : [];
1690
+ const optionValue = isEnumeratedObject ? enumOptions[index].value : utils.enumOptionsValueForIndex(String(index), enumOptions, optEmptyVal);
1691
+ const newValue = currentValue.includes(optionValue) ? currentValue.filter((v) => v !== optionValue) : [...currentValue, optionValue];
1692
+ onChange(newValue);
1693
+ } else {
1694
+ onChange(
1695
+ isEnumeratedObject ? enumOptions[index].value : utils.enumOptionsValueForIndex(String(index), enumOptions, optEmptyVal)
1696
+ );
1697
+ }
1698
+ },
1699
+ [value, multiple, isEnumeratedObject, enumOptions, optEmptyVal, onChange]
1700
+ );
1701
+ const _onBlur = react.useCallback(
1702
+ ({ target }) => {
1703
+ const dataValue = target?.getAttribute("data-value");
1704
+ if (dataValue !== null) {
1705
+ onBlur(id, utils.enumOptionsValueForIndex(dataValue, enumOptions, optEmptyVal));
1706
+ }
1707
+ },
1708
+ [onBlur, id, enumOptions, optEmptyVal]
1709
+ );
1710
+ const _onFocus = react.useCallback(
1711
+ ({ target }) => {
1712
+ const dataValue = target?.getAttribute("data-value");
1713
+ if (dataValue !== null) {
1714
+ onFocus(id, utils.enumOptionsValueForIndex(dataValue, enumOptions, optEmptyVal));
1715
+ }
1716
+ },
1717
+ [onFocus, id, enumOptions, optEmptyVal]
1718
+ );
1719
+ const selectedIndexes = utils.enumOptionsIndexForValue(value, enumOptions, multiple);
1720
+ const selectedValues = Array.isArray(selectedIndexes) ? selectedIndexes : [selectedIndexes];
1721
+ const optionsList = enumOptions || (Array.isArray(schema.examples) ? schema.examples.map((example) => ({ value: example, label: example })) : []);
1722
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "form-control w-full", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "dropdown w-full", children: [
1723
+ /* @__PURE__ */ jsxRuntime.jsxs(
1724
+ "div",
1725
+ {
1726
+ tabIndex: 0,
1727
+ role: "button",
1728
+ className: `btn btn-outline w-full text-left flex justify-between items-center ${disabled || readonly ? "btn-disabled" : ""}`,
1729
+ onBlur: _onBlur,
1730
+ onFocus: _onFocus,
1731
+ children: [
1732
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: selectedValues.length > 0 ? selectedValues.map((index) => optionsList[Number(index)]?.label).join(", ") : placeholder || label || "Select..." }),
1733
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2", children: "\u25BC" })
1734
+ ]
1735
+ }
1736
+ ),
1737
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "dropdown-content z-[1] bg-base-100 w-full max-h-60 overflow-auto rounded-box shadow-lg", children: optionsList.map(({ label: label2 }, i) => /* @__PURE__ */ jsxRuntime.jsx(
1738
+ "li",
1739
+ {
1740
+ role: "button",
1741
+ tabIndex: 0,
1742
+ className: `px-4 py-2 hover:bg-base-200 cursor-pointer ${selectedValues.includes(String(i)) ? "bg-primary/10" : ""}`,
1743
+ onClick: handleOptionClick,
1744
+ "data-value": i,
1745
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
1746
+ multiple && /* @__PURE__ */ jsxRuntime.jsx(
1747
+ "input",
1748
+ {
1749
+ type: "checkbox",
1750
+ className: "checkbox checkbox-sm",
1751
+ checked: selectedValues.includes(String(i)),
1752
+ readOnly: true
1753
+ }
1754
+ ),
1755
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: isEnumeratedObject ? label2 : getDisplayValue(label2) })
1756
+ ] })
1757
+ },
1758
+ i
1759
+ )) })
1760
+ ] }) });
1761
+ }
1762
+ function TextareaWidget(props) {
1763
+ const { id, value, required, disabled, readonly, onChange, onFocus, onBlur, options } = props;
1764
+ const handleFocus = react.useCallback(
1765
+ (event) => {
1766
+ if (onFocus) {
1767
+ onFocus(id, event.target.value);
1768
+ }
1769
+ },
1770
+ [onFocus, id]
1771
+ );
1772
+ const handleBlur = react.useCallback(
1773
+ (event) => {
1774
+ if (onBlur) {
1775
+ onBlur(id, event.target.value);
1776
+ }
1777
+ },
1778
+ [onBlur, id]
1779
+ );
1780
+ const handleChange = react.useCallback(
1781
+ (event) => {
1782
+ onChange(event.target.value);
1783
+ },
1784
+ [onChange]
1785
+ );
1786
+ const rows = options?.rows || 5;
1787
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "form-control", children: /* @__PURE__ */ jsxRuntime.jsx(
1788
+ "textarea",
1789
+ {
1790
+ id,
1791
+ value: value || "",
1792
+ required,
1793
+ disabled: disabled || readonly,
1794
+ readOnly: readonly,
1795
+ rows,
1796
+ onChange: handleChange,
1797
+ onFocus: handleFocus,
1798
+ onBlur: handleBlur,
1799
+ className: "textarea textarea-bordered w-full"
1800
+ }
1801
+ ) });
1802
+ }
1803
+ function TimeWidget(props) {
1804
+ const { id, value, onChange, onFocus, onBlur, required, disabled, readonly } = props;
1805
+ const handleFocus = react.useCallback(
1806
+ (event) => {
1807
+ if (onFocus) {
1808
+ onFocus(id, event.target.value);
1809
+ }
1810
+ },
1811
+ [onFocus, id]
1812
+ );
1813
+ const handleBlur = react.useCallback(
1814
+ (event) => {
1815
+ if (onBlur) {
1816
+ onBlur(id, event.target.value);
1817
+ }
1818
+ },
1819
+ [onBlur, id]
1820
+ );
1821
+ const handleChange = react.useCallback(
1822
+ (event) => {
1823
+ onChange(event.target.value);
1824
+ },
1825
+ [onChange]
1826
+ );
1827
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "form-control", children: /* @__PURE__ */ jsxRuntime.jsx(
1828
+ "input",
1829
+ {
1830
+ type: "time",
1831
+ id,
1832
+ className: "input input-bordered w-full",
1833
+ value: value || "",
1834
+ required,
1835
+ disabled: disabled || readonly,
1836
+ readOnly: readonly,
1837
+ onChange: handleChange,
1838
+ onFocus: handleFocus,
1839
+ onBlur: handleBlur
1840
+ }
1841
+ ) });
1842
+ }
1843
+ function ToggleWidget({ id, value, required, disabled, readonly, autofocus, onChange, onFocus, onBlur, options }) {
1844
+ const _onChange = react.useCallback(
1845
+ ({ target: { checked } }) => onChange(checked),
1846
+ [onChange]
1847
+ );
1848
+ const handleFocus = react.useCallback(() => {
1849
+ if (onFocus) {
1850
+ onFocus(id, value);
1851
+ }
1852
+ }, [onFocus, id, value]);
1853
+ const handleBlur = react.useCallback(() => {
1854
+ if (onBlur) {
1855
+ onBlur(id, value);
1856
+ }
1857
+ }, [onBlur, id, value]);
1858
+ const { size = "md" } = options;
1859
+ const sizeClass = size !== "md" ? `toggle-${size}` : "";
1860
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "form-control", children: /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "cursor-pointer label my-auto", children: [
1861
+ /* @__PURE__ */ jsxRuntime.jsx(
1862
+ "input",
1863
+ {
1864
+ type: "checkbox",
1865
+ id,
1866
+ checked: value,
1867
+ required,
1868
+ disabled: disabled || readonly,
1869
+ autoFocus: autofocus,
1870
+ onChange: _onChange,
1871
+ onFocus: handleFocus,
1872
+ onBlur: handleBlur,
1873
+ className: `toggle ${sizeClass}`
1874
+ }
1875
+ ),
1876
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "label-text", children: options.label })
1877
+ ] }) });
1878
+ }
1879
+
1880
+ // src/widgets/Widgets.tsx
1881
+ function generateWidgets() {
1882
+ return {
1883
+ AltDateTimeWidget: AltDateTimeWidget_default,
1884
+ AltDateWidget,
1885
+ CheckboxesWidget,
1886
+ CheckboxWidget,
1887
+ DateTimeWidget,
1888
+ DateWidget,
1889
+ FileWidget,
1890
+ RadioWidget,
1891
+ RangeWidget,
1892
+ RatingWidget,
1893
+ SelectWidget,
1894
+ TextareaWidget,
1895
+ TimeWidget,
1896
+ toggle: ToggleWidget
1897
+ };
1898
+ }
1899
+ var Widgets_default = generateWidgets;
1900
+ function generateTheme() {
1901
+ const { fields } = core.getDefaultRegistry();
1902
+ const generatedWidgets = generateWidgets();
1903
+ const templates = generateTemplates();
1904
+ return {
1905
+ templates,
1906
+ widgets: {
1907
+ ...generatedWidgets,
1908
+ boolean: generatedWidgets.toggle
1909
+ },
1910
+ fields
1911
+ };
1912
+ }
1913
+ var Theme = generateTheme();
1914
+ var Theme_default = Theme;
1915
+ var ThemeContext = react.createContext({
1916
+ theme: "night",
1917
+ setTheme: () => {
1918
+ }
1919
+ });
1920
+ function ThemeProvider({ children }) {
1921
+ const [theme, setTheme] = react.useState(() => {
1922
+ try {
1923
+ return localStorage.getItem("daisyui-theme") || "cupcake";
1924
+ } catch {
1925
+ return "cupcake";
1926
+ }
1927
+ });
1928
+ const handleSetTheme = react.useCallback((newTheme) => {
1929
+ try {
1930
+ localStorage.setItem("daisyui-theme", newTheme);
1931
+ setTheme(newTheme);
1932
+ } catch {
1933
+ }
1934
+ }, []);
1935
+ return /* @__PURE__ */ jsxRuntime.jsx(ThemeContext.Provider, { value: { theme, setTheme: handleSetTheme }, children });
1936
+ }
1937
+ var useTheme = () => react.useContext(ThemeContext);
1938
+ var DaisyUIForm = core.withTheme(Theme_default);
1939
+ var DaisyUIForm_default = DaisyUIForm;
1940
+ function DaisyUIFrameComponent(props) {
1941
+ const { children, subtheme = {}, document: document2 } = props;
1942
+ const theme = (() => {
1943
+ try {
1944
+ if (subtheme?.dataTheme) {
1945
+ localStorage.setItem("daisyui-theme", subtheme.dataTheme);
1946
+ return subtheme.dataTheme;
1947
+ }
1948
+ return localStorage.getItem("daisyui-theme") || "cupcake";
1949
+ } catch {
1950
+ return "cupcake";
1951
+ }
1952
+ })();
1953
+ react.useEffect(() => {
1954
+ if (document2) {
1955
+ const configScript = document2.createElement("script");
1956
+ configScript.textContent = `
1957
+ window.tailwind = window.tailwind || {};
1958
+ window.tailwind.config = {
1959
+ daisyui: {
1960
+ themes: true,
1961
+ },
1962
+ future: {
1963
+ disableProductionWarning: true
1964
+ }
1965
+ }
1966
+ `;
1967
+ document2.head.appendChild(configScript);
1968
+ const tailwindScript = document2.createElement("script");
1969
+ tailwindScript.src = "https://unpkg.com/@tailwindcss/browser@4.1.3";
1970
+ document2.head.appendChild(tailwindScript);
1971
+ const daisyLink = document2.createElement("link");
1972
+ daisyLink.rel = "stylesheet";
1973
+ daisyLink.href = "https://cdn.jsdelivr.net/npm/daisyui@5.0.20";
1974
+ document2.head.appendChild(daisyLink);
1975
+ const daisyLinkAllThemes = document2.createElement("link");
1976
+ daisyLinkAllThemes.rel = "stylesheet";
1977
+ daisyLinkAllThemes.href = "https://cdn.jsdelivr.net/npm/daisyui@5.0.20/themes.css";
1978
+ document2.head.appendChild(daisyLinkAllThemes);
1979
+ return () => {
1980
+ configScript.remove();
1981
+ tailwindScript.remove();
1982
+ daisyLink.remove();
1983
+ daisyLinkAllThemes.remove();
1984
+ };
1985
+ }
1986
+ return void 0;
1987
+ }, [document2]);
1988
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-theme": theme, className: "daisy-ui-theme", children });
1989
+ }
1990
+ var __createDaisyUIFrameProvider = (props) => {
1991
+ return function DaisyUIFrame({ document: document2 }) {
1992
+ return /* @__PURE__ */ jsxRuntime.jsx(DaisyUIFrameComponent, { document: document2, ...props });
1993
+ };
1994
+ };
1995
+
1996
+ // src/index.ts
1997
+ var index_default = core.withTheme(Theme_default);
1998
+
1999
+ exports.Form = DaisyUIForm_default;
2000
+ exports.GridTemplate = GridTemplate;
2001
+ exports.Templates = Templates_default;
2002
+ exports.Theme = Theme_default;
2003
+ exports.ThemeProvider = ThemeProvider;
2004
+ exports.Widgets = Widgets_default;
2005
+ exports.__createDaisyUIFrameProvider = __createDaisyUIFrameProvider;
2006
+ exports.default = index_default;
2007
+ exports.useTheme = useTheme;
2008
+
2009
+ Object.defineProperty(exports, '__esModule', { value: true });
2010
+
2011
+ }));