@akanjs/ui 0.0.150 → 0.0.151

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 (405) hide show
  1. package/BottomSheet.d.ts +13 -0
  2. package/Button.d.ts +9 -0
  3. package/ClientSide.d.ts +6 -0
  4. package/Copy.d.ts +6 -0
  5. package/CsrImage.d.ts +11 -0
  6. package/Data/CardList.d.ts +36 -0
  7. package/Data/Dashboard.d.ts +15 -0
  8. package/Data/Insight.d.ts +8 -0
  9. package/Data/Item.d.ts +74 -0
  10. package/Data/ListContainer.d.ts +38 -0
  11. package/Data/Pagination.d.ts +6 -0
  12. package/Data/QueryMaker.d.ts +9 -0
  13. package/Data/TableList.d.ts +26 -0
  14. package/Data/index.d.ts +10 -0
  15. package/Data/index_.d.ts +8 -0
  16. package/DatePicker.d.ts +38 -0
  17. package/Dialog/Action.d.ts +5 -0
  18. package/Dialog/Close.d.ts +5 -0
  19. package/Dialog/Content.d.ts +6 -0
  20. package/Dialog/Modal.d.ts +8 -0
  21. package/Dialog/Provider.d.ts +7 -0
  22. package/Dialog/Title.d.ts +5 -0
  23. package/Dialog/Trigger.d.ts +5 -0
  24. package/Dialog/context.d.ts +10 -0
  25. package/Dialog/index.d.ts +9 -0
  26. package/DragAction.d.ts +24 -0
  27. package/DraggableList.d.ts +25 -0
  28. package/Dropdown.d.ts +10 -0
  29. package/Empty.d.ts +9 -0
  30. package/Field.d.ts +404 -0
  31. package/FontFace.d.ts +6 -0
  32. package/Image.d.ts +17 -0
  33. package/InfiniteScroll.d.ts +10 -0
  34. package/Input.d.ts +85 -0
  35. package/KeyboardAvoiding.d.ts +7 -0
  36. package/Layout/BottomAction.d.ts +5 -0
  37. package/Layout/BottomInset.d.ts +6 -0
  38. package/Layout/BottomTab.d.ts +14 -0
  39. package/Layout/Header.d.ts +7 -0
  40. package/Layout/LeftSider.d.ts +8 -0
  41. package/Layout/Navbar.d.ts +11 -0
  42. package/Layout/RightSider.d.ts +9 -0
  43. package/Layout/Sider.d.ts +6 -0
  44. package/Layout/Template.d.ts +5 -0
  45. package/Layout/TopLeftAction.d.ts +5 -0
  46. package/Layout/Unit.d.ts +6 -0
  47. package/Layout/View.d.ts +5 -0
  48. package/Layout/Zone.d.ts +5 -0
  49. package/Layout/index.d.ts +14 -0
  50. package/Link/Back.d.ts +6 -0
  51. package/Link/Close.d.ts +6 -0
  52. package/Link/CsrLink.d.ts +2 -0
  53. package/Link/NextLink.d.ts +2 -0
  54. package/Link/index.d.ts +8 -0
  55. package/Link/types.d.ts +22 -0
  56. package/Load/Edit.d.ts +4 -0
  57. package/Load/Edit_Client.d.ts +25 -0
  58. package/Load/Page.d.ts +10 -0
  59. package/Load/PageCSR.d.ts +11 -0
  60. package/Load/Pagination.d.ts +8 -0
  61. package/Load/Units.d.ts +34 -0
  62. package/Load/View.d.ts +17 -0
  63. package/Load/index.d.ts +8 -0
  64. package/Load/index_.d.ts +3 -0
  65. package/Loading/Area.d.ts +1 -0
  66. package/Loading/Button.d.ts +7 -0
  67. package/Loading/Input.d.ts +7 -0
  68. package/Loading/ProgressBar.d.ts +6 -0
  69. package/Loading/Skeleton.d.ts +7 -0
  70. package/Loading/Spin.d.ts +7 -0
  71. package/Loading/index.d.ts +8 -0
  72. package/Menu.d.ts +26 -0
  73. package/Modal.d.ts +23 -0
  74. package/Model/Edit.d.ts +15 -0
  75. package/Model/EditModal.d.ts +33 -0
  76. package/Model/EditWrapper.d.ts +11 -0
  77. package/Model/LoadInit.d.ts +10 -0
  78. package/Model/New.d.ts +15 -0
  79. package/Model/NewWrapper.d.ts +12 -0
  80. package/Model/NewWrapper_Client.d.ts +12 -0
  81. package/Model/Remove.d.ts +10 -0
  82. package/Model/RemoveWrapper.d.ts +11 -0
  83. package/Model/SureToRemove.d.ts +10 -0
  84. package/Model/View.d.ts +19 -0
  85. package/Model/ViewEditModal.d.ts +11 -0
  86. package/Model/ViewModal.d.ts +13 -0
  87. package/Model/ViewWrapper.d.ts +11 -0
  88. package/Model/index.d.ts +15 -0
  89. package/Model/index_.d.ts +13 -0
  90. package/More.d.ts +12 -0
  91. package/ObjectId.d.ts +5 -0
  92. package/Pagination.d.ts +14 -0
  93. package/Popconfirm.d.ts +18 -0
  94. package/Portal.d.ts +6 -0
  95. package/Radio.d.ts +19 -0
  96. package/RecentTime.d.ts +7 -0
  97. package/Refresh.d.ts +7 -0
  98. package/ScreenNavigator.d.ts +18 -0
  99. package/Select.d.ts +29 -0
  100. package/Signal/Arg.d.ts +75 -0
  101. package/Signal/Doc.d.ts +19 -0
  102. package/Signal/GraphQL.d.ts +32 -0
  103. package/Signal/Listener.d.ts +9 -0
  104. package/Signal/Message.d.ts +27 -0
  105. package/Signal/Object.d.ts +19 -0
  106. package/Signal/PubSub.d.ts +26 -0
  107. package/Signal/Request.d.ts +8 -0
  108. package/Signal/Response.d.ts +16 -0
  109. package/Signal/RestApi.d.ts +40 -0
  110. package/Signal/WebSocket.d.ts +9 -0
  111. package/Signal/index.d.ts +20 -0
  112. package/System/CSR.d.ts +31 -0
  113. package/System/Client.d.ts +48 -0
  114. package/System/Common.d.ts +66 -0
  115. package/System/DevModeToggle.d.ts +1 -0
  116. package/System/Gtag.d.ts +3 -0
  117. package/System/HealthCheck.d.ts +5 -0
  118. package/System/Messages.d.ts +1 -0
  119. package/System/Reconnect.d.ts +6 -0
  120. package/System/Root.d.ts +5 -0
  121. package/System/SSR.d.ts +26 -0
  122. package/System/SelectLanguage.d.ts +5 -0
  123. package/System/ThemeToggle.d.ts +1 -0
  124. package/System/index.d.ts +11 -0
  125. package/Tab/Menu.d.ts +11 -0
  126. package/Tab/Menus.d.ts +5 -0
  127. package/Tab/Panel.d.ts +7 -0
  128. package/Tab/Provider.d.ts +6 -0
  129. package/Tab/context.d.ts +9 -0
  130. package/Tab/index.d.ts +7 -0
  131. package/Table.d.ts +26 -0
  132. package/ToggleSelect.d.ts +31 -0
  133. package/Unauthorized.d.ts +9 -0
  134. package/cjs/BottomSheet.js +113 -0
  135. package/cjs/Button.js +69 -0
  136. package/cjs/ClientSide.js +26 -0
  137. package/cjs/Copy.js +37 -0
  138. package/cjs/CsrImage.js +50 -0
  139. package/cjs/Data/CardList.js +119 -0
  140. package/cjs/Data/Dashboard.js +54 -0
  141. package/cjs/Data/Insight.js +38 -0
  142. package/cjs/Data/Item.js +204 -0
  143. package/cjs/Data/ListContainer.js +251 -0
  144. package/cjs/Data/Pagination.js +64 -0
  145. package/cjs/Data/QueryMaker.js +304 -0
  146. package/cjs/Data/TableList.js +139 -0
  147. package/cjs/Data/index.js +33 -0
  148. package/cjs/Data/index_.js +49 -0
  149. package/cjs/DatePicker.js +173 -0
  150. package/cjs/Dialog/Action.js +32 -0
  151. package/cjs/Dialog/Close.js +38 -0
  152. package/cjs/Dialog/Content.js +27 -0
  153. package/cjs/Dialog/Modal.js +155 -0
  154. package/cjs/Dialog/Provider.js +46 -0
  155. package/cjs/Dialog/Title.js +32 -0
  156. package/cjs/Dialog/Trigger.js +38 -0
  157. package/cjs/Dialog/context.js +32 -0
  158. package/cjs/Dialog/index.js +36 -0
  159. package/cjs/DragAction.js +111 -0
  160. package/cjs/DraggableList.js +141 -0
  161. package/cjs/Dropdown.js +64 -0
  162. package/cjs/Empty.js +50 -0
  163. package/cjs/Field.js +1109 -0
  164. package/cjs/FontFace.js +77 -0
  165. package/cjs/Image.js +61 -0
  166. package/cjs/InfiniteScroll.js +65 -0
  167. package/cjs/Input.js +440 -0
  168. package/cjs/KeyboardAvoiding.js +65 -0
  169. package/cjs/Layout/BottomAction.js +26 -0
  170. package/cjs/Layout/BottomInset.js +53 -0
  171. package/cjs/Layout/BottomTab.js +56 -0
  172. package/cjs/Layout/Header.js +52 -0
  173. package/cjs/Layout/LeftSider.js +49 -0
  174. package/cjs/Layout/Navbar.js +51 -0
  175. package/cjs/Layout/RightSider.js +52 -0
  176. package/cjs/Layout/Sider.js +39 -0
  177. package/cjs/Layout/Template.js +26 -0
  178. package/cjs/Layout/TopLeftAction.js +39 -0
  179. package/cjs/Layout/Unit.js +27 -0
  180. package/cjs/Layout/View.js +26 -0
  181. package/cjs/Layout/Zone.js +26 -0
  182. package/cjs/Layout/index.js +48 -0
  183. package/cjs/Link/Back.js +27 -0
  184. package/cjs/Link/Close.js +36 -0
  185. package/cjs/Link/CsrLink.js +49 -0
  186. package/cjs/Link/NextLink.js +71 -0
  187. package/cjs/Link/index.js +47 -0
  188. package/cjs/Link/types.js +15 -0
  189. package/cjs/Load/Edit.js +42 -0
  190. package/cjs/Load/Edit_Client.js +93 -0
  191. package/cjs/Load/Page.js +35 -0
  192. package/cjs/Load/PageCSR.js +67 -0
  193. package/cjs/Load/Pagination.js +89 -0
  194. package/cjs/Load/Units.js +232 -0
  195. package/cjs/Load/View.js +88 -0
  196. package/cjs/Load/index.js +42 -0
  197. package/cjs/Load/index_.js +39 -0
  198. package/cjs/Loading/Area.js +25 -0
  199. package/cjs/Loading/Button.js +33 -0
  200. package/cjs/Loading/Input.js +33 -0
  201. package/cjs/Loading/ProgressBar.js +29 -0
  202. package/cjs/Loading/Skeleton.js +27 -0
  203. package/cjs/Loading/Spin.js +27 -0
  204. package/cjs/Loading/index.js +29 -0
  205. package/cjs/Menu.js +215 -0
  206. package/cjs/Modal.js +75 -0
  207. package/cjs/Model/Edit.js +61 -0
  208. package/cjs/Model/EditModal.js +255 -0
  209. package/cjs/Model/EditWrapper.js +48 -0
  210. package/cjs/Model/LoadInit.js +27 -0
  211. package/cjs/Model/New.js +61 -0
  212. package/cjs/Model/NewWrapper.js +28 -0
  213. package/cjs/Model/NewWrapper_Client.js +66 -0
  214. package/cjs/Model/Remove.js +86 -0
  215. package/cjs/Model/RemoveWrapper.js +48 -0
  216. package/cjs/Model/SureToRemove.js +109 -0
  217. package/cjs/Model/View.js +44 -0
  218. package/cjs/Model/ViewEditModal.js +118 -0
  219. package/cjs/Model/ViewModal.js +92 -0
  220. package/cjs/Model/ViewWrapper.js +48 -0
  221. package/cjs/Model/index.js +38 -0
  222. package/cjs/Model/index_.js +58 -0
  223. package/cjs/More.js +67 -0
  224. package/cjs/ObjectId.js +37 -0
  225. package/cjs/Pagination.js +110 -0
  226. package/cjs/Popconfirm.js +116 -0
  227. package/cjs/Portal.js +27 -0
  228. package/cjs/Radio.js +53 -0
  229. package/cjs/RecentTime.js +86 -0
  230. package/cjs/Refresh.js +45 -0
  231. package/cjs/ScreenNavigator.js +121 -0
  232. package/cjs/Select.js +262 -0
  233. package/cjs/Signal/Arg.js +237 -0
  234. package/cjs/Signal/Doc.js +181 -0
  235. package/cjs/Signal/GraphQL.js +177 -0
  236. package/cjs/Signal/Listener.js +59 -0
  237. package/cjs/Signal/Message.js +190 -0
  238. package/cjs/Signal/Object.js +95 -0
  239. package/cjs/Signal/PubSub.js +191 -0
  240. package/cjs/Signal/Request.js +38 -0
  241. package/cjs/Signal/Response.js +53 -0
  242. package/cjs/Signal/RestApi.js +255 -0
  243. package/cjs/Signal/WebSocket.js +68 -0
  244. package/cjs/Signal/index.js +42 -0
  245. package/cjs/System/CSR.js +376 -0
  246. package/cjs/System/Client.js +200 -0
  247. package/cjs/System/Common.js +64 -0
  248. package/cjs/System/DevModeToggle.js +38 -0
  249. package/cjs/System/Gtag.js +67 -0
  250. package/cjs/System/HealthCheck.js +60 -0
  251. package/cjs/System/Messages.js +170 -0
  252. package/cjs/System/Reconnect.js +64 -0
  253. package/cjs/System/Root.js +30 -0
  254. package/cjs/System/SSR.js +144 -0
  255. package/cjs/System/SelectLanguage.js +58 -0
  256. package/cjs/System/ThemeToggle.js +40 -0
  257. package/cjs/System/index.js +55 -0
  258. package/cjs/Tab/Menu.js +70 -0
  259. package/cjs/{src/index.js → Tab/Menus.js} +8 -5
  260. package/cjs/Tab/Panel.js +42 -0
  261. package/cjs/Tab/Provider.js +31 -0
  262. package/cjs/Tab/context.js +30 -0
  263. package/cjs/Tab/index.js +32 -0
  264. package/cjs/Table.js +85 -0
  265. package/cjs/ToggleSelect.js +118 -0
  266. package/cjs/Unauthorized.js +50 -0
  267. package/cjs/index.js +88 -2
  268. package/esm/BottomSheet.js +84 -0
  269. package/esm/Button.js +40 -0
  270. package/esm/ClientSide.js +7 -0
  271. package/esm/Copy.js +18 -0
  272. package/esm/CsrImage.js +31 -0
  273. package/esm/Data/CardList.js +90 -0
  274. package/esm/Data/Dashboard.js +35 -0
  275. package/esm/Data/Insight.js +19 -0
  276. package/esm/Data/Item.js +175 -0
  277. package/esm/Data/ListContainer.js +228 -0
  278. package/esm/Data/Pagination.js +45 -0
  279. package/esm/Data/QueryMaker.js +293 -0
  280. package/esm/Data/TableList.js +110 -0
  281. package/esm/Data/index.js +14 -0
  282. package/esm/Data/index_.js +20 -0
  283. package/esm/DatePicker.js +144 -0
  284. package/esm/Dialog/Action.js +13 -0
  285. package/esm/Dialog/Close.js +19 -0
  286. package/esm/Dialog/Content.js +8 -0
  287. package/esm/Dialog/Modal.js +126 -0
  288. package/esm/Dialog/Provider.js +17 -0
  289. package/esm/Dialog/Title.js +13 -0
  290. package/esm/Dialog/Trigger.js +19 -0
  291. package/esm/Dialog/context.js +13 -0
  292. package/esm/Dialog/index.js +17 -0
  293. package/esm/DragAction.js +92 -0
  294. package/esm/DraggableList.js +112 -0
  295. package/esm/Dropdown.js +45 -0
  296. package/esm/Empty.js +21 -0
  297. package/esm/Field.js +1090 -0
  298. package/esm/FontFace.js +58 -0
  299. package/esm/Image.js +32 -0
  300. package/esm/InfiniteScroll.js +46 -0
  301. package/esm/Input.js +415 -0
  302. package/esm/KeyboardAvoiding.js +46 -0
  303. package/esm/Layout/BottomAction.js +7 -0
  304. package/esm/Layout/BottomInset.js +34 -0
  305. package/esm/Layout/BottomTab.js +37 -0
  306. package/esm/Layout/Header.js +33 -0
  307. package/esm/Layout/LeftSider.js +30 -0
  308. package/esm/Layout/Navbar.js +22 -0
  309. package/esm/Layout/RightSider.js +33 -0
  310. package/esm/Layout/Sider.js +20 -0
  311. package/esm/Layout/Template.js +7 -0
  312. package/esm/Layout/TopLeftAction.js +20 -0
  313. package/esm/Layout/Unit.js +8 -0
  314. package/esm/Layout/View.js +7 -0
  315. package/esm/Layout/Zone.js +7 -0
  316. package/esm/Layout/index.js +29 -0
  317. package/esm/Link/Back.js +8 -0
  318. package/esm/Link/Close.js +17 -0
  319. package/esm/Link/CsrLink.js +30 -0
  320. package/esm/Link/NextLink.js +42 -0
  321. package/esm/Link/index.js +18 -0
  322. package/esm/Link/types.js +0 -0
  323. package/esm/Load/Edit.js +13 -0
  324. package/esm/Load/Edit_Client.js +74 -0
  325. package/esm/Load/Page.js +16 -0
  326. package/esm/Load/PageCSR.js +48 -0
  327. package/esm/Load/Pagination.js +70 -0
  328. package/esm/Load/Units.js +213 -0
  329. package/esm/Load/View.js +69 -0
  330. package/esm/Load/index.js +13 -0
  331. package/esm/Load/index_.js +10 -0
  332. package/esm/Loading/Area.js +6 -0
  333. package/esm/Loading/Button.js +14 -0
  334. package/esm/Loading/Input.js +14 -0
  335. package/esm/Loading/ProgressBar.js +10 -0
  336. package/esm/Loading/Skeleton.js +8 -0
  337. package/esm/Loading/Spin.js +8 -0
  338. package/esm/Loading/index.js +10 -0
  339. package/esm/Menu.js +196 -0
  340. package/esm/Modal.js +46 -0
  341. package/esm/Model/Edit.js +32 -0
  342. package/esm/Model/EditModal.js +226 -0
  343. package/esm/Model/EditWrapper.js +29 -0
  344. package/esm/Model/LoadInit.js +8 -0
  345. package/esm/Model/New.js +32 -0
  346. package/esm/Model/NewWrapper.js +9 -0
  347. package/esm/Model/NewWrapper_Client.js +47 -0
  348. package/esm/Model/Remove.js +67 -0
  349. package/esm/Model/RemoveWrapper.js +29 -0
  350. package/esm/Model/SureToRemove.js +90 -0
  351. package/esm/Model/View.js +25 -0
  352. package/esm/Model/ViewEditModal.js +89 -0
  353. package/esm/Model/ViewModal.js +63 -0
  354. package/esm/Model/ViewWrapper.js +29 -0
  355. package/esm/Model/index.js +33 -0
  356. package/esm/Model/index_.js +29 -0
  357. package/esm/More.js +38 -0
  358. package/esm/ObjectId.js +18 -0
  359. package/esm/Pagination.js +91 -0
  360. package/esm/Popconfirm.js +87 -0
  361. package/esm/Portal.js +8 -0
  362. package/esm/Radio.js +34 -0
  363. package/esm/RecentTime.js +57 -0
  364. package/esm/Refresh.js +16 -0
  365. package/esm/ScreenNavigator.js +102 -0
  366. package/esm/Select.js +243 -0
  367. package/esm/Signal/Arg.js +208 -0
  368. package/esm/Signal/Doc.js +152 -0
  369. package/esm/Signal/GraphQL.js +156 -0
  370. package/esm/Signal/Listener.js +40 -0
  371. package/esm/Signal/Message.js +161 -0
  372. package/esm/Signal/Object.js +76 -0
  373. package/esm/Signal/PubSub.js +162 -0
  374. package/esm/Signal/Request.js +19 -0
  375. package/esm/Signal/Response.js +34 -0
  376. package/esm/Signal/RestApi.js +234 -0
  377. package/esm/Signal/WebSocket.js +39 -0
  378. package/esm/Signal/index.js +13 -0
  379. package/esm/System/CSR.js +357 -0
  380. package/esm/System/Client.js +191 -0
  381. package/esm/System/Common.js +45 -0
  382. package/esm/System/DevModeToggle.js +19 -0
  383. package/esm/System/Gtag.js +48 -0
  384. package/esm/System/HealthCheck.js +41 -0
  385. package/esm/System/Messages.js +156 -0
  386. package/esm/System/Reconnect.js +45 -0
  387. package/esm/System/Root.js +11 -0
  388. package/esm/System/SSR.js +125 -0
  389. package/esm/System/SelectLanguage.js +39 -0
  390. package/esm/System/ThemeToggle.js +21 -0
  391. package/esm/System/index.js +26 -0
  392. package/esm/Tab/Menu.js +51 -0
  393. package/esm/Tab/Menus.js +7 -0
  394. package/esm/Tab/Panel.js +23 -0
  395. package/esm/Tab/Provider.js +12 -0
  396. package/esm/Tab/context.js +11 -0
  397. package/esm/Tab/index.js +13 -0
  398. package/esm/Table.js +56 -0
  399. package/esm/ToggleSelect.js +99 -0
  400. package/esm/Unauthorized.js +21 -0
  401. package/esm/index.js +84 -1
  402. package/index.d.ts +41 -1
  403. package/package.json +23 -2
  404. package/esm/src/index.js +0 -4
  405. package/src/index.d.ts +0 -1
