@gcsa/console-react 0.1.0

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 (394) hide show
  1. package/dist/ConsoleHeader.d.ts +9 -0
  2. package/dist/ConsoleHeader.js +21 -0
  3. package/dist/ConsoleHeader.js.map +1 -0
  4. package/dist/ConsolePage.d.ts +8 -0
  5. package/dist/ConsolePage.js +14 -0
  6. package/dist/ConsolePage.js.map +1 -0
  7. package/dist/ConsoleShell.d.ts +23 -0
  8. package/dist/ConsoleShell.js +133 -0
  9. package/dist/ConsoleShell.js.map +1 -0
  10. package/dist/ConsoleSidebar.d.ts +11 -0
  11. package/dist/ConsoleSidebar.js +52 -0
  12. package/dist/ConsoleSidebar.js.map +1 -0
  13. package/dist/GcsaAlert.d.ts +9 -0
  14. package/dist/GcsaAlert.js +24 -0
  15. package/dist/GcsaAlert.js.map +1 -0
  16. package/dist/GcsaAutoComplete.d.ts +15 -0
  17. package/dist/GcsaAutoComplete.js +106 -0
  18. package/dist/GcsaAutoComplete.js.map +1 -0
  19. package/dist/GcsaAvatar.d.ts +8 -0
  20. package/dist/GcsaAvatar.js +13 -0
  21. package/dist/GcsaAvatar.js.map +1 -0
  22. package/dist/GcsaBadge.d.ts +7 -0
  23. package/dist/GcsaBadge.js +8 -0
  24. package/dist/GcsaBadge.js.map +1 -0
  25. package/dist/GcsaBrandMark.d.ts +4 -0
  26. package/dist/GcsaBrandMark.js +21 -0
  27. package/dist/GcsaBrandMark.js.map +1 -0
  28. package/dist/GcsaBreadcrumb.d.ts +9 -0
  29. package/dist/GcsaBreadcrumb.js +20 -0
  30. package/dist/GcsaBreadcrumb.js.map +1 -0
  31. package/dist/GcsaButton.d.ts +8 -0
  32. package/dist/GcsaButton.js +38 -0
  33. package/dist/GcsaButton.js.map +1 -0
  34. package/dist/GcsaCalendar.d.ts +11 -0
  35. package/dist/GcsaCalendar.js +35 -0
  36. package/dist/GcsaCalendar.js.map +1 -0
  37. package/dist/GcsaCard.d.ts +8 -0
  38. package/dist/GcsaCard.js +11 -0
  39. package/dist/GcsaCard.js.map +1 -0
  40. package/dist/GcsaCascader.d.ts +14 -0
  41. package/dist/GcsaCascader.js +91 -0
  42. package/dist/GcsaCascader.js.map +1 -0
  43. package/dist/GcsaChatPanel.d.ts +43 -0
  44. package/dist/GcsaChatPanel.js +180 -0
  45. package/dist/GcsaChatPanel.js.map +1 -0
  46. package/dist/GcsaCheckbox.d.ts +11 -0
  47. package/dist/GcsaCheckbox.js +45 -0
  48. package/dist/GcsaCheckbox.js.map +1 -0
  49. package/dist/GcsaCollapse.d.ts +16 -0
  50. package/dist/GcsaCollapse.js +20 -0
  51. package/dist/GcsaCollapse.js.map +1 -0
  52. package/dist/GcsaConfigProvider.d.ts +13 -0
  53. package/dist/GcsaConfigProvider.js +68 -0
  54. package/dist/GcsaConfigProvider.js.map +1 -0
  55. package/dist/GcsaDataTable.d.ts +119 -0
  56. package/dist/GcsaDataTable.js +508 -0
  57. package/dist/GcsaDataTable.js.map +1 -0
  58. package/dist/GcsaDatePicker.d.ts +16 -0
  59. package/dist/GcsaDatePicker.js +211 -0
  60. package/dist/GcsaDatePicker.js.map +1 -0
  61. package/dist/GcsaDateRangePicker.d.ts +17 -0
  62. package/dist/GcsaDateRangePicker.js +222 -0
  63. package/dist/GcsaDateRangePicker.js.map +1 -0
  64. package/dist/GcsaDateTimePicker.d.ts +13 -0
  65. package/dist/GcsaDateTimePicker.js +300 -0
  66. package/dist/GcsaDateTimePicker.js.map +1 -0
  67. package/dist/GcsaDescriptions.d.ts +9 -0
  68. package/dist/GcsaDescriptions.js +11 -0
  69. package/dist/GcsaDescriptions.js.map +1 -0
  70. package/dist/GcsaDivider.d.ts +4 -0
  71. package/dist/GcsaDivider.js +8 -0
  72. package/dist/GcsaDivider.js.map +1 -0
  73. package/dist/GcsaDrawer.d.ts +15 -0
  74. package/dist/GcsaDrawer.js +68 -0
  75. package/dist/GcsaDrawer.js.map +1 -0
  76. package/dist/GcsaDropdown.d.ts +20 -0
  77. package/dist/GcsaDropdown.js +46 -0
  78. package/dist/GcsaDropdown.js.map +1 -0
  79. package/dist/GcsaEmpty.d.ts +9 -0
  80. package/dist/GcsaEmpty.js +16 -0
  81. package/dist/GcsaEmpty.js.map +1 -0
  82. package/dist/GcsaField.d.ts +11 -0
  83. package/dist/GcsaField.js +26 -0
  84. package/dist/GcsaField.js.map +1 -0
  85. package/dist/GcsaForm.d.ts +13 -0
  86. package/dist/GcsaForm.js +60 -0
  87. package/dist/GcsaForm.js.map +1 -0
  88. package/dist/GcsaFormField.d.ts +16 -0
  89. package/dist/GcsaFormField.js +39 -0
  90. package/dist/GcsaFormField.js.map +1 -0
  91. package/dist/GcsaIcon.d.ts +7 -0
  92. package/dist/GcsaIcon.js +17 -0
  93. package/dist/GcsaIcon.js.map +1 -0
  94. package/dist/GcsaImagePreview.d.ts +8 -0
  95. package/dist/GcsaImagePreview.js +18 -0
  96. package/dist/GcsaImagePreview.js.map +1 -0
  97. package/dist/GcsaInput.d.ts +13 -0
  98. package/dist/GcsaInput.js +76 -0
  99. package/dist/GcsaInput.js.map +1 -0
  100. package/dist/GcsaInputGroup.d.ts +11 -0
  101. package/dist/GcsaInputGroup.js +27 -0
  102. package/dist/GcsaInputGroup.js.map +1 -0
  103. package/dist/GcsaInputNumber.d.ts +18 -0
  104. package/dist/GcsaInputNumber.js +108 -0
  105. package/dist/GcsaInputNumber.js.map +1 -0
  106. package/dist/GcsaLoading.d.ts +24 -0
  107. package/dist/GcsaLoading.js +101 -0
  108. package/dist/GcsaLoading.js.map +1 -0
  109. package/dist/GcsaLoadingMask.d.ts +8 -0
  110. package/dist/GcsaLoadingMask.js +39 -0
  111. package/dist/GcsaLoadingMask.js.map +1 -0
  112. package/dist/GcsaMarkdownRenderer.d.ts +6 -0
  113. package/dist/GcsaMarkdownRenderer.js +32 -0
  114. package/dist/GcsaMarkdownRenderer.js.map +1 -0
  115. package/dist/GcsaMenu.d.ts +16 -0
  116. package/dist/GcsaMenu.js +241 -0
  117. package/dist/GcsaMenu.js.map +1 -0
  118. package/dist/GcsaModal.d.ts +10 -0
  119. package/dist/GcsaModal.js +45 -0
  120. package/dist/GcsaModal.js.map +1 -0
  121. package/dist/GcsaMultiSelect.d.ts +23 -0
  122. package/dist/GcsaMultiSelect.js +149 -0
  123. package/dist/GcsaMultiSelect.js.map +1 -0
  124. package/dist/GcsaPagination.d.ts +17 -0
  125. package/dist/GcsaPagination.js +108 -0
  126. package/dist/GcsaPagination.js.map +1 -0
  127. package/dist/GcsaPopconfirm.d.ts +18 -0
  128. package/dist/GcsaPopconfirm.js +68 -0
  129. package/dist/GcsaPopconfirm.js.map +1 -0
  130. package/dist/GcsaPopover.d.ts +30 -0
  131. package/dist/GcsaPopover.js +65 -0
  132. package/dist/GcsaPopover.js.map +1 -0
  133. package/dist/GcsaPopoverClose.d.ts +6 -0
  134. package/dist/GcsaPopoverClose.js +9 -0
  135. package/dist/GcsaPopoverClose.js.map +1 -0
  136. package/dist/GcsaProgress.d.ts +5 -0
  137. package/dist/GcsaProgress.js +18 -0
  138. package/dist/GcsaProgress.js.map +1 -0
  139. package/dist/GcsaRadioGroup.d.ts +9 -0
  140. package/dist/GcsaRadioGroup.js +37 -0
  141. package/dist/GcsaRadioGroup.js.map +1 -0
  142. package/dist/GcsaResult.d.ts +9 -0
  143. package/dist/GcsaResult.js +14 -0
  144. package/dist/GcsaResult.js.map +1 -0
  145. package/dist/GcsaRow.d.ts +7 -0
  146. package/dist/GcsaRow.js +8 -0
  147. package/dist/GcsaRow.js.map +1 -0
  148. package/dist/GcsaSelect.d.ts +20 -0
  149. package/dist/GcsaSelect.js +117 -0
  150. package/dist/GcsaSelect.js.map +1 -0
  151. package/dist/GcsaSkeleton.d.ts +6 -0
  152. package/dist/GcsaSkeleton.js +19 -0
  153. package/dist/GcsaSkeleton.js.map +1 -0
  154. package/dist/GcsaSpace.d.ts +7 -0
  155. package/dist/GcsaSpace.js +14 -0
  156. package/dist/GcsaSpace.js.map +1 -0
  157. package/dist/GcsaSpin.d.ts +7 -0
  158. package/dist/GcsaSpin.js +16 -0
  159. package/dist/GcsaSpin.js.map +1 -0
  160. package/dist/GcsaStatistic.d.ts +8 -0
  161. package/dist/GcsaStatistic.js +11 -0
  162. package/dist/GcsaStatistic.js.map +1 -0
  163. package/dist/GcsaSteps.d.ts +10 -0
  164. package/dist/GcsaSteps.js +54 -0
  165. package/dist/GcsaSteps.js.map +1 -0
  166. package/dist/GcsaSwitch.d.ts +11 -0
  167. package/dist/GcsaSwitch.js +36 -0
  168. package/dist/GcsaSwitch.js.map +1 -0
  169. package/dist/GcsaTabs.d.ts +15 -0
  170. package/dist/GcsaTabs.js +39 -0
  171. package/dist/GcsaTabs.js.map +1 -0
  172. package/dist/GcsaTag.d.ts +7 -0
  173. package/dist/GcsaTag.js +9 -0
  174. package/dist/GcsaTag.js.map +1 -0
  175. package/dist/GcsaTextarea.d.ts +13 -0
  176. package/dist/GcsaTextarea.js +76 -0
  177. package/dist/GcsaTextarea.js.map +1 -0
  178. package/dist/GcsaTimePicker.d.ts +12 -0
  179. package/dist/GcsaTimePicker.js +221 -0
  180. package/dist/GcsaTimePicker.js.map +1 -0
  181. package/dist/GcsaTimeline.d.ts +5 -0
  182. package/dist/GcsaTimeline.js +19 -0
  183. package/dist/GcsaTimeline.js.map +1 -0
  184. package/dist/GcsaToastStack.d.ts +11 -0
  185. package/dist/GcsaToastStack.js +45 -0
  186. package/dist/GcsaToastStack.js.map +1 -0
  187. package/dist/GcsaTooltip.d.ts +17 -0
  188. package/dist/GcsaTooltip.js +43 -0
  189. package/dist/GcsaTooltip.js.map +1 -0
  190. package/dist/GcsaTransfer.d.ts +11 -0
  191. package/dist/GcsaTransfer.js +95 -0
  192. package/dist/GcsaTransfer.js.map +1 -0
  193. package/dist/GcsaTree.d.ts +17 -0
  194. package/dist/GcsaTree.js +38 -0
  195. package/dist/GcsaTree.js.map +1 -0
  196. package/dist/GcsaTypography.d.ts +8 -0
  197. package/dist/GcsaTypography.js +14 -0
  198. package/dist/GcsaTypography.js.map +1 -0
  199. package/dist/GcsaUpload.d.ts +24 -0
  200. package/dist/GcsaUpload.js +146 -0
  201. package/dist/GcsaUpload.js.map +1 -0
  202. package/dist/hooks/gcsaFormTypes.d.ts +7 -0
  203. package/dist/hooks/useDocumentThemeSync.d.ts +3 -0
  204. package/dist/hooks/useDocumentThemeSync.js +7 -0
  205. package/dist/hooks/useDocumentThemeSync.js.map +1 -0
  206. package/dist/hooks/useGcsaComponentSize.d.ts +5 -0
  207. package/dist/hooks/useGcsaComponentSize.js +21 -0
  208. package/dist/hooks/useGcsaComponentSize.js.map +1 -0
  209. package/dist/hooks/useGcsaFormField.d.ts +26 -0
  210. package/dist/hooks/useGcsaFormField.js +47 -0
  211. package/dist/hooks/useGcsaFormField.js.map +1 -0
  212. package/dist/hooks/useGcsaFormSchema.d.ts +7 -0
  213. package/dist/hooks/useGcsaFormSchema.js +6 -0
  214. package/dist/hooks/useGcsaFormSchema.js.map +1 -0
  215. package/dist/hooks/useGcsaLocale.d.ts +4 -0
  216. package/dist/hooks/useGcsaLocale.js +15 -0
  217. package/dist/hooks/useGcsaLocale.js.map +1 -0
  218. package/dist/hooks/useGcsaPopupZIndex.d.ts +6 -0
  219. package/dist/hooks/useGcsaPopupZIndex.js +18 -0
  220. package/dist/hooks/useGcsaPopupZIndex.js.map +1 -0
  221. package/dist/hooks/useGcsaTextCount.d.ts +16 -0
  222. package/dist/hooks/useGcsaTextCount.js +16 -0
  223. package/dist/hooks/useGcsaTextCount.js.map +1 -0
  224. package/dist/hooks/useGcsaTheme.d.ts +7 -0
  225. package/dist/hooks/useGcsaTheme.js +19 -0
  226. package/dist/hooks/useGcsaTheme.js.map +1 -0
  227. package/dist/hooks/useGcsaZIndex.d.ts +13 -0
  228. package/dist/hooks/useGcsaZIndex.js +37 -0
  229. package/dist/hooks/useGcsaZIndex.js.map +1 -0
  230. package/dist/hooks/useMessage.d.ts +6 -0
  231. package/dist/hooks/useOverlayZIndex.d.ts +8 -0
  232. package/dist/hooks/useOverlayZIndex.js +14 -0
  233. package/dist/hooks/useOverlayZIndex.js.map +1 -0
  234. package/dist/hooks/usePreventHiddenInputScroll.d.ts +13 -0
  235. package/dist/hooks/usePreventHiddenInputScroll.js +124 -0
  236. package/dist/hooks/usePreventHiddenInputScroll.js.map +1 -0
  237. package/dist/icons/iconNames.d.ts +7 -0
  238. package/dist/icons/iconNames.js +24 -0
  239. package/dist/icons/iconNames.js.map +1 -0
  240. package/dist/icons/index.d.ts +2 -0
  241. package/dist/icons/registry.d.ts +3 -0
  242. package/dist/icons/registry.js +58 -0
  243. package/dist/icons/registry.js.map +1 -0
  244. package/dist/icons/svg/alert.svg.js +9 -0
  245. package/dist/icons/svg/alert.svg.js.map +1 -0
  246. package/dist/icons/svg/assets.svg.js +9 -0
  247. package/dist/icons/svg/assets.svg.js.map +1 -0
  248. package/dist/icons/svg/chat.svg.js +8 -0
  249. package/dist/icons/svg/chat.svg.js.map +1 -0
  250. package/dist/icons/svg/check.svg.js +8 -0
  251. package/dist/icons/svg/check.svg.js.map +1 -0
  252. package/dist/icons/svg/chevron-down.svg.js +8 -0
  253. package/dist/icons/svg/chevron-down.svg.js.map +1 -0
  254. package/dist/icons/svg/chevron-left.svg.js +8 -0
  255. package/dist/icons/svg/chevron-left.svg.js.map +1 -0
  256. package/dist/icons/svg/chevron-right.svg.js +8 -0
  257. package/dist/icons/svg/chevron-right.svg.js.map +1 -0
  258. package/dist/icons/svg/chevron-up.svg.js +8 -0
  259. package/dist/icons/svg/chevron-up.svg.js.map +1 -0
  260. package/dist/icons/svg/close.svg.js +6 -0
  261. package/dist/icons/svg/close.svg.js.map +1 -0
  262. package/dist/icons/svg/dashboard.svg.js +8 -0
  263. package/dist/icons/svg/dashboard.svg.js.map +1 -0
  264. package/dist/icons/svg/menu.svg.js +8 -0
  265. package/dist/icons/svg/menu.svg.js.map +1 -0
  266. package/dist/icons/svg/plus.svg.js +6 -0
  267. package/dist/icons/svg/plus.svg.js.map +1 -0
  268. package/dist/icons/svg/result-empty.svg.js +6 -0
  269. package/dist/icons/svg/result-empty.svg.js.map +1 -0
  270. package/dist/icons/svg/settings.svg.js +8 -0
  271. package/dist/icons/svg/settings.svg.js.map +1 -0
  272. package/dist/icons/svg/users.svg.js +11 -0
  273. package/dist/icons/svg/users.svg.js.map +1 -0
  274. package/dist/index.d.ts +151 -0
  275. package/dist/index.js +166 -0
  276. package/dist/index.js.map +1 -0
  277. package/dist/style.css +8028 -0
  278. package/dist/utils/gcsaDateValue.d.ts +25 -0
  279. package/dist/utils/gcsaDateValue.js +60 -0
  280. package/dist/utils/gcsaDateValue.js.map +1 -0
  281. package/dist/utils/gcsaTableColumns.d.ts +19 -0
  282. package/dist/utils/gcsaTableColumns.js +43 -0
  283. package/dist/utils/gcsaTableColumns.js.map +1 -0
  284. package/dist/utils/preserveDrawerScroll.d.ts +2 -0
  285. package/dist/utils/preserveDrawerScroll.js +13 -0
  286. package/dist/utils/preserveDrawerScroll.js.map +1 -0
  287. package/dist/utils/zodValidators.d.ts +21 -0
  288. package/dist/utils/zodValidators.js +35 -0
  289. package/dist/utils/zodValidators.js.map +1 -0
  290. package/package.json +58 -0
  291. package/src/ConsoleHeader.tsx +24 -0
  292. package/src/ConsolePage.tsx +22 -0
  293. package/src/ConsoleShell.tsx +248 -0
  294. package/src/ConsoleSidebar.tsx +61 -0
  295. package/src/GcsaAlert.tsx +29 -0
  296. package/src/GcsaAutoComplete.tsx +163 -0
  297. package/src/GcsaAvatar.tsx +21 -0
  298. package/src/GcsaBadge.tsx +15 -0
  299. package/src/GcsaBrandMark.tsx +18 -0
  300. package/src/GcsaBreadcrumb.tsx +35 -0
  301. package/src/GcsaButton.tsx +44 -0
  302. package/src/GcsaCalendar.tsx +14 -0
  303. package/src/GcsaCard.tsx +21 -0
  304. package/src/GcsaCascader.tsx +121 -0
  305. package/src/GcsaChatPanel.tsx +320 -0
  306. package/src/GcsaCheckbox.tsx +55 -0
  307. package/src/GcsaCollapse.tsx +23 -0
  308. package/src/GcsaConfigProvider.tsx +121 -0
  309. package/src/GcsaDataTable.tsx +779 -0
  310. package/src/GcsaDatePicker.tsx +284 -0
  311. package/src/GcsaDateRangePicker.tsx +310 -0
  312. package/src/GcsaDateTimePicker.tsx +407 -0
  313. package/src/GcsaDescriptions.tsx +22 -0
  314. package/src/GcsaDivider.tsx +7 -0
  315. package/src/GcsaDrawer.tsx +87 -0
  316. package/src/GcsaDropdown.tsx +84 -0
  317. package/src/GcsaEmpty.tsx +27 -0
  318. package/src/GcsaField.tsx +50 -0
  319. package/src/GcsaForm.tsx +82 -0
  320. package/src/GcsaFormField.tsx +67 -0
  321. package/src/GcsaIcon.tsx +21 -0
  322. package/src/GcsaImagePreview.tsx +30 -0
  323. package/src/GcsaInput.tsx +87 -0
  324. package/src/GcsaInputGroup.tsx +32 -0
  325. package/src/GcsaInputNumber.tsx +155 -0
  326. package/src/GcsaLoading.ts +206 -0
  327. package/src/GcsaLoadingMask.tsx +53 -0
  328. package/src/GcsaMarkdownRenderer.tsx +40 -0
  329. package/src/GcsaMenu.tsx +340 -0
  330. package/src/GcsaModal.tsx +68 -0
  331. package/src/GcsaMultiSelect.tsx +246 -0
  332. package/src/GcsaPagination.tsx +194 -0
  333. package/src/GcsaPopconfirm.tsx +104 -0
  334. package/src/GcsaPopover.tsx +131 -0
  335. package/src/GcsaPopoverClose.tsx +11 -0
  336. package/src/GcsaProgress.tsx +18 -0
  337. package/src/GcsaRadioGroup.tsx +42 -0
  338. package/src/GcsaResult.tsx +23 -0
  339. package/src/GcsaRow.tsx +13 -0
  340. package/src/GcsaSelect.tsx +186 -0
  341. package/src/GcsaSkeleton.tsx +19 -0
  342. package/src/GcsaSpace.tsx +17 -0
  343. package/src/GcsaSpin.tsx +25 -0
  344. package/src/GcsaStatistic.tsx +17 -0
  345. package/src/GcsaSteps.tsx +73 -0
  346. package/src/GcsaSwitch.tsx +45 -0
  347. package/src/GcsaTabs.tsx +53 -0
  348. package/src/GcsaTag.tsx +16 -0
  349. package/src/GcsaTextarea.tsx +87 -0
  350. package/src/GcsaTimePicker.tsx +298 -0
  351. package/src/GcsaTimeline.tsx +27 -0
  352. package/src/GcsaToastStack.tsx +67 -0
  353. package/src/GcsaTooltip.tsx +75 -0
  354. package/src/GcsaTransfer.tsx +129 -0
  355. package/src/GcsaTree.tsx +43 -0
  356. package/src/GcsaTypography.tsx +24 -0
  357. package/src/GcsaUpload.tsx +206 -0
  358. package/src/hooks/gcsaFormTypes.ts +23 -0
  359. package/src/hooks/useDocumentThemeSync.ts +6 -0
  360. package/src/hooks/useGcsaComponentSize.ts +24 -0
  361. package/src/hooks/useGcsaFormField.ts +49 -0
  362. package/src/hooks/useGcsaFormSchema.ts +6 -0
  363. package/src/hooks/useGcsaLocale.ts +16 -0
  364. package/src/hooks/useGcsaPopupZIndex.ts +23 -0
  365. package/src/hooks/useGcsaTextCount.ts +44 -0
  366. package/src/hooks/useGcsaTheme.ts +19 -0
  367. package/src/hooks/useGcsaZIndex.ts +60 -0
  368. package/src/hooks/useMessage.ts +7 -0
  369. package/src/hooks/useOverlayZIndex.ts +23 -0
  370. package/src/hooks/usePreventHiddenInputScroll.ts +233 -0
  371. package/src/icons/iconNames.ts +27 -0
  372. package/src/icons/index.ts +8 -0
  373. package/src/icons/registry.ts +38 -0
  374. package/src/icons/svg/alert.svg +4 -0
  375. package/src/icons/svg/assets.svg +4 -0
  376. package/src/icons/svg/chat.svg +3 -0
  377. package/src/icons/svg/check.svg +3 -0
  378. package/src/icons/svg/chevron-down.svg +3 -0
  379. package/src/icons/svg/chevron-left.svg +3 -0
  380. package/src/icons/svg/chevron-right.svg +3 -0
  381. package/src/icons/svg/chevron-up.svg +3 -0
  382. package/src/icons/svg/close.svg +1 -0
  383. package/src/icons/svg/dashboard.svg +3 -0
  384. package/src/icons/svg/menu.svg +3 -0
  385. package/src/icons/svg/plus.svg +1 -0
  386. package/src/icons/svg/result-empty.svg +1 -0
  387. package/src/icons/svg/settings.svg +3 -0
  388. package/src/icons/svg/users.svg +6 -0
  389. package/src/index.ts +166 -0
  390. package/src/utils/gcsaDateValue.ts +99 -0
  391. package/src/utils/gcsaTableColumns.ts +97 -0
  392. package/src/utils/preserveDrawerScroll.ts +20 -0
  393. package/src/utils/zodValidators.ts +45 -0
  394. package/src/vite-env.d.ts +6 -0
