@_tc/template-core 0.0.1-bate.35 → 0.0.1-bate.37

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 (418) hide show
  1. package/cjs/app/controller/base.js +3 -3
  2. package/cjs/app/controller/project.js +1 -1
  3. package/cjs/app/controller/view.js +16 -7
  4. package/cjs/app/middleware/api-params-verify.js +10 -1
  5. package/cjs/app/middleware/error-handle.js +9 -3
  6. package/cjs/app/middleware/project-handler.js +1 -1
  7. package/cjs/app/router/view.js +3 -1
  8. package/cjs/app/router-schema/project.js +1 -1
  9. package/cjs/app/service/project.js +5 -0
  10. package/cjs/bundler/defaultAlias.js +5 -0
  11. package/cjs/bundler/dev.js +4 -3
  12. package/cjs/bundler/index.js +2 -1
  13. package/cjs/bundler/prod.js +4 -3
  14. package/cjs/bundler/utils.js +53 -24
  15. package/cjs/packages/common/LRUCache.js +4 -0
  16. package/cjs/packages/common/array/index.js +43 -0
  17. package/cjs/packages/common/cache/LRUCache.js +45 -0
  18. package/cjs/packages/common/cache/index.js +4 -0
  19. package/cjs/packages/common/guards/index.js +34 -0
  20. package/cjs/packages/common/i18n/default.js +95 -0
  21. package/cjs/packages/common/i18n/en-US.js +95 -0
  22. package/cjs/packages/common/i18n/index.js +178 -0
  23. package/cjs/packages/common/i18n/locales.js +17 -0
  24. package/cjs/packages/common/i18n/types.js +1 -0
  25. package/cjs/packages/common/index.js +65 -0
  26. package/cjs/packages/common/log/index.js +160 -0
  27. package/cjs/packages/common/number/index.js +14 -0
  28. package/cjs/packages/common/object/filterEmpty.js +32 -0
  29. package/cjs/packages/common/object/filtereEmpty.js +5 -0
  30. package/cjs/packages/common/object/index.js +26 -0
  31. package/cjs/packages/common/string/index.js +17 -0
  32. package/cjs/packages/common/types/index.js +1 -0
  33. package/cjs/packages/core/index.js +17 -12
  34. package/cjs/packages/core/loader/model.js +3 -3
  35. package/cjs/packages/core/loader/router.js +14 -5
  36. package/esm/app/controller/base.js +3 -3
  37. package/esm/app/controller/project.js +3 -3
  38. package/esm/app/controller/view.js +16 -7
  39. package/esm/app/middleware/api-params-verify.js +10 -1
  40. package/esm/app/middleware/error-handle.js +9 -3
  41. package/esm/app/middleware/project-handler.js +1 -1
  42. package/esm/app/router/view.js +3 -1
  43. package/esm/app/router-schema/project.js +1 -1
  44. package/esm/app/service/project.js +5 -0
  45. package/esm/bundler/defaultAlias.js +4 -0
  46. package/esm/bundler/dev.js +4 -3
  47. package/esm/bundler/index.js +2 -1
  48. package/esm/bundler/prod.js +4 -3
  49. package/esm/bundler/utils.js +53 -24
  50. package/esm/index.js +2 -2
  51. package/esm/packages/common/LRUCache.js +2 -0
  52. package/esm/packages/common/array/index.js +37 -0
  53. package/esm/packages/common/cache/LRUCache.js +43 -0
  54. package/esm/packages/common/cache/index.js +2 -0
  55. package/esm/packages/common/guards/index.js +26 -0
  56. package/esm/packages/common/i18n/default.js +93 -0
  57. package/esm/packages/common/i18n/en-US.js +93 -0
  58. package/esm/packages/common/i18n/index.js +162 -0
  59. package/esm/packages/common/i18n/locales.js +11 -0
  60. package/esm/packages/common/i18n/types.js +0 -0
  61. package/esm/packages/common/index.js +13 -0
  62. package/esm/packages/common/log/index.js +146 -0
  63. package/esm/packages/common/number/index.js +11 -0
  64. package/esm/packages/common/object/filterEmpty.js +29 -0
  65. package/esm/packages/common/object/filtereEmpty.js +2 -0
  66. package/esm/packages/common/object/index.js +20 -0
  67. package/esm/packages/common/string/index.js +13 -0
  68. package/esm/packages/common/types/index.js +0 -0
  69. package/esm/packages/core/index.js +17 -12
  70. package/esm/packages/core/loader/model.js +3 -3
  71. package/esm/packages/core/loader/router.js +14 -5
  72. package/fe/frontend/dash/Dashboard.d.ts +7 -0
  73. package/fe/frontend/dash/Dashboard.js +63 -0
  74. package/fe/frontend/dash/dash.entry.d.ts +2 -0
  75. package/fe/frontend/dash/dash.entry.js +62 -0
  76. package/fe/frontend/index.d.ts +3 -0
  77. package/fe/frontend/index.js +1 -0
  78. package/fe/frontend/main.css +5 -1
  79. package/fe/frontend/main.d.ts +10 -3
  80. package/fe/frontend/main.js +13 -4
  81. package/fe/frontend/testPage/testPage.entry.js +1 -2
  82. package/fe/frontend/typing/window.d.ts +7 -0
  83. package/fe/frontend/typing/window.js +1 -0
  84. package/fe/frontend/widgets/api/baseInfo.d.ts +31 -0
  85. package/fe/frontend/widgets/api/baseInfo.js +15 -0
  86. package/fe/frontend/widgets/common/CRUD/CRUD.d.ts +70 -0
  87. package/fe/frontend/widgets/common/CRUD/CRUD.js +207 -0
  88. package/fe/frontend/widgets/common/CRUD/index.d.ts +2 -0
  89. package/fe/frontend/widgets/common/CRUD/index.js +1 -0
  90. package/fe/frontend/widgets/common/auth/index.d.ts +7 -0
  91. package/fe/frontend/widgets/common/auth/index.js +20 -0
  92. package/fe/frontend/widgets/common/generateMenuData.d.ts +4 -0
  93. package/fe/frontend/widgets/common/generateMenuData.js +14 -0
  94. package/fe/frontend/widgets/common/importComponent.d.ts +5 -0
  95. package/fe/frontend/widgets/common/importComponent.js +7 -0
  96. package/fe/frontend/widgets/common/language.d.ts +2 -0
  97. package/fe/frontend/widgets/common/language.js +8 -0
  98. package/fe/frontend/widgets/common/logFn/index.d.ts +4 -0
  99. package/fe/frontend/widgets/common/logFn/index.js +8 -0
  100. package/fe/frontend/widgets/common/menu.d.ts +22 -0
  101. package/fe/frontend/widgets/common/menu.js +80 -0
  102. package/fe/frontend/widgets/common/request.d.ts +33 -0
  103. package/fe/frontend/widgets/common/request.js +127 -0
  104. package/fe/frontend/widgets/components/BasePage/HeaderView.d.ts +9 -0
  105. package/fe/frontend/widgets/components/BasePage/HeaderView.js +14 -0
  106. package/fe/frontend/widgets/components/Router/index.d.ts +9 -0
  107. package/fe/frontend/widgets/components/Router/index.js +11 -0
  108. package/fe/frontend/widgets/components/Router/type.d.ts +2 -0
  109. package/fe/frontend/widgets/components/Router/type.js +1 -0
  110. package/fe/frontend/widgets/defaultPages/Iframe/index.d.ts +3 -0
  111. package/fe/frontend/widgets/defaultPages/Iframe/index.js +14 -0
  112. package/fe/frontend/widgets/defaultPages/Schema/components/CallCom/DetailPanel.d.ts +7 -0
  113. package/fe/frontend/widgets/defaultPages/Schema/components/CallCom/DetailPanel.js +94 -0
  114. package/fe/frontend/widgets/defaultPages/Schema/components/CallCom/PopFrom.d.ts +13 -0
  115. package/fe/frontend/widgets/defaultPages/Schema/components/CallCom/PopFrom.js +109 -0
  116. package/fe/frontend/widgets/defaultPages/Schema/components/CallCom/data.d.ts +3 -0
  117. package/fe/frontend/widgets/defaultPages/Schema/components/CallCom/data.js +6 -0
  118. package/fe/frontend/widgets/defaultPages/Schema/components/SchemaSearch/index.d.ts +3 -0
  119. package/fe/frontend/widgets/defaultPages/Schema/components/SchemaSearch/index.js +58 -0
  120. package/fe/frontend/widgets/defaultPages/Schema/components/SchemaTable/index.d.ts +11 -0
  121. package/fe/frontend/widgets/defaultPages/Schema/components/SchemaTable/index.js +176 -0
  122. package/fe/frontend/widgets/defaultPages/Schema/data/eventInfo.d.ts +8 -0
  123. package/fe/frontend/widgets/defaultPages/Schema/data/eventInfo.js +6 -0
  124. package/fe/frontend/widgets/defaultPages/Schema/data/index.d.ts +3 -0
  125. package/fe/frontend/widgets/defaultPages/Schema/data/index.js +1 -0
  126. package/fe/frontend/widgets/defaultPages/Schema/hooks/useComConfig.d.ts +10 -0
  127. package/fe/frontend/widgets/defaultPages/Schema/hooks/useComConfig.js +14 -0
  128. package/fe/frontend/widgets/defaultPages/Schema/index.d.ts +3 -0
  129. package/fe/frontend/widgets/defaultPages/Schema/index.js +67 -0
  130. package/fe/frontend/widgets/defaultPages/Schema/schemaType.d.ts +41 -0
  131. package/fe/frontend/widgets/defaultPages/Schema/schemaType.js +4 -0
  132. package/fe/frontend/widgets/defaultPages/Schema/stores/schemaEventBus.d.ts +23 -0
  133. package/fe/frontend/widgets/defaultPages/Schema/stores/schemaEventBus.js +66 -0
  134. package/fe/frontend/widgets/defaultPages/Schema/stores/schemaStore.d.ts +33 -0
  135. package/fe/frontend/widgets/defaultPages/Schema/stores/schemaStore.js +24 -0
  136. package/fe/frontend/widgets/defaultPages/Schema/utils/fetchErrorShow.d.ts +3 -0
  137. package/fe/frontend/widgets/defaultPages/Schema/utils/fetchErrorShow.js +8 -0
  138. package/fe/frontend/widgets/defaultPages/Schema/utils/permissions.d.ts +3 -0
  139. package/fe/frontend/widgets/defaultPages/Schema/utils/permissions.js +3 -0
  140. package/fe/frontend/widgets/defaultPages/Schema/utils/schemaConversion.d.ts +3 -0
  141. package/fe/frontend/widgets/defaultPages/Schema/utils/schemaConversion.js +72 -0
  142. package/fe/frontend/widgets/defaultPages/Schema/utils/validator.d.ts +4 -0
  143. package/fe/frontend/widgets/defaultPages/Schema/utils/validator.js +31 -0
  144. package/fe/frontend/widgets/defaultPages/SidebarSlotPage/SidebarSlotContainer.d.ts +10 -0
  145. package/fe/frontend/widgets/defaultPages/SidebarSlotPage/SidebarSlotContainer.js +31 -0
  146. package/fe/frontend/widgets/defaultPages/SidebarSlotPage/index.d.ts +3 -0
  147. package/fe/frontend/widgets/defaultPages/SidebarSlotPage/index.js +15 -0
  148. package/fe/frontend/widgets/defaultPages/SidebarSlotPageTmp.d.ts +3 -0
  149. package/fe/frontend/widgets/defaultPages/SidebarSlotPageTmp.js +17 -0
  150. package/fe/frontend/widgets/defaultPages/SlotPage/index.d.ts +3 -0
  151. package/fe/frontend/widgets/defaultPages/SlotPage/index.js +24 -0
  152. package/fe/frontend/widgets/defaultPages/Todo.d.ts +3 -0
  153. package/fe/frontend/widgets/defaultPages/Todo.js +5 -0
  154. package/fe/frontend/widgets/hooks/useCurrentMenuData.d.ts +11 -0
  155. package/fe/frontend/widgets/hooks/useCurrentMenuData.js +20 -0
  156. package/fe/frontend/widgets/hooks/useRouterParams.d.ts +5 -0
  157. package/fe/frontend/widgets/hooks/useRouterParams.js +11 -0
  158. package/fe/frontend/widgets/store/mode.d.ts +16 -0
  159. package/fe/frontend/widgets/store/mode.js +36 -0
  160. package/fe/model/types/data/button.d.ts +23 -0
  161. package/fe/model/types/data/button.js +1 -0
  162. package/fe/model/types/data/component.d.ts +37 -0
  163. package/fe/model/types/data/component.js +1 -0
  164. package/fe/model/types/data/fetchInfo.d.ts +8 -0
  165. package/fe/model/types/data/fetchInfo.js +1 -0
  166. package/fe/model/types/data/schema.d.ts +47 -0
  167. package/fe/model/types/data/schema.js +1 -0
  168. package/fe/model/types/data/search.d.ts +7 -0
  169. package/fe/model/types/data/search.js +1 -0
  170. package/fe/model/types/menuType.d.ts +44 -0
  171. package/fe/model/types/menuType.js +1 -0
  172. package/fe/model/types/model.d.ts +20 -0
  173. package/fe/model/types/model.js +1 -0
  174. package/fe/packages/common/array/index.d.ts +7 -0
  175. package/fe/packages/common/array/index.js +40 -0
  176. package/fe/packages/common/cache/LRUCache.d.ts +13 -0
  177. package/fe/packages/common/cache/LRUCache.js +47 -0
  178. package/fe/packages/common/cache/index.d.ts +2 -0
  179. package/fe/packages/common/cache/index.js +1 -0
  180. package/fe/packages/common/guards/index.d.ts +9 -0
  181. package/fe/packages/common/guards/index.js +24 -0
  182. package/fe/packages/common/i18n/default.d.ts +87 -0
  183. package/fe/packages/common/i18n/default.js +85 -0
  184. package/fe/packages/common/i18n/en-US.d.ts +87 -0
  185. package/fe/packages/common/i18n/en-US.js +85 -0
  186. package/fe/packages/common/i18n/index.d.ts +19 -0
  187. package/fe/packages/common/i18n/index.js +142 -0
  188. package/fe/packages/common/i18n/locales.d.ts +8 -0
  189. package/fe/packages/common/i18n/locales.js +10 -0
  190. package/fe/packages/common/i18n/types.d.ts +47 -0
  191. package/fe/packages/common/i18n/types.js +1 -0
  192. package/fe/packages/common/index.d.ts +10 -0
  193. package/fe/packages/common/index.js +9 -0
  194. package/fe/packages/common/log/index.d.ts +33 -0
  195. package/fe/packages/common/log/index.js +176 -0
  196. package/fe/packages/common/number/index.d.ts +3 -0
  197. package/fe/packages/common/number/index.js +10 -0
  198. package/fe/packages/common/object/filterEmpty.d.ts +3 -0
  199. package/fe/packages/common/object/filterEmpty.js +33 -0
  200. package/fe/packages/common/object/index.d.ts +5 -0
  201. package/fe/packages/common/object/index.js +25 -0
  202. package/fe/packages/common/string/index.d.ts +4 -0
  203. package/fe/packages/common/string/index.js +17 -0
  204. package/fe/packages/common/types/index.d.ts +4 -0
  205. package/fe/packages/common/types/index.js +1 -0
  206. package/fe/packages/ui/react/components/Button/Button.d.ts +16 -30
  207. package/fe/packages/ui/react/components/Button/Button.js +53 -26
  208. package/fe/packages/ui/react/components/Button/SumbitButton.d.ts +2 -6
  209. package/fe/packages/ui/react/components/Button/SumbitButton.js +3 -14
  210. package/fe/packages/ui/react/components/Button/index.d.ts +1 -1
  211. package/fe/packages/ui/react/components/Checkbox/Checkbox.d.ts +1 -1
  212. package/fe/packages/ui/react/components/Checkbox/Checkbox.js +5 -3
  213. package/fe/packages/ui/react/components/{ConfirmDialog.d.ts → ConfirmDialog/ConfirmDialog.d.ts} +0 -8
  214. package/fe/packages/ui/react/components/ConfirmDialog/ConfirmDialog.js +11 -0
  215. package/fe/packages/ui/react/components/ConfirmDialog/index.d.ts +2 -0
  216. package/fe/packages/ui/react/components/ConfirmDialog/index.js +1 -0
  217. package/fe/packages/ui/react/components/DataTable/ActionBtn.d.ts +3 -1
  218. package/fe/packages/ui/react/components/DataTable/ActionBtn.js +85 -4
  219. package/fe/packages/ui/react/components/DataTable/{data-table.d.ts → index.d.ts} +10 -23
  220. package/fe/packages/ui/react/components/DataTable/{data-table.js → index.js} +57 -47
  221. package/fe/packages/ui/react/components/Date/Calendar.d.ts +0 -13
  222. package/fe/packages/ui/react/components/Date/Calendar.js +5 -13
  223. package/fe/packages/ui/react/components/Date/Date.d.ts +4 -13
  224. package/fe/packages/ui/react/components/Date/Date.js +70 -66
  225. package/fe/packages/ui/react/components/Date/LocaleContext.d.ts +0 -4
  226. package/fe/packages/ui/react/components/Date/LocaleContext.js +0 -4
  227. package/fe/packages/ui/react/components/Date/LocaleProvider.d.ts +0 -11
  228. package/fe/packages/ui/react/components/Date/LocaleProvider.js +0 -11
  229. package/fe/packages/ui/react/components/Date/TimePicker.js +3 -2
  230. package/fe/packages/ui/react/components/Date/dateLocaleStore.d.ts +0 -6
  231. package/fe/packages/ui/react/components/Date/dropdownPositioning.d.ts +3 -0
  232. package/fe/packages/ui/react/components/Date/dropdownPositioning.js +12 -0
  233. package/fe/packages/ui/react/components/Date/locales.d.ts +1 -19
  234. package/fe/packages/ui/react/components/Date/locales.js +7 -47
  235. package/fe/packages/ui/react/components/Drawer/Drawer.d.ts +23 -0
  236. package/fe/packages/ui/react/components/Drawer/Drawer.js +100 -0
  237. package/fe/packages/ui/react/components/Drawer/index.d.ts +3 -0
  238. package/fe/packages/ui/react/components/Drawer/index.js +1 -0
  239. package/fe/packages/ui/react/components/Dropdown/Dropdown.d.ts +24 -0
  240. package/fe/packages/ui/react/components/Dropdown/Dropdown.js +28 -0
  241. package/fe/packages/ui/react/components/Dropdown/index.d.ts +2 -0
  242. package/fe/packages/ui/react/components/Dropdown/index.js +1 -0
  243. package/fe/packages/ui/react/components/Form/Form.d.ts +0 -6
  244. package/fe/packages/ui/react/components/Form/Form.js +1 -1
  245. package/fe/packages/ui/react/components/Form/FormItem.d.ts +0 -21
  246. package/fe/packages/ui/react/components/Form/FormItem.js +2 -9
  247. package/fe/packages/ui/react/components/Form/SchemaForm/data.d.ts +45 -0
  248. package/fe/packages/ui/react/components/Form/{SchemeForm → SchemaForm}/data.js +8 -1
  249. package/fe/packages/ui/react/components/Form/SchemaForm/index.d.ts +60 -0
  250. package/fe/packages/ui/react/components/Form/SchemaForm/index.js +75 -0
  251. package/fe/packages/ui/react/components/Form/index.d.ts +1 -1
  252. package/fe/packages/ui/react/components/Form/index.js +1 -1
  253. package/fe/packages/ui/react/components/ImagePreview/ImagePreview.js +15 -20
  254. package/fe/packages/ui/react/components/ImagePreview/PreviewImage.d.ts +0 -3
  255. package/fe/packages/ui/react/components/ImagePreview/PreviewImage.js +5 -2
  256. package/fe/packages/ui/react/components/Input/Input.d.ts +3 -21
  257. package/fe/packages/ui/react/components/Input/Input.js +5 -7
  258. package/fe/packages/ui/react/components/InputNumber/InputNumber.d.ts +26 -0
  259. package/fe/packages/ui/react/components/InputNumber/InputNumber.js +144 -0
  260. package/fe/packages/ui/react/components/InputNumber/index.d.ts +2 -0
  261. package/fe/packages/ui/react/components/InputNumber/index.js +1 -0
  262. package/fe/packages/ui/react/components/InputNumber/inputNumberUtils.d.ts +30 -0
  263. package/fe/packages/ui/react/components/InputNumber/inputNumberUtils.js +63 -0
  264. package/fe/packages/ui/react/components/InputNumber/inputNumberUtils.test.d.ts +2 -0
  265. package/fe/packages/ui/react/components/InputNumber/inputNumberUtils.test.js +27 -0
  266. package/fe/packages/ui/react/components/Label/Label.d.ts +0 -29
  267. package/fe/packages/ui/react/components/Label/Label.js +2 -4
  268. package/fe/packages/ui/react/components/Menu/Menu.d.ts +18 -0
  269. package/fe/packages/ui/react/components/Menu/Menu.js +98 -0
  270. package/fe/packages/ui/react/components/Menu/MenuContext.d.ts +39 -0
  271. package/fe/packages/ui/react/components/Menu/MenuContext.js +97 -0
  272. package/fe/packages/ui/react/components/Menu/MenuItem.d.ts +3 -0
  273. package/fe/packages/ui/react/components/Menu/MenuItem.js +33 -0
  274. package/fe/packages/ui/react/components/Menu/SubMenu.d.ts +3 -0
  275. package/fe/packages/ui/react/components/Menu/SubMenu.js +124 -0
  276. package/fe/packages/ui/react/components/Menu/index.d.ts +9 -0
  277. package/fe/packages/ui/react/components/Menu/index.js +5 -0
  278. package/fe/packages/ui/react/components/Menu/menuTypes.d.ts +58 -0
  279. package/fe/packages/ui/react/components/Menu/menuTypes.js +1 -0
  280. package/fe/packages/ui/react/components/Menu/utils.d.ts +2 -0
  281. package/fe/packages/ui/react/components/Menu/utils.js +7 -0
  282. package/fe/packages/ui/react/components/Message/Message.d.ts +0 -7
  283. package/fe/packages/ui/react/components/Message/Message.js +4 -4
  284. package/fe/packages/ui/react/components/Message/MessageManager.js +0 -8
  285. package/fe/packages/ui/react/components/Modal/Modal.d.ts +3 -7
  286. package/fe/packages/ui/react/components/Modal/Modal.js +6 -44
  287. package/fe/packages/ui/react/components/Modal/ModalManager.d.ts +0 -12
  288. package/fe/packages/ui/react/components/Modal/ModalManager.js +5 -7
  289. package/fe/packages/ui/react/components/Overlay/Overlay.d.ts +20 -0
  290. package/fe/packages/ui/react/components/Overlay/Overlay.js +53 -0
  291. package/fe/packages/ui/react/components/Overlay/index.d.ts +3 -0
  292. package/fe/packages/ui/react/components/Overlay/index.js +1 -0
  293. package/fe/packages/ui/react/components/{Pagination.d.ts → Pagination/Pagination.d.ts} +0 -7
  294. package/fe/packages/ui/react/components/{Pagination.js → Pagination/Pagination.js} +5 -12
  295. package/fe/packages/ui/react/components/Pagination/index.d.ts +2 -0
  296. package/fe/packages/ui/react/components/Pagination/index.js +1 -0
  297. package/fe/packages/ui/react/components/Popup/Popup.d.ts +26 -0
  298. package/fe/packages/ui/react/components/Popup/Popup.js +69 -0
  299. package/fe/packages/ui/react/components/Popup/index.d.ts +2 -0
  300. package/fe/packages/ui/react/components/Popup/index.js +1 -0
  301. package/fe/packages/ui/react/components/Search/Search.d.ts +2 -5
  302. package/fe/packages/ui/react/components/Search/Search.js +3 -3
  303. package/fe/packages/ui/react/components/Select/Select.d.ts +2 -2
  304. package/fe/packages/ui/react/components/Select/Select.js +52 -113
  305. package/fe/packages/ui/react/components/Select/dropdownPositioning.d.ts +3 -0
  306. package/fe/packages/ui/react/components/Select/dropdownPositioning.js +13 -0
  307. package/fe/packages/ui/react/components/Skeleton/Skeleton.d.ts +0 -15
  308. package/fe/packages/ui/react/components/Skeleton/Skeleton.js +3 -3
  309. package/fe/packages/ui/react/components/Switch/Switch.js +3 -1
  310. package/fe/packages/ui/react/components/TableSearch/TableSearch.d.ts +5 -41
  311. package/fe/packages/ui/react/components/TableSearch/TableSearch.js +21 -22
  312. package/fe/packages/ui/react/components/TableSearch/lang.js +5 -14
  313. package/fe/packages/ui/react/components/Textarea/Textarea.d.ts +21 -0
  314. package/fe/packages/ui/react/components/Textarea/Textarea.js +36 -0
  315. package/fe/packages/ui/react/components/Textarea/index.d.ts +2 -0
  316. package/fe/packages/ui/react/components/Textarea/index.js +1 -0
  317. package/fe/packages/ui/react/components/Tooltip/Tooltip.d.ts +9 -0
  318. package/fe/packages/ui/react/components/Tooltip/Tooltip.js +71 -0
  319. package/fe/packages/ui/react/components/Tooltip/index.d.ts +2 -0
  320. package/fe/packages/ui/react/components/Tooltip/index.js +1 -0
  321. package/fe/packages/ui/react/components/{TreeSelect.d.ts → TreeSelect/TreeSelect.d.ts} +0 -6
  322. package/fe/packages/ui/react/components/{TreeSelect.js → TreeSelect/TreeSelect.js} +9 -17
  323. package/fe/packages/ui/react/components/TreeSelect/index.d.ts +2 -0
  324. package/fe/packages/ui/react/components/TreeSelect/index.js +1 -0
  325. package/fe/packages/ui/react/components/Upload/ImageUpload.js +18 -6
  326. package/fe/packages/ui/react/components/Upload/Upload.d.ts +0 -27
  327. package/fe/packages/ui/react/components/Upload/Upload.js +2 -1
  328. package/fe/packages/ui/react/components/{breadcrumb.js → breadcrumb/breadcrumb.js} +15 -21
  329. package/fe/packages/ui/react/components/breadcrumb/index.d.ts +2 -0
  330. package/fe/packages/ui/react/components/breadcrumb/index.js +1 -0
  331. package/fe/packages/ui/react/components/hooks/useDropdownPositioning.d.ts +43 -0
  332. package/fe/packages/ui/react/components/hooks/useDropdownPositioning.js +123 -0
  333. package/fe/packages/ui/react/components/hooks/useInputController.d.ts +0 -3
  334. package/fe/packages/ui/react/components/hooks/useInputController.js +0 -7
  335. package/fe/packages/ui/react/components/index.d.ts +7 -1
  336. package/fe/packages/ui/react/components/index.js +7 -1
  337. package/fe/packages/ui/react/components/table/index.d.ts +2 -0
  338. package/fe/packages/ui/react/components/table/index.js +1 -0
  339. package/fe/packages/ui/react/components/table/table.js +20 -0
  340. package/fe/packages/ui/react/components/testPage/MenuTestPage.d.ts +2 -0
  341. package/fe/packages/ui/react/components/testPage/MenuTestPage.js +101 -0
  342. package/fe/packages/ui/react/components/testPage/index.js +251 -81
  343. package/fe/packages/ui/react/hooks/useExecuteOnce.d.ts +12 -0
  344. package/fe/packages/ui/react/hooks/useExecuteOnce.js +36 -0
  345. package/fe/packages/ui/react/hooks/useInit.d.ts +1 -1
  346. package/fe/packages/ui/react/hooks/useInit.js +1 -1
  347. package/fe/packages/ui/react/hooks/useLanguage.d.ts +1 -6
  348. package/fe/packages/ui/react/hooks/useRefState.d.ts +18 -0
  349. package/fe/packages/ui/react/hooks/useRefState.js +28 -0
  350. package/fe/packages/ui/react/hooks/useWatch.d.ts +15 -0
  351. package/fe/packages/ui/react/hooks/useWatch.js +87 -0
  352. package/fe/packages/ui/react/hooks/useWatch.test.d.ts +2 -0
  353. package/fe/packages/ui/react/hooks/useWatch.test.js +22 -0
  354. package/fe/packages/ui/react/i18n/I18nProvider.d.ts +13 -0
  355. package/fe/packages/ui/react/i18n/I18nProvider.js +25 -0
  356. package/fe/packages/ui/react/i18n/index.d.ts +4 -0
  357. package/fe/packages/ui/react/i18n/index.js +3 -0
  358. package/fe/packages/ui/react/i18n/useI18n.d.ts +9 -0
  359. package/fe/packages/ui/react/i18n/useI18n.js +14 -0
  360. package/fe/packages/ui/react/index.css +238 -0
  361. package/fe/packages/ui/react/index.d.ts +2 -0
  362. package/fe/packages/ui/react/index.js +2 -2
  363. package/fe/packages/ui/react/lib/createStoreHook.d.ts +9 -0
  364. package/fe/packages/ui/react/lib/createStoreHook.js +6 -0
  365. package/fe/packages/ui/react/lib/export.d.ts +2 -46
  366. package/fe/packages/ui/react/lib/export.js +0 -40
  367. package/fe/packages/ui/react/lib/utils.d.ts +0 -24
  368. package/fe/packages/ui/react/lib/utils.js +0 -25
  369. package/fe/packages/ui/react/stores/breadcrumb.js +0 -2
  370. package/fe/packages/ui/react/stores/language.d.ts +3 -12
  371. package/fe/packages/ui/react/stores/language.js +2 -51
  372. package/fe/typings/type.d.ts +5 -0
  373. package/fe/typings/type.js +1 -0
  374. package/package.json +14 -2
  375. package/types/app/controller/base.d.ts +3 -3
  376. package/types/app/router/view.d.ts +2 -3
  377. package/types/app/service/project.d.ts +29 -4
  378. package/types/app/type.d.ts +1 -0
  379. package/types/app/typings.d.ts +12 -21
  380. package/types/bundler/defaultAlias.d.ts +3 -0
  381. package/types/bundler/utils.d.ts +1 -1
  382. package/types/config/config.default.d.ts +14 -0
  383. package/types/packages/common/LRUCache.d.ts +1 -0
  384. package/types/packages/common/array/index.d.ts +6 -0
  385. package/types/packages/common/cache/LRUCache.d.ts +12 -0
  386. package/types/packages/common/cache/index.d.ts +1 -0
  387. package/types/packages/common/guards/index.d.ts +8 -0
  388. package/types/packages/common/i18n/default.d.ts +86 -0
  389. package/types/packages/common/i18n/en-US.d.ts +86 -0
  390. package/types/packages/common/i18n/index.d.ts +18 -0
  391. package/types/packages/common/i18n/locales.d.ts +7 -0
  392. package/types/packages/common/i18n/types.d.ts +46 -0
  393. package/types/packages/common/index.d.ts +9 -0
  394. package/types/packages/common/log/index.d.ts +32 -0
  395. package/types/packages/common/number/index.d.ts +2 -0
  396. package/types/packages/common/object/filterEmpty.d.ts +2 -0
  397. package/types/packages/common/object/filtereEmpty.d.ts +1 -0
  398. package/types/packages/common/object/index.d.ts +4 -0
  399. package/types/packages/common/string/index.d.ts +3 -0
  400. package/types/packages/common/types/index.d.ts +3 -0
  401. package/types/packages/core/index.d.ts +1 -1
  402. package/types/packages/core/loader/router.d.ts +1 -1
  403. package/types/packages/core/types.d.ts +12 -3
  404. package/fe/packages/ui/react/components/ConfirmDialog.js +0 -9
  405. package/fe/packages/ui/react/components/Dropdown.d.ts +0 -16
  406. package/fe/packages/ui/react/components/Dropdown.js +0 -54
  407. package/fe/packages/ui/react/components/Form/SchemeForm/data.d.ts +0 -51
  408. package/fe/packages/ui/react/components/Form/SchemeForm/index.d.ts +0 -152
  409. package/fe/packages/ui/react/components/Form/SchemeForm/index.js +0 -69
  410. package/fe/packages/ui/react/components/Textarea.d.ts +0 -59
  411. package/fe/packages/ui/react/components/Textarea.js +0 -35
  412. package/fe/packages/ui/react/components/Tooltip.d.ts +0 -25
  413. package/fe/packages/ui/react/components/Tooltip.js +0 -118
  414. package/fe/packages/ui/react/components/table.js +0 -20
  415. package/fe/packages/ui/react/locales/index.d.ts +0 -8
  416. package/fe/packages/ui/react/locales/index.js +0 -6
  417. /package/fe/packages/ui/react/components/{breadcrumb.d.ts → breadcrumb/breadcrumb.d.ts} +0 -0
  418. /package/fe/packages/ui/react/components/{table.d.ts → table/table.d.ts} +0 -0
