@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,320 @@
1
+ import { useContext, useEffect, useRef, useState, type ReactNode } from 'react';
2
+ import type {
3
+ GcsaChatMarkdownMode,
4
+ GcsaChatMessage,
5
+ GcsaChatMessageRole
6
+ } from '@gcsa/console-core';
7
+ import {
8
+ copyGcsaText,
9
+ formatGcsaChatTime,
10
+ gcsaChatAvatarLabel,
11
+ shouldRenderGcsaChatMarkdown
12
+ } from '@gcsa/console-core';
13
+ import { GcsaButton } from './GcsaButton';
14
+ import { GcsaMarkdownRenderer } from './GcsaMarkdownRenderer';
15
+ import { GcsaMessageContext } from './hooks/useGcsaTheme';
16
+ import { useGcsaLocaleMessages } from './hooks/useGcsaLocale';
17
+
18
+ export type GcsaChatMessageRenderContext = {
19
+ message: GcsaChatMessage;
20
+ index: number;
21
+ };
22
+
23
+ export type GcsaChatPanelProps = {
24
+ messages: GcsaChatMessage[];
25
+ loading?: boolean;
26
+ disabled?: boolean;
27
+ placeholder?: string;
28
+ sendLabel?: string;
29
+ sendingLabel?: string;
30
+ emptyText?: string;
31
+ renderMarkdown?: GcsaChatMarkdownMode;
32
+ showTimestamp?: boolean;
33
+ showAvatars?: boolean;
34
+ copyable?: boolean;
35
+ copyLabel?: string;
36
+ copySuccessLabel?: string;
37
+ copyErrorLabel?: string;
38
+ streamingCursor?: string;
39
+ avatarLabels?: Partial<Record<GcsaChatMessageRole, string>>;
40
+ header?: ReactNode;
41
+ empty?: ReactNode;
42
+ renderMessage?: (ctx: GcsaChatMessageRenderContext) => ReactNode;
43
+ renderAvatar?: (ctx: GcsaChatMessageRenderContext) => ReactNode;
44
+ renderMessageContent?: (ctx: GcsaChatMessageRenderContext) => ReactNode;
45
+ renderMessageFooter?: (ctx: GcsaChatMessageRenderContext) => ReactNode;
46
+ renderMessageActions?: (ctx: GcsaChatMessageRenderContext) => ReactNode;
47
+ renderComposer?: (ctx: {
48
+ draft: string;
49
+ setDraft: (value: string) => void;
50
+ submit: () => void;
51
+ loading: boolean;
52
+ disabled: boolean;
53
+ }) => ReactNode;
54
+ composerPrefix?: ReactNode;
55
+ composerActions?: ReactNode;
56
+ onSend?: (content: string) => void;
57
+ onCopy?: (message: GcsaChatMessage) => void;
58
+ };
59
+
60
+ function timeIso(value?: string | number | Date) {
61
+ if (value == null || value === '') return undefined;
62
+ const date = value instanceof Date ? value : new Date(value);
63
+ if (Number.isNaN(date.getTime())) return undefined;
64
+ return date.toISOString();
65
+ }
66
+
67
+ export function GcsaChatPanel({
68
+ messages,
69
+ loading = false,
70
+ disabled = false,
71
+ placeholder,
72
+ sendLabel,
73
+ sendingLabel,
74
+ emptyText,
75
+ renderMarkdown = 'assistant',
76
+ showTimestamp = true,
77
+ showAvatars = true,
78
+ copyable = true,
79
+ copyLabel,
80
+ copySuccessLabel,
81
+ copyErrorLabel,
82
+ streamingCursor = '▍',
83
+ avatarLabels,
84
+ header,
85
+ empty,
86
+ renderMessage,
87
+ renderAvatar,
88
+ renderMessageContent,
89
+ renderMessageFooter,
90
+ renderMessageActions,
91
+ renderComposer,
92
+ composerPrefix,
93
+ composerActions,
94
+ onSend,
95
+ onCopy
96
+ }: GcsaChatPanelProps) {
97
+ const localeMessages = useGcsaLocaleMessages();
98
+ const resolvedPlaceholder = placeholder ?? localeMessages.chatPlaceholder;
99
+ const resolvedSendLabel = sendLabel ?? localeMessages.chatSend;
100
+ const resolvedSendingLabel = sendingLabel ?? localeMessages.chatSending;
101
+ const resolvedEmptyText = emptyText ?? localeMessages.chatEmpty;
102
+ const resolvedCopyLabel = copyLabel ?? localeMessages.chatCopy;
103
+ const resolvedCopySuccessLabel = copySuccessLabel ?? localeMessages.chatCopySuccess;
104
+ const resolvedCopyErrorLabel = copyErrorLabel ?? localeMessages.chatCopyError;
105
+ const [draft, setDraft] = useState('');
106
+ const [copyToast, setCopyToast] = useState<{ text: string; type: 'success' | 'error' } | null>(null);
107
+ const listRef = useRef<HTMLDivElement | null>(null);
108
+ const copyToastTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
109
+ const messageApi = useContext(GcsaMessageContext);
110
+
111
+ useEffect(() => {
112
+ if (listRef.current) {
113
+ listRef.current.scrollTop = listRef.current.scrollHeight;
114
+ }
115
+ }, [messages.length, messages[messages.length - 1]?.content, messages[messages.length - 1]?.status]);
116
+
117
+ const submit = () => {
118
+ const content = draft.trim();
119
+ if (!content || loading || disabled) return;
120
+ onSend?.(content);
121
+ setDraft('');
122
+ };
123
+
124
+ useEffect(() => {
125
+ return () => {
126
+ if (copyToastTimerRef.current) clearTimeout(copyToastTimerRef.current);
127
+ };
128
+ }, []);
129
+
130
+ const showCopyFeedback = (text: string, tone: 'success' | 'error' = 'success') => {
131
+ if (messageApi) {
132
+ messageApi[tone](text);
133
+ return;
134
+ }
135
+
136
+ setCopyToast({ text, type: tone });
137
+ if (copyToastTimerRef.current) clearTimeout(copyToastTimerRef.current);
138
+ copyToastTimerRef.current = setTimeout(() => {
139
+ setCopyToast(null);
140
+ copyToastTimerRef.current = null;
141
+ }, 2000);
142
+ };
143
+
144
+ const copyMessage = async (message: GcsaChatMessage) => {
145
+ const ok = await copyGcsaText(message.content);
146
+ onCopy?.(message);
147
+ showCopyFeedback(ok ? resolvedCopySuccessLabel : resolvedCopyErrorLabel, ok ? 'success' : 'error');
148
+ };
149
+
150
+ const onKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {
151
+ if (event.key === 'Enter' && !event.shiftKey) {
152
+ event.preventDefault();
153
+ submit();
154
+ }
155
+ };
156
+
157
+ const renderDefaultMessage = (ctx: GcsaChatMessageRenderContext) => {
158
+ const { message, index } = ctx;
159
+ const useMarkdown = shouldRenderGcsaChatMarkdown(message, renderMarkdown);
160
+
161
+ return (
162
+ <article
163
+ key={message.id}
164
+ className={[
165
+ 'gcsa-chat__message',
166
+ `gcsa-chat__message--${message.role}`,
167
+ message.systemReady ? 'gcsa-chat__message--system-ready' : '',
168
+ message.error || message.status === 'error' ? 'gcsa-chat__message--error' : '',
169
+ message.status === 'streaming' ? 'gcsa-chat__message--streaming' : ''
170
+ ]
171
+ .filter(Boolean)
172
+ .join(' ')}
173
+ >
174
+ {showAvatars && message.role !== 'system' ? (
175
+ <div className={`gcsa-chat__avatar gcsa-chat__avatar--${message.role}`}>
176
+ {renderAvatar ? (
177
+ renderAvatar(ctx)
178
+ ) : (
179
+ <div className="gcsa-avatar">{gcsaChatAvatarLabel(message, avatarLabels)}</div>
180
+ )}
181
+ </div>
182
+ ) : null}
183
+
184
+ <div className="gcsa-chat__message-body">
185
+ <div
186
+ className={[
187
+ 'gcsa-chat__bubble',
188
+ `gcsa-chat__bubble--${message.role}`,
189
+ useMarkdown ? 'gcsa-chat__bubble--rich' : ''
190
+ ]
191
+ .filter(Boolean)
192
+ .join(' ')}
193
+ >
194
+ {renderMessageContent ? (
195
+ renderMessageContent(ctx)
196
+ ) : (
197
+ <>
198
+ {useMarkdown ? (
199
+ <GcsaMarkdownRenderer content={message.content} />
200
+ ) : (
201
+ <p className="gcsa-chat__plain">{message.content}</p>
202
+ )}
203
+ {message.status === 'streaming' ? (
204
+ <span className="gcsa-chat__cursor" aria-hidden="true">
205
+ {streamingCursor}
206
+ </span>
207
+ ) : null}
208
+ </>
209
+ )}
210
+
211
+ {copyable && message.role === 'assistant' && message.content ? (
212
+ <div className="gcsa-chat__bubble-actions">
213
+ {renderMessageActions ? (
214
+ renderMessageActions(ctx)
215
+ ) : (
216
+ <button
217
+ type="button"
218
+ className="gcsa-chat__action-btn"
219
+ title={resolvedCopyLabel}
220
+ aria-label={resolvedCopyLabel}
221
+ onClick={() => copyMessage(message)}
222
+ >
223
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" aria-hidden="true">
224
+ <rect x="9" y="9" width="13" height="13" rx="2" stroke="currentColor" strokeWidth="1.5" />
225
+ <path
226
+ d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"
227
+ stroke="currentColor"
228
+ strokeWidth="1.5"
229
+ />
230
+ </svg>
231
+ </button>
232
+ )}
233
+ </div>
234
+ ) : null}
235
+ </div>
236
+
237
+ {showTimestamp && message.role !== 'system' ? (
238
+ <footer className="gcsa-chat__meta">
239
+ {renderMessageFooter ? (
240
+ renderMessageFooter(ctx)
241
+ ) : formatGcsaChatTime(message.createdAt) ? (
242
+ <time dateTime={timeIso(message.createdAt)}>
243
+ {formatGcsaChatTime(message.createdAt)}
244
+ </time>
245
+ ) : null}
246
+ </footer>
247
+ ) : null}
248
+ </div>
249
+ </article>
250
+ );
251
+ };
252
+
253
+ const composer = renderComposer ? (
254
+ renderComposer({ draft, setDraft, submit, loading, disabled })
255
+ ) : (
256
+ <div className="gcsa-chat__composer">
257
+ {composerPrefix}
258
+ <textarea
259
+ className="gcsa-textarea gcsa-chat__input"
260
+ value={draft}
261
+ placeholder={resolvedPlaceholder}
262
+ disabled={disabled || loading}
263
+ rows={1}
264
+ onChange={e => setDraft(e.target.value)}
265
+ onKeyDown={onKeyDown}
266
+ />
267
+ {composerActions ?? (
268
+ <GcsaButton disabled={!draft.trim() || loading || disabled} onClick={submit}>
269
+ {loading ? resolvedSendingLabel : resolvedSendLabel}
270
+ </GcsaButton>
271
+ )}
272
+ </div>
273
+ );
274
+
275
+ return (
276
+ <section className="gcsa-chat gcsa-ui-surface">
277
+ {copyToast ? (
278
+ <div
279
+ className={`gcsa-chat__toast gcsa-toast gcsa-toast--${copyToast.type}`}
280
+ role="status"
281
+ >
282
+ <span className="gcsa-toast__icon" aria-hidden="true">
283
+ {copyToast.type === 'success' ? (
284
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none">
285
+ <path
286
+ d="M20 6 9 17l-5-5"
287
+ stroke="currentColor"
288
+ strokeWidth="2"
289
+ strokeLinecap="round"
290
+ strokeLinejoin="round"
291
+ />
292
+ </svg>
293
+ ) : (
294
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none">
295
+ <path d="M15 9l-6 6M9 9l6 6" stroke="currentColor" strokeWidth="2" strokeLinecap="round" />
296
+ <circle cx="12" cy="12" r="9" stroke="currentColor" strokeWidth="1.75" />
297
+ </svg>
298
+ )}
299
+ </span>
300
+ <span className="gcsa-toast__content">{copyToast.text}</span>
301
+ </div>
302
+ ) : null}
303
+ {header ? <header className="gcsa-chat__header">{header}</header> : null}
304
+
305
+ <div className="gcsa-chat__messages" ref={listRef}>
306
+ {!messages.length ? (
307
+ <div className="gcsa-chat__empty">{empty ?? resolvedEmptyText}</div>
308
+ ) : null}
309
+
310
+ {messages.map((message, index) =>
311
+ renderMessage
312
+ ? renderMessage({ message, index })
313
+ : renderDefaultMessage({ message, index })
314
+ )}
315
+ </div>
316
+
317
+ {composer}
318
+ </section>
319
+ );
320
+ }
@@ -0,0 +1,55 @@
1
+ import { useRef, type ReactNode } from 'react';
2
+ import { Checkbox } from '@ark-ui/react/checkbox';
3
+ import { usePreventHiddenInputScroll } from './hooks/usePreventHiddenInputScroll';
4
+
5
+ export type GcsaCheckboxProps = {
6
+ checked?: boolean;
7
+ label?: string;
8
+ ariaLabel?: string;
9
+ disabled?: boolean;
10
+ className?: string;
11
+ children?: ReactNode;
12
+ onCheckedChange?: (checked: boolean) => void;
13
+ };
14
+
15
+ export function GcsaCheckbox({
16
+ checked,
17
+ label,
18
+ ariaLabel,
19
+ disabled,
20
+ className,
21
+ children,
22
+ onCheckedChange
23
+ }: GcsaCheckboxProps) {
24
+ const rootRef = useRef<HTMLLabelElement>(null);
25
+ usePreventHiddenInputScroll(rootRef);
26
+ return (
27
+ <Checkbox.Root
28
+ ref={rootRef}
29
+ checked={checked}
30
+ disabled={disabled}
31
+ aria-label={ariaLabel}
32
+ className={`gcsa-checkbox gcsa-focus-ring${className ? ` ${className}` : ''}`}
33
+ onCheckedChange={details => onCheckedChange?.(details.checked === true)}
34
+ >
35
+ <Checkbox.Control className="gcsa-checkbox__box">
36
+ <Checkbox.Indicator className="gcsa-checkbox__indicator">
37
+ <svg viewBox="0 0 12 12" width="10" height="10" aria-hidden="true">
38
+ <path
39
+ d="M2 6.2L4.8 9 10 3.2"
40
+ fill="none"
41
+ stroke="currentColor"
42
+ strokeWidth="1.8"
43
+ strokeLinecap="round"
44
+ strokeLinejoin="round"
45
+ />
46
+ </svg>
47
+ </Checkbox.Indicator>
48
+ </Checkbox.Control>
49
+ {label || children ? (
50
+ <Checkbox.Label className="gcsa-checkbox__label">{children ?? label}</Checkbox.Label>
51
+ ) : null}
52
+ <Checkbox.HiddenInput />
53
+ </Checkbox.Root>
54
+ );
55
+ }
@@ -0,0 +1,23 @@
1
+ import type { ReactNode } from 'react';
2
+ import { useState } from 'react';
3
+
4
+ export type GcsaCollapseItem = { key: string; title: string; content?: ReactNode; disabled?: boolean };
5
+ export type GcsaCollapseProps = { items: GcsaCollapseItem[]; openKeys?: string[]; defaultOpenKeys?: string[]; accordion?: boolean; bordered?: boolean; onOpenKeysChange?: (keys: string[]) => void };
6
+
7
+ export function GcsaCollapse({ items, openKeys, defaultOpenKeys = [], accordion = false, bordered = true, onOpenKeysChange }: GcsaCollapseProps) {
8
+ const [internalKeys, setInternalKeys] = useState(defaultOpenKeys);
9
+ const keys = openKeys ?? internalKeys;
10
+ function toggle(key: string) {
11
+ const next = keys.includes(key) ? keys.filter(value => value !== key) : accordion ? [key] : [...keys, key];
12
+ setInternalKeys(next);
13
+ onOpenKeysChange?.(next);
14
+ }
15
+ return <div className={`gcsa-collapse${bordered ? ' gcsa-collapse--bordered' : ''}`}>
16
+ {items.map(item => <section key={item.key} className="gcsa-collapse__item" data-open={keys.includes(item.key) || undefined}>
17
+ <button type="button" className="gcsa-collapse__trigger gcsa-focus-ring" disabled={item.disabled} aria-expanded={keys.includes(item.key)} aria-controls={`gcsa-collapse-${item.key}`} onClick={() => toggle(item.key)}>
18
+ <span className="gcsa-collapse__indicator" aria-hidden="true">{keys.includes(item.key) ? '−' : '+'}</span><span className="gcsa-collapse__title">{item.title}</span>
19
+ </button>
20
+ {keys.includes(item.key) ? <div id={`gcsa-collapse-${item.key}`} className="gcsa-collapse__content" role="region">{item.content}</div> : null}
21
+ </section>)}
22
+ </div>;
23
+ }
@@ -0,0 +1,121 @@
1
+ import { useContext, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';
2
+ import { createPortal } from 'react-dom';
3
+ import type { GcsaConsoleTheme, GcsaConsoleLocale, GcsaMessageType, GcsaComponentSize } from '@gcsa/console-core';
4
+ import { GCSA_MESSAGE_DURATION_MS } from '@gcsa/console-core';
5
+ import {
6
+ GcsaConfigProviderContext,
7
+ GcsaMessageContext,
8
+ GcsaThemeContext
9
+ } from './hooks/useGcsaTheme';
10
+ import type { GcsaMessageApi } from './hooks/useMessage';
11
+ import { GcsaLocaleContext } from './hooks/useGcsaLocale';
12
+ import { GcsaRestoreDocumentThemeContext } from './hooks/useDocumentThemeSync';
13
+ import { GcsaToastStack } from './GcsaToastStack';
14
+ import { GcsaZIndexContext, createGcsaZIndexApi, readToastZIndex } from './hooks/useGcsaZIndex';
15
+ import { GcsaComponentSizeContext } from './hooks/useGcsaComponentSize';
16
+
17
+ export type GcsaConfigProviderProps = {
18
+ theme?: GcsaConsoleTheme;
19
+ /** 界面语言(zh-CN / zh-TW / en-US) */
20
+ locale?: GcsaConsoleLocale;
21
+ /** 是否同步到 document(Portal 浮层)。文档站 demo 应关闭,由 VitePress 全局同步。 */
22
+ syncDocument?: boolean;
23
+ /** 全局控件尺寸(Button / Select / InputGroup / Switch / Table 等) */
24
+ size?: GcsaComponentSize;
25
+ children: ReactNode;
26
+ };
27
+
28
+ export function GcsaConfigProvider({
29
+ theme = 'dark',
30
+ locale = 'zh-CN',
31
+ syncDocument = true,
32
+ size,
33
+ children
34
+ }: GcsaConfigProviderProps) {
35
+ const parentProvider = useContext(GcsaConfigProviderContext);
36
+ const parentZIndexApi = useContext(GcsaZIndexContext);
37
+ const parentSize = useContext(GcsaComponentSizeContext);
38
+ const restoreDocumentTheme = useContext(GcsaRestoreDocumentThemeContext);
39
+ const [toasts, setToasts] = useState<Array<{ id: number; message: string; type: GcsaMessageType }>>([]);
40
+ const [toastZIndex, setToastZIndex] = useState<number>(() => readToastZIndex());
41
+ const idRef = useRef(0);
42
+ const MAX_TOASTS = 4;
43
+
44
+ const zIndexApi = useMemo(
45
+ () => parentZIndexApi ?? createGcsaZIndexApi(),
46
+ [parentZIndexApi]
47
+ );
48
+
49
+ const shouldSyncDocument = !parentProvider && syncDocument;
50
+ const resolvedSize = size ?? parentSize ?? 'md';
51
+
52
+ const refreshToastZIndex = () => {
53
+ setToastZIndex(readToastZIndex());
54
+ };
55
+
56
+ const push = (message: string, type: GcsaMessageType) => {
57
+ refreshToastZIndex();
58
+ const current = ++idRef.current;
59
+ setToasts(prev => [...prev, { id: current, message, type }].slice(-MAX_TOASTS));
60
+ setTimeout(() => {
61
+ setToasts(prev => prev.filter(t => t.id !== current));
62
+ }, GCSA_MESSAGE_DURATION_MS);
63
+ };
64
+
65
+ const api: GcsaMessageApi = {
66
+ success: message => push(message, 'success'),
67
+ error: message => push(message, 'error'),
68
+ info: message => push(message, 'info')
69
+ };
70
+
71
+ useEffect(() => {
72
+ if (!shouldSyncDocument || typeof document === 'undefined') return;
73
+ document.documentElement.setAttribute('data-gcsa-theme', theme);
74
+ }, [theme, shouldSyncDocument]);
75
+
76
+ useEffect(() => {
77
+ refreshToastZIndex();
78
+ }, []);
79
+
80
+ useEffect(() => {
81
+ if (!shouldSyncDocument) return;
82
+ return () => {
83
+ if (typeof document === 'undefined') return;
84
+ if (restoreDocumentTheme) {
85
+ restoreDocumentTheme();
86
+ return;
87
+ }
88
+ document.documentElement.removeAttribute('data-gcsa-theme');
89
+ };
90
+ }, [shouldSyncDocument, restoreDocumentTheme]);
91
+
92
+ return (
93
+ <GcsaConfigProviderContext.Provider value={true}>
94
+ <GcsaZIndexContext.Provider value={zIndexApi}>
95
+ <GcsaComponentSizeContext.Provider value={resolvedSize}>
96
+ <GcsaMessageContext.Provider value={api}>
97
+ <GcsaThemeContext.Provider value={theme}>
98
+ <GcsaLocaleContext.Provider value={locale}>
99
+ <div className="gcsa-console-root" data-gcsa-theme={theme}>
100
+ {children}
101
+ </div>
102
+ {typeof document !== 'undefined'
103
+ ? createPortal(
104
+ <div
105
+ className="gcsa-portal-scope gcsa-toast-portal"
106
+ data-gcsa-theme={theme}
107
+ style={{ zIndex: toastZIndex }}
108
+ >
109
+ <GcsaToastStack toasts={toasts} />
110
+ </div>,
111
+ document.body
112
+ )
113
+ : null}
114
+ </GcsaLocaleContext.Provider>
115
+ </GcsaThemeContext.Provider>
116
+ </GcsaMessageContext.Provider>
117
+ </GcsaComponentSizeContext.Provider>
118
+ </GcsaZIndexContext.Provider>
119
+ </GcsaConfigProviderContext.Provider>
120
+ );
121
+ }