@@ -0,0 +1,25 @@
1
+ import { GcsaDatePickerMode, GcsaDateRangeValue, GcsaMonthRangeValue, GcsaSelectOption } from '@gcsa/console-core';
2
+ import { DateValue } from '@ark-ui/react/date-picker';
3
+ export type GcsaDatePickerSelectCell = {
4
+ label: string;
5
+ value: number;
6
+ disabled?: boolean;
7
+ };
8
+ export declare function gcsaDatePickerCellsToOptions(cells: GcsaDatePickerSelectCell[]): GcsaSelectOption[];
9
+ export declare function gcsaNormalizeDateBoundary(value: string | undefined, mode: GcsaDatePickerMode): string | undefined;
10
+ export declare function gcsaDateValueToOutputString(value: DateValue | undefined | null, mode: GcsaDatePickerMode): string;
11
+ export declare function gcsaDateValueToString(value: DateValue | undefined | null): string;
12
+ export declare function gcsaStringToDateValues(value: string | undefined | null, mode?: GcsaDatePickerMode): DateValue[] | undefined;
13
+ export declare function gcsaDateRangeToDateValues(range: GcsaDateRangeValue | GcsaMonthRangeValue | undefined | null, mode?: GcsaDatePickerMode): DateValue[] | undefined;
14
+ export declare function gcsaDateValuesToRange(values: DateValue[] | undefined | null, mode?: GcsaDatePickerMode): GcsaDateRangeValue | GcsaMonthRangeValue;
15
+ export declare function gcsaDatePickerFormat(date: DateValue, _details: {
16
+ locale: string;
17
+ timeZone: string;
18
+ }, mode: GcsaDatePickerMode): string;
19
+ export declare function gcsaDatePickerParse(value: string, _details: {
20
+ locale: string;
21
+ timeZone: string;
22
+ }, mode: GcsaDatePickerMode): DateValue | undefined;
23
+ /** ISO 日期时间字符串 YYYY-MM-DD HH:mm:ss */
24
+ export type { GcsaDateTimeString } from '@gcsa/console-core';
25
+ export { gcsaJoinDateTime, gcsaSplitDateTime } from '@gcsa/console-core';
@@ -0,0 +1,60 @@
1
+ import { formatGcsaMonthParts as c, formatGcsaDateParts as f } from "@gcsa/console-core";
2
+ import { gcsaJoinDateTime as b, gcsaSplitDateTime as S } from "@gcsa/console-core";
3
+ import { parseDate as s } from "@ark-ui/react/date-picker";
4
+ function g(t) {
5
+ return t.map((r) => ({
6
+ label: r.label,
7
+ value: String(r.value),
8
+ disabled: r.disabled
9
+ }));
10
+ }
11
+ function d(t, r) {
12
+ if (t)
13
+ return r === "month" && /^\d{4}-\d{2}$/.test(t) ? `${t}-01` : t;
14
+ }
15
+ function e(t, r) {
16
+ return !t || !("month" in t) ? "" : r === "month" ? c(t.year, t.month) : "day" in t ? f(t.year, t.month, t.day) : "";
17
+ }
18
+ function a(t, r = "date") {
19
+ if (!t) return;
20
+ const n = d(t, r);
21
+ if (n)
22
+ try {
23
+ return [s(n)];
24
+ } catch {
25
+ return;
26
+ }
27
+ }
28
+ function D(t, r = "date") {
29
+ if (!t) return;
30
+ const n = [];
31
+ for (const o of t) {
32
+ if (!o) continue;
33
+ const i = a(o, r);
34
+ i != null && i[0] && n.push(i[0]);
35
+ }
36
+ return n.length ? n : void 0;
37
+ }
38
+ function h(t, r = "date") {
39
+ return [e(t == null ? void 0 : t[0], r), e(t == null ? void 0 : t[1], r)];
40
+ }
41
+ function p(t, r, n) {
42
+ return e(t, n);
43
+ }
44
+ function T(t, r, n) {
45
+ const o = a(t, n);
46
+ return o == null ? void 0 : o[0];
47
+ }
48
+ export {
49
+ g as gcsaDatePickerCellsToOptions,
50
+ p as gcsaDatePickerFormat,
51
+ T as gcsaDatePickerParse,
52
+ D as gcsaDateRangeToDateValues,
53
+ e as gcsaDateValueToOutputString,
54
+ h as gcsaDateValuesToRange,
55
+ b as gcsaJoinDateTime,
56
+ d as gcsaNormalizeDateBoundary,
57
+ S as gcsaSplitDateTime,
58
+ a as gcsaStringToDateValues
59
+ };
60
+ //# sourceMappingURL=gcsaDateValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcsaDateValue.js","sources":["../../src/utils/gcsaDateValue.ts"],"sourcesContent":["import {\n formatGcsaDateParts,\n formatGcsaMonthParts,\n type GcsaDatePickerMode,\n type GcsaDateRangeValue,\n type GcsaMonthRangeValue\n} from '@gcsa/console-core';\nimport type { GcsaSelectOption } from '@gcsa/console-core';\nimport { parseDate, type DateValue } from '@ark-ui/react/date-picker';\n\nexport type GcsaDatePickerSelectCell = {\n label: string;\n value: number;\n disabled?: boolean;\n};\n\nexport function gcsaDatePickerCellsToOptions(cells: GcsaDatePickerSelectCell[]): GcsaSelectOption[] {\n return cells.map(cell => ({\n label: cell.label,\n value: String(cell.value),\n disabled: cell.disabled\n }));\n}\n\nexport function gcsaNormalizeDateBoundary(value: string | undefined, mode: GcsaDatePickerMode): string | undefined {\n if (!value) return undefined;\n if (mode === 'month' && /^\\d{4}-\\d{2}$/.test(value)) return `${value}-01`;\n return value;\n}\n\nexport function gcsaDateValueToOutputString(\n value: DateValue | undefined | null,\n mode: GcsaDatePickerMode\n): string {\n if (!value || !('month' in value)) return '';\n if (mode === 'month') return formatGcsaMonthParts(value.year, value.month);\n if ('day' in value) return formatGcsaDateParts(value.year, value.month, value.day);\n return '';\n}\n\nexport function gcsaDateValueToString(value: DateValue | undefined | null): string {\n return gcsaDateValueToOutputString(value, 'date');\n}\n\nexport function gcsaStringToDateValues(\n value: string | undefined | null,\n mode: GcsaDatePickerMode = 'date'\n): DateValue[] | undefined {\n if (!value) return undefined;\n const normalized = gcsaNormalizeDateBoundary(value, mode);\n if (!normalized) return undefined;\n try {\n return [parseDate(normalized)];\n } catch {\n return undefined;\n }\n}\n\nexport function gcsaDateRangeToDateValues(\n range: GcsaDateRangeValue | GcsaMonthRangeValue | undefined | null,\n mode: GcsaDatePickerMode = 'date'\n): DateValue[] | undefined {\n if (!range) return undefined;\n const values: DateValue[] = [];\n for (const part of range) {\n if (!part) continue;\n const parsed = gcsaStringToDateValues(part, mode);\n if (parsed?.[0]) values.push(parsed[0]);\n }\n return values.length ? values : undefined;\n}\n\nexport function gcsaDateValuesToRange(\n values: DateValue[] | undefined | null,\n mode: GcsaDatePickerMode = 'date'\n): GcsaDateRangeValue | GcsaMonthRangeValue {\n return [gcsaDateValueToOutputString(values?.[0], mode), gcsaDateValueToOutputString(values?.[1], mode)];\n}\n\nexport function gcsaDatePickerFormat(\n date: DateValue,\n _details: { locale: string; timeZone: string },\n mode: GcsaDatePickerMode\n): string {\n return gcsaDateValueToOutputString(date, mode);\n}\n\nexport function gcsaDatePickerParse(\n value: string,\n _details: { locale: string; timeZone: string },\n mode: GcsaDatePickerMode\n): DateValue | undefined {\n const parsed = gcsaStringToDateValues(value, mode);\n return parsed?.[0];\n}\n\n/** ISO 日期时间字符串 YYYY-MM-DD HH:mm:ss */\nexport type { GcsaDateTimeString } from '@gcsa/console-core';\nexport { gcsaJoinDateTime, gcsaSplitDateTime } from '@gcsa/console-core';\n"],"names":["gcsaDatePickerCellsToOptions","cells","cell","gcsaNormalizeDateBoundary","value","mode","gcsaDateValueToOutputString","formatGcsaMonthParts","formatGcsaDateParts","gcsaStringToDateValues","normalized","parseDate","gcsaDateRangeToDateValues","range","values","part","parsed","gcsaDateValuesToRange","gcsaDatePickerFormat","date","_details","gcsaDatePickerParse"],"mappings":";;;AAgBO,SAASA,EAA6BC,GAAuD;AAClG,SAAOA,EAAM,IAAI,CAAAC,OAAS;AAAA,IACxB,OAAOA,EAAK;AAAA,IACZ,OAAO,OAAOA,EAAK,KAAK;AAAA,IACxB,UAAUA,EAAK;AAAA,EAAA,EACf;AACJ;AAEO,SAASC,EAA0BC,GAA2BC,GAA8C;AACjH,MAAKD;AACL,WAAIC,MAAS,WAAW,gBAAgB,KAAKD,CAAK,IAAU,GAAGA,CAAK,QAC7DA;AACT;AAEO,SAASE,EACdF,GACAC,GACQ;AACR,SAAI,CAACD,KAAS,EAAE,WAAWA,KAAe,KACtCC,MAAS,UAAgBE,EAAqBH,EAAM,MAAMA,EAAM,KAAK,IACrE,SAASA,IAAcI,EAAoBJ,EAAM,MAAMA,EAAM,OAAOA,EAAM,GAAG,IAC1E;AACT;AAMO,SAASK,EACdL,GACAC,IAA2B,QACF;AACzB,MAAI,CAACD,EAAO;AACZ,QAAMM,IAAaP,EAA0BC,GAAOC,CAAI;AACxD,MAAKK;AACL,QAAI;AACF,aAAO,CAACC,EAAUD,CAAU,CAAC;AAAA,IAC/B,QAAQ;AACN;AAAA,IACF;AACF;AAEO,SAASE,EACdC,GACAR,IAA2B,QACF;AACzB,MAAI,CAACQ,EAAO;AACZ,QAAMC,IAAsB,CAAA;AAC5B,aAAWC,KAAQF,GAAO;AACxB,QAAI,CAACE,EAAM;AACX,UAAMC,IAASP,EAAuBM,GAAMV,CAAI;AAChD,IAAIW,KAAA,QAAAA,EAAS,QAAW,KAAKA,EAAO,CAAC,CAAC;AAAA,EACxC;AACA,SAAOF,EAAO,SAASA,IAAS;AAClC;AAEO,SAASG,EACdH,GACAT,IAA2B,QACe;AAC1C,SAAO,CAACC,EAA4BQ,KAAA,gBAAAA,EAAS,IAAIT,CAAI,GAAGC,EAA4BQ,KAAA,gBAAAA,EAAS,IAAIT,CAAI,CAAC;AACxG;AAEO,SAASa,EACdC,GACAC,GACAf,GACQ;AACR,SAAOC,EAA4Ba,GAAMd,CAAI;AAC/C;AAEO,SAASgB,EACdjB,GACAgB,GACAf,GACuB;AACvB,QAAMW,IAASP,EAAuBL,GAAOC,CAAI;AACjD,SAAOW,KAAA,gBAAAA,EAAS;AAClB;"}
@@ -0,0 +1,19 @@
1
+ import { ColumnDef } from '@tanstack/react-table';
2
+ import { GcsaTableColumn } from '@gcsa/console-core';
3
+ export type GcsaTableCellSlotProps<T> = {
4
+ row: T;
5
+ value: unknown;
6
+ index: number;
7
+ column: string;
8
+ };
9
+ export type GcsaTableHeaderSlotProps = {
10
+ column: string;
11
+ title: string;
12
+ };
13
+ export declare function isGcsaTableColumn<T>(column: GcsaTableColumn<T> | ColumnDef<T, unknown>): column is GcsaTableColumn<T>;
14
+ export declare function gcsaColumnSlotKey(column: GcsaTableColumn<unknown> | ColumnDef<unknown, unknown>): string;
15
+ export declare function gcsaTableColumnsToDefs<T extends Record<string, unknown>>(columns: GcsaTableColumn<T>[]): ColumnDef<T, unknown>[];
16
+ export declare function resolveGcsaTableColumns<T extends Record<string, unknown>>(columns: Array<GcsaTableColumn<T> | ColumnDef<T, unknown>>): ColumnDef<T, unknown>[];
17
+ export declare function gcsaTableCellSlotName(slotKey: string): string;
18
+ export declare function gcsaTableHeaderSlotName(slotKey: string): string;
19
+ export declare function formatGcsaTableCellValue(value: unknown): string;
@@ -0,0 +1,43 @@
1
+ function l(i) {
2
+ return typeof i == "object" && i !== null && "id" in i && typeof i.header == "string" && // A converted TanStack definition also has id/header. Its `meta` field is
3
+ // the stable discriminator that prevents wrapping an adapter cell twice.
4
+ !("meta" in i) && !("accessorFn" in i);
5
+ }
6
+ function d(i) {
7
+ return i.map((e) => {
8
+ var a, s;
9
+ const f = e.slot ?? e.id, n = !!((a = e.columns) != null && a.length), o = e.accessorKey ?? e.id;
10
+ return {
11
+ id: e.id,
12
+ ...n ? {} : { accessorKey: o },
13
+ header: e.header,
14
+ ...n ? {} : { enableSorting: e.sortable ?? !1 },
15
+ ...!n && e.sortCompare ? { sortingFn: (r, t) => e.sortCompare(r.original, t.original) } : {},
16
+ ...(s = e.columns) != null && s.length ? { columns: d(e.columns) } : {},
17
+ meta: {
18
+ width: e.width,
19
+ minWidth: e.minWidth,
20
+ showOverflowTooltip: e.showOverflowTooltip,
21
+ align: e.align,
22
+ fixed: e.fixed,
23
+ hidden: e.hidden,
24
+ filter: e.filter,
25
+ slotKey: f
26
+ },
27
+ cell: !n && (e.cell || e.formatter) ? ({ getValue: r, row: t }) => e.cell ? e.cell(t.original) : e.formatter(r(), t.original, t.index) : void 0
28
+ };
29
+ });
30
+ }
31
+ function g(i) {
32
+ return i.length ? l(i[0]) ? d(i) : i : [];
33
+ }
34
+ function h(i) {
35
+ return i == null ? "" : String(i);
36
+ }
37
+ export {
38
+ h as formatGcsaTableCellValue,
39
+ d as gcsaTableColumnsToDefs,
40
+ l as isGcsaTableColumn,
41
+ g as resolveGcsaTableColumns
42
+ };
43
+ //# sourceMappingURL=gcsaTableColumns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcsaTableColumns.js","sources":["../../src/utils/gcsaTableColumns.ts"],"sourcesContent":["import type { ColumnDef } from '@tanstack/react-table';\nimport type { GcsaTableColumn } from '@gcsa/console-core';\n\nexport type GcsaTableCellSlotProps<T> = {\n row: T;\n value: unknown;\n index: number;\n column: string;\n};\n\nexport type GcsaTableHeaderSlotProps = {\n column: string;\n title: string;\n};\n\nexport function isGcsaTableColumn<T>(\n column: GcsaTableColumn<T> | ColumnDef<T, unknown>\n): column is GcsaTableColumn<T> {\n return (\n typeof column === 'object' &&\n column !== null &&\n 'id' in column &&\n typeof (column as GcsaTableColumn<T>).header === 'string' &&\n // A converted TanStack definition also has id/header. Its `meta` field is\n // the stable discriminator that prevents wrapping an adapter cell twice.\n !('meta' in column) &&\n !('accessorFn' in column)\n );\n}\n\nexport function gcsaColumnSlotKey(\n column: GcsaTableColumn<unknown> | ColumnDef<unknown, unknown>\n): string {\n if (isGcsaTableColumn(column)) {\n return column.slot ?? column.id;\n }\n const meta = column.meta as { slotKey?: string } | undefined;\n const accessorKey = 'accessorKey' in column ? column.accessorKey : undefined;\n return meta?.slotKey ?? column.id ?? String(accessorKey ?? '');\n}\n\nexport function gcsaTableColumnsToDefs<T extends Record<string, unknown>>(\n columns: GcsaTableColumn<T>[]\n): ColumnDef<T, unknown>[] {\n return columns.map(col => {\n const slotKey = col.slot ?? col.id;\n const isGroup = Boolean(col.columns?.length);\n const accessorKey = col.accessorKey ?? col.id;\n\n return {\n id: col.id,\n ...(!isGroup ? { accessorKey } : {}),\n header: col.header,\n ...(!isGroup ? { enableSorting: col.sortable ?? false } : {}),\n ...(!isGroup && col.sortCompare ? { sortingFn: (rowA: { original: T }, rowB: { original: T }) => col.sortCompare!(rowA.original, rowB.original) } : {}),\n ...(col.columns?.length ? { columns: gcsaTableColumnsToDefs(col.columns) } : {}),\n meta: {\n width: col.width,\n minWidth: col.minWidth,\n showOverflowTooltip: col.showOverflowTooltip,\n align: col.align,\n fixed: col.fixed,\n hidden: col.hidden,\n filter: col.filter,\n slotKey\n },\n cell: !isGroup && (col.cell || col.formatter)\n ? ({ getValue, row }) => col.cell\n ? col.cell(row.original)\n : col.formatter!(getValue(), row.original, row.index)\n : undefined\n };\n });\n}\n\nexport function resolveGcsaTableColumns<T extends Record<string, unknown>>(\n columns: Array<GcsaTableColumn<T> | ColumnDef<T, unknown>>\n): ColumnDef<T, unknown>[] {\n if (!columns.length) return [];\n if (isGcsaTableColumn(columns[0])) {\n return gcsaTableColumnsToDefs(columns as GcsaTableColumn<T>[]);\n }\n return columns as ColumnDef<T, unknown>[];\n}\n\nexport function gcsaTableCellSlotName(slotKey: string) {\n return `cell-${slotKey}`;\n}\n\nexport function gcsaTableHeaderSlotName(slotKey: string) {\n return `header-${slotKey}`;\n}\n\nexport function formatGcsaTableCellValue(value: unknown) {\n if (value == null) return '';\n return String(value);\n}\n"],"names":["isGcsaTableColumn","column","gcsaTableColumnsToDefs","columns","col","_a","_b","slotKey","isGroup","accessorKey","rowA","rowB","getValue","row","resolveGcsaTableColumns","formatGcsaTableCellValue","value"],"mappings":"AAeO,SAASA,EACdC,GAC8B;AAC9B,SACE,OAAOA,KAAW,YAClBA,MAAW,QACX,QAAQA,KACR,OAAQA,EAA8B,UAAW;AAAA;AAAA,EAGjD,EAAE,UAAUA,MACZ,EAAE,gBAAgBA;AAEtB;AAaO,SAASC,EACdC,GACyB;AACzB,SAAOA,EAAQ,IAAI,CAAAC,MAAO;AA7BrB,QAAAC,GAAAC;AA8BH,UAAMC,IAAUH,EAAI,QAAQA,EAAI,IAC1BI,IAAU,IAAQH,IAAAD,EAAI,YAAJ,QAAAC,EAAa,SAC/BI,IAAcL,EAAI,eAAeA,EAAI;AAE3C,WAAO;AAAA,MACL,IAAIA,EAAI;AAAA,MACR,GAAKI,IAA4B,CAAA,IAAlB,EAAE,aAAAC,EAAA;AAAA,MACjB,QAAQL,EAAI;AAAA,MACZ,GAAKI,IAAqD,CAAA,IAA3C,EAAE,eAAeJ,EAAI,YAAY,GAAA;AAAA,MAChD,GAAI,CAACI,KAAWJ,EAAI,cAAc,EAAE,WAAW,CAACM,GAAuBC,MAA0BP,EAAI,YAAaM,EAAK,UAAUC,EAAK,QAAQ,EAAA,IAAM,CAAA;AAAA,MACpJ,IAAIL,IAAAF,EAAI,YAAJ,QAAAE,EAAa,SAAS,EAAE,SAASJ,EAAuBE,EAAI,OAAO,EAAA,IAAM,CAAA;AAAA,MAC7E,MAAM;AAAA,QACJ,OAAOA,EAAI;AAAA,QACX,UAAUA,EAAI;AAAA,QACd,qBAAqBA,EAAI;AAAA,QACzB,OAAOA,EAAI;AAAA,QACX,OAAOA,EAAI;AAAA,QACX,QAAQA,EAAI;AAAA,QACZ,QAAQA,EAAI;AAAA,QACZ,SAAAG;AAAA,MAAA;AAAA,MAEF,MAAM,CAACC,MAAYJ,EAAI,QAAQA,EAAI,aAC/B,CAAC,EAAE,UAAAQ,GAAU,KAAAC,EAAA,MAAUT,EAAI,OACzBA,EAAI,KAAKS,EAAI,QAAQ,IACrBT,EAAI,UAAWQ,EAAA,GAAYC,EAAI,UAAUA,EAAI,KAAK,IACpD;AAAA,IAAA;AAAA,EAER,CAAC;AACH;AAEO,SAASC,EACdX,GACyB;AACzB,SAAKA,EAAQ,SACTH,EAAkBG,EAAQ,CAAC,CAAC,IACvBD,EAAuBC,CAA+B,IAExDA,IAJqB,CAAA;AAK9B;AAUO,SAASY,EAAyBC,GAAgB;AACvD,SAAIA,KAAS,OAAa,KACnB,OAAOA,CAAK;AACrB;"}
@@ -0,0 +1,2 @@
1
+ /** 通知最近的 Drawer body 恢复滚动(Select 开关、AutoComplete 面板切换后调用)。 */
2
+ export declare function preserveDrawerScrollFrom(node: HTMLElement | null | undefined): void;
@@ -0,0 +1,13 @@
1
+ import { GCSA_PRESERVE_SCROLL_EVENT as t } from "../hooks/usePreventHiddenInputScroll.js";
2
+ function o(n) {
3
+ const e = n == null ? void 0 : n.closest(".gcsa-drawer__body");
4
+ if (!(e instanceof HTMLElement)) return;
5
+ const s = e.closest(".gcsa-drawer__panel");
6
+ s instanceof HTMLElement && s.scrollTop !== 0 && (s.scrollTop = 0), e.dispatchEvent(new Event(t)), requestAnimationFrame(() => {
7
+ e.dispatchEvent(new Event(t)), requestAnimationFrame(() => e.dispatchEvent(new Event(t)));
8
+ }), window.setTimeout(() => e.dispatchEvent(new Event(t)), 0), window.setTimeout(() => e.dispatchEvent(new Event(t)), 48), window.setTimeout(() => e.dispatchEvent(new Event(t)), 120), window.setTimeout(() => e.dispatchEvent(new Event(t)), 240);
9
+ }
10
+ export {
11
+ o as preserveDrawerScrollFrom
12
+ };
13
+ //# sourceMappingURL=preserveDrawerScroll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preserveDrawerScroll.js","sources":["../../src/utils/preserveDrawerScroll.ts"],"sourcesContent":["import { GCSA_PRESERVE_SCROLL_EVENT } from '../hooks/usePreventHiddenInputScroll';\n\n/** 通知最近的 Drawer body 恢复滚动(Select 开关、AutoComplete 面板切换后调用)。 */\nexport function preserveDrawerScrollFrom(node: HTMLElement | null | undefined) {\n const drawerBody = node?.closest('.gcsa-drawer__body');\n if (!(drawerBody instanceof HTMLElement)) return;\n const panel = drawerBody.closest('.gcsa-drawer__panel');\n if (panel instanceof HTMLElement && panel.scrollTop !== 0) {\n panel.scrollTop = 0;\n }\n drawerBody.dispatchEvent(new Event(GCSA_PRESERVE_SCROLL_EVENT));\n requestAnimationFrame(() => {\n drawerBody.dispatchEvent(new Event(GCSA_PRESERVE_SCROLL_EVENT));\n requestAnimationFrame(() => drawerBody.dispatchEvent(new Event(GCSA_PRESERVE_SCROLL_EVENT)));\n });\n window.setTimeout(() => drawerBody.dispatchEvent(new Event(GCSA_PRESERVE_SCROLL_EVENT)), 0);\n window.setTimeout(() => drawerBody.dispatchEvent(new Event(GCSA_PRESERVE_SCROLL_EVENT)), 48);\n window.setTimeout(() => drawerBody.dispatchEvent(new Event(GCSA_PRESERVE_SCROLL_EVENT)), 120);\n window.setTimeout(() => drawerBody.dispatchEvent(new Event(GCSA_PRESERVE_SCROLL_EVENT)), 240);\n}\n"],"names":["preserveDrawerScrollFrom","node","drawerBody","panel","GCSA_PRESERVE_SCROLL_EVENT"],"mappings":";AAGO,SAASA,EAAyBC,GAAsC;AAC7E,QAAMC,IAAaD,KAAA,gBAAAA,EAAM,QAAQ;AACjC,MAAI,EAAEC,aAAsB,aAAc;AAC1C,QAAMC,IAAQD,EAAW,QAAQ,qBAAqB;AACtD,EAAIC,aAAiB,eAAeA,EAAM,cAAc,MACtDA,EAAM,YAAY,IAEpBD,EAAW,cAAc,IAAI,MAAME,CAA0B,CAAC,GAC9D,sBAAsB,MAAM;AAC1B,IAAAF,EAAW,cAAc,IAAI,MAAME,CAA0B,CAAC,GAC9D,sBAAsB,MAAMF,EAAW,cAAc,IAAI,MAAME,CAA0B,CAAC,CAAC;AAAA,EAC7F,CAAC,GACD,OAAO,WAAW,MAAMF,EAAW,cAAc,IAAI,MAAME,CAA0B,CAAC,GAAG,CAAC,GAC1F,OAAO,WAAW,MAAMF,EAAW,cAAc,IAAI,MAAME,CAA0B,CAAC,GAAG,EAAE,GAC3F,OAAO,WAAW,MAAMF,EAAW,cAAc,IAAI,MAAME,CAA0B,CAAC,GAAG,GAAG,GAC5F,OAAO,WAAW,MAAMF,EAAW,cAAc,IAAI,MAAME,CAA0B,CAAC,GAAG,GAAG;AAC9F;"}
@@ -0,0 +1,21 @@
1
+ import { ZodObject, ZodTypeAny } from 'zod';
2
+ import { GcsaConsoleLocale } from '@gcsa/console-core';
3
+ type ZodShape = Record<string, ZodTypeAny>;
4
+ export declare function zodFieldValidator(schema: ZodObject<ZodShape>, fieldName: string, locale?: GcsaConsoleLocale): ({ value }: {
5
+ value: unknown;
6
+ }) => string | undefined;
7
+ export declare function zodFormValidator(schema: ZodObject<ZodShape>, locale?: GcsaConsoleLocale): ({ value }: {
8
+ value: Record<string, unknown>;
9
+ }) => string | undefined;
10
+ export declare function zodFieldValidators(schema: ZodObject<ZodShape>, fieldName: string, locale?: GcsaConsoleLocale): {
11
+ onBlur: ({ value }: {
12
+ value: unknown;
13
+ }) => string | undefined;
14
+ onChange: ({ value }: {
15
+ value: unknown;
16
+ }) => string | undefined;
17
+ onSubmit: ({ value }: {
18
+ value: unknown;
19
+ }) => string | undefined;
20
+ };
21
+ export {};
@@ -0,0 +1,35 @@
1
+ import { getGcsaLocaleMessages as l, GCSA_DEFAULT_LOCALE as u } from "@gcsa/console-core";
2
+ function c(r, s, o) {
3
+ const e = l(o ?? u).validationFailed;
4
+ return ({ value: t }) => {
5
+ var n;
6
+ const a = r.shape[s];
7
+ if (!a) return;
8
+ const i = a.safeParse(t);
9
+ if (!i.success)
10
+ return ((n = i.error.issues[0]) == null ? void 0 : n.message) ?? e;
11
+ };
12
+ }
13
+ function f(r, s) {
14
+ const o = l(s ?? u).formValidationFailed;
15
+ return ({ value: e }) => {
16
+ var a;
17
+ const t = r.safeParse(e);
18
+ if (!t.success)
19
+ return ((a = t.error.issues[0]) == null ? void 0 : a.message) ?? o;
20
+ };
21
+ }
22
+ function m(r, s, o) {
23
+ const e = c(r, s, o);
24
+ return {
25
+ onBlur: e,
26
+ onChange: e,
27
+ onSubmit: e
28
+ };
29
+ }
30
+ export {
31
+ c as zodFieldValidator,
32
+ m as zodFieldValidators,
33
+ f as zodFormValidator
34
+ };
35
+ //# sourceMappingURL=zodValidators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zodValidators.js","sources":["../../src/utils/zodValidators.ts"],"sourcesContent":["import type { ZodObject, ZodTypeAny } from 'zod';\nimport {\n GCSA_DEFAULT_LOCALE,\n getGcsaLocaleMessages,\n type GcsaConsoleLocale\n} from '@gcsa/console-core';\n\ntype ZodShape = Record<string, ZodTypeAny>;\n\nexport function zodFieldValidator(\n schema: ZodObject<ZodShape>,\n fieldName: string,\n locale?: GcsaConsoleLocale\n) {\n const fallback = getGcsaLocaleMessages(locale ?? GCSA_DEFAULT_LOCALE).validationFailed;\n return ({ value }: { value: unknown }) => {\n const fieldSchema = schema.shape[fieldName];\n if (!fieldSchema) return undefined;\n const result = fieldSchema.safeParse(value);\n if (result.success) return undefined;\n return result.error.issues[0]?.message ?? fallback;\n };\n}\n\nexport function zodFormValidator(schema: ZodObject<ZodShape>, locale?: GcsaConsoleLocale) {\n const fallback = getGcsaLocaleMessages(locale ?? GCSA_DEFAULT_LOCALE).formValidationFailed;\n return ({ value }: { value: Record<string, unknown> }) => {\n const result = schema.safeParse(value);\n if (result.success) return undefined;\n return result.error.issues[0]?.message ?? fallback;\n };\n}\n\nexport function zodFieldValidators(\n schema: ZodObject<ZodShape>,\n fieldName: string,\n locale?: GcsaConsoleLocale\n) {\n const validate = zodFieldValidator(schema, fieldName, locale);\n return {\n onBlur: validate,\n onChange: validate,\n onSubmit: validate\n };\n}\n"],"names":["zodFieldValidator","schema","fieldName","locale","fallback","getGcsaLocaleMessages","GCSA_DEFAULT_LOCALE","value","fieldSchema","result","_a","zodFormValidator","zodFieldValidators","validate"],"mappings":";AASO,SAASA,EACdC,GACAC,GACAC,GACA;AACA,QAAMC,IAAWC,EAAsBF,KAAUG,CAAmB,EAAE;AACtE,SAAO,CAAC,EAAE,OAAAC,QAAgC;;AACxC,UAAMC,IAAcP,EAAO,MAAMC,CAAS;AAC1C,QAAI,CAACM,EAAa;AAClB,UAAMC,IAASD,EAAY,UAAUD,CAAK;AAC1C,QAAI,CAAAE,EAAO;AACX,eAAOC,IAAAD,EAAO,MAAM,OAAO,CAAC,MAArB,gBAAAC,EAAwB,YAAWN;AAAA,EAC5C;AACF;AAEO,SAASO,EAAiBV,GAA6BE,GAA4B;AACxF,QAAMC,IAAWC,EAAsBF,KAAUG,CAAmB,EAAE;AACtE,SAAO,CAAC,EAAE,OAAAC,QAAgD;;AACxD,UAAME,IAASR,EAAO,UAAUM,CAAK;AACrC,QAAI,CAAAE,EAAO;AACX,eAAOC,IAAAD,EAAO,MAAM,OAAO,CAAC,MAArB,gBAAAC,EAAwB,YAAWN;AAAA,EAC5C;AACF;AAEO,SAASQ,EACdX,GACAC,GACAC,GACA;AACA,QAAMU,IAAWb,EAAkBC,GAAQC,GAAWC,CAAM;AAC5D,SAAO;AAAA,IACL,QAAQU;AAAA,IACR,UAAUA;AAAA,IACV,UAAUA;AAAA,EAAA;AAEd;"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@gcsa/console-react",
3
+ "version": "0.1.0",
4
+ "description": "GCSA console UI — React components (Ark UI + TanStack + GCSA styles)",
5
+ "type": "module",
6
+ "license": "UNLICENSED",
7
+ "files": [
8
+ "dist",
9
+ "src"
10
+ ],
11
+ "main": "./dist/index.js",
12
+ "module": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/index.d.ts",
17
+ "import": "./dist/index.js"
18
+ },
19
+ "./style.css": "./dist/style.css",
20
+ "./*": {
21
+ "types": "./dist/*.d.ts",
22
+ "import": "./dist/*.js"
23
+ }
24
+ },
25
+ "sideEffects": [
26
+ "*.css",
27
+ "**/*.css"
28
+ ],
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "dependencies": {
33
+ "@ark-ui/react": "^5.9.0",
34
+ "@tanstack/react-form": "^1.12.2",
35
+ "@tanstack/react-table": "^8.21.3",
36
+ "zod": "^3.24.4",
37
+ "@gcsa/console-core": "0.1.0",
38
+ "@gcsa/console-styles": "0.1.0"
39
+ },
40
+ "peerDependencies": {
41
+ "react": "^18.0.0 || ^19.0.0",
42
+ "react-dom": "^18.0.0 || ^19.0.0"
43
+ },
44
+ "devDependencies": {
45
+ "@types/react": "^19.1.2",
46
+ "@types/react-dom": "^19.1.2",
47
+ "@vitejs/plugin-react": "^4.4.1",
48
+ "react": "^19.1.0",
49
+ "react-dom": "^19.1.0",
50
+ "typescript": "^5.8.3",
51
+ "vite": "^6.3.5",
52
+ "vite-plugin-dts": "^4.5.4"
53
+ },
54
+ "scripts": {
55
+ "build": "vite build && node scripts/postbuild.mjs",
56
+ "typecheck": "tsc -p tsconfig.json --noEmit"
57
+ }
58
+ }
@@ -0,0 +1,24 @@
1
+ import type { ReactNode } from 'react';
2
+
3
+ export type ConsoleHeaderProps = {
4
+ title: string;
5
+ eyebrow?: string;
6
+ subtitle?: string;
7
+ actions?: ReactNode;
8
+ className?: string;
9
+ };
10
+
11
+ export function ConsoleHeader({ title, eyebrow, subtitle, actions, className }: ConsoleHeaderProps) {
12
+ return (
13
+ <div className={`gcsa-console-header gcsa-ui-surface${className ? ` ${className}` : ''}`}>
14
+ <div className="gcsa-console-header__main">
15
+ {eyebrow ? <span className="gcsa-console-header__eyebrow">{eyebrow}</span> : null}
16
+ <div className="gcsa-console-header__title-row">
17
+ <h1 className="gcsa-console-header__title">{title}</h1>
18
+ {subtitle ? <p className="gcsa-console-header__subtitle">({subtitle})</p> : null}
19
+ </div>
20
+ </div>
21
+ {actions ? <div className="gcsa-console-header__actions">{actions}</div> : null}
22
+ </div>
23
+ );
24
+ }
@@ -0,0 +1,22 @@
1
+ import type { ReactNode } from 'react';
2
+
3
+ export type ConsolePageProps = {
4
+ title?: string;
5
+ description?: string;
6
+ className?: string;
7
+ children?: ReactNode;
8
+ };
9
+
10
+ export function ConsolePage({ title, description, className, children }: ConsolePageProps) {
11
+ return (
12
+ <div className={`gcsa-page-stack${className ? ` ${className}` : ''}`}>
13
+ {title || description ? (
14
+ <section className="gcsa-page-intro gcsa-ui-surface">
15
+ {title ? <div className="gcsa-page-intro__title">{title}</div> : null}
16
+ {description ? <div className="gcsa-page-intro__desc">{description}</div> : null}
17
+ </section>
18
+ ) : null}
19
+ {children}
20
+ </div>
21
+ );
22
+ }
@@ -0,0 +1,248 @@
1
+ import { cloneElement, isValidElement, useEffect, useState, type ReactNode } from 'react';
2
+ import type { GcsaNavItem } from '@gcsa/console-core';
3
+ import type { GcsaIconName } from './icons';
4
+ import { ConsoleHeader } from './ConsoleHeader';
5
+ import { ConsolePage } from './ConsolePage';
6
+ import { ConsoleSidebar } from './ConsoleSidebar';
7
+ import { GcsaIcon } from './GcsaIcon';
8
+ import { useGcsaLocaleMessages } from './hooks/useGcsaLocale';
9
+
10
+ function enhanceSidebarNode(
11
+ sidebar: ReactNode,
12
+ options: {
13
+ isMobile: boolean;
14
+ desktopCollapsed: boolean;
15
+ onMobileNavigate: () => void;
16
+ }
17
+ ): ReactNode {
18
+ if (!isValidElement(sidebar)) return sidebar;
19
+
20
+ const props = sidebar.props as {
21
+ onNavigate?: (key: string) => void;
22
+ onSelect?: (item: GcsaNavItem) => void;
23
+ collapsed?: boolean;
24
+ };
25
+
26
+ const wrapHandler = <T extends (...args: never[]) => void>(handler?: T) => {
27
+ if (!handler) return undefined;
28
+ return ((...args: Parameters<T>) => {
29
+ if (options.isMobile) options.onMobileNavigate();
30
+ handler(...args);
31
+ }) as T;
32
+ };
33
+
34
+ const nextProps: Partial<typeof props> = {
35
+ collapsed: options.isMobile ? false : options.desktopCollapsed
36
+ };
37
+ if (props.onNavigate) nextProps.onNavigate = wrapHandler(props.onNavigate);
38
+ if (props.onSelect) nextProps.onSelect = wrapHandler(props.onSelect);
39
+
40
+ return cloneElement(sidebar, nextProps);
41
+ }
42
+
43
+ export type ConsoleShellProps = {
44
+ navItems?: GcsaNavItem[];
45
+ activeKey?: string;
46
+ productName?: string;
47
+ productTagline?: string;
48
+ brandMark?: string;
49
+ title?: string;
50
+ eyebrow?: string;
51
+ subtitle?: string;
52
+ pageDescription?: string;
53
+ collapsible?: boolean;
54
+ collapsed?: boolean;
55
+ sidebar?: ReactNode;
56
+ header?: ReactNode;
57
+ actions?: ReactNode;
58
+ children?: ReactNode;
59
+ onNavSelect?: (item: GcsaNavItem) => void;
60
+ onActiveKeyChange?: (key: string) => void;
61
+ onCollapsedChange?: (collapsed: boolean) => void;
62
+ };
63
+
64
+ export function ConsoleShell({
65
+ navItems,
66
+ activeKey = '',
67
+ productName = 'GCSA',
68
+ productTagline = 'Console',
69
+ brandMark,
70
+ title,
71
+ eyebrow,
72
+ subtitle,
73
+ pageDescription,
74
+ collapsible = true,
75
+ collapsed = false,
76
+ sidebar,
77
+ header,
78
+ actions,
79
+ children,
80
+ onNavSelect,
81
+ onActiveKeyChange,
82
+ onCollapsedChange
83
+ }: ConsoleShellProps) {
84
+ const [isMobile, setIsMobile] = useState(false);
85
+ const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);
86
+ const [desktopCollapsed, setDesktopCollapsed] = useState(collapsed);
87
+
88
+ const hasPresetSidebar = Boolean(navItems?.length);
89
+ const hasSidebar = Boolean(sidebar || hasPresetSidebar);
90
+ const hasHeader = Boolean(header || title);
91
+ const showHeaderBar = hasHeader || (collapsible && hasSidebar);
92
+ const showSiderToggle = collapsible && hasSidebar;
93
+ const showMobileScrim = collapsible && isMobile && mobileSidebarOpen;
94
+
95
+ const messages = useGcsaLocaleMessages();
96
+
97
+ const shellClasses = [
98
+ 'gcsa-console-shell',
99
+ 'gcsa-ui-surface',
100
+ !isMobile && desktopCollapsed ? 'gcsa-console-shell--sidebar-collapsed' : '',
101
+ isMobile && mobileSidebarOpen ? 'gcsa-console-shell--sidebar-open' : ''
102
+ ]
103
+ .filter(Boolean)
104
+ .join(' ');
105
+
106
+ const siderToggleIcon: GcsaIconName =
107
+ isMobile || !desktopCollapsed ? 'menu' : 'chevronRight';
108
+
109
+ const siderToggleExpanded = isMobile ? mobileSidebarOpen : !desktopCollapsed;
110
+
111
+ const siderToggleLabel = isMobile
112
+ ? mobileSidebarOpen
113
+ ? messages.shellCloseNav
114
+ : messages.shellOpenNav
115
+ : desktopCollapsed
116
+ ? messages.shellExpandSider
117
+ : messages.shellCollapseSider;
118
+
119
+ useEffect(() => {
120
+ setDesktopCollapsed(collapsed);
121
+ }, [collapsed]);
122
+
123
+ useEffect(() => {
124
+ if (typeof window === 'undefined') return;
125
+
126
+ const mediaQuery = window.matchMedia('(max-width: 960px)');
127
+ const syncMobileState = (matches: boolean) => {
128
+ setIsMobile(matches);
129
+ if (matches) {
130
+ setMobileSidebarOpen(false);
131
+ }
132
+ };
133
+
134
+ syncMobileState(mediaQuery.matches);
135
+ const onChange = (event: MediaQueryListEvent) => syncMobileState(event.matches);
136
+ mediaQuery.addEventListener('change', onChange);
137
+
138
+ return () => {
139
+ mediaQuery.removeEventListener('change', onChange);
140
+ };
141
+ }, []);
142
+
143
+ useEffect(() => {
144
+ const onKeydown = (event: KeyboardEvent) => {
145
+ if (event.key === 'Escape' && isMobile && mobileSidebarOpen) {
146
+ setMobileSidebarOpen(false);
147
+ }
148
+ };
149
+ document.addEventListener('keydown', onKeydown);
150
+ return () => {
151
+ document.removeEventListener('keydown', onKeydown);
152
+ };
153
+ }, [isMobile, mobileSidebarOpen]);
154
+
155
+ const toggleSidebar = () => {
156
+ if (isMobile) {
157
+ setMobileSidebarOpen(prev => !prev);
158
+ return;
159
+ }
160
+ const next = !desktopCollapsed;
161
+ setDesktopCollapsed(next);
162
+ onCollapsedChange?.(next);
163
+ };
164
+
165
+ const closeMobileSidebar = () => {
166
+ setMobileSidebarOpen(false);
167
+ };
168
+
169
+ const onNavItemSelect = (item: GcsaNavItem) => {
170
+ if (isMobile) {
171
+ setMobileSidebarOpen(false);
172
+ }
173
+ onNavSelect?.(item);
174
+ onActiveKeyChange?.(item.key);
175
+ };
176
+
177
+ const sidebarNode = sidebar
178
+ ? enhanceSidebarNode(sidebar, {
179
+ isMobile,
180
+ desktopCollapsed,
181
+ onMobileNavigate: closeMobileSidebar
182
+ })
183
+ : hasPresetSidebar
184
+ ? (
185
+ <ConsoleSidebar
186
+ items={navItems!}
187
+ activeKey={activeKey}
188
+ collapsed={isMobile ? false : desktopCollapsed}
189
+ productName={productName}
190
+ productTagline={productTagline}
191
+ brandMark={brandMark}
192
+ onSelect={onNavItemSelect}
193
+ />
194
+ )
195
+ : null;
196
+
197
+ const headerNode =
198
+ header ??
199
+ (title ? (
200
+ <ConsoleHeader title={title} eyebrow={eyebrow} subtitle={subtitle} actions={actions} />
201
+ ) : null);
202
+
203
+ return (
204
+ <div className={shellClasses}>
205
+ {showMobileScrim ? (
206
+ <button
207
+ type="button"
208
+ className="gcsa-console-shell__scrim"
209
+ aria-label={messages.shellCloseNav}
210
+ onClick={closeMobileSidebar}
211
+ />
212
+ ) : null}
213
+
214
+ <aside
215
+ className="gcsa-console-shell__sidebar"
216
+ aria-hidden={isMobile && !mobileSidebarOpen ? true : undefined}
217
+ >
218
+ {sidebarNode}
219
+ </aside>
220
+
221
+ <section className="gcsa-console-shell__main">
222
+ {showHeaderBar ? (
223
+ <header className="gcsa-console-shell__header">
224
+ <div className="gcsa-console-shell__header-row">
225
+ {showSiderToggle ? (
226
+ <button
227
+ type="button"
228
+ className="gcsa-console-shell__sider-toggle gcsa-focus-ring"
229
+ aria-expanded={siderToggleExpanded}
230
+ aria-label={siderToggleLabel}
231
+ onClick={toggleSidebar}
232
+ >
233
+ <GcsaIcon name={siderToggleIcon} />
234
+ </button>
235
+ ) : null}
236
+ <div className="gcsa-console-shell__header-body">{headerNode}</div>
237
+ </div>
238
+ </header>
239
+ ) : null}
240
+ <main className="gcsa-console-shell__content" id="gcsa-console-main">
241
+ <div key={activeKey} className="gcsa-console-shell__content-inner">
242
+ {pageDescription ? <ConsolePage description={pageDescription}>{children}</ConsolePage> : children}
243
+ </div>
244
+ </main>
245
+ </section>
246
+ </div>
247
+ );
248
+ }