@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,221 @@
1
+ import { jsxs as o, jsx as t } from "react/jsx-runtime";
2
+ import { gcsaBuildTimeOptions as X, gcsaTimePickerHours as Y, gcsaTimePickerMinutes as Z, gcsaCurrentTimeOption as ee, gcsaResolveTimeDraft as te, gcsaTimePickerScrollIndex as ce, gcsaTimePickerScrollTop as B } from "@gcsa/console-core";
3
+ import { useRef as h, useState as $, useMemo as M, useEffect as j } from "react";
4
+ import { useGcsaLocaleMessages as ne } from "./hooks/useGcsaLocale.js";
5
+ function re() {
6
+ return /* @__PURE__ */ o("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: [
7
+ /* @__PURE__ */ t("circle", { cx: "8", cy: "8", r: "5.75", stroke: "currentColor", strokeWidth: "1.2" }),
8
+ /* @__PURE__ */ t("path", { d: "M8 4.75V8l2.25 1.5", stroke: "currentColor", strokeWidth: "1.2", strokeLinecap: "round" })
9
+ ] });
10
+ }
11
+ function ae({
12
+ value: s = "",
13
+ onChange: l,
14
+ className: O,
15
+ step: A = 60,
16
+ min: C,
17
+ max: E,
18
+ allowClear: G = !0,
19
+ invalid: S = !1,
20
+ placeholder: I,
21
+ disabled: p,
22
+ ...V
23
+ }) {
24
+ const a = ne(), K = I ?? a.timePickerPlaceholder, D = h(null), W = h(null), x = h(null), N = h(null), w = h({}), [u, d] = $(!1), [U, z] = $(!1), [b, v] = $("00:00"), n = M(
25
+ () => X({ min: C, max: E, step: A }),
26
+ [C, E, A]
27
+ ), y = M(() => Y(n), [n]), r = b.slice(0, 2), f = b.slice(3), k = M(
28
+ () => Z(n, r),
29
+ [n, r]
30
+ ), F = M(() => ee(n), [n]), m = (e = s) => {
31
+ v(te(e, n));
32
+ }, P = () => {
33
+ requestAnimationFrame(() => {
34
+ x.current && (x.current.scrollTop = B(y.indexOf(r))), N.current && (N.current.scrollTop = B(k.indexOf(f)));
35
+ });
36
+ }, J = () => {
37
+ requestAnimationFrame(() => {
38
+ var _;
39
+ if (!D.current) return;
40
+ const e = D.current.getBoundingClientRect(), c = ((_ = W.current) == null ? void 0 : _.offsetWidth) ?? 220;
41
+ z(e.left + c > window.innerWidth - 8);
42
+ });
43
+ }, g = () => {
44
+ p || u || (m(), d(!0), J(), P());
45
+ }, H = (e) => {
46
+ const c = k.includes(f) ? f : k[0] ?? "00";
47
+ v(`${e}:${c}`), requestAnimationFrame(P);
48
+ }, L = (e, c) => {
49
+ const i = c.currentTarget;
50
+ clearTimeout(w.current[e]), w.current[e] = setTimeout(() => {
51
+ const _ = e === "hour" ? y : k, T = _[ce(i.scrollTop, _.length)];
52
+ e === "hour" && T ? H(T) : e === "minute" && T && v(`${r}:${T}`);
53
+ }, 80);
54
+ };
55
+ j(() => {
56
+ u || m(s);
57
+ }, [s, u, n]), j(() => {
58
+ const e = (c) => {
59
+ var i;
60
+ (i = D.current) != null && i.contains(c.target) || (d(!1), m());
61
+ };
62
+ return document.addEventListener("pointerdown", e), () => {
63
+ document.removeEventListener("pointerdown", e), clearTimeout(w.current.hour), clearTimeout(w.current.minute);
64
+ };
65
+ }, [s, n]);
66
+ const R = () => {
67
+ l == null || l(b), d(!1);
68
+ }, q = () => {
69
+ d(!1), m();
70
+ }, Q = (e) => {
71
+ if (e.key === "Escape") q();
72
+ else if (e.key === "Enter")
73
+ e.preventDefault(), u ? R() : g();
74
+ else if (e.key === "ArrowDown" || e.key === "ArrowUp") {
75
+ e.preventDefault(), g();
76
+ const c = n.indexOf(b), i = e.key === "ArrowDown" ? 1 : -1;
77
+ m(n[Math.max(0, Math.min(n.length - 1, c + i))]), P();
78
+ }
79
+ };
80
+ return /* @__PURE__ */ o("div", { ref: D, className: `gcsa-time-picker__root${O ? ` ${O}` : ""}`, children: [
81
+ /* @__PURE__ */ o(
82
+ "div",
83
+ {
84
+ className: "gcsa-time-picker__control gcsa-focus-ring",
85
+ "data-invalid": S || void 0,
86
+ onClick: g,
87
+ children: [
88
+ /* @__PURE__ */ t(
89
+ "input",
90
+ {
91
+ ...V,
92
+ type: "text",
93
+ inputMode: "numeric",
94
+ readOnly: !0,
95
+ value: s,
96
+ placeholder: K,
97
+ disabled: p,
98
+ className: "gcsa-time-picker__input",
99
+ "aria-invalid": S || void 0,
100
+ "aria-haspopup": "dialog",
101
+ "aria-expanded": u,
102
+ autoComplete: "off",
103
+ onFocus: g,
104
+ onKeyDown: Q
105
+ }
106
+ ),
107
+ /* @__PURE__ */ t(
108
+ "button",
109
+ {
110
+ type: "button",
111
+ className: "gcsa-time-picker__trigger gcsa-focus-ring",
112
+ disabled: p,
113
+ "aria-label": a.timePickerOpen,
114
+ onMouseDown: (e) => e.preventDefault(),
115
+ onClick: (e) => {
116
+ e.stopPropagation(), g();
117
+ },
118
+ children: /* @__PURE__ */ t(re, {})
119
+ }
120
+ )
121
+ ]
122
+ }
123
+ ),
124
+ G && s && !p ? /* @__PURE__ */ t(
125
+ "button",
126
+ {
127
+ type: "button",
128
+ className: "gcsa-time-picker__clear",
129
+ "aria-label": a.timePickerClear,
130
+ onMouseDown: (e) => e.preventDefault(),
131
+ onClick: (e) => {
132
+ e.stopPropagation(), l == null || l(""), d(!1);
133
+ },
134
+ children: "×"
135
+ }
136
+ ) : null,
137
+ u && !p ? /* @__PURE__ */ o(
138
+ "div",
139
+ {
140
+ ref: W,
141
+ className: `gcsa-time-picker__panel gcsa-ui-surface gcsa-time-picker__panel--open${U ? " gcsa-time-picker__panel--align-end" : ""}`,
142
+ role: "dialog",
143
+ "aria-label": a.timePickerSelect,
144
+ children: [
145
+ /* @__PURE__ */ o("div", { className: "gcsa-time-picker__spinner", children: [
146
+ /* @__PURE__ */ t(
147
+ "div",
148
+ {
149
+ ref: x,
150
+ className: "gcsa-time-picker__column",
151
+ role: "listbox",
152
+ "aria-label": a.timeHour,
153
+ onScroll: (e) => L("hour", e),
154
+ children: y.map((e) => /* @__PURE__ */ t(
155
+ "button",
156
+ {
157
+ type: "button",
158
+ className: `gcsa-time-picker__cell${e === r ? " gcsa-time-picker__cell--selected" : ""}`,
159
+ role: "option",
160
+ "aria-selected": e === r,
161
+ onMouseDown: (c) => c.preventDefault(),
162
+ onClick: () => H(e),
163
+ children: e
164
+ },
165
+ e
166
+ ))
167
+ }
168
+ ),
169
+ /* @__PURE__ */ t(
170
+ "div",
171
+ {
172
+ ref: N,
173
+ className: "gcsa-time-picker__column",
174
+ role: "listbox",
175
+ "aria-label": a.timeMinute,
176
+ onScroll: (e) => L("minute", e),
177
+ children: k.map((e) => /* @__PURE__ */ t(
178
+ "button",
179
+ {
180
+ type: "button",
181
+ className: `gcsa-time-picker__cell${e === f ? " gcsa-time-picker__cell--selected" : ""}`,
182
+ role: "option",
183
+ "aria-selected": e === f,
184
+ onMouseDown: (c) => c.preventDefault(),
185
+ onClick: () => v(`${r}:${e}`),
186
+ children: e
187
+ },
188
+ e
189
+ ))
190
+ }
191
+ ),
192
+ /* @__PURE__ */ t("div", { className: "gcsa-time-picker__selection", "aria-hidden": "true" })
193
+ ] }),
194
+ /* @__PURE__ */ o("div", { className: "gcsa-time-picker__footer", children: [
195
+ /* @__PURE__ */ t(
196
+ "button",
197
+ {
198
+ type: "button",
199
+ className: "gcsa-time-picker__link",
200
+ disabled: !F,
201
+ onMouseDown: (e) => e.preventDefault(),
202
+ onClick: () => {
203
+ m(F), P();
204
+ },
205
+ children: "此刻"
206
+ }
207
+ ),
208
+ /* @__PURE__ */ o("div", { className: "gcsa-time-picker__actions", children: [
209
+ /* @__PURE__ */ t("button", { type: "button", className: "gcsa-time-picker__link", onMouseDown: (e) => e.preventDefault(), onClick: q, children: "取消" }),
210
+ /* @__PURE__ */ t("button", { type: "button", className: "gcsa-time-picker__confirm", onMouseDown: (e) => e.preventDefault(), onClick: R, children: "确定" })
211
+ ] })
212
+ ] })
213
+ ]
214
+ }
215
+ ) : null
216
+ ] });
217
+ }
218
+ export {
219
+ ae as GcsaTimePicker
220
+ };
221
+ //# sourceMappingURL=GcsaTimePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GcsaTimePicker.js","sources":["../src/GcsaTimePicker.tsx"],"sourcesContent":["import {\n gcsaBuildTimeOptions,\n gcsaCurrentTimeOption,\n gcsaResolveTimeDraft,\n gcsaTimePickerHours,\n gcsaTimePickerMinutes,\n gcsaTimePickerScrollIndex,\n gcsaTimePickerScrollTop\n} from '@gcsa/console-core';\nimport { useEffect, useMemo, useRef, useState, type InputHTMLAttributes, type UIEvent } from 'react';\nimport { useGcsaLocaleMessages } from './hooks/useGcsaLocale';\n\nexport type GcsaTimePickerProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'onChange' | 'value' | 'placeholder' | 'readOnly'\n> & {\n value?: string;\n step?: number;\n min?: string;\n max?: string;\n allowClear?: boolean;\n invalid?: boolean;\n placeholder?: string;\n onChange?: (value: string) => void;\n};\n\nfunction TimePickerIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"5.75\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <path d=\"M8 4.75V8l2.25 1.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport function GcsaTimePicker({\n value = '',\n onChange,\n className,\n step = 60,\n min,\n max,\n allowClear = true,\n invalid = false,\n placeholder,\n disabled,\n ...props\n}: GcsaTimePickerProps) {\n const messages = useGcsaLocaleMessages();\n const resolvedPlaceholder = placeholder ?? messages.timePickerPlaceholder;\n const root = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const hourColumn = useRef<HTMLDivElement>(null);\n const minuteColumn = useRef<HTMLDivElement>(null);\n const timers = useRef<{ hour?: ReturnType<typeof setTimeout>; minute?: ReturnType<typeof setTimeout> }>({});\n const [open, setOpen] = useState(false);\n const [alignPanelEnd, setAlignPanelEnd] = useState(false);\n const [draft, setDraft] = useState('00:00');\n\n const options = useMemo(\n () => gcsaBuildTimeOptions({ min, max, step }),\n [min, max, step]\n );\n const hours = useMemo(() => gcsaTimePickerHours(options), [options]);\n const draftHour = draft.slice(0, 2);\n const draftMinute = draft.slice(3);\n const minutes = useMemo(\n () => gcsaTimePickerMinutes(options, draftHour),\n [options, draftHour]\n );\n const nowOption = useMemo(() => gcsaCurrentTimeOption(options), [options]);\n\n const syncDraft = (next = value) => {\n setDraft(gcsaResolveTimeDraft(next, options));\n };\n\n const scrollColumns = () => {\n requestAnimationFrame(() => {\n if (hourColumn.current) {\n hourColumn.current.scrollTop = gcsaTimePickerScrollTop(hours.indexOf(draftHour));\n }\n if (minuteColumn.current) {\n minuteColumn.current.scrollTop = gcsaTimePickerScrollTop(minutes.indexOf(draftMinute));\n }\n });\n };\n\n const syncPanelAlignment = () => {\n requestAnimationFrame(() => {\n if (!root.current) return;\n const rect = root.current.getBoundingClientRect();\n const panelWidth = panelRef.current?.offsetWidth ?? 220;\n const padding = 8;\n setAlignPanelEnd(rect.left + panelWidth > window.innerWidth - padding);\n });\n };\n\n const openPicker = () => {\n if (disabled || open) return;\n syncDraft();\n setOpen(true);\n syncPanelAlignment();\n scrollColumns();\n };\n\n const selectHour = (hour: string) => {\n const nextMinute = minutes.includes(draftMinute) ? draftMinute : minutes[0] ?? '00';\n setDraft(`${hour}:${nextMinute}`);\n requestAnimationFrame(scrollColumns);\n };\n\n const handleScroll = (type: 'hour' | 'minute', event: UIEvent<HTMLDivElement>) => {\n const element = event.currentTarget;\n clearTimeout(timers.current[type]);\n timers.current[type] = setTimeout(() => {\n const values = type === 'hour' ? hours : minutes;\n const nextValue = values[gcsaTimePickerScrollIndex(element.scrollTop, values.length)];\n if (type === 'hour' && nextValue) selectHour(nextValue);\n else if (type === 'minute' && nextValue) setDraft(`${draftHour}:${nextValue}`);\n }, 80);\n };\n\n useEffect(() => {\n if (!open) syncDraft(value);\n }, [value, open, options]);\n\n useEffect(() => {\n const close = (event: PointerEvent) => {\n if (!root.current?.contains(event.target as Node)) {\n setOpen(false);\n syncDraft();\n }\n };\n document.addEventListener('pointerdown', close);\n return () => {\n document.removeEventListener('pointerdown', close);\n clearTimeout(timers.current.hour);\n clearTimeout(timers.current.minute);\n };\n }, [value, options]);\n\n const commit = () => {\n onChange?.(draft);\n setOpen(false);\n };\n\n const cancel = () => {\n setOpen(false);\n syncDraft();\n };\n\n const onKeyDown: InputHTMLAttributes<HTMLInputElement>['onKeyDown'] = event => {\n if (event.key === 'Escape') cancel();\n else if (event.key === 'Enter') {\n event.preventDefault();\n if (open) commit();\n else openPicker();\n } else if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n openPicker();\n const index = options.indexOf(draft);\n const delta = event.key === 'ArrowDown' ? 1 : -1;\n syncDraft(options[Math.max(0, Math.min(options.length - 1, index + delta))]);\n scrollColumns();\n }\n };\n\n return (\n <div ref={root} className={`gcsa-time-picker__root${className ? ` ${className}` : ''}`}>\n <div\n className=\"gcsa-time-picker__control gcsa-focus-ring\"\n data-invalid={invalid || undefined}\n onClick={openPicker}\n >\n <input\n {...props}\n type=\"text\"\n inputMode=\"numeric\"\n readOnly\n value={value}\n placeholder={resolvedPlaceholder}\n disabled={disabled}\n className=\"gcsa-time-picker__input\"\n aria-invalid={invalid || undefined}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n autoComplete=\"off\"\n onFocus={openPicker}\n onKeyDown={onKeyDown}\n />\n <button\n type=\"button\"\n className=\"gcsa-time-picker__trigger gcsa-focus-ring\"\n disabled={disabled}\n aria-label={messages.timePickerOpen}\n onMouseDown={event => event.preventDefault()}\n onClick={event => {\n event.stopPropagation();\n openPicker();\n }}\n >\n <TimePickerIcon />\n </button>\n </div>\n {allowClear && value && !disabled ? (\n <button\n type=\"button\"\n className=\"gcsa-time-picker__clear\"\n aria-label={messages.timePickerClear}\n onMouseDown={event => event.preventDefault()}\n onClick={event => {\n event.stopPropagation();\n onChange?.('');\n setOpen(false);\n }}\n >\n ×\n </button>\n ) : null}\n {open && !disabled ? (\n <div\n ref={panelRef}\n className={`gcsa-time-picker__panel gcsa-ui-surface gcsa-time-picker__panel--open${alignPanelEnd ? ' gcsa-time-picker__panel--align-end' : ''}`}\n role=\"dialog\"\n aria-label={messages.timePickerSelect}\n >\n <div className=\"gcsa-time-picker__spinner\">\n <div\n ref={hourColumn}\n className=\"gcsa-time-picker__column\"\n role=\"listbox\"\n aria-label={messages.timeHour}\n onScroll={event => handleScroll('hour', event)}\n >\n {hours.map(hour => (\n <button\n key={hour}\n type=\"button\"\n className={`gcsa-time-picker__cell${hour === draftHour ? ' gcsa-time-picker__cell--selected' : ''}`}\n role=\"option\"\n aria-selected={hour === draftHour}\n onMouseDown={event => event.preventDefault()}\n onClick={() => selectHour(hour)}\n >\n {hour}\n </button>\n ))}\n </div>\n <div\n ref={minuteColumn}\n className=\"gcsa-time-picker__column\"\n role=\"listbox\"\n aria-label={messages.timeMinute}\n onScroll={event => handleScroll('minute', event)}\n >\n {minutes.map(minute => (\n <button\n key={minute}\n type=\"button\"\n className={`gcsa-time-picker__cell${minute === draftMinute ? ' gcsa-time-picker__cell--selected' : ''}`}\n role=\"option\"\n aria-selected={minute === draftMinute}\n onMouseDown={event => event.preventDefault()}\n onClick={() => setDraft(`${draftHour}:${minute}`)}\n >\n {minute}\n </button>\n ))}\n </div>\n <div className=\"gcsa-time-picker__selection\" aria-hidden=\"true\" />\n </div>\n <div className=\"gcsa-time-picker__footer\">\n <button\n type=\"button\"\n className=\"gcsa-time-picker__link\"\n disabled={!nowOption}\n onMouseDown={event => event.preventDefault()}\n onClick={() => {\n syncDraft(nowOption);\n scrollColumns();\n }}\n >\n 此刻\n </button>\n <div className=\"gcsa-time-picker__actions\">\n <button type=\"button\" className=\"gcsa-time-picker__link\" onMouseDown={event => event.preventDefault()} onClick={cancel}>\n 取消\n </button>\n <button type=\"button\" className=\"gcsa-time-picker__confirm\" onMouseDown={event => event.preventDefault()} onClick={commit}>\n 确定\n </button>\n </div>\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n"],"names":["TimePickerIcon","jsxs","jsx","GcsaTimePicker","value","onChange","className","step","min","max","allowClear","invalid","placeholder","disabled","props","messages","useGcsaLocaleMessages","resolvedPlaceholder","root","useRef","panelRef","hourColumn","minuteColumn","timers","open","setOpen","useState","alignPanelEnd","setAlignPanelEnd","draft","setDraft","options","useMemo","gcsaBuildTimeOptions","hours","gcsaTimePickerHours","draftHour","draftMinute","minutes","gcsaTimePickerMinutes","nowOption","gcsaCurrentTimeOption","syncDraft","next","gcsaResolveTimeDraft","scrollColumns","gcsaTimePickerScrollTop","syncPanelAlignment","rect","panelWidth","_a","openPicker","selectHour","hour","nextMinute","handleScroll","type","event","element","values","nextValue","gcsaTimePickerScrollIndex","useEffect","close","commit","cancel","onKeyDown","index","delta","minute"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { GcsaTimelineItem } from '@gcsa/console-core';
2
+ export type GcsaTimelineProps = {
3
+ items: GcsaTimelineItem[];
4
+ };
5
+ export declare function GcsaTimeline({ items }: GcsaTimelineProps): import("react").JSX.Element;
@@ -0,0 +1,19 @@
1
+ import { jsx as a, jsxs as l } from "react/jsx-runtime";
2
+ import { useGcsaLocaleMessages as n } from "./hooks/useGcsaLocale.js";
3
+ function m({ items: i }) {
4
+ const s = n();
5
+ return /* @__PURE__ */ a("ol", { className: "gcsa-timeline", "aria-label": s.timelineLabel, children: i.map((e) => /* @__PURE__ */ l("li", { className: "gcsa-timeline__item", children: [
6
+ /* @__PURE__ */ a("span", { className: "gcsa-timeline__rail", "aria-hidden": "true", children: /* @__PURE__ */ a("span", { className: `gcsa-timeline__dot gcsa-timeline__dot--${e.tone ?? "primary"}` }) }),
7
+ /* @__PURE__ */ l("div", { className: "gcsa-timeline__body", children: [
8
+ /* @__PURE__ */ l("div", { className: "gcsa-timeline__meta", children: [
9
+ e.label ? /* @__PURE__ */ a("strong", { children: e.label }) : null,
10
+ e.time ? /* @__PURE__ */ a("time", { children: e.time }) : null
11
+ ] }),
12
+ /* @__PURE__ */ a("p", { children: e.content })
13
+ ] })
14
+ ] }, e.key)) });
15
+ }
16
+ export {
17
+ m as GcsaTimeline
18
+ };
19
+ //# sourceMappingURL=GcsaTimeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GcsaTimeline.js","sources":["../src/GcsaTimeline.tsx"],"sourcesContent":["import type { GcsaTimelineItem } from '@gcsa/console-core';\nimport { useGcsaLocaleMessages } from './hooks/useGcsaLocale';\n\nexport type GcsaTimelineProps = { items: GcsaTimelineItem[] };\n\nexport function GcsaTimeline({ items }: GcsaTimelineProps) {\n const messages = useGcsaLocaleMessages();\n\n return (\n <ol className=\"gcsa-timeline\" aria-label={messages.timelineLabel}>\n {items.map(item => (\n <li key={item.key} className=\"gcsa-timeline__item\">\n <span className=\"gcsa-timeline__rail\" aria-hidden=\"true\">\n <span className={`gcsa-timeline__dot gcsa-timeline__dot--${item.tone ?? 'primary'}`} />\n </span>\n <div className=\"gcsa-timeline__body\">\n <div className=\"gcsa-timeline__meta\">\n {item.label ? <strong>{item.label}</strong> : null}\n {item.time ? <time>{item.time}</time> : null}\n </div>\n <p>{item.content}</p>\n </div>\n </li>\n ))}\n </ol>\n );\n}\n"],"names":["GcsaTimeline","items","messages","useGcsaLocaleMessages","jsx","item","jsxs"],"mappings":";;AAKO,SAASA,EAAa,EAAE,OAAAC,KAA4B;AACzD,QAAMC,IAAWC,EAAA;AAEjB,SACE,gBAAAC,EAAC,MAAA,EAAG,WAAU,iBAAgB,cAAYF,EAAS,eAChD,UAAAD,EAAM,IAAI,CAAAI,MACT,gBAAAC,EAAC,MAAA,EAAkB,WAAU,uBAC3B,UAAA;AAAA,IAAA,gBAAAF,EAAC,QAAA,EAAK,WAAU,uBAAsB,eAAY,QAChD,UAAA,gBAAAA,EAAC,QAAA,EAAK,WAAW,0CAA0CC,EAAK,QAAQ,SAAS,IAAI,GACvF;AAAA,IACA,gBAAAC,EAAC,OAAA,EAAI,WAAU,uBACb,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,uBACZ,UAAA;AAAA,QAAAD,EAAK,QAAQ,gBAAAD,EAAC,UAAA,EAAQ,UAAAC,EAAK,OAAM,IAAY;AAAA,QAC7CA,EAAK,OAAO,gBAAAD,EAAC,QAAA,EAAM,UAAAC,EAAK,MAAK,IAAU;AAAA,MAAA,GAC1C;AAAA,MACA,gBAAAD,EAAC,KAAA,EAAG,UAAAC,EAAK,QAAA,CAAQ;AAAA,IAAA,EAAA,CACnB;AAAA,EAAA,EAAA,GAVOA,EAAK,GAWd,CACD,GACH;AAEJ;"}
@@ -0,0 +1,11 @@
1
+ import { GcsaMessageType } from '@gcsa/console-core';
2
+ export type GcsaToastItem = {
3
+ id: number;
4
+ message: string;
5
+ type: GcsaMessageType;
6
+ };
7
+ export type GcsaToastStackProps = {
8
+ toasts: GcsaToastItem[];
9
+ zIndex?: number;
10
+ };
11
+ export declare function GcsaToastStack({ toasts, zIndex }: GcsaToastStackProps): import("react").JSX.Element;
@@ -0,0 +1,45 @@
1
+ import { jsx as e, jsxs as i } from "react/jsx-runtime";
2
+ function s({ type: r }) {
3
+ return r === "success" ? /* @__PURE__ */ e("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ e(
4
+ "path",
5
+ {
6
+ d: "M20 6 9 17l-5-5",
7
+ stroke: "currentColor",
8
+ strokeWidth: "2",
9
+ strokeLinecap: "round",
10
+ strokeLinejoin: "round"
11
+ }
12
+ ) }) : r === "error" ? /* @__PURE__ */ i("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
13
+ /* @__PURE__ */ e("path", { d: "M15 9l-6 6M9 9l6 6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }),
14
+ /* @__PURE__ */ e("circle", { cx: "12", cy: "12", r: "9", stroke: "currentColor", strokeWidth: "1.75" })
15
+ ] }) : /* @__PURE__ */ i("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
16
+ /* @__PURE__ */ e("circle", { cx: "12", cy: "12", r: "9", stroke: "currentColor", strokeWidth: "1.75" }),
17
+ /* @__PURE__ */ e("path", { d: "M12 10v6M12 8h.01", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
18
+ ] });
19
+ }
20
+ function c({ toasts: r, zIndex: o }) {
21
+ return /* @__PURE__ */ e(
22
+ "div",
23
+ {
24
+ className: "gcsa-toast-region",
25
+ "aria-live": "polite",
26
+ style: o == null ? void 0 : { zIndex: o },
27
+ children: r.map((t) => /* @__PURE__ */ i(
28
+ "div",
29
+ {
30
+ className: `gcsa-toast gcsa-toast--${t.type}`,
31
+ role: "status",
32
+ children: [
33
+ /* @__PURE__ */ e("span", { className: "gcsa-toast__icon", "aria-hidden": "true", children: /* @__PURE__ */ e(s, { type: t.type }) }),
34
+ /* @__PURE__ */ e("span", { className: "gcsa-toast__content", children: t.message })
35
+ ]
36
+ },
37
+ t.id
38
+ ))
39
+ }
40
+ );
41
+ }
42
+ export {
43
+ c as GcsaToastStack
44
+ };
45
+ //# sourceMappingURL=GcsaToastStack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GcsaToastStack.js","sources":["../src/GcsaToastStack.tsx"],"sourcesContent":["import type { GcsaMessageType } from '@gcsa/console-core';\n\nexport type GcsaToastItem = {\n id: number;\n message: string;\n type: GcsaMessageType;\n};\n\nfunction ToastIcon({ type }: { type: GcsaMessageType }) {\n if (type === 'success') {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M20 6 9 17l-5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n\n if (type === 'error') {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M15 9l-6 6M9 9l6 6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeWidth=\"1.75\" />\n </svg>\n );\n }\n\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeWidth=\"1.75\" />\n <path d=\"M12 10v6M12 8h.01\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport type GcsaToastStackProps = {\n toasts: GcsaToastItem[];\n zIndex?: number;\n};\n\nexport function GcsaToastStack({ toasts, zIndex }: GcsaToastStackProps) {\n return (\n <div\n className=\"gcsa-toast-region\"\n aria-live=\"polite\"\n style={zIndex == null ? undefined : { zIndex }}\n >\n {toasts.map(toast => (\n <div\n key={toast.id}\n className={`gcsa-toast gcsa-toast--${toast.type}`}\n role=\"status\"\n >\n <span className=\"gcsa-toast__icon\" aria-hidden=\"true\">\n <ToastIcon type={toast.type} />\n </span>\n <span className=\"gcsa-toast__content\">{toast.message}</span>\n </div>\n ))}\n </div>\n );\n}\n"],"names":["ToastIcon","type","jsx","jsxs","GcsaToastStack","toasts","zIndex","toast"],"mappings":";AAQA,SAASA,EAAU,EAAE,MAAAC,KAAmC;AACtD,SAAIA,MAAS,YAET,gBAAAC,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,eAAY,QACtE,UAAA,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,IAAA;AAAA,EAAA,GAEnB,IAIAD,MAAS,UAET,gBAAAE,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,eAAY,QACtE,UAAA;AAAA,IAAA,gBAAAD,EAAC,QAAA,EAAK,GAAE,sBAAqB,QAAO,gBAAe,aAAY,KAAI,eAAc,QAAA,CAAQ;AAAA,IACzF,gBAAAA,EAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,QAAO,gBAAe,aAAY,OAAA,CAAO;AAAA,EAAA,GACzE,IAKF,gBAAAC,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,eAAY,QACtE,UAAA;AAAA,IAAA,gBAAAD,EAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,QAAO,gBAAe,aAAY,OAAA,CAAO;AAAA,IACvE,gBAAAA,EAAC,UAAK,GAAE,qBAAoB,QAAO,gBAAe,aAAY,KAAI,eAAc,QAAA,CAAQ;AAAA,EAAA,GAC1F;AAEJ;AAOO,SAASE,EAAe,EAAE,QAAAC,GAAQ,QAAAC,KAA+B;AACtE,SACE,gBAAAJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,aAAU;AAAA,MACV,OAAOI,KAAU,OAAO,SAAY,EAAE,QAAAA,EAAA;AAAA,MAErC,UAAAD,EAAO,IAAI,CAAAE,MACV,gBAAAJ;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAW,0BAA0BI,EAAM,IAAI;AAAA,UAC/C,MAAK;AAAA,UAEL,UAAA;AAAA,YAAA,gBAAAL,EAAC,QAAA,EAAK,WAAU,oBAAmB,eAAY,QAC7C,4BAACF,GAAA,EAAU,MAAMO,EAAM,KAAA,CAAM,EAAA,CAC/B;AAAA,YACA,gBAAAL,EAAC,QAAA,EAAK,WAAU,uBAAuB,YAAM,QAAA,CAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,QAPhDK,EAAM;AAAA,MAAA,CASd;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -0,0 +1,17 @@
1
+ import { ReactNode } from 'react';
2
+ export type GcsaTooltipPlacement = 'top' | 'right' | 'bottom' | 'left';
3
+ export type GcsaTooltipProps = {
4
+ content?: string;
5
+ tooltip?: ReactNode;
6
+ triggerLabel?: string;
7
+ placement?: GcsaTooltipPlacement;
8
+ disabled?: boolean;
9
+ openDelay?: number;
10
+ closeDelay?: number;
11
+ arrow?: boolean;
12
+ portalled?: boolean;
13
+ gutter?: number;
14
+ className?: string;
15
+ children?: ReactNode;
16
+ };
17
+ export declare function GcsaTooltip({ content, tooltip, triggerLabel, placement, disabled, openDelay, closeDelay, arrow, portalled, gutter, children }: GcsaTooltipProps): import("react").JSX.Element;
@@ -0,0 +1,43 @@
1
+ import { jsxs as n, jsx as o } from "react/jsx-runtime";
2
+ import { Tooltip as e } from "@ark-ui/react/tooltip";
3
+ import { Portal as C } from "@ark-ui/react/portal";
4
+ import { createGcsaPopupPositioning as G } from "@gcsa/console-core";
5
+ import { GcsaButton as P } from "./GcsaButton.js";
6
+ import { useGcsaLocaleMessages as N } from "./hooks/useGcsaLocale.js";
7
+ import { useGcsaPopupZIndex as b } from "./hooks/useGcsaPopupZIndex.js";
8
+ function z({
9
+ content: s = "",
10
+ tooltip: t,
11
+ triggerLabel: i,
12
+ placement: a = "top",
13
+ disabled: l = !1,
14
+ openDelay: c = 200,
15
+ closeDelay: p = 100,
16
+ arrow: d = !0,
17
+ portalled: m = !0,
18
+ gutter: g = 8,
19
+ children: u
20
+ }) {
21
+ const h = N(), { zIndex: r, onOpenChange: f } = b(), x = i ?? h.hoverToView, T = !!(s || t), _ = u ?? /* @__PURE__ */ o(P, { variant: "secondary", children: x }), v = r == null ? void 0 : { zIndex: r }, w = r == null ? void 0 : { zIndex: r };
22
+ return /* @__PURE__ */ n(
23
+ e.Root,
24
+ {
25
+ disabled: l || !T,
26
+ openDelay: c,
27
+ closeDelay: p,
28
+ positioning: G({ placement: a, gutter: g }),
29
+ onOpenChange: (y) => f(y.open),
30
+ children: [
31
+ /* @__PURE__ */ o(e.Trigger, { asChild: !0, children: _ }),
32
+ /* @__PURE__ */ o(C, { disabled: !m, children: /* @__PURE__ */ o(e.Positioner, { style: v, children: /* @__PURE__ */ n(e.Content, { className: "gcsa-tooltip gcsa-ui-surface", style: w, children: [
33
+ /* @__PURE__ */ o("span", { className: "gcsa-tooltip__text", children: t ?? s }),
34
+ d ? /* @__PURE__ */ o(e.Arrow, { className: "gcsa-tooltip__arrow", children: /* @__PURE__ */ o(e.ArrowTip, { className: "gcsa-tooltip__arrow-tip" }) }) : null
35
+ ] }) }) })
36
+ ]
37
+ }
38
+ );
39
+ }
40
+ export {
41
+ z as GcsaTooltip
42
+ };
43
+ //# sourceMappingURL=GcsaTooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GcsaTooltip.js","sources":["../src/GcsaTooltip.tsx"],"sourcesContent":["import type { CSSProperties, ReactNode } from 'react';\nimport { Tooltip } from '@ark-ui/react/tooltip';\nimport { Portal } from '@ark-ui/react/portal';\nimport { createGcsaPopupPositioning } from '@gcsa/console-core';\nimport { GcsaButton } from './GcsaButton';\nimport { useGcsaLocaleMessages } from './hooks/useGcsaLocale';\nimport { useGcsaPopupZIndex } from './hooks/useGcsaPopupZIndex';\n\nexport type GcsaTooltipPlacement = 'top' | 'right' | 'bottom' | 'left';\n\nexport type GcsaTooltipProps = {\n content?: string;\n tooltip?: ReactNode;\n triggerLabel?: string;\n placement?: GcsaTooltipPlacement;\n disabled?: boolean;\n openDelay?: number;\n closeDelay?: number;\n arrow?: boolean;\n portalled?: boolean;\n gutter?: number;\n className?: string;\n children?: ReactNode;\n};\n\nexport function GcsaTooltip({\n content = '',\n tooltip,\n triggerLabel,\n placement = 'top',\n disabled = false,\n openDelay = 200,\n closeDelay = 100,\n arrow = true,\n portalled = true,\n gutter = 8,\n children\n}: GcsaTooltipProps) {\n const messages = useGcsaLocaleMessages();\n const { zIndex, onOpenChange } = useGcsaPopupZIndex();\n const resolvedTriggerLabel = triggerLabel ?? messages.hoverToView;\n const hasContent = Boolean(content || tooltip);\n const trigger = children ?? (\n <GcsaButton variant=\"secondary\">\n {resolvedTriggerLabel}\n </GcsaButton>\n );\n\n const positionerStyle = (zIndex == null ? undefined : { zIndex }) as CSSProperties | undefined;\n const contentStyle = (zIndex == null ? undefined : { zIndex }) as CSSProperties | undefined;\n\n return (\n <Tooltip.Root\n disabled={disabled || !hasContent}\n openDelay={openDelay}\n closeDelay={closeDelay}\n positioning={createGcsaPopupPositioning({ placement, gutter })}\n onOpenChange={details => onOpenChange(details.open)}\n >\n <Tooltip.Trigger asChild>{trigger}</Tooltip.Trigger>\n <Portal disabled={!portalled}>\n <Tooltip.Positioner style={positionerStyle}>\n <Tooltip.Content className=\"gcsa-tooltip gcsa-ui-surface\" style={contentStyle}>\n <span className=\"gcsa-tooltip__text\">{tooltip ?? content}</span>\n {arrow ? (\n <Tooltip.Arrow className=\"gcsa-tooltip__arrow\">\n <Tooltip.ArrowTip className=\"gcsa-tooltip__arrow-tip\" />\n </Tooltip.Arrow>\n ) : null}\n </Tooltip.Content>\n </Tooltip.Positioner>\n </Portal>\n </Tooltip.Root>\n );\n}\n"],"names":["GcsaTooltip","content","tooltip","triggerLabel","placement","disabled","openDelay","closeDelay","arrow","portalled","gutter","children","messages","useGcsaLocaleMessages","zIndex","onOpenChange","useGcsaPopupZIndex","resolvedTriggerLabel","hasContent","trigger","jsx","GcsaButton","positionerStyle","contentStyle","jsxs","Tooltip","createGcsaPopupPositioning","details","Portal"],"mappings":";;;;;;;AAyBO,SAASA,EAAY;AAAA,EAC1B,SAAAC,IAAU;AAAA,EACV,SAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,YAAAC,IAAa;AAAA,EACb,OAAAC,IAAQ;AAAA,EACR,WAAAC,IAAY;AAAA,EACZ,QAAAC,IAAS;AAAA,EACT,UAAAC;AACF,GAAqB;AACnB,QAAMC,IAAWC,EAAA,GACX,EAAE,QAAAC,GAAQ,cAAAC,EAAA,IAAiBC,EAAA,GAC3BC,IAAuBd,KAAgBS,EAAS,aAChDM,IAAa,GAAQjB,KAAWC,IAChCiB,IAAUR,KACd,gBAAAS,EAACC,GAAA,EAAW,SAAQ,aACjB,UAAAJ,GACH,GAGIK,IAAmBR,KAAU,OAAO,SAAY,EAAE,QAAAA,EAAA,GAClDS,IAAgBT,KAAU,OAAO,SAAY,EAAE,QAAAA,EAAA;AAErD,SACE,gBAAAU;AAAA,IAACC,EAAQ;AAAA,IAAR;AAAA,MACC,UAAUpB,KAAY,CAACa;AAAA,MACvB,WAAAZ;AAAA,MACA,YAAAC;AAAA,MACA,aAAamB,EAA2B,EAAE,WAAAtB,GAAW,QAAAM,GAAQ;AAAA,MAC7D,cAAc,CAAAiB,MAAWZ,EAAaY,EAAQ,IAAI;AAAA,MAElD,UAAA;AAAA,QAAA,gBAAAP,EAACK,EAAQ,SAAR,EAAgB,SAAO,IAAE,UAAAN,GAAQ;AAAA,0BACjCS,GAAA,EAAO,UAAU,CAACnB,GACjB,UAAA,gBAAAW,EAACK,EAAQ,YAAR,EAAmB,OAAOH,GACzB,4BAACG,EAAQ,SAAR,EAAgB,WAAU,gCAA+B,OAAOF,GAC/D,UAAA;AAAA,UAAA,gBAAAH,EAAC,QAAA,EAAK,WAAU,sBAAsB,UAAAlB,KAAWD,GAAQ;AAAA,UACxDO,IACC,gBAAAY,EAACK,EAAQ,OAAR,EAAc,WAAU,uBACvB,UAAA,gBAAAL,EAACK,EAAQ,UAAR,EAAiB,WAAU,0BAAA,CAA0B,GACxD,IACE;AAAA,QAAA,EAAA,CACN,GACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -0,0 +1,11 @@
1
+ import { GcsaTransferOption } from '@gcsa/console-core';
2
+ export type GcsaTransferProps = {
3
+ options: GcsaTransferOption[];
4
+ value?: string[];
5
+ sourceTitle?: string;
6
+ targetTitle?: string;
7
+ disabled?: boolean;
8
+ onValueChange?: (keys: string[]) => void;
9
+ onChange?: (keys: string[]) => void;
10
+ };
11
+ export declare function GcsaTransfer({ options, value, sourceTitle, targetTitle, disabled, onValueChange, onChange }: GcsaTransferProps): import("react").JSX.Element;
@@ -0,0 +1,95 @@
1
+ import { jsxs as i, jsx as s } from "react/jsx-runtime";
2
+ import { useState as g, useMemo as T } from "react";
3
+ import { GcsaInput as k } from "./GcsaInput.js";
4
+ import { useGcsaLocaleMessages as $ } from "./hooks/useGcsaLocale.js";
5
+ function z({
6
+ options: u,
7
+ value: t = [],
8
+ sourceTitle: y,
9
+ targetTitle: L,
10
+ disabled: l = !1,
11
+ onValueChange: m,
12
+ onChange: _
13
+ }) {
14
+ const c = $(), w = y ?? c.transferSourceTitle, x = L ?? c.transferTargetTitle, [d, b] = g([]), [f, N] = g([]), [h, M] = g(""), [p, Q] = g(""), G = T(
15
+ () => u.filter(
16
+ (e) => !t.includes(e.value) && e.label.toLowerCase().includes(h.trim().toLowerCase())
17
+ ),
18
+ [u, h, t]
19
+ ), I = T(
20
+ () => u.filter(
21
+ (e) => t.includes(e.value) && e.label.toLowerCase().includes(p.trim().toLowerCase())
22
+ ),
23
+ [u, p, t]
24
+ ), v = (e) => {
25
+ m == null || m(e), _ == null || _(e), b([]), N([]);
26
+ }, j = (e, n) => {
27
+ const r = n === "source" ? d : f, a = r.includes(e) ? r.filter((o) => o !== e) : [...r, e];
28
+ n === "source" ? b(a) : N(a);
29
+ }, S = (e, n, r) => /* @__PURE__ */ i("section", { className: "gcsa-transfer__panel", "aria-label": n, children: [
30
+ /* @__PURE__ */ i("header", { className: "gcsa-transfer__header", children: [
31
+ /* @__PURE__ */ s("span", { children: n }),
32
+ /* @__PURE__ */ s("span", { children: e.length })
33
+ ] }),
34
+ /* @__PURE__ */ s("div", { className: "gcsa-transfer__search", children: /* @__PURE__ */ s(
35
+ k,
36
+ {
37
+ value: r === "source" ? h : p,
38
+ placeholder: c.searchPlaceholder,
39
+ disabled: l,
40
+ onValueChange: r === "source" ? M : Q
41
+ }
42
+ ) }),
43
+ /* @__PURE__ */ s("div", { className: "gcsa-transfer__list", role: "listbox", "aria-multiselectable": "true", children: e.length ? e.map((a) => {
44
+ const o = (r === "source" ? d : f).includes(a.value);
45
+ return /* @__PURE__ */ i(
46
+ "button",
47
+ {
48
+ type: "button",
49
+ className: `gcsa-transfer__item gcsa-focus-ring${o ? " gcsa-transfer__item--selected" : ""}`,
50
+ disabled: l || a.disabled,
51
+ role: "option",
52
+ "aria-selected": o,
53
+ onClick: () => j(a.value, r),
54
+ children: [
55
+ /* @__PURE__ */ s("span", { className: "gcsa-transfer__check", "aria-hidden": "true", children: o ? "✓" : "" }),
56
+ /* @__PURE__ */ s("span", { children: a.label })
57
+ ]
58
+ },
59
+ a.value
60
+ );
61
+ }) : /* @__PURE__ */ s("span", { className: "gcsa-transfer__empty", children: c.noOptions }) })
62
+ ] });
63
+ return /* @__PURE__ */ i("div", { className: `gcsa-transfer${l ? " gcsa-transfer--disabled" : ""}`, children: [
64
+ S(G, w, "source"),
65
+ /* @__PURE__ */ i("div", { className: "gcsa-transfer__actions", children: [
66
+ /* @__PURE__ */ s(
67
+ "button",
68
+ {
69
+ type: "button",
70
+ className: "gcsa-transfer__action gcsa-focus-ring",
71
+ disabled: l || !d.length,
72
+ "aria-label": c.transferMoveRight,
73
+ onClick: () => v([...t, ...d]),
74
+ children: "›"
75
+ }
76
+ ),
77
+ /* @__PURE__ */ s(
78
+ "button",
79
+ {
80
+ type: "button",
81
+ className: "gcsa-transfer__action gcsa-focus-ring",
82
+ disabled: l || !f.length,
83
+ "aria-label": c.transferMoveLeft,
84
+ onClick: () => v(t.filter((e) => !f.includes(e))),
85
+ children: "‹"
86
+ }
87
+ )
88
+ ] }),
89
+ S(I, x, "target")
90
+ ] });
91
+ }
92
+ export {
93
+ z as GcsaTransfer
94
+ };
95
+ //# sourceMappingURL=GcsaTransfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GcsaTransfer.js","sources":["../src/GcsaTransfer.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport type { GcsaTransferOption } from '@gcsa/console-core';\nimport { GcsaInput } from './GcsaInput';\nimport { useGcsaLocaleMessages } from './hooks/useGcsaLocale';\n\nexport type GcsaTransferProps = {\n options: GcsaTransferOption[];\n value?: string[];\n sourceTitle?: string;\n targetTitle?: string;\n disabled?: boolean;\n onValueChange?: (keys: string[]) => void;\n onChange?: (keys: string[]) => void;\n};\n\nexport function GcsaTransfer({\n options,\n value = [],\n sourceTitle,\n targetTitle,\n disabled = false,\n onValueChange,\n onChange\n}: GcsaTransferProps) {\n const messages = useGcsaLocaleMessages();\n const resolvedSourceTitle = sourceTitle ?? messages.transferSourceTitle;\n const resolvedTargetTitle = targetTitle ?? messages.transferTargetTitle;\n const [sourceSelected, setSourceSelected] = useState<string[]>([]);\n const [targetSelected, setTargetSelected] = useState<string[]>([]);\n const [sourceQuery, setSourceQuery] = useState('');\n const [targetQuery, setTargetQuery] = useState('');\n const availableItems = useMemo(\n () =>\n options.filter(\n item =>\n !value.includes(item.value) &&\n item.label.toLowerCase().includes(sourceQuery.trim().toLowerCase())\n ),\n [options, sourceQuery, value]\n );\n const targetItems = useMemo(\n () =>\n options.filter(\n item =>\n value.includes(item.value) &&\n item.label.toLowerCase().includes(targetQuery.trim().toLowerCase())\n ),\n [options, targetQuery, value]\n );\n const update = (next: string[]) => {\n onValueChange?.(next);\n onChange?.(next);\n setSourceSelected([]);\n setTargetSelected([]);\n };\n const toggle = (key: string, side: 'source' | 'target') => {\n const current = side === 'source' ? sourceSelected : targetSelected;\n const next = current.includes(key) ? current.filter(item => item !== key) : [...current, key];\n if (side === 'source') setSourceSelected(next);\n else setTargetSelected(next);\n };\n const panel = (items: GcsaTransferOption[], title: string, side: 'source' | 'target') => (\n <section className=\"gcsa-transfer__panel\" aria-label={title}>\n <header className=\"gcsa-transfer__header\">\n <span>{title}</span>\n <span>{items.length}</span>\n </header>\n <div className=\"gcsa-transfer__search\">\n <GcsaInput\n value={side === 'source' ? sourceQuery : targetQuery}\n placeholder={messages.searchPlaceholder}\n disabled={disabled}\n onValueChange={side === 'source' ? setSourceQuery : setTargetQuery}\n />\n </div>\n <div className=\"gcsa-transfer__list\" role=\"listbox\" aria-multiselectable=\"true\">\n {items.length ? (\n items.map(item => {\n const selected = (side === 'source' ? sourceSelected : targetSelected).includes(item.value);\n return (\n <button\n key={item.value}\n type=\"button\"\n className={`gcsa-transfer__item gcsa-focus-ring${selected ? ' gcsa-transfer__item--selected' : ''}`}\n disabled={disabled || item.disabled}\n role=\"option\"\n aria-selected={selected}\n onClick={() => toggle(item.value, side)}\n >\n <span className=\"gcsa-transfer__check\" aria-hidden=\"true\">\n {selected ? '✓' : ''}\n </span>\n <span>{item.label}</span>\n </button>\n );\n })\n ) : (\n <span className=\"gcsa-transfer__empty\">{messages.noOptions}</span>\n )}\n </div>\n </section>\n );\n return (\n <div className={`gcsa-transfer${disabled ? ' gcsa-transfer--disabled' : ''}`}>\n {panel(availableItems, resolvedSourceTitle, 'source')}\n <div className=\"gcsa-transfer__actions\">\n <button\n type=\"button\"\n className=\"gcsa-transfer__action gcsa-focus-ring\"\n disabled={disabled || !sourceSelected.length}\n aria-label={messages.transferMoveRight}\n onClick={() => update([...value, ...sourceSelected])}\n >\n ›\n </button>\n <button\n type=\"button\"\n className=\"gcsa-transfer__action gcsa-focus-ring\"\n disabled={disabled || !targetSelected.length}\n aria-label={messages.transferMoveLeft}\n onClick={() => update(value.filter(key => !targetSelected.includes(key)))}\n >\n ‹\n </button>\n </div>\n {panel(targetItems, resolvedTargetTitle, 'target')}\n </div>\n );\n}\n"],"names":["GcsaTransfer","options","value","sourceTitle","targetTitle","disabled","onValueChange","onChange","messages","useGcsaLocaleMessages","resolvedSourceTitle","resolvedTargetTitle","sourceSelected","setSourceSelected","useState","targetSelected","setTargetSelected","sourceQuery","setSourceQuery","targetQuery","setTargetQuery","availableItems","useMemo","item","targetItems","update","next","toggle","key","side","current","panel","items","title","jsxs","jsx","GcsaInput","selected"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { ReactNode } from 'react';
2
+ export type GcsaTreeNode = {
3
+ key: string;
4
+ label: ReactNode;
5
+ disabled?: boolean;
6
+ children?: GcsaTreeNode[];
7
+ };
8
+ export type GcsaTreeProps = {
9
+ nodes?: GcsaTreeNode[];
10
+ expandedKeys?: string[];
11
+ selectedKeys?: string[];
12
+ multiple?: boolean;
13
+ onExpandedKeysChange?: (keys: string[]) => void;
14
+ onSelectedKeysChange?: (keys: string[]) => void;
15
+ onSelect?: (node: GcsaTreeNode) => void;
16
+ };
17
+ export declare function GcsaTree({ nodes, expandedKeys, selectedKeys, multiple, onExpandedKeysChange, onSelectedKeysChange, onSelect }: GcsaTreeProps): import("react").JSX.Element;
@@ -0,0 +1,38 @@
1
+ import { jsx as t, jsxs as f } from "react/jsx-runtime";
2
+ import { useState as I, useEffect as y } from "react";
3
+ import { GcsaIcon as w } from "./GcsaIcon.js";
4
+ import { useGcsaLocaleMessages as B } from "./hooks/useGcsaLocale.js";
5
+ function A({ nodes: m = [], expandedKeys: s, selectedKeys: l, multiple: p = !1, onExpandedKeysChange: o, onSelectedKeysChange: d, onSelect: u }) {
6
+ const G = B(), [$, h] = I(() => s ?? []), [j, v] = I(() => l ?? []), g = s ?? $, _ = l ?? j;
7
+ y(() => {
8
+ s && h(s);
9
+ }, [s]), y(() => {
10
+ l && v(l);
11
+ }, [l]);
12
+ function b(a, c, z, D) {
13
+ var x;
14
+ const e = g.includes(a.key), k = _.includes(a.key), i = !!((x = a.children) != null && x.length), E = () => {
15
+ const r = e ? g.filter((n) => n !== a.key) : [...g, a.key];
16
+ s === void 0 && h(r), o == null || o(r);
17
+ }, N = `gcsa-tree-children-${a.key}`;
18
+ return /* @__PURE__ */ f("div", { className: "gcsa-tree__branch", role: "treeitem", "aria-level": c + 1, "aria-posinset": z, "aria-setsize": D, "aria-expanded": i ? e : void 0, children: [
19
+ /* @__PURE__ */ f("div", { className: "gcsa-tree__node", style: { paddingInlineStart: c * 20 + 8 }, "data-selected": k || void 0, "data-expanded": i ? e : void 0, "data-leaf": !i || void 0, children: [
20
+ i ? /* @__PURE__ */ t("button", { type: "button", className: "gcsa-tree__toggle gcsa-focus-ring", "aria-label": e ? "Collapse" : "Expand", "aria-expanded": e, "aria-controls": N, onClick: E, children: /* @__PURE__ */ t(w, { name: "chevronDown", size: "sm", className: `gcsa-tree__caret${e ? " gcsa-tree__caret--expanded" : ""}` }) }) : /* @__PURE__ */ t("span", { className: "gcsa-tree__spacer" }),
21
+ /* @__PURE__ */ t("button", { type: "button", className: "gcsa-tree__label gcsa-focus-ring", disabled: a.disabled, onClick: () => {
22
+ const r = p ? k ? _.filter((n) => n !== a.key) : [..._, a.key] : [a.key];
23
+ l === void 0 && v(r), d == null || d(r), u == null || u(a);
24
+ }, children: a.label }),
25
+ i && !e ? /* @__PURE__ */ f("span", { className: "gcsa-tree__summary", "aria-label": `${a.children.length} 项`, children: [
26
+ a.children.length,
27
+ " 项"
28
+ ] }) : null
29
+ ] }),
30
+ i && e ? /* @__PURE__ */ t("div", { id: N, className: "gcsa-tree__children", role: "group", children: a.children.map((r, n) => b(r, c + 1, n + 1, a.children.length)) }) : null
31
+ ] }, a.key);
32
+ }
33
+ return /* @__PURE__ */ t("div", { className: "gcsa-tree", role: "tree", "aria-multiselectable": p, children: m.length ? m.map((a, c) => b(a, 0, c + 1, m.length)) : /* @__PURE__ */ t("div", { className: "gcsa-tree__empty", role: "status", children: G.emptyDefault }) });
34
+ }
35
+ export {
36
+ A as GcsaTree
37
+ };
38
+ //# sourceMappingURL=GcsaTree.js.map