@@ -1,17 +1,22 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { cn } from '../../lib/utils';
3
- import { format as formatDate, isValid, parse } from 'date-fns';
4
- import { Calendar as CalendarIcon, X } from 'lucide-react';
5
- import { forwardRef, useEffect, useMemo, useRef, useState } from 'react';
6
- import { Calendar } from './Calendar';
7
- import { ModeType } from './data';
8
- import { useDateLocale } from './LocaleContext';
2
+ import { cn } from "../../lib/utils";
3
+ import { format as formatDate, isValid, parse } from "date-fns";
4
+ import { Calendar as CalendarIcon, X } from "lucide-react";
5
+ import { forwardRef, useEffect, useMemo, useRef, useState } from "react";
6
+ import { Button } from "../Button";
7
+ import { Input } from "../Input";
8
+ import { Popup } from "../Popup";
9
+ import { useDropdownPositioning } from "../hooks/useDropdownPositioning";
10
+ import { Calendar } from "./Calendar";
11
+ import { ModeType } from "./data";
12
+ import { getDatePickerDropdownPosition } from "./dropdownPositioning";
13
+ import { useDateLocale } from "./LocaleContext";
9
14
  const formatValue = (val, format) => {
10
15
  if (!val)
11
- return '';
16
+ return "";
12
17
  if (val instanceof Date)
13
18
  return formatDate(val, format);
14
- if ('from' in val) {
19
+ if ("from" in val) {
15
20
  if (val.from && val.to) {
16
21
  return `${formatDate(val.from, format)} - ${formatDate(val.to, format)}`;
17
22
  }
@@ -19,27 +24,25 @@ const formatValue = (val, format) => {
19
24
  return formatDate(val.from, format);
20
25
  }
21
26
  }
22
- return '';
27
+ return "";
23
28
  };
24
29
  const formatDateValue = (val, format) => {
25
30
  if (!val)
26
- return '';
27
- /**
28
- * 将 DateBaseValue 转为 yyyy-MM-dd | [yyyy-MM-dd, yyyy-MM-dd]
29
- */
31
+ return "";
30
32
  if (val instanceof Date)
31
33
  return formatDate(val, format);
32
- if ('from' in val) {
34
+ if ("from" in val) {
33
35
  if (val.from && val.to) {
34
36
  return [formatDate(val.from, format), formatDate(val.to, format)];
35
37
  }
36
38
  }
37
- return '';
39
+ return "";
38
40
  };
39
- const DatePicker = forwardRef(({ mode = ModeType.Single, className, format: customFormat, placeholder, allowClear = true, disabled = false, showTime = false, value: pValue, defaultValue: pDefaultValue, onChange, disabledDate, locale: customLocale, quickRanges, }, ref) => {
41
+ const DatePicker = forwardRef((props, ref) => {
42
+ const { mode = ModeType.Single, className, format: customFormat, placeholder, allowClear = true, disabled = false, showTime = false, value: pValue, defaultValue: pDefaultValue, onChange, disabledDate, locale: customLocale, quickRanges, getPopupContainer, } = props;
43
+ const isControlled = Object.prototype.hasOwnProperty.call(props, "value");
40
44
  const contextLocale = useDateLocale();
41
45
  const locale = { ...contextLocale, ...customLocale };
42
- // 如果没有传入 placeholder,根据模式自动选择
43
46
  const finalPlaceholder = placeholder ||
44
47
  (showTime
45
48
  ? mode === ModeType.Range
@@ -48,23 +51,16 @@ const DatePicker = forwardRef(({ mode = ModeType.Single, className, format: cust
48
51
  : mode === ModeType.Range
49
52
  ? locale.placeholderRange
50
53
  : locale.placeholder);
51
- // Auto-adjust format based on showTime
52
- const format = customFormat || (showTime ? 'yyyy-MM-dd HH:mm' : 'yyyy-MM-dd');
54
+ const format = customFormat || (showTime ? "yyyy-MM-dd HH:mm" : "yyyy-MM-dd");
53
55
  const { value, defaultValue } = useMemo(() => {
54
- /**
55
- * 将 DateChangeStrValue 转为 Dates
56
- */
57
56
  const convertValue = (val) => {
58
57
  if (!val)
59
58
  return undefined;
60
- // Already a Date object
61
59
  if (val instanceof Date)
62
60
  return val;
63
- // Already a DateRange object
64
- if (typeof val === 'object' && 'from' in val)
61
+ if (typeof val === "object" && "from" in val)
65
62
  return val;
66
- // String value - single date
67
- if (typeof val === 'string') {
63
+ if (typeof val === "string") {
68
64
  try {
69
65
  const parsed = parse(val, format, new Date());
70
66
  return isValid(parsed) ? parsed : undefined;
@@ -73,10 +69,8 @@ const DatePicker = forwardRef(({ mode = ModeType.Single, className, format: cust
73
69
  return undefined;
74
70
  }
75
71
  }
76
- // date range
77
72
  if (Array.isArray(val)) {
78
- // string
79
- if (typeof val[0] === 'string' && typeof val[1] === 'string') {
73
+ if (typeof val[0] === "string" && typeof val[1] === "string") {
80
74
  try {
81
75
  const from = parse(val[0], format, new Date());
82
76
  const to = parse(val[1], format, new Date());
@@ -97,60 +91,63 @@ const DatePicker = forwardRef(({ mode = ModeType.Single, className, format: cust
97
91
  defaultValue: convertValue(pDefaultValue),
98
92
  };
99
93
  }, [pDefaultValue, pValue, format]);
100
- const [selectedDate, setSelectedDate] = useState(value || defaultValue);
94
+ const initialValue = isControlled ? value : (value || defaultValue);
95
+ const [selectedDate, setSelectedDate] = useState(initialValue);
101
96
  const [isOpen, setIsOpen] = useState(false);
102
- const [inputValue, setInputValue] = useState(formatValue(value || defaultValue, format));
97
+ const [inputValue, setInputValue] = useState(formatValue(initialValue, format));
103
98
  const [isHover, setIsHover] = useState(false);
104
99
  const containerRef = useRef(null);
100
+ const dropdownContentRef = useRef(null);
105
101
  const inputRef = useRef(null);
106
- // 同步外部 value 变化
102
+ const rangeDraftRef = useRef(false);
103
+ const positioning = useDropdownPositioning({
104
+ open: isOpen,
105
+ anchorRef: containerRef,
106
+ contentRef: dropdownContentRef,
107
+ placement: "bottom-start",
108
+ offset: 8,
109
+ matchAnchorWidth: false,
110
+ strategy: getDatePickerDropdownPosition,
111
+ });
107
112
  useEffect(() => {
108
- if (value !== undefined) {
109
- // eslint-disable-next-line react-hooks/set-state-in-effect
110
- setSelectedDate(value);
111
- setInputValue(formatValue(value, format));
113
+ if (!isControlled)
114
+ return;
115
+ if (mode === ModeType.Range && rangeDraftRef.current && value === undefined) {
116
+ return;
112
117
  }
113
- }, [value, format]);
114
- // 点击外部关闭
115
- useEffect(() => {
116
- const handleClickOutside = (event) => {
117
- if (containerRef.current && !containerRef.current.contains(event.target)) {
118
- setIsOpen(false);
119
- }
120
- };
121
- if (isOpen) {
122
- document.addEventListener('mousedown', handleClickOutside);
123
- return () => document.removeEventListener('mousedown', handleClickOutside);
124
- }
125
- else {
126
- return () => { };
118
+ setSelectedDate(value);
119
+ setInputValue(formatValue(value, format));
120
+ if (mode !== ModeType.Range || !value || !('from' in value) || value.to) {
121
+ rangeDraftRef.current = false;
127
122
  }
128
- }, [isOpen]);
123
+ }, [isControlled, mode, value, format]);
129
124
  const handleSelect = (date) => {
130
125
  const newDate = date;
131
126
  if (mode === ModeType.Range) {
132
- // 如果是范围选择,只有当 from to 都存在时才关闭
133
- if (date && 'from' in date && 'to' in date && date.from && date.to) {
127
+ if (date && "from" in date && "to" in date && date.from && date.to) {
134
128
  setIsOpen(false);
135
129
  }
136
130
  }
137
131
  else {
138
- // Single mode: always close popup when onChange is triggered
139
- // (In showTime mode, this only happens when user clicks confirm button)
140
132
  setIsOpen(false);
141
133
  }
142
- setSelectedDate(newDate);
143
- setInputValue(formatValue(newDate, format));
144
- // 只在非受控模式下更新内部状态
145
- if (value === undefined) {
134
+ if (mode === ModeType.Range || !isControlled) {
146
135
  setSelectedDate(newDate);
136
+ setInputValue(formatValue(newDate, format));
147
137
  }
138
+ rangeDraftRef.current =
139
+ mode === ModeType.Range && !(newDate &&
140
+ typeof newDate === 'object' &&
141
+ 'from' in newDate &&
142
+ newDate.from &&
143
+ newDate.to);
148
144
  onChange?.(formatDateValue(newDate, format), newDate);
149
145
  };
150
146
  const handleClear = (e) => {
151
147
  e.stopPropagation();
148
+ rangeDraftRef.current = false;
152
149
  setSelectedDate(undefined);
153
- setInputValue('');
150
+ setInputValue("");
154
151
  onChange?.(undefined, undefined);
155
152
  inputRef.current?.focus();
156
153
  };
@@ -161,18 +158,25 @@ const DatePicker = forwardRef(({ mode = ModeType.Single, className, format: cust
161
158
  try {
162
159
  const parsedDate = parse(newValue, format, new Date());
163
160
  if (isValid(parsedDate)) {
164
- if (value === undefined)
161
+ if (!isControlled)
165
162
  setSelectedDate(parsedDate);
166
163
  onChange?.(formatDateValue(parsedDate, format), parsedDate);
167
164
  }
168
165
  }
169
166
  catch {
170
- // ignore invalid date
171
167
  }
172
168
  }
173
169
  };
174
170
  const showClearIcon = allowClear && selectedDate && !disabled && isHover;
175
- return (_jsx("div", { ref: ref, className: cn('relative w-full', mode === ModeType.Range ? 'min-w-[255px]' : '', className), children: _jsxs("div", { ref: containerRef, className: "relative", children: [_jsxs("div", { className: cn('flex items-center w-full rounded-lg px-4 py-3 text-sm', 'border transition-colors duration-200', 'bg-background cursor-pointer', disabled && 'cursor-not-allowed bg-muted border-border text-muted-foreground', !disabled && !selectedDate && !isOpen && 'border-border', !disabled && (selectedDate || isOpen) && 'border-theme'), onClick: () => !disabled && setIsOpen(!isOpen), onMouseEnter: () => setIsHover(true), onMouseLeave: () => setIsHover(false), children: [_jsx("input", { ref: inputRef, type: "text", value: inputValue, onChange: handleInputChange, placeholder: finalPlaceholder, disabled: disabled, readOnly: mode === ModeType.Range, className: cn('flex-1 bg-transparent border-0 outline-none', 'text-sm text-foreground placeholder:text-muted-foreground', disabled && 'cursor-not-allowed', mode === ModeType.Range && !disabled && 'cursor-pointer caret-transparent') }), showClearIcon ? (_jsx("button", { type: "button", onClick: handleClear, title: locale.clear, "aria-label": locale.clear, className: cn('ml-2 flex items-center justify-center', 'w-5 h-5 rounded-full', 'bg-muted hover:bg-muted/80', 'text-foreground transition-colors'), children: _jsx(X, { size: 12 }) })) : (_jsx(CalendarIcon, { size: 16, className: "ml-2 text-muted-foreground" }))] }), isOpen && !disabled && (_jsx("div", { className: cn('absolute z-50 mt-2', 'bg-background border border-border rounded-lg shadow-lg', 'overflow-hidden'), children: _jsx(Calendar, { mode: mode, value: selectedDate || null, onChange: handleSelect, disabledDate: disabledDate, showTime: showTime, locale: locale, quickRanges: quickRanges }) }))] }) }));
171
+ return (_jsx("div", { ref: ref, className: cn("tc-ui-date-picker relative w-full", mode === ModeType.Range ? "min-w-[255px]" : "", className), children: _jsxs("div", { ref: containerRef, className: "relative", children: [_jsxs("div", { className: cn("flex items-center w-full rounded-lg px-4 py-3 text-sm", "border transition-colors duration-200", "bg-background cursor-pointer", disabled &&
172
+ "cursor-not-allowed bg-muted border-border text-muted-foreground", !disabled && !selectedDate && !isOpen && "border-border", !disabled && (selectedDate || isOpen) && "border-theme"), onClick: () => !disabled && setIsOpen(!isOpen), onMouseEnter: () => setIsHover(true), onMouseLeave: () => setIsHover(false), children: [_jsx(Input, { ref: inputRef, type: "text", value: inputValue, onChange: (_, e) => handleInputChange(e), placeholder: finalPlaceholder, disabled: disabled, readOnly: mode === ModeType.Range, className: "flex-1", inputClassName: cn("flex-1 rounded-none border-0 bg-transparent px-0 py-0 outline-none", "text-sm text-foreground placeholder:text-muted-foreground", disabled && "cursor-not-allowed", mode === ModeType.Range &&
173
+ !disabled &&
174
+ "cursor-pointer caret-transparent") }), showClearIcon ? (_jsx(Button, { variant: "text", type: "button", onClick: handleClear, title: locale.clear, "aria-label": locale.clear, className: cn("ml-2 flex items-center justify-center", "w-5 h-5 rounded-full", "bg-muted hover:bg-muted/80", "text-foreground transition-colors", "cursor-pointer"), children: _jsx(X, { size: 12 }) })) : (_jsx(CalendarIcon, { size: 16, className: "ml-2 text-muted-foreground" }))] }), _jsx(Popup, { open: isOpen && !disabled, anchorRef: containerRef, contentRef: dropdownContentRef, positioning: positioning, keepMounted: true, onOpenChange: (nextOpen) => {
175
+ setIsOpen(nextOpen);
176
+ if (!nextOpen) {
177
+ rangeDraftRef.current = false;
178
+ }
179
+ }, className: cn("overflow-hidden"), container: getPopupContainer?.(), children: _jsx("div", { ref: dropdownContentRef, children: _jsx(Calendar, { mode: mode, value: selectedDate || null, onChange: handleSelect, disabledDate: disabledDate, showTime: showTime, locale: locale, quickRanges: quickRanges }) }) })] }) }));
176
180
  });
177
- DatePicker.displayName = 'DatePicker';
181
+ DatePicker.displayName = "DatePicker";
178
182
  export { DatePicker };
@@ -1,6 +1,2 @@
1
- /**
2
- * Hook for accessing the current Date component locale.
3
- * Backed by Zustand, so no React Context is required.
4
- */
5
1
  export declare const useDateLocale: () => import("./locales").DateLocaleConfig;
6
2
  //# sourceMappingURL=LocaleContext.d.ts.map
@@ -1,8 +1,4 @@
1
1
  import { useDateLocaleStore } from './dateLocaleStore';
2
- /**
3
- * Hook for accessing the current Date component locale.
4
- * Backed by Zustand, so no React Context is required.
5
- */
6
2
  export const useDateLocale = () => {
7
3
  return useDateLocaleStore((state) => state.locale);
8
4
  };
@@ -4,16 +4,5 @@ export interface DateLocaleProviderProps {
4
4
  locale?: DateLocaleConfig;
5
5
  children: ReactNode;
6
6
  }
7
- /**
8
- * Date 组件文案配置 Provider
9
- * 用于全局设置 Date 组件的文案
10
- *
11
- * @example
12
- * ```tsx
13
- * <DateLocaleProvider locale={customLocale}>
14
- * <App />
15
- * </DateLocaleProvider>
16
- * ```
17
- */
18
7
  export declare function DateLocaleProvider({ locale, children }: DateLocaleProviderProps): import("react/jsx-runtime").JSX.Element;
19
8
  //# sourceMappingURL=LocaleProvider.d.ts.map
@@ -2,17 +2,6 @@ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useEffect } from 'react';
3
3
  import { useDateLocaleStore } from './dateLocaleStore';
4
4
  import { defaultLocale } from './locales';
5
- /**
6
- * Date 组件文案配置 Provider
7
- * 用于全局设置 Date 组件的文案
8
- *
9
- * @example
10
- * ```tsx
11
- * <DateLocaleProvider locale={customLocale}>
12
- * <App />
13
- * </DateLocaleProvider>
14
- * ```
15
- */
16
5
  export function DateLocaleProvider({ locale = defaultLocale, children }) {
17
6
  const replaceLocale = useDateLocaleStore((state) => state.replaceLocale);
18
7
  const resetLocale = useDateLocaleStore((state) => state.resetLocale);
@@ -1,8 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { cn } from '../../lib/utils';
3
3
  import { ChevronDown, ChevronUp } from 'lucide-react';
4
+ import { Button } from '../Button';
5
+ import { Input } from '../Input';
4
6
  export function TimePicker({ value, onChange, className }) {
5
- // Derive time from value prop directly
6
7
  const hours = value?.getHours() ?? 0;
7
8
  const minutes = value?.getMinutes() ?? 0;
8
9
  const handleTimeChange = (newHours, newMinutes) => {
@@ -72,5 +73,5 @@ export function TimePicker({ value, onChange, className }) {
72
73
  }
73
74
  };
74
75
  const formatNumber = (num) => String(num).padStart(2, '0');
75
- return (_jsxs("div", { className: cn('flex items-center justify-center gap-3 py-3', className), children: [_jsxs("div", { className: "flex flex-col items-center gap-1", children: [_jsx("button", { type: "button", onClick: incrementHours, className: "p-1 hover:bg-muted rounded transition-colors text-muted-foreground hover:text-foreground", children: _jsx(ChevronUp, { size: 14 }) }), _jsx("input", { type: "text", value: formatNumber(hours), onChange: handleHoursInput, onKeyDown: handleHoursKeyDown, className: cn('w-12 h-9 text-center text-sm font-medium', 'border border-border rounded', 'bg-background text-foreground', 'focus:outline-none focus:border-theme', 'transition-colors'), maxLength: 2 }), _jsx("button", { type: "button", onClick: decrementHours, className: "p-1 hover:bg-muted rounded transition-colors text-muted-foreground hover:text-foreground", children: _jsx(ChevronDown, { size: 14 }) })] }), _jsx("div", { className: "text-lg font-medium text-foreground mb-1", children: ":" }), _jsxs("div", { className: "flex flex-col items-center gap-1", children: [_jsx("button", { type: "button", onClick: incrementMinutes, className: "p-1 hover:bg-muted rounded transition-colors text-muted-foreground hover:text-foreground", children: _jsx(ChevronUp, { size: 14 }) }), _jsx("input", { type: "text", value: formatNumber(minutes), onChange: handleMinutesInput, onKeyDown: handleMinutesKeyDown, className: cn('w-12 h-9 text-center text-sm font-medium', 'border border-border rounded', 'bg-background text-foreground', 'focus:outline-none focus:border-theme', 'transition-colors'), maxLength: 2 }), _jsx("button", { type: "button", onClick: decrementMinutes, className: "p-1 hover:bg-muted rounded transition-colors text-muted-foreground hover:text-foreground", children: _jsx(ChevronDown, { size: 14 }) })] })] }));
76
+ return (_jsxs("div", { className: cn('tc-ui-time-picker flex items-center justify-center gap-3 py-3', className), children: [_jsxs("div", { className: "flex flex-col items-center gap-1", children: [_jsx(Button, { variant: "text", type: "button", onClick: incrementHours, className: "p-1 hover:bg-muted rounded transition-colors text-muted-foreground hover:text-foreground", children: _jsx(ChevronUp, { size: 14 }) }), _jsx(Input, { type: "text", value: formatNumber(hours), onChange: (_, e) => handleHoursInput(e), onKeyDown: handleHoursKeyDown, className: "w-12", inputClassName: cn('w-12 h-9 px-0 py-0 text-center text-sm font-medium', 'border border-border rounded', 'bg-background text-foreground', 'focus:outline-none focus:border-theme', 'transition-colors'), maxLength: 2 }), _jsx(Button, { variant: "text", type: "button", onClick: decrementHours, className: "p-1 hover:bg-muted rounded transition-colors text-muted-foreground hover:text-foreground", children: _jsx(ChevronDown, { size: 14 }) })] }), _jsx("div", { className: "text-lg font-medium text-foreground mb-1", children: ":" }), _jsxs("div", { className: "flex flex-col items-center gap-1", children: [_jsx(Button, { variant: "text", type: "button", onClick: incrementMinutes, className: "p-1 hover:bg-muted rounded transition-colors text-muted-foreground hover:text-foreground", children: _jsx(ChevronUp, { size: 14 }) }), _jsx(Input, { type: "text", value: formatNumber(minutes), onChange: (_, e) => handleMinutesInput(e), onKeyDown: handleMinutesKeyDown, className: "w-12", inputClassName: cn('w-12 h-9 px-0 py-0 text-center text-sm font-medium', 'border border-border rounded', 'bg-background text-foreground', 'focus:outline-none focus:border-theme', 'transition-colors'), maxLength: 2 }), _jsx(Button, { variant: "text", type: "button", onClick: decrementMinutes, className: "p-1 hover:bg-muted rounded transition-colors text-muted-foreground hover:text-foreground", children: _jsx(ChevronDown, { size: 14 }) })] })] }));
76
77
  }
@@ -1,13 +1,7 @@
1
1
  import { type DateLocaleConfig } from './locales';
2
2
  type DateLocaleState = {
3
3
  locale: DateLocaleConfig;
4
- /**
5
- * Merge partial updates into the current locale.
6
- */
7
4
  setLocale: (patch: Partial<DateLocaleConfig>) => void;
8
- /**
9
- * Replace the locale entirely.
10
- */
11
5
  replaceLocale: (nextLocale: DateLocaleConfig) => void;
12
6
  resetLocale: () => void;
13
7
  };
@@ -0,0 +1,3 @@
1
+ import type { DropdownPositioningStrategy } from '../hooks/useDropdownPositioning';
2
+ export declare const getDatePickerDropdownPosition: DropdownPositioningStrategy;
3
+ //# sourceMappingURL=dropdownPositioning.d.ts.map
@@ -0,0 +1,12 @@
1
+ export const getDatePickerDropdownPosition = ({ anchorRect, contentRect, viewportHeight, offset, }) => {
2
+ const contentHeight = contentRect?.height ?? 360;
3
+ const spaceBelow = viewportHeight - anchorRect.bottom;
4
+ const spaceAbove = anchorRect.top;
5
+ const shouldFlipUp = spaceBelow < contentHeight && spaceAbove > spaceBelow;
6
+ return {
7
+ top: shouldFlipUp
8
+ ? anchorRect.top - contentHeight - offset
9
+ : anchorRect.bottom + offset,
10
+ left: anchorRect.left,
11
+ };
12
+ };
@@ -1,7 +1,3 @@
1
- /**
2
- * Date 组件文案配置
3
- * 支持外部修改文案内容
4
- */
5
1
  export interface DateLocaleConfig {
6
2
  placeholder: string;
7
3
  placeholderDateTime: string;
@@ -12,13 +8,8 @@ export interface DateLocaleConfig {
12
8
  startTime: string;
13
9
  endTime: string;
14
10
  confirm: string;
15
- /**
16
- * 范围模式 - 快捷选择面板标题
17
- */
11
+ monthFormat: string;
18
12
  quickRanges: string;
19
- /**
20
- * 范围模式 - 各快捷范围文案
21
- */
22
13
  quickRangeToday: string;
23
14
  quickRangeYesterday: string;
24
15
  quickRangeLast7Days: string;
@@ -27,16 +18,7 @@ export interface DateLocaleConfig {
27
18
  quickRangeLastYear: string;
28
19
  clear: string;
29
20
  }
30
- /**
31
- * 默认中文文案
32
- */
33
21
  export declare const zhCNLocale: DateLocaleConfig;
34
- /**
35
- * 默认英文文案
36
- */
37
22
  export declare const enUSLocale: DateLocaleConfig;
38
- /**
39
- * 默认使用中文文案
40
- */
41
23
  export declare const defaultLocale: DateLocaleConfig;
42
24
  //# sourceMappingURL=locales.d.ts.map
@@ -1,52 +1,12 @@
1
- /**
2
- * Date 组件文案配置
3
- * 支持外部修改文案内容
4
- */
5
- /**
6
- * 默认中文文案
7
- */
1
+ import { defaultEnglishResources, defaultLanguageResources } from '../../../../common/i18n';
2
+ const dateDefaultLocale = defaultLanguageResources.components.date;
3
+ const dateDefaultEnglishLocale = defaultEnglishResources.components.date;
8
4
  export const zhCNLocale = {
9
- placeholder: '请选择日期',
10
- placeholderDateTime: '请选择日期时间',
11
- placeholderRange: '选择日期范围',
12
- placeholderDateTimeRange: '选择日期时间范围',
13
- weekDays: ['日', '一', '二', '三', '四', '五', '六'],
14
- selectTime: '选择时间',
15
- startTime: '开始时间',
16
- endTime: '结束时间',
17
- confirm: '确认',
18
- quickRanges: '快速选择',
19
- quickRangeToday: '今天',
20
- quickRangeYesterday: '昨天',
21
- quickRangeLast7Days: '近7天',
22
- quickRangeLast30Days: '近30天',
23
- quickRangeThisMonth: '本月',
24
- quickRangeLastYear: '最近一年',
25
- clear: '清除',
5
+ ...dateDefaultLocale,
6
+ weekDays: [...dateDefaultLocale.weekDays],
26
7
  };
27
- /**
28
- * 默认英文文案
29
- */
30
8
  export const enUSLocale = {
31
- placeholder: 'Select date',
32
- placeholderDateTime: 'Select date and time',
33
- placeholderRange: 'Select date range',
34
- placeholderDateTimeRange: 'Select date and time range',
35
- weekDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
36
- selectTime: 'Select time',
37
- startTime: 'Start time',
38
- endTime: 'End time',
39
- confirm: 'Confirm',
40
- quickRanges: 'Quick ranges',
41
- quickRangeToday: 'Today',
42
- quickRangeYesterday: 'Yesterday',
43
- quickRangeLast7Days: 'Last 7 days',
44
- quickRangeLast30Days: 'Last 30 days',
45
- quickRangeThisMonth: 'This month',
46
- quickRangeLastYear: 'Last year',
47
- clear: 'Clear',
9
+ ...dateDefaultEnglishLocale,
10
+ weekDays: [...dateDefaultEnglishLocale.weekDays],
48
11
  };
49
- /**
50
- * 默认使用中文文案
51
- */
52
12
  export const defaultLocale = zhCNLocale;
@@ -0,0 +1,23 @@
1
+ import type { ReactNode } from 'react';
2
+ export type DrawerPlacement = 'top' | 'right' | 'bottom' | 'left';
3
+ export type DrawerProps = {
4
+ open?: boolean;
5
+ onClose?: () => void;
6
+ title?: ReactNode;
7
+ children?: ReactNode;
8
+ footer?: ReactNode;
9
+ className?: string;
10
+ contentClassName?: string;
11
+ mask?: boolean;
12
+ maskClosable?: boolean;
13
+ lockScroll?: boolean;
14
+ closable?: boolean;
15
+ placement?: DrawerPlacement;
16
+ width?: number | string;
17
+ height?: number | string;
18
+ zIndex?: number;
19
+ renderNode?: HTMLElement | (() => HTMLElement);
20
+ keyboard?: boolean;
21
+ };
22
+ export declare function Drawer({ open, onClose, title, children, footer, className, contentClassName, mask, maskClosable, lockScroll, closable, placement, width, height, renderNode, keyboard, zIndex, }: DrawerProps): import("react/jsx-runtime").JSX.Element;
23
+ //# sourceMappingURL=Drawer.d.ts.map
@@ -0,0 +1,100 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useI18n } from '../../i18n';
3
+ import { cn } from '../../lib/utils';
4
+ import { X } from 'lucide-react';
5
+ import { useEffect, useRef, useState } from 'react';
6
+ import { Button } from '../Button';
7
+ import { Overlay } from '../Overlay';
8
+ const DRAWER_ANIMATION_DURATION = 320;
9
+ const DRAWER_ANIMATION_EASING = 'cubic-bezier(0.22, 1, 0.36, 1)';
10
+ const getDrawerPositionClassName = (placement) => {
11
+ const positionClassNames = {
12
+ top: 'left-0 right-0 top-0',
13
+ right: 'bottom-0 right-0 top-0',
14
+ bottom: 'bottom-0 left-0 right-0',
15
+ left: 'bottom-0 left-0 top-0',
16
+ };
17
+ return positionClassNames[placement];
18
+ };
19
+ const getDrawerTransform = (placement, open) => {
20
+ if (open)
21
+ return 'translate3d(0, 0, 0)';
22
+ const transforms = {
23
+ top: 'translate3d(0, -100%, 0)',
24
+ right: 'translate3d(100%, 0, 0)',
25
+ bottom: 'translate3d(0, 100%, 0)',
26
+ left: 'translate3d(-100%, 0, 0)',
27
+ };
28
+ return transforms[placement];
29
+ };
30
+ const getDrawerSizeStyle = (placement, width, height) => {
31
+ const isHorizontal = placement === 'left' || placement === 'right';
32
+ const size = isHorizontal ? width : height;
33
+ const resolvedSize = typeof size === 'number' ? `${size}px` : size;
34
+ return isHorizontal ? { width: resolvedSize } : { height: resolvedSize };
35
+ };
36
+ export function Drawer({ open = false, onClose, title, children, footer, className, contentClassName, mask = true, maskClosable = true, lockScroll = true, closable = true, placement = 'right', width = 420, height = 360, renderNode, keyboard = true, zIndex = 1000, }) {
37
+ const t = useI18n();
38
+ const [mounted, setMounted] = useState(open);
39
+ const [visible, setVisible] = useState(false);
40
+ const animationFrameRef = useRef(undefined);
41
+ const secondAnimationFrameRef = useRef(undefined);
42
+ const closeTimerRef = useRef(undefined);
43
+ useEffect(() => {
44
+ if (animationFrameRef.current) {
45
+ cancelAnimationFrame(animationFrameRef.current);
46
+ animationFrameRef.current = undefined;
47
+ }
48
+ if (secondAnimationFrameRef.current) {
49
+ cancelAnimationFrame(secondAnimationFrameRef.current);
50
+ secondAnimationFrameRef.current = undefined;
51
+ }
52
+ if (closeTimerRef.current) {
53
+ clearTimeout(closeTimerRef.current);
54
+ closeTimerRef.current = undefined;
55
+ }
56
+ if (open) {
57
+ setMounted(true);
58
+ animationFrameRef.current = requestAnimationFrame(() => {
59
+ secondAnimationFrameRef.current = requestAnimationFrame(() => {
60
+ setVisible(true);
61
+ secondAnimationFrameRef.current = undefined;
62
+ });
63
+ animationFrameRef.current = undefined;
64
+ });
65
+ return () => {
66
+ if (animationFrameRef.current) {
67
+ cancelAnimationFrame(animationFrameRef.current);
68
+ animationFrameRef.current = undefined;
69
+ }
70
+ if (secondAnimationFrameRef.current) {
71
+ cancelAnimationFrame(secondAnimationFrameRef.current);
72
+ secondAnimationFrameRef.current = undefined;
73
+ }
74
+ };
75
+ }
76
+ setVisible(false);
77
+ closeTimerRef.current = setTimeout(() => {
78
+ setMounted(false);
79
+ closeTimerRef.current = undefined;
80
+ }, DRAWER_ANIMATION_DURATION);
81
+ return () => {
82
+ if (closeTimerRef.current) {
83
+ clearTimeout(closeTimerRef.current);
84
+ closeTimerRef.current = undefined;
85
+ }
86
+ };
87
+ }, [open]);
88
+ const handleContentClick = (e) => {
89
+ e.stopPropagation();
90
+ };
91
+ const drawerStyle = {
92
+ ...getDrawerSizeStyle(placement, width, height),
93
+ transform: getDrawerTransform(placement, visible),
94
+ transition: `transform ${DRAWER_ANIMATION_DURATION}ms ${DRAWER_ANIMATION_EASING}`,
95
+ willChange: 'transform',
96
+ };
97
+ return (_jsx(Overlay, { open: mounted, visible: visible, onClose: onClose, mask: mask, maskClosable: maskClosable, lockScroll: lockScroll, keyboard: keyboard, closable: closable, renderNode: renderNode, zIndex: zIndex, className: "tc-ui-drawer", style: {
98
+ transition: `opacity ${DRAWER_ANIMATION_DURATION}ms ${DRAWER_ANIMATION_EASING}`,
99
+ }, children: _jsxs("div", { className: cn('fixed bg-background shadow-lg', 'flex flex-col', getDrawerPositionClassName(placement), placement === 'top' || placement === 'bottom' ? 'max-h-[90vh]' : 'max-w-[90vw]', className), style: drawerStyle, onClick: handleContentClick, children: [(title || closable) && (_jsxs("div", { className: "flex items-center justify-between px-6 py-4 border-border", children: [title && _jsx("div", { className: "text-lg font-semibold text-foreground", children: title }), closable && (_jsx(Button, { variant: "text", type: "button", onClick: onClose, "aria-label": t('components.modal.close'), className: cn('ml-auto p-1 rounded-md', 'text-muted-foreground hover:text-foreground', 'hover:bg-muted', 'transition-colors', 'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2'), children: _jsx(X, { size: 20 }) }))] })), _jsx("div", { className: cn('flex-1 overflow-auto px-6 py-4', contentClassName), children: children }), footer && _jsx("div", { className: "px-6 py-4 border-border", children: footer })] }) }));
100
+ }
@@ -0,0 +1,3 @@
1
+ export { Drawer } from './Drawer';
2
+ export type { DrawerPlacement, DrawerProps } from './Drawer';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ export { Drawer } from './Drawer';
@@ -0,0 +1,24 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface DropdownBaseItem {
3
+ key: string;
4
+ label: ReactNode;
5
+ icon?: ReactNode;
6
+ danger?: boolean;
7
+ onClick?: () => void;
8
+ }
9
+ export interface DropdownRenderItem {
10
+ render: (item: DropdownRenderItem, context: {
11
+ onClick: () => void;
12
+ close: () => void;
13
+ }) => ReactNode;
14
+ }
15
+ export type DropdownItem = Omit<DropdownBaseItem, 'render'> | DropdownRenderItem;
16
+ export interface DropdownProps {
17
+ items: DropdownItem[];
18
+ children: ReactNode;
19
+ className?: string;
20
+ placement?: 'bottom-end' | 'bottom-start';
21
+ getPopupContainer?: () => HTMLElement;
22
+ }
23
+ export declare function Dropdown({ items, children, className, placement, getPopupContainer }: DropdownProps): import("react/jsx-runtime").JSX.Element;
24
+ //# sourceMappingURL=Dropdown.d.ts.map
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from '../../lib/utils';
3
+ import { Fragment, useCallback, useRef, useState } from 'react';
4
+ import { Button } from '../Button';
5
+ import { Popup } from '../Popup';
6
+ const isDropdownRenderItem = (item) => 'render' in item;
7
+ export function Dropdown({ items, children, className, placement = 'bottom-end', getPopupContainer }) {
8
+ const [isOpen, setIsOpen] = useState(false);
9
+ const triggerRef = useRef(null);
10
+ const handleToggle = useCallback(() => {
11
+ setIsOpen((prev) => !prev);
12
+ }, []);
13
+ const handleItemClick = useCallback((item) => {
14
+ if (!isDropdownRenderItem(item)) {
15
+ item.onClick?.();
16
+ }
17
+ setIsOpen(false);
18
+ }, []);
19
+ return (_jsxs(_Fragment, { children: [_jsx("div", { ref: triggerRef, className: cn('tc-ui-dropdown relative inline-block', className), children: _jsx("div", { onClick: handleToggle, children: children }) }), _jsx(Popup, { open: isOpen, anchorRef: triggerRef, placement: placement, onOpenChange: setIsOpen, container: getPopupContainer?.(), className: cn('min-w-10', 'py-1'), children: items.map((item, index) => {
20
+ const onClick = () => handleItemClick(item);
21
+ const close = () => setIsOpen(false);
22
+ const key = isDropdownRenderItem(item) ? index : item.key;
23
+ if (isDropdownRenderItem(item)) {
24
+ return _jsx(Fragment, { children: item.render(item, { onClick, close }) }, key);
25
+ }
26
+ return (_jsx(Button, { type: "button", variant: "text", state: item.danger ? 'danger' : undefined, onClick: onClick, className: cn('flex w-full items-center gap-2 px-4 py-2.5 text-left text-sm transition-colors', item.danger ? 'text-red-600 hover:bg-red-50' : 'text-gray-700 hover:bg-gray-50'), children: _jsxs(_Fragment, { children: [item.icon && _jsx("span", { className: "flex-shrink-0", children: item.icon }), _jsx("span", { children: item.label })] }) }, key));
27
+ }) })] }));
28
+ }
@@ -0,0 +1,2 @@
1
+ export * from './Dropdown';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ export * from './Dropdown';