package/esm/Field.js ADDED
@@ -0,0 +1,1090 @@
1
+ "use client";
2
+ import { dayjs, Enum } from "@akanjs/base";
3
+ import { clsx } from "@akanjs/client";
4
+ import { capitalize, formatPhone, isPhoneNumber, lowerlize } from "@akanjs/common";
5
+ import { usePage } from "@akanjs/next";
6
+ import { st } from "@akanjs/store";
7
+ import { memo, useEffect, useState } from "react";
8
+ import { AiOutlinePlus } from "react-icons/ai";
9
+ import { BiHelpCircle, BiTrash, BiX } from "react-icons/bi";
10
+ import { MdDragIndicator } from "react-icons/md";
11
+ import { DraggableList } from "./DraggableList";
12
+ import { Input } from "./Input";
13
+ import { Select } from "./Select";
14
+ import { ToggleSelect as UtilToggleSelect } from "./ToggleSelect";
15
+ const Label = ({ className, label, desc, unit, nullable, mode = "edit" }) => {
16
+ return /* @__PURE__ */ React.createElement("span", { className: clsx("flex shrink-0 items-center gap-1", className) }, capitalize(label), unit ? /* @__PURE__ */ React.createElement("span", { className: "animate-fadeIn" }, " (", unit, ")") : null, desc ? /* @__PURE__ */ React.createElement("span", { className: "tooltip tooltip-info tooltip-right", "data-tip": desc }, /* @__PURE__ */ React.createElement(BiHelpCircle, null)) : null, nullable ? /* @__PURE__ */ React.createElement("span", { className: "text-sm text-gray-400" }, "(optional)") : null);
17
+ };
18
+ const Field = ({
19
+ className,
20
+ containerClassName,
21
+ labelClassName,
22
+ label,
23
+ desc,
24
+ nullable,
25
+ children
26
+ }) => {
27
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("w-full", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement("div", { className: clsx("mt-2 flex w-full flex-col gap-4 px-4", containerClassName) }, children));
28
+ };
29
+ Field.Label = Label;
30
+ const List = ({
31
+ className,
32
+ labelClassName,
33
+ label,
34
+ desc,
35
+ value,
36
+ onChange,
37
+ onAdd,
38
+ nullable,
39
+ renderItem
40
+ }) => {
41
+ const { l } = usePage();
42
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex w-full flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement("div", { className: "mb-2 flex w-full flex-col gap-2 rounded-md border border-gray-300 p-2" }, value.map((item, idx) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { key: idx, className: "flex h-full w-full items-center justify-between gap-2" }, renderItem(item, idx), /* @__PURE__ */ React.createElement("div", { className: "flex gap-2 border-l border-gray-300 pl-2" }, /* @__PURE__ */ React.createElement(
43
+ "button",
44
+ {
45
+ className: "btn btn-xs btn-error btn-square btn-outline",
46
+ onClick: () => {
47
+ onChange(value.filter((_, i) => i !== idx));
48
+ }
49
+ },
50
+ /* @__PURE__ */ React.createElement(BiTrash, null)
51
+ ))), /* @__PURE__ */ React.createElement("div", { className: "h-[0.5px] w-full bg-gray-300 px-2 last:h-0" }))), /* @__PURE__ */ React.createElement(
52
+ "button",
53
+ {
54
+ className: "btn btn-outline",
55
+ onClick: () => {
56
+ onAdd();
57
+ }
58
+ },
59
+ "+ ",
60
+ l("shared.addModel", { model: l("appSubRoute.modelName") })
61
+ )));
62
+ };
63
+ Field.List = List;
64
+ const Text = ({
65
+ label,
66
+ desc,
67
+ labelClassName,
68
+ className,
69
+ value,
70
+ onChange,
71
+ placeholder,
72
+ nullable,
73
+ disabled,
74
+ minlength = nullable ? 0 : 2,
75
+ maxlength = 200,
76
+ transform = (v) => v,
77
+ validate,
78
+ onPressEnter,
79
+ cache,
80
+ inputClassName,
81
+ inputStyleType = "bordered"
82
+ }) => {
83
+ const { l } = usePage();
84
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement(
85
+ Input,
86
+ {
87
+ cacheKey: cache ? `${label}-${desc}-text` : void 0,
88
+ inputStyleType,
89
+ value: value ?? "",
90
+ nullable,
91
+ placeholder,
92
+ onChange: (value2) => {
93
+ onChange(transform(value2));
94
+ },
95
+ disabled,
96
+ className: clsx("w-full", ""),
97
+ inputClassName: clsx("focus:border-primary w-full", inputClassName),
98
+ validate: (text) => {
99
+ if (text.length < minlength)
100
+ return l("shared.textTooShortError", { minlength });
101
+ else if (text.length > maxlength)
102
+ return l("shared.textTooLongError", { maxlength });
103
+ else
104
+ return validate?.(text) ?? true;
105
+ },
106
+ onPressEnter
107
+ }
108
+ ));
109
+ };
110
+ Field.Text = memo(Text);
111
+ //! 삭제
112
+ const Price = ({
113
+ label,
114
+ desc,
115
+ labelClassName,
116
+ className,
117
+ value,
118
+ onChange,
119
+ placeholder,
120
+ nullable,
121
+ disabled,
122
+ minlength = nullable ? 0 : 2,
123
+ maxlength = 80,
124
+ transform = (v) => v,
125
+ validate,
126
+ onPressEnter,
127
+ inputClassName,
128
+ inputStyleType = "bordered"
129
+ }) => {
130
+ const { l } = usePage();
131
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement(
132
+ Input,
133
+ {
134
+ inputStyleType,
135
+ value: value ?? "",
136
+ nullable,
137
+ placeholder: placeholder ?? `~ ${l("shared.priceUnit")}`,
138
+ onChange: (value2) => {
139
+ const withoutComma = value2.replace(/,/g, "").replace(/ /g, "");
140
+ onChange(transform(withoutComma));
141
+ },
142
+ disabled,
143
+ className: clsx("w-full", ""),
144
+ inputClassName: clsx("focus:border-primary w-full", inputClassName),
145
+ validate: (text) => {
146
+ if (text.length < minlength)
147
+ return l("shared.textTooShortError", { minlength });
148
+ else if (text.length > maxlength)
149
+ return l("shared.textTooLongError", { maxlength });
150
+ else
151
+ return validate?.(text) ?? true;
152
+ },
153
+ onPressEnter
154
+ }
155
+ ));
156
+ };
157
+ Field.Price = memo(Price);
158
+ const TextArea = ({
159
+ label,
160
+ desc,
161
+ labelClassName,
162
+ className,
163
+ value,
164
+ onChange,
165
+ placeholder,
166
+ nullable,
167
+ disabled,
168
+ rows = 3,
169
+ minlength = nullable ? 0 : 2,
170
+ maxlength = 1e3,
171
+ transform = (v) => v,
172
+ validate,
173
+ onPressEnter,
174
+ cache,
175
+ inputClassName
176
+ }) => {
177
+ const { l } = usePage();
178
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement(
179
+ Input.TextArea,
180
+ {
181
+ value: value ?? "",
182
+ cacheKey: cache ? `${label}-${desc}-textArea` : void 0,
183
+ nullable,
184
+ placeholder,
185
+ onChange: (value2) => {
186
+ onChange(transform(value2));
187
+ },
188
+ disabled,
189
+ rows,
190
+ className: clsx("h-full w-full"),
191
+ inputClassName: clsx("focus:border-primary w-full", inputClassName),
192
+ validate: (text) => {
193
+ if (text.length < minlength)
194
+ return l("shared.textTooShortError", { minlength });
195
+ else if (text.length > maxlength)
196
+ return l("shared.textTooLongError", { maxlength });
197
+ else
198
+ return validate?.(text) ?? true;
199
+ },
200
+ onPressEnter
201
+ }
202
+ ));
203
+ };
204
+ Field.TextArea = memo(TextArea);
205
+ const Switch = ({
206
+ label,
207
+ desc,
208
+ labelClassName,
209
+ className,
210
+ value,
211
+ onChange,
212
+ disabled,
213
+ inputClassName,
214
+ onDesc,
215
+ offDesc
216
+ }) => {
217
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable: true, label, desc }) : null, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React.createElement(
218
+ "input",
219
+ {
220
+ type: "checkbox",
221
+ disabled,
222
+ className: clsx("toggle toggle-accent", inputClassName),
223
+ checked: value,
224
+ onChange: (e) => {
225
+ onChange(e.target.checked);
226
+ }
227
+ }
228
+ ), onDesc ?? offDesc ? /* @__PURE__ */ React.createElement("div", { className: "text-info text-sm" }, value ? onDesc : offDesc) : null));
229
+ };
230
+ Field.Switch = Switch;
231
+ const ToggleSelect = ({
232
+ className,
233
+ labelClassName,
234
+ label,
235
+ desc,
236
+ model,
237
+ field,
238
+ items,
239
+ value,
240
+ validate,
241
+ onChange,
242
+ nullable,
243
+ disabled,
244
+ btnClassName
245
+ }) => {
246
+ const { l } = usePage();
247
+ const isEnum = items instanceof Enum;
248
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement(
249
+ UtilToggleSelect,
250
+ {
251
+ className: "mt-2",
252
+ nullable: !!nullable,
253
+ btnClassName,
254
+ items: model && field ? (isEnum ? items.values : items).map((item) => ({
255
+ label: l.enum(model, field, item),
256
+ value: item
257
+ })) : isEnum ? items.values : items,
258
+ value,
259
+ onChange: (value2, idx) => {
260
+ onChange(value2);
261
+ },
262
+ disabled,
263
+ validate: (value2) => {
264
+ return validate?.(value2) ?? true;
265
+ }
266
+ }
267
+ ));
268
+ };
269
+ Field.ToggleSelect = ToggleSelect;
270
+ const MultiToggleSelect = ({
271
+ className,
272
+ labelClassName,
273
+ label,
274
+ desc,
275
+ model,
276
+ field,
277
+ items,
278
+ value,
279
+ minlength,
280
+ maxlength,
281
+ validate,
282
+ onChange,
283
+ disabled
284
+ }) => {
285
+ const { l } = usePage();
286
+ const isEnum = items instanceof Enum;
287
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable: !!minlength, label, desc }) : null, /* @__PURE__ */ React.createElement(
288
+ UtilToggleSelect.Multi,
289
+ {
290
+ nullable: !minlength,
291
+ items: model && field ? (isEnum ? items.values : items).map((item) => ({
292
+ label: l.enum(model, field, item),
293
+ value: item
294
+ })) : isEnum ? items.values : items,
295
+ value,
296
+ onChange: (values) => {
297
+ onChange(values);
298
+ },
299
+ disabled,
300
+ validate: (value2) => {
301
+ if (minlength && value2.length < minlength)
302
+ return l("shared.selectTooShortError", { minlength });
303
+ else if (maxlength && value2.length > maxlength)
304
+ return l("shared.selectTooLongError", { maxlength });
305
+ else
306
+ return validate?.(value2) ?? true;
307
+ }
308
+ }
309
+ ));
310
+ };
311
+ Field.MultiToggleSelect = MultiToggleSelect;
312
+ const TextList = ({
313
+ label,
314
+ desc,
315
+ labelClassName,
316
+ className,
317
+ value,
318
+ onChange,
319
+ placeholder,
320
+ disabled,
321
+ transform = (v) => v,
322
+ minlength = 0,
323
+ maxlength = 50,
324
+ minTextlength = 2,
325
+ maxTextlength = 200,
326
+ cache,
327
+ validate,
328
+ inputClassName
329
+ }) => {
330
+ const { l } = usePage();
331
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable: !minlength, label, desc }) : null, /* @__PURE__ */ React.createElement("div", { className: "mb-5 h-full gap-2 rounded-md border border-gray-300 p-2" }, /* @__PURE__ */ React.createElement(DraggableList, { className: "h-full gap-2", onChange }, value.map((text, idx) => /* @__PURE__ */ React.createElement(DraggableList.Item, { key: idx, value: text }, /* @__PURE__ */ React.createElement("div", { className: "flex w-full items-center" }, /* @__PURE__ */ React.createElement(DraggableList.Cursor, null, /* @__PURE__ */ React.createElement(MdDragIndicator, { className: "text-xl" })), /* @__PURE__ */ React.createElement("div", { className: "flex w-full items-center justify-center gap-5" }, /* @__PURE__ */ React.createElement(
332
+ Input,
333
+ {
334
+ value: text,
335
+ cacheKey: cache ? `${label}-${desc}-textList-[${idx}]` : void 0,
336
+ onChange: (text2) => {
337
+ const newValue = [...value];
338
+ newValue[idx] = transform(text2);
339
+ onChange(newValue);
340
+ },
341
+ validate: (text2) => {
342
+ if (text2.length < minlength)
343
+ return l("shared.textTooShortError", { minlength: minTextlength });
344
+ else if (text2.length > maxlength)
345
+ return l("shared.textTooLongError", { maxlength: maxTextlength });
346
+ else
347
+ return validate?.(text2) ?? true;
348
+ },
349
+ className: clsx("w-full", inputClassName),
350
+ inputClassName: "w-full input-sm",
351
+ placeholder,
352
+ disabled
353
+ }
354
+ ), /* @__PURE__ */ React.createElement(
355
+ "button",
356
+ {
357
+ className: "btn btn-xs btn-error btn-square btn-outline",
358
+ onClick: () => {
359
+ onChange(value.filter((_, i) => i !== idx));
360
+ }
361
+ },
362
+ /* @__PURE__ */ React.createElement(BiTrash, null)
363
+ )))))), /* @__PURE__ */ React.createElement("div", { className: "bg-base-content/20 my-5 h-[0.5px]" }), value.length <= maxTextlength ? /* @__PURE__ */ React.createElement(
364
+ "button",
365
+ {
366
+ className: "btn btn-outline w-full",
367
+ onClick: () => {
368
+ onChange([...value, ""]);
369
+ }
370
+ },
371
+ "+ New"
372
+ ) : null));
373
+ };
374
+ Field.TextList = TextList;
375
+ const Tags = ({
376
+ label,
377
+ desc,
378
+ labelClassName,
379
+ className,
380
+ value,
381
+ onChange,
382
+ placeholder,
383
+ disabled,
384
+ transform = (v) => v,
385
+ minlength = 0,
386
+ maxlength = 50,
387
+ minTextlength = 2,
388
+ maxTextlength = 10,
389
+ validate,
390
+ inputClassName
391
+ }) => {
392
+ const { l } = usePage();
393
+ const [inputVisible, setInputVisible] = useState(false);
394
+ const [tag, setTag] = useState("");
395
+ const addTag = () => {
396
+ if (!tag.length)
397
+ return;
398
+ onChange([...value, tag]);
399
+ setInputVisible(false);
400
+ setTag("");
401
+ };
402
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable: !minlength, label, desc }) : null, /* @__PURE__ */ React.createElement("div", { className: "border-base-content/20 flex w-full flex-wrap items-center gap-1 rounded-md border p-2" }, value.map((val, idx) => /* @__PURE__ */ React.createElement("span", { className: "badge badge-outline items-center rounded-full text-xs", key: idx }, /* @__PURE__ */ React.createElement("div", { className: "text-xs italic" }, "#"), val, /* @__PURE__ */ React.createElement(
403
+ BiX,
404
+ {
405
+ className: "ml-1 cursor-pointer opacity-50 duration-200 hover:opacity-100",
406
+ onClick: () => {
407
+ if (!disabled)
408
+ onChange(value.filter((v, i) => i !== idx));
409
+ }
410
+ }
411
+ ))), inputVisible ? /* @__PURE__ */ React.createElement(
412
+ Input,
413
+ {
414
+ autoFocus: true,
415
+ icon: /* @__PURE__ */ React.createElement("div", { className: "text-xs italic" }, "#"),
416
+ className: "h-6 w-24 items-center justify-start rounded-full border px-4",
417
+ inputClassName: "focus:border-0 border-0 bg-transparent text-xs h-full w-full",
418
+ placeholder,
419
+ value: tag,
420
+ onChange: (value2) => {
421
+ if (value2.length > maxTextlength)
422
+ return;
423
+ setTag(transform(value2));
424
+ },
425
+ onBlur: addTag,
426
+ onPressEnter: addTag,
427
+ onPressEscape: () => {
428
+ setInputVisible(false);
429
+ setTag("");
430
+ },
431
+ validate: (text) => {
432
+ if (text.length < minTextlength)
433
+ return l("shared.textTooShortError", { minlength: minTextlength });
434
+ else if (text.length > maxTextlength)
435
+ return l("shared.textTooLongError", { maxlength: maxTextlength });
436
+ else
437
+ return validate?.(text) ?? true;
438
+ }
439
+ }
440
+ ) : !disabled ? /* @__PURE__ */ React.createElement(
441
+ "div",
442
+ {
443
+ className: "bg-success text-success-content flex items-center gap-2 rounded-full px-2 py-1 text-xs duration-200 hover:cursor-pointer hover:opacity-80",
444
+ onClick: () => {
445
+ setInputVisible(true);
446
+ }
447
+ },
448
+ /* @__PURE__ */ React.createElement(AiOutlinePlus, null),
449
+ "New Tag"
450
+ ) : null));
451
+ };
452
+ Field.Tags = Tags;
453
+ const Date = ({
454
+ className,
455
+ labelClassName,
456
+ nullable,
457
+ label,
458
+ desc,
459
+ value,
460
+ min,
461
+ max,
462
+ onChange,
463
+ showTime,
464
+ dateClassName
465
+ }) => {
466
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement(
467
+ "input",
468
+ {
469
+ type: showTime ? "datetime-local" : "date",
470
+ className: clsx(
471
+ "input validator text-xs duration-200 outline-none focus-within:outline-none focus:outline-none",
472
+ dateClassName
473
+ ),
474
+ min: min ? showTime ? dayjs(min).format("YYYY-MM-DDTHH:mm") : dayjs(min).format("YYYY-MM-DD") : void 0,
475
+ max: max ? showTime ? dayjs(max).format("YYYY-MM-DDTHH:mm") : dayjs(max).format("YYYY-MM-DD") : void 0,
476
+ value: value ? showTime ? dayjs(value).format("YYYY-MM-DDTHH:mm") : dayjs(value).format("YYYY-MM-DD") : "",
477
+ onChange: (e) => {
478
+ onChange(dayjs(e.target.value));
479
+ }
480
+ }
481
+ ));
482
+ };
483
+ Field.Date = Date;
484
+ const DateRange = ({
485
+ className,
486
+ labelClassName,
487
+ nullable,
488
+ label,
489
+ desc,
490
+ from,
491
+ to,
492
+ min,
493
+ max,
494
+ onChangeFrom,
495
+ onChangeTo,
496
+ onChange,
497
+ showTime
498
+ }) => {
499
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement("div", { className: "relative flex w-full flex-col items-start gap-2 pt-2 text-center md:flex-row md:items-center" }, /* @__PURE__ */ React.createElement("div", { className: "relative flex w-full flex-col items-start justify-start" }, /* @__PURE__ */ React.createElement("div", { className: "bg-base-100 absolute -top-2 left-2 z-10 px-2 text-xs font-light" }, "From"), /* @__PURE__ */ React.createElement(
500
+ Date,
501
+ {
502
+ className: "w-full",
503
+ dateClassName: "w-full",
504
+ showTime,
505
+ value: from,
506
+ max,
507
+ min,
508
+ onChange: (value) => {
509
+ onChangeFrom(value);
510
+ }
511
+ }
512
+ )), /* @__PURE__ */ React.createElement("div", { className: "relative flex w-full flex-col items-start gap-2 text-center md:flex-row md:items-center" }, /* @__PURE__ */ React.createElement("div", { className: "bg-base-100 absolute -top-2 left-2 z-10 px-2 text-xs font-light" }, "To"), /* @__PURE__ */ React.createElement(
513
+ Date,
514
+ {
515
+ className: "w-full",
516
+ dateClassName: "w-full",
517
+ showTime,
518
+ value: to,
519
+ max,
520
+ min,
521
+ onChange: (value) => {
522
+ onChangeTo(value);
523
+ }
524
+ }
525
+ ))));
526
+ };
527
+ Field.DateRange = DateRange;
528
+ const Number = ({
529
+ label,
530
+ desc,
531
+ labelClassName,
532
+ className,
533
+ value,
534
+ onChange,
535
+ placeholder,
536
+ nullable,
537
+ disabled,
538
+ min,
539
+ max,
540
+ cache,
541
+ transform = (v) => v,
542
+ validate,
543
+ onPressEnter,
544
+ inputClassName,
545
+ unit,
546
+ formatter,
547
+ parser
548
+ }) => {
549
+ const { l } = usePage();
550
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc, unit }) : null, /* @__PURE__ */ React.createElement(
551
+ Input.Number,
552
+ {
553
+ min,
554
+ max,
555
+ cacheKey: cache ? `${label}-${desc}-number` : void 0,
556
+ value,
557
+ nullable,
558
+ formatter,
559
+ parser,
560
+ placeholder,
561
+ onChange: (value2) => {
562
+ onChange(transform(value2 ?? 0));
563
+ },
564
+ disabled,
565
+ className: clsx("w-full", ""),
566
+ inputClassName: clsx(" w-full", inputClassName),
567
+ validate: (value2) => {
568
+ if (min !== void 0 && value2 < min)
569
+ return l("shared.numberTooSmallError", { min });
570
+ else if (max !== void 0 && value2 > max)
571
+ return l("shared.numberTooBigError", { max });
572
+ else
573
+ return validate?.(value2) ?? true;
574
+ },
575
+ onPressEnter
576
+ }
577
+ ));
578
+ };
579
+ Field.Number = Number;
580
+ const DoubleNumber = ({
581
+ label,
582
+ desc,
583
+ labelClassName,
584
+ className,
585
+ value,
586
+ placeholder,
587
+ nullable,
588
+ disabled,
589
+ min,
590
+ max,
591
+ inputClassName,
592
+ cache,
593
+ separator,
594
+ onChange,
595
+ transform = (v) => v,
596
+ validate,
597
+ onPressEnter
598
+ }) => {
599
+ const { l } = usePage();
600
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React.createElement(
601
+ Input.Number,
602
+ {
603
+ value: value ? value[0] : 0,
604
+ nullable,
605
+ cacheKey: cache ? `${label}-${desc}-number-[0]` : void 0,
606
+ placeholder,
607
+ onChange: (num) => {
608
+ if (num === null)
609
+ return;
610
+ onChange([transform(num), value ? value[1] : 0]);
611
+ },
612
+ disabled,
613
+ className: clsx("w-full", ""),
614
+ inputClassName: clsx("focus:border-primary w-full", inputClassName),
615
+ validate: (value2) => {
616
+ if (min && value2 < min[0])
617
+ return l("shared.numberTooSmallError", { min: min[0] });
618
+ else if (max && value2 > max[0])
619
+ return l("shared.numberTooBigError", { max: max[0] });
620
+ else
621
+ return validate?.(value2) ?? true;
622
+ },
623
+ onPressEnter
624
+ }
625
+ ), separator, /* @__PURE__ */ React.createElement(
626
+ Input.Number,
627
+ {
628
+ cacheKey: cache ? `${label}-${desc}-number-[1]` : void 0,
629
+ value: value ? value[1] : 0,
630
+ nullable,
631
+ placeholder,
632
+ onChange: (num) => {
633
+ onChange([value ? value[0] : 0, transform(num ?? 0)]);
634
+ },
635
+ disabled,
636
+ className: clsx("w-full", ""),
637
+ inputClassName: clsx("focus:border-primary w-full", inputClassName),
638
+ validate: (value2) => {
639
+ if (min && value2 < min[1])
640
+ return l("shared.numberTooSmallError", { min: min[1] });
641
+ else if (max && value2 > max[1])
642
+ return l("shared.numberTooBigError", { max: max[1] });
643
+ else
644
+ return validate?.(value2) ?? true;
645
+ },
646
+ onPressEnter
647
+ }
648
+ )));
649
+ };
650
+ Field.DoubleNumber = DoubleNumber;
651
+ const Email = ({
652
+ label,
653
+ desc,
654
+ labelClassName,
655
+ className,
656
+ value,
657
+ onChange,
658
+ cache,
659
+ placeholder = "example@email.com",
660
+ nullable,
661
+ disabled,
662
+ minlength = nullable ? 0 : 2,
663
+ maxlength = 80,
664
+ transform = (v) => v,
665
+ validate,
666
+ onPressEnter,
667
+ inputClassName,
668
+ inputStyleType
669
+ }) => {
670
+ const { l } = usePage();
671
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement(
672
+ Input.Email,
673
+ {
674
+ value: value ?? "",
675
+ cacheKey: cache ? `${label}-${desc}-email` : void 0,
676
+ nullable,
677
+ placeholder,
678
+ onChange: (value2) => {
679
+ onChange(transform(value2));
680
+ },
681
+ disabled,
682
+ className: clsx("w-full", ""),
683
+ inputClassName: clsx("focus:border-primary w-full", inputClassName),
684
+ inputStyleType,
685
+ validate: (text) => {
686
+ if (text.length < minlength)
687
+ return l("shared.textTooShortError", { minlength });
688
+ else if (text.length > maxlength)
689
+ return l("shared.textTooLongError", { maxlength });
690
+ else
691
+ return validate?.(text) ?? true;
692
+ },
693
+ onPressEnter
694
+ }
695
+ ));
696
+ };
697
+ Field.Email = Email;
698
+ const Phone = ({
699
+ label,
700
+ desc,
701
+ labelClassName,
702
+ className,
703
+ value,
704
+ onChange,
705
+ placeholder,
706
+ nullable,
707
+ disabled,
708
+ maxlength = 13,
709
+ cache,
710
+ transform = (v) => formatPhone(v),
711
+ validate,
712
+ onPressEnter,
713
+ inputClassName
714
+ }) => {
715
+ const { l } = usePage();
716
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement(
717
+ Input,
718
+ {
719
+ value: value ?? "",
720
+ cacheKey: cache ? `${label}-${desc}-phone` : void 0,
721
+ nullable,
722
+ placeholder,
723
+ onChange: (value2) => {
724
+ onChange(transform(value2));
725
+ },
726
+ disabled,
727
+ maxLength: maxlength,
728
+ className: clsx("w-full", ""),
729
+ inputClassName: clsx("focus:border-primary w-full", inputClassName),
730
+ validate: (text) => {
731
+ if (!isPhoneNumber(text))
732
+ return l("util.phoneInvalidError");
733
+ else
734
+ return validate?.(text) ?? true;
735
+ },
736
+ onPressEnter
737
+ }
738
+ ));
739
+ };
740
+ Field.Phone = Phone;
741
+ const Password = ({
742
+ label,
743
+ desc,
744
+ labelClassName,
745
+ className,
746
+ value,
747
+ onChange,
748
+ cache,
749
+ confirmValue,
750
+ onChangeConfirm,
751
+ placeholder,
752
+ nullable,
753
+ disabled,
754
+ minlength = nullable ? 0 : 8,
755
+ maxlength = 20,
756
+ transform = (v) => v,
757
+ validate,
758
+ onPressEnter,
759
+ inputClassName,
760
+ showConfirm
761
+ }) => {
762
+ const { l } = usePage();
763
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ React.createElement(
764
+ Input.Password,
765
+ {
766
+ cacheKey: cache ? `${label}-${desc}-password` : void 0,
767
+ value: value ?? "",
768
+ nullable,
769
+ placeholder: placeholder ?? l("user.password"),
770
+ onChange: (value2) => {
771
+ onChange(transform(value2));
772
+ },
773
+ disabled,
774
+ className: clsx("w-full", ""),
775
+ inputClassName: clsx("focus:border-primary w-full", inputClassName),
776
+ validate: (text) => {
777
+ if (text.length < minlength)
778
+ return l("shared.textTooShortError", { minlength });
779
+ else if (text.length > maxlength)
780
+ return l("shared.textTooLongError", { maxlength });
781
+ else
782
+ return validate?.(text) ?? true;
783
+ },
784
+ onPressEnter
785
+ }
786
+ ), showConfirm ? /* @__PURE__ */ React.createElement(
787
+ Input.Password,
788
+ {
789
+ value: confirmValue ?? "",
790
+ nullable,
791
+ placeholder: l("user.passwordConfirm"),
792
+ onChange: (value2) => onChangeConfirm?.(transform(value2)),
793
+ disabled,
794
+ className: clsx("w-full", ""),
795
+ inputClassName: clsx("focus:border-primary w-full", inputClassName),
796
+ validate: (text) => {
797
+ if (value && text !== value)
798
+ return l("shared.passwordNotMatchError");
799
+ else
800
+ return true;
801
+ },
802
+ onPressEnter
803
+ }
804
+ ) : null));
805
+ };
806
+ Field.Password = Password;
807
+ const Parent = ({
808
+ label,
809
+ desc,
810
+ labelClassName,
811
+ selectClassName,
812
+ className,
813
+ nullable,
814
+ disabled,
815
+ initArgs,
816
+ sliceName,
817
+ value,
818
+ onChange,
819
+ onSearch,
820
+ sortOption,
821
+ renderOption,
822
+ renderSelected = renderOption
823
+ }) => {
824
+ const refName = st.slice[sliceName].refName;
825
+ const [modelName, ModelName] = [lowerlize(refName), capitalize(refName)];
826
+ const storeUse = st.use;
827
+ const storeDo = st.do;
828
+ const storeGet = st.get;
829
+ const names = {
830
+ model: modelName,
831
+ modelList: `${modelName}List`,
832
+ modelListLoading: `${modelName}ListLoading`,
833
+ initModel: `init${ModelName}`
834
+ };
835
+ const namesOfSlice = {
836
+ modelList: sliceName.replace(names.model, names.modelList),
837
+ modelListLoading: sliceName.replace(names.model, names.modelListLoading),
838
+ initModel: sliceName.replace(names.model, names.initModel)
839
+ };
840
+ const modelList = storeUse[namesOfSlice.modelList]();
841
+ const modelListLoading = storeUse[namesOfSlice.modelListLoading]();
842
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement(
843
+ Select,
844
+ {
845
+ label,
846
+ desc,
847
+ labelClassName,
848
+ selectClassName,
849
+ value: value?.id,
850
+ searchable: true,
851
+ options: modelList.map((model) => model.id),
852
+ renderOption: (modelId) => {
853
+ const model = modelList.get(modelId);
854
+ if (!model)
855
+ return null;
856
+ return renderOption(model);
857
+ },
858
+ renderSelected: (modelId) => {
859
+ const model = modelList.get(modelId);
860
+ if (!model)
861
+ return null;
862
+ return renderSelected(model);
863
+ },
864
+ onChange: (modelId) => {
865
+ onChange(modelList.get(modelId));
866
+ },
867
+ onOpen: () => {
868
+ if (!disabled)
869
+ void storeDo[namesOfSlice.initModel](...initArgs ?? []);
870
+ },
871
+ onSearch: (text) => {
872
+ if (text) {
873
+ onSearch?.(text);
874
+ }
875
+ }
876
+ }
877
+ ));
878
+ };
879
+ Field.Parent = Parent;
880
+ const ParentId = ({
881
+ label,
882
+ desc,
883
+ className,
884
+ selectClassName,
885
+ labelClassName,
886
+ nullable,
887
+ disabled,
888
+ initArgs,
889
+ sliceName,
890
+ value,
891
+ onChange,
892
+ onSearch,
893
+ sortOption,
894
+ renderOption,
895
+ renderSelected = renderOption
896
+ }) => {
897
+ const refName = st.slice[sliceName].refName;
898
+ const [modelName, ModelName] = [lowerlize(refName), capitalize(refName)];
899
+ const storeUse = st.use;
900
+ const storeDo = st.do;
901
+ const storeGet = st.get;
902
+ const names = {
903
+ model: modelName,
904
+ modelList: `${modelName}List`,
905
+ modelListLoading: `${modelName}ListLoading`,
906
+ initModel: `init${ModelName}`
907
+ };
908
+ const namesOfSlice = {
909
+ modelList: sliceName.replace(names.model, names.modelList),
910
+ modelListLoading: sliceName.replace(names.model, names.modelListLoading),
911
+ initModel: sliceName.replace(names.model, names.initModel)
912
+ };
913
+ const modelList = storeUse[namesOfSlice.modelList]();
914
+ const modelListLoading = storeUse[namesOfSlice.modelListLoading]();
915
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement(
916
+ Select,
917
+ {
918
+ searchable: true,
919
+ desc,
920
+ label,
921
+ labelClassName,
922
+ selectClassName,
923
+ value,
924
+ options: modelList.map((model) => ({ label: model.id, value: model.id })),
925
+ renderOption: (renderId) => {
926
+ const model = modelList.get(renderId);
927
+ if (!model)
928
+ return null;
929
+ return renderOption?.(model);
930
+ },
931
+ renderSelected: (renderId) => {
932
+ const model = modelList.get(renderId);
933
+ if (!model)
934
+ return null;
935
+ return renderSelected?.(model);
936
+ },
937
+ onOpen: () => {
938
+ if (!disabled)
939
+ void storeDo[namesOfSlice.initModel](...initArgs ?? []);
940
+ },
941
+ onChange: (modelId) => {
942
+ onChange(modelId, modelList.get(modelId));
943
+ },
944
+ onSearch: (text) => {
945
+ if (text) {
946
+ onSearch?.(text);
947
+ }
948
+ }
949
+ }
950
+ ));
951
+ };
952
+ Field.ParentId = ParentId;
953
+ const Children = ({
954
+ label,
955
+ desc,
956
+ labelClassName,
957
+ selectClassName,
958
+ className,
959
+ nullable,
960
+ disabled,
961
+ initArgs,
962
+ sliceName,
963
+ value,
964
+ onChange,
965
+ onSearch,
966
+ sortOption,
967
+ renderOption,
968
+ renderSelected = renderOption
969
+ }) => {
970
+ const refName = st.slice[sliceName].refName;
971
+ const [modelName, ModelName] = [lowerlize(refName), capitalize(refName)];
972
+ const storeUse = st.use;
973
+ const storeDo = st.do;
974
+ const storeGet = st.get;
975
+ const names = {
976
+ model: modelName,
977
+ modelList: `${modelName}List`,
978
+ modelListLoading: `${modelName}ListLoading`,
979
+ initModel: `init${ModelName}`
980
+ };
981
+ const namesOfSlice = {
982
+ modelList: sliceName.replace(names.model, names.modelList),
983
+ modelListLoading: sliceName.replace(names.model, names.modelListLoading),
984
+ initModel: sliceName.replace(names.model, names.initModel)
985
+ };
986
+ const modelList = storeUse[namesOfSlice.modelList]();
987
+ const modelListLoading = storeUse[namesOfSlice.modelListLoading]();
988
+ useEffect(() => {
989
+ if (!disabled)
990
+ void storeDo[namesOfSlice.initModel](...initArgs ?? []);
991
+ }, []);
992
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement(
993
+ Select,
994
+ {
995
+ searchable: true,
996
+ desc,
997
+ label,
998
+ labelClassName,
999
+ selectClassName,
1000
+ multiple: true,
1001
+ value: value.map((model) => model.id),
1002
+ options: modelList.map((model) => model.id),
1003
+ renderOption: (modelId) => {
1004
+ const model = modelList.get(modelId);
1005
+ if (!model)
1006
+ return null;
1007
+ return renderOption(model);
1008
+ },
1009
+ renderSelected: (modelId) => {
1010
+ const model = modelList.get(modelId);
1011
+ if (!model)
1012
+ return null;
1013
+ return renderSelected(model);
1014
+ },
1015
+ onChange: (modelIds) => {
1016
+ onChange(modelIds.map((id) => modelList.get(id)).filter((model) => model !== void 0));
1017
+ },
1018
+ onSearch: (text) => {
1019
+ if (text) {
1020
+ onSearch?.(text);
1021
+ }
1022
+ }
1023
+ }
1024
+ ));
1025
+ };
1026
+ Field.Children = Children;
1027
+ const ChildrenId = ({
1028
+ label,
1029
+ desc,
1030
+ labelClassName,
1031
+ className,
1032
+ nullable,
1033
+ disabled,
1034
+ initArgs,
1035
+ sliceName,
1036
+ value,
1037
+ onChange,
1038
+ onSearch,
1039
+ sortOption,
1040
+ renderOption
1041
+ }) => {
1042
+ const refName = st.slice[sliceName].refName;
1043
+ const [modelName, ModelName] = [lowerlize(refName), capitalize(refName)];
1044
+ const storeUse = st.use;
1045
+ const storeDo = st.do;
1046
+ const storeGet = st.get;
1047
+ const names = {
1048
+ model: modelName,
1049
+ modelList: `${modelName}List`,
1050
+ modelListLoading: `${modelName}ListLoading`,
1051
+ initModel: `init${ModelName}`
1052
+ };
1053
+ const namesOfSlice = {
1054
+ modelList: sliceName.replace(names.model, names.modelList),
1055
+ modelListLoading: sliceName.replace(names.model, names.modelListLoading),
1056
+ initModel: sliceName.replace(names.model, names.initModel)
1057
+ };
1058
+ const modelList = storeUse[namesOfSlice.modelList]();
1059
+ const modelListLoading = storeUse[namesOfSlice.modelListLoading]();
1060
+ return /* @__PURE__ */ React.createElement("div", { className: clsx("flex flex-col", className) }, label ? /* @__PURE__ */ React.createElement(Label, { className: labelClassName, nullable, label, desc }) : null, /* @__PURE__ */ React.createElement(
1061
+ Select,
1062
+ {
1063
+ searchable: true,
1064
+ desc,
1065
+ label,
1066
+ labelClassName,
1067
+ multiple: true,
1068
+ value,
1069
+ options: modelList.map((model) => ({ label: model.id, value: model.id })),
1070
+ renderOption: (renderId) => {
1071
+ const model = modelList.get(renderId);
1072
+ if (!model)
1073
+ return null;
1074
+ return renderOption(model);
1075
+ },
1076
+ onChange: (modelIds) => {
1077
+ onChange(modelIds);
1078
+ },
1079
+ onSearch: (text) => {
1080
+ if (text) {
1081
+ onSearch?.(text);
1082
+ }
1083
+ }
1084
+ }
1085
+ ));
1086
+ };
1087
+ Field.ChildrenId = ChildrenId;
1088
+ export {
1089
+ Field
1090
+ };