@grampro/kit 0.0.0-stage → 2.4.1

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 (505) hide show
  1. package/.gbs/skills/gbs-components/SKILL.md +190 -0
  2. package/.gbs/skills/gbs-components/references/accessibility.md +102 -0
  3. package/.gbs/skills/gbs-components/references/data-display.md +185 -0
  4. package/.gbs/skills/gbs-components/references/data-grid.md +116 -0
  5. package/.gbs/skills/gbs-components/references/forms.md +202 -0
  6. package/.gbs/skills/gbs-components/references/install.md +211 -0
  7. package/.gbs/skills/gbs-components/references/overlays.md +206 -0
  8. package/.gbs/skills/gbs-components/references/pickers.md +83 -0
  9. package/.gbs/skills/gbs-components/references/styling.md +246 -0
  10. package/.gbs/skills/gbs-components/references/toaster.md +57 -0
  11. package/CHANGELOG.md +173 -0
  12. package/LICENSE +15 -0
  13. package/README.md +193 -2
  14. package/index.cjs +1410 -0
  15. package/package.json +77 -6
  16. package/schema/passport-v1.schema.json +204 -0
  17. package/source/components/accordion/README.md +45 -0
  18. package/source/components/accordion/core/index.ts +2 -0
  19. package/source/components/accordion/core/open.ts +56 -0
  20. package/source/components/accordion/core/types.ts +17 -0
  21. package/source/components/accordion/index.ts +8 -0
  22. package/source/components/accordion/passport.json +259 -0
  23. package/source/components/accordion/react/Accordion.tsx +133 -0
  24. package/source/components/accordion/react/AccordionItem.tsx +120 -0
  25. package/source/components/accordion/react/context.ts +20 -0
  26. package/source/components/accordion/react/props.ts +13 -0
  27. package/source/components/accordion/styles.css +207 -0
  28. package/source/components/alert/README.md +39 -0
  29. package/source/components/alert/core/index.ts +2 -0
  30. package/source/components/alert/core/live.ts +25 -0
  31. package/source/components/alert/core/types.ts +7 -0
  32. package/source/components/alert/index.ts +5 -0
  33. package/source/components/alert/passport.json +250 -0
  34. package/source/components/alert/react/Alert.tsx +113 -0
  35. package/source/components/alert/react/icons.tsx +21 -0
  36. package/source/components/alert/react/locale.ts +5 -0
  37. package/source/components/alert/react/props.ts +11 -0
  38. package/source/components/alert/styles.css +154 -0
  39. package/source/components/avatar/core/identity.ts +103 -0
  40. package/source/components/avatar/core/index.ts +2 -0
  41. package/source/components/avatar/core/types.ts +12 -0
  42. package/source/components/avatar/index.ts +7 -0
  43. package/source/components/avatar/passport.json +294 -0
  44. package/source/components/avatar/react/Avatar.tsx +118 -0
  45. package/source/components/avatar/react/AvatarGroup.tsx +74 -0
  46. package/source/components/avatar/react/locale.ts +11 -0
  47. package/source/components/avatar/react/props.ts +6 -0
  48. package/source/components/avatar/styles.css +225 -0
  49. package/source/components/badge/README.md +37 -0
  50. package/source/components/badge/core/count.ts +37 -0
  51. package/source/components/badge/core/index.ts +2 -0
  52. package/source/components/badge/core/types.ts +11 -0
  53. package/source/components/badge/index.ts +7 -0
  54. package/source/components/badge/passport.json +332 -0
  55. package/source/components/badge/react/Badge.tsx +89 -0
  56. package/source/components/badge/react/Tag.tsx +82 -0
  57. package/source/components/badge/react/locale.ts +5 -0
  58. package/source/components/badge/react/props.ts +6 -0
  59. package/source/components/badge/styles.css +203 -0
  60. package/source/components/breadcrumb/README.md +34 -0
  61. package/source/components/breadcrumb/core/index.ts +4 -0
  62. package/source/components/breadcrumb/core/trail.ts +42 -0
  63. package/source/components/breadcrumb/core/types.ts +20 -0
  64. package/source/components/breadcrumb/index.ts +5 -0
  65. package/source/components/breadcrumb/passport.json +243 -0
  66. package/source/components/breadcrumb/react/Breadcrumb.tsx +177 -0
  67. package/source/components/breadcrumb/react/locale.ts +6 -0
  68. package/source/components/breadcrumb/react/props.ts +14 -0
  69. package/source/components/breadcrumb/styles.css +138 -0
  70. package/source/components/button/README.md +32 -0
  71. package/source/components/button/core/index.ts +3 -0
  72. package/source/components/button/core/state.ts +16 -0
  73. package/source/components/button/core/types.ts +28 -0
  74. package/source/components/button/index.ts +5 -0
  75. package/source/components/button/passport.json +402 -0
  76. package/source/components/button/passport.manual.json +31 -0
  77. package/source/components/button/react/Button.tsx +173 -0
  78. package/source/components/button/react/locale.ts +5 -0
  79. package/source/components/button/react/props.ts +23 -0
  80. package/source/components/button/styles.css +232 -0
  81. package/source/components/card/README.md +60 -0
  82. package/source/components/card/core/index.ts +4 -0
  83. package/source/components/card/core/trend.ts +32 -0
  84. package/source/components/card/core/types.ts +5 -0
  85. package/source/components/card/index.ts +5 -0
  86. package/source/components/card/passport.json +337 -0
  87. package/source/components/card/react/Card.tsx +133 -0
  88. package/source/components/card/react/Stat.tsx +127 -0
  89. package/source/components/card/react/props.ts +4 -0
  90. package/source/components/card/styles.css +230 -0
  91. package/source/components/checkbox/README.md +36 -0
  92. package/source/components/checkbox/core/group.ts +30 -0
  93. package/source/components/checkbox/core/index.ts +3 -0
  94. package/source/components/checkbox/core/types.ts +17 -0
  95. package/source/components/checkbox/index.ts +9 -0
  96. package/source/components/checkbox/passport.json +456 -0
  97. package/source/components/checkbox/react/Checkbox.tsx +147 -0
  98. package/source/components/checkbox/react/CheckboxGroup.tsx +149 -0
  99. package/source/components/checkbox/react/context.ts +16 -0
  100. package/source/components/checkbox/react/locale.ts +5 -0
  101. package/source/components/checkbox/react/props.ts +6 -0
  102. package/source/components/checkbox/styles.css +211 -0
  103. package/source/components/combobox/README.md +170 -0
  104. package/source/components/combobox/core/filter.ts +155 -0
  105. package/source/components/combobox/core/index.ts +16 -0
  106. package/source/components/combobox/core/types.ts +48 -0
  107. package/source/components/combobox/core/virtual.ts +67 -0
  108. package/source/components/combobox/index.ts +13 -0
  109. package/source/components/combobox/passport.json +456 -0
  110. package/source/components/combobox/react/Listbox.tsx +310 -0
  111. package/source/components/combobox/react/MultiSelect.tsx +265 -0
  112. package/source/components/combobox/react/Popover.tsx +38 -0
  113. package/source/components/combobox/react/Select.tsx +200 -0
  114. package/source/components/combobox/react/icons.tsx +11 -0
  115. package/source/components/combobox/react/locale.ts +16 -0
  116. package/source/components/combobox/react/props.ts +88 -0
  117. package/source/components/combobox/react/useCombobox.ts +409 -0
  118. package/source/components/combobox/styles.css +419 -0
  119. package/source/components/data-grid/README.md +233 -0
  120. package/source/components/data-grid/agent/coerce.ts +368 -0
  121. package/source/components/data-grid/agent/contract.ts +410 -0
  122. package/source/components/data-grid/agent/dataset.ts +92 -0
  123. package/source/components/data-grid/agent/engine.ts +470 -0
  124. package/source/components/data-grid/agent/executors.ts +155 -0
  125. package/source/components/data-grid/agent/index.ts +79 -0
  126. package/source/components/data-grid/agent/intent.ts +324 -0
  127. package/source/components/data-grid/agent/operations.ts +335 -0
  128. package/source/components/data-grid/agent/validate.ts +630 -0
  129. package/source/components/data-grid/agent/webmcp.ts +107 -0
  130. package/source/components/data-grid/core/columnHelper.ts +21 -0
  131. package/source/components/data-grid/core/columns.ts +288 -0
  132. package/source/components/data-grid/core/filtering.ts +237 -0
  133. package/source/components/data-grid/core/grid.ts +638 -0
  134. package/source/components/data-grid/core/index.ts +14 -0
  135. package/source/components/data-grid/core/rows.ts +64 -0
  136. package/source/components/data-grid/core/sorting.ts +133 -0
  137. package/source/components/data-grid/core/state.ts +82 -0
  138. package/source/components/data-grid/core/store.ts +52 -0
  139. package/source/components/data-grid/core/types.ts +302 -0
  140. package/source/components/data-grid/core/values.ts +98 -0
  141. package/source/components/data-grid/core/virtual.ts +85 -0
  142. package/source/components/data-grid/export/csv.ts +32 -0
  143. package/source/components/data-grid/export/download.ts +12 -0
  144. package/source/components/data-grid/export/pdf-font.ts +139 -0
  145. package/source/components/data-grid/export/pdf-writer.ts +113 -0
  146. package/source/components/data-grid/export/pdf.ts +379 -0
  147. package/source/components/data-grid/export/table.ts +73 -0
  148. package/source/components/data-grid/export/xlsx.ts +145 -0
  149. package/source/components/data-grid/export/zip.ts +87 -0
  150. package/source/components/data-grid/index.ts +14 -0
  151. package/source/components/data-grid/passport.json +1051 -0
  152. package/source/components/data-grid/passport.manual.json +255 -0
  153. package/source/components/data-grid/react/AskGrid.tsx +164 -0
  154. package/source/components/data-grid/react/Cell.tsx +282 -0
  155. package/source/components/data-grid/react/ColumnMenu.tsx +135 -0
  156. package/source/components/data-grid/react/DataGrid.tsx +335 -0
  157. package/source/components/data-grid/react/FilterForm.tsx +142 -0
  158. package/source/components/data-grid/react/HeaderRow.tsx +332 -0
  159. package/source/components/data-grid/react/Pagination.tsx +107 -0
  160. package/source/components/data-grid/react/Popover.tsx +35 -0
  161. package/source/components/data-grid/react/Row.tsx +85 -0
  162. package/source/components/data-grid/react/Toolbar.tsx +267 -0
  163. package/source/components/data-grid/react/Viewport.tsx +167 -0
  164. package/source/components/data-grid/react/context.ts +57 -0
  165. package/source/components/data-grid/react/hooks.ts +83 -0
  166. package/source/components/data-grid/react/icons.tsx +45 -0
  167. package/source/components/data-grid/react/keyboard.ts +110 -0
  168. package/source/components/data-grid/react/locale.ts +130 -0
  169. package/source/components/data-grid/styles.css +874 -0
  170. package/source/components/date-picker/README.md +141 -0
  171. package/source/components/date-picker/core/calendar.ts +266 -0
  172. package/source/components/date-picker/core/format.ts +170 -0
  173. package/source/components/date-picker/core/index.ts +41 -0
  174. package/source/components/date-picker/core/today.ts +72 -0
  175. package/source/components/date-picker/core/types.ts +68 -0
  176. package/source/components/date-picker/index.ts +16 -0
  177. package/source/components/date-picker/passport.json +407 -0
  178. package/source/components/date-picker/react/Calendar.tsx +160 -0
  179. package/source/components/date-picker/react/CalendarPanel.tsx +170 -0
  180. package/source/components/date-picker/react/DatePicker.tsx +249 -0
  181. package/source/components/date-picker/react/DateRangePicker.tsx +291 -0
  182. package/source/components/date-picker/react/MonthYearPanels.tsx +123 -0
  183. package/source/components/date-picker/react/Popover.tsx +45 -0
  184. package/source/components/date-picker/react/icons.tsx +15 -0
  185. package/source/components/date-picker/react/locale.ts +23 -0
  186. package/source/components/date-picker/react/props.ts +76 -0
  187. package/source/components/date-picker/react/useDatePicker.ts +557 -0
  188. package/source/components/date-picker/styles.css +445 -0
  189. package/source/components/dialog/README.md +39 -0
  190. package/source/components/dialog/core/api.ts +34 -0
  191. package/source/components/dialog/core/dialog.ts +11 -0
  192. package/source/components/dialog/core/index.ts +7 -0
  193. package/source/components/dialog/core/store.ts +81 -0
  194. package/source/components/dialog/core/types.ts +59 -0
  195. package/source/components/dialog/index.ts +7 -0
  196. package/source/components/dialog/passport.json +344 -0
  197. package/source/components/dialog/react/Dialog.tsx +279 -0
  198. package/source/components/dialog/react/DialogHost.tsx +45 -0
  199. package/source/components/dialog/react/icons.tsx +20 -0
  200. package/source/components/dialog/react/locale.ts +8 -0
  201. package/source/components/dialog/react/props.ts +13 -0
  202. package/source/components/dialog/styles.css +280 -0
  203. package/source/components/file-uploader/README.md +99 -0
  204. package/source/components/file-uploader/core/format.ts +79 -0
  205. package/source/components/file-uploader/core/index.ts +26 -0
  206. package/source/components/file-uploader/core/store.ts +432 -0
  207. package/source/components/file-uploader/core/transport.ts +154 -0
  208. package/source/components/file-uploader/core/types.ts +126 -0
  209. package/source/components/file-uploader/core/validate.ts +83 -0
  210. package/source/components/file-uploader/index.ts +7 -0
  211. package/source/components/file-uploader/passport.json +518 -0
  212. package/source/components/file-uploader/react/FileRow.tsx +268 -0
  213. package/source/components/file-uploader/react/FileUploader.tsx +511 -0
  214. package/source/components/file-uploader/react/icons.tsx +60 -0
  215. package/source/components/file-uploader/react/locale.ts +33 -0
  216. package/source/components/file-uploader/react/props.ts +31 -0
  217. package/source/components/file-uploader/react/useFileUploader.ts +32 -0
  218. package/source/components/file-uploader/styles.css +394 -0
  219. package/source/components/input/README.md +44 -0
  220. package/source/components/input/core/count.ts +5 -0
  221. package/source/components/input/core/index.ts +11 -0
  222. package/source/components/input/core/otp.ts +64 -0
  223. package/source/components/input/core/types.ts +14 -0
  224. package/source/components/input/index.ts +8 -0
  225. package/source/components/input/passport.json +536 -0
  226. package/source/components/input/react/Input.tsx +219 -0
  227. package/source/components/input/react/OtpInput.tsx +256 -0
  228. package/source/components/input/react/dom.ts +10 -0
  229. package/source/components/input/react/icons.tsx +17 -0
  230. package/source/components/input/react/locale.ts +9 -0
  231. package/source/components/input/react/props.ts +6 -0
  232. package/source/components/input/styles.css +295 -0
  233. package/source/components/menu/README.md +68 -0
  234. package/source/components/menu/core/index.ts +11 -0
  235. package/source/components/menu/core/navigation.ts +84 -0
  236. package/source/components/menu/core/types.ts +32 -0
  237. package/source/components/menu/index.ts +19 -0
  238. package/source/components/menu/passport.json +322 -0
  239. package/source/components/menu/react/Menu.tsx +371 -0
  240. package/source/components/menu/react/context.ts +31 -0
  241. package/source/components/menu/react/items.tsx +268 -0
  242. package/source/components/menu/react/locale.ts +6 -0
  243. package/source/components/menu/react/props.ts +4 -0
  244. package/source/components/menu/react/useMenuKeys.ts +124 -0
  245. package/source/components/menu/styles.css +224 -0
  246. package/source/components/modal/README.md +51 -0
  247. package/source/components/modal/core/dismiss.ts +29 -0
  248. package/source/components/modal/core/index.ts +3 -0
  249. package/source/components/modal/core/types.ts +27 -0
  250. package/source/components/modal/index.ts +5 -0
  251. package/source/components/modal/passport.json +289 -0
  252. package/source/components/modal/react/Modal.tsx +242 -0
  253. package/source/components/modal/react/icons.tsx +1 -0
  254. package/source/components/modal/react/locale.ts +5 -0
  255. package/source/components/modal/react/props.ts +17 -0
  256. package/source/components/modal/styles.css +241 -0
  257. package/source/components/number-input/README.md +53 -0
  258. package/source/components/number-input/core/format.ts +37 -0
  259. package/source/components/number-input/core/index.ts +4 -0
  260. package/source/components/number-input/core/parse.ts +118 -0
  261. package/source/components/number-input/core/step.ts +73 -0
  262. package/source/components/number-input/core/types.ts +32 -0
  263. package/source/components/number-input/index.ts +5 -0
  264. package/source/components/number-input/passport.json +541 -0
  265. package/source/components/number-input/react/NumberInput.tsx +465 -0
  266. package/source/components/number-input/react/icons.tsx +17 -0
  267. package/source/components/number-input/react/locale.ts +7 -0
  268. package/source/components/number-input/react/props.ts +11 -0
  269. package/source/components/number-input/styles.css +230 -0
  270. package/source/components/popover/README.md +44 -0
  271. package/source/components/popover/core/index.ts +2 -0
  272. package/source/components/popover/core/types.ts +12 -0
  273. package/source/components/popover/index.ts +4 -0
  274. package/source/components/popover/passport.json +238 -0
  275. package/source/components/popover/react/Popover.tsx +202 -0
  276. package/source/components/popover/react/locale.ts +5 -0
  277. package/source/components/popover/react/props.ts +4 -0
  278. package/source/components/popover/styles.css +148 -0
  279. package/source/components/progress/README.md +38 -0
  280. package/source/components/progress/core/index.ts +2 -0
  281. package/source/components/progress/core/progress.ts +40 -0
  282. package/source/components/progress/core/types.ts +23 -0
  283. package/source/components/progress/index.ts +7 -0
  284. package/source/components/progress/passport.json +270 -0
  285. package/source/components/progress/react/CircularProgress.tsx +106 -0
  286. package/source/components/progress/react/Progress.tsx +113 -0
  287. package/source/components/progress/react/locale.ts +7 -0
  288. package/source/components/progress/react/props.ts +6 -0
  289. package/source/components/progress/styles.css +200 -0
  290. package/source/components/radio-group/README.md +58 -0
  291. package/source/components/radio-group/core/group.ts +36 -0
  292. package/source/components/radio-group/core/index.ts +2 -0
  293. package/source/components/radio-group/core/types.ts +20 -0
  294. package/source/components/radio-group/index.ts +9 -0
  295. package/source/components/radio-group/passport.json +477 -0
  296. package/source/components/radio-group/react/Radio.tsx +144 -0
  297. package/source/components/radio-group/react/RadioGroup.tsx +179 -0
  298. package/source/components/radio-group/react/context.ts +18 -0
  299. package/source/components/radio-group/react/locale.ts +5 -0
  300. package/source/components/radio-group/react/props.ts +12 -0
  301. package/source/components/radio-group/styles.css +269 -0
  302. package/source/components/shared/README.md +54 -0
  303. package/source/components/shared/core/agent/adapter.ts +65 -0
  304. package/source/components/shared/core/agent/history.ts +120 -0
  305. package/source/components/shared/core/agent/index.ts +46 -0
  306. package/source/components/shared/core/agent/numbers.ts +217 -0
  307. package/source/components/shared/core/agent/schema.ts +180 -0
  308. package/source/components/shared/core/agent/types.ts +169 -0
  309. package/source/components/shared/core/agent/webmcp.ts +328 -0
  310. package/source/components/shared/core/cx.ts +9 -0
  311. package/source/components/shared/core/field.ts +35 -0
  312. package/source/components/shared/core/position.ts +124 -0
  313. package/source/components/shared/core/text.ts +14 -0
  314. package/source/components/shared/index.ts +17 -0
  315. package/source/components/shared/react/GramproAIProvider.tsx +50 -0
  316. package/source/components/shared/react/Popover.tsx +189 -0
  317. package/source/components/shared/react/icons.tsx +74 -0
  318. package/source/components/shared/react/useAskAgent.ts +217 -0
  319. package/source/components/shared/react/useControllableState.ts +42 -0
  320. package/source/components/shared/styles.css +79 -0
  321. package/source/components/shared/version.json +4 -0
  322. package/source/components/shared/version.ts +6 -0
  323. package/source/components/skeleton/README.md +58 -0
  324. package/source/components/skeleton/core/index.ts +3 -0
  325. package/source/components/skeleton/core/lines.ts +25 -0
  326. package/source/components/skeleton/core/types.ts +5 -0
  327. package/source/components/skeleton/index.ts +5 -0
  328. package/source/components/skeleton/passport.json +251 -0
  329. package/source/components/skeleton/react/Empty.tsx +51 -0
  330. package/source/components/skeleton/react/Skeleton.tsx +92 -0
  331. package/source/components/skeleton/react/props.ts +4 -0
  332. package/source/components/skeleton/styles.css +185 -0
  333. package/source/components/spinner/README.md +29 -0
  334. package/source/components/spinner/core/index.ts +3 -0
  335. package/source/components/spinner/core/types.ts +28 -0
  336. package/source/components/spinner/core/visibility.ts +34 -0
  337. package/source/components/spinner/index.ts +6 -0
  338. package/source/components/spinner/passport.json +245 -0
  339. package/source/components/spinner/react/Spinner.tsx +96 -0
  340. package/source/components/spinner/react/locale.ts +5 -0
  341. package/source/components/spinner/react/props.ts +4 -0
  342. package/source/components/spinner/react/useDelayedLoading.ts +39 -0
  343. package/source/components/spinner/styles.css +173 -0
  344. package/source/components/switch/README.md +46 -0
  345. package/source/components/switch/core/index.ts +2 -0
  346. package/source/components/switch/core/toggle.ts +54 -0
  347. package/source/components/switch/core/types.ts +9 -0
  348. package/source/components/switch/index.ts +5 -0
  349. package/source/components/switch/passport.json +421 -0
  350. package/source/components/switch/react/Switch.tsx +219 -0
  351. package/source/components/switch/react/locale.ts +5 -0
  352. package/source/components/switch/react/props.ts +12 -0
  353. package/source/components/switch/styles.css +227 -0
  354. package/source/components/tabs/README.md +32 -0
  355. package/source/components/tabs/core/index.ts +3 -0
  356. package/source/components/tabs/core/navigation.ts +54 -0
  357. package/source/components/tabs/core/types.ts +16 -0
  358. package/source/components/tabs/index.ts +5 -0
  359. package/source/components/tabs/passport.json +315 -0
  360. package/source/components/tabs/react/Tabs.tsx +306 -0
  361. package/source/components/tabs/react/context.ts +21 -0
  362. package/source/components/tabs/styles.css +263 -0
  363. package/source/components/textarea/README.md +39 -0
  364. package/source/components/textarea/core/count.ts +5 -0
  365. package/source/components/textarea/core/index.ts +4 -0
  366. package/source/components/textarea/core/size.ts +23 -0
  367. package/source/components/textarea/core/types.ts +17 -0
  368. package/source/components/textarea/index.ts +5 -0
  369. package/source/components/textarea/passport.json +382 -0
  370. package/source/components/textarea/react/Textarea.tsx +208 -0
  371. package/source/components/textarea/react/locale.ts +5 -0
  372. package/source/components/textarea/react/props.ts +4 -0
  373. package/source/components/textarea/styles.css +158 -0
  374. package/source/components/toaster/README.md +128 -0
  375. package/source/components/toaster/core/api.ts +87 -0
  376. package/source/components/toaster/core/index.ts +14 -0
  377. package/source/components/toaster/core/store.ts +211 -0
  378. package/source/components/toaster/core/toast.ts +12 -0
  379. package/source/components/toaster/core/types.ts +78 -0
  380. package/source/components/toaster/index.ts +6 -0
  381. package/source/components/toaster/passport.json +221 -0
  382. package/source/components/toaster/react/ToastItem.tsx +164 -0
  383. package/source/components/toaster/react/Toaster.tsx +187 -0
  384. package/source/components/toaster/react/icons.tsx +23 -0
  385. package/source/components/toaster/react/locale.ts +6 -0
  386. package/source/components/toaster/react/props.ts +15 -0
  387. package/source/components/toaster/react/useToasts.ts +11 -0
  388. package/source/components/toaster/styles.css +282 -0
  389. package/source/components/tooltip/README.md +43 -0
  390. package/source/components/tooltip/core/index.ts +4 -0
  391. package/source/components/tooltip/core/types.ts +4 -0
  392. package/source/components/tooltip/core/visibility.ts +34 -0
  393. package/source/components/tooltip/index.ts +3 -0
  394. package/source/components/tooltip/passport.json +170 -0
  395. package/source/components/tooltip/react/Tooltip.tsx +196 -0
  396. package/source/components/tooltip/react/props.ts +4 -0
  397. package/source/components/tooltip/styles.css +71 -0
  398. package/source/fallback/index.tsx +11 -0
  399. package/source/globalStyle.ts +74 -0
  400. package/source/hooks/SelectionHooks/type.ts +4 -0
  401. package/source/hooks/SelectionHooks/useClickOutside.ts +22 -0
  402. package/source/hooks/SelectionHooks/useMultiSelectState.ts +64 -0
  403. package/source/hooks/SelectionHooks/useSelectData.ts +58 -0
  404. package/source/hooks/SelectionHooks/useSelectState.ts +36 -0
  405. package/source/icon/Icon.tsx +102 -0
  406. package/source/icon/iconPaths.ts +206 -0
  407. package/source/legacy-components/bargraph/index.tsx +95 -0
  408. package/source/legacy-components/bargraph/type.ts +12 -0
  409. package/source/legacy-components/breadcrumb/index.tsx +66 -0
  410. package/source/legacy-components/breadcrumb/types.ts +10 -0
  411. package/source/legacy-components/button/index.tsx +42 -0
  412. package/source/legacy-components/card/index.tsx +31 -0
  413. package/source/legacy-components/checkbox/index.tsx +25 -0
  414. package/source/legacy-components/contextmenu/ContextMenu.tsx +87 -0
  415. package/source/legacy-components/contextmenu/ContextMenuItem.tsx +30 -0
  416. package/source/legacy-components/contextmenu/index.ts +2 -0
  417. package/source/legacy-components/contextmenu/types.ts +19 -0
  418. package/source/legacy-components/darkmode/index.tsx +55 -0
  419. package/source/legacy-components/datagrid/context/GridContext.tsx +215 -0
  420. package/source/legacy-components/datagrid/createTemplate.tsx +82 -0
  421. package/source/legacy-components/datagrid/hooks/index.ts +6 -0
  422. package/source/legacy-components/datagrid/hooks/useColumns.ts +33 -0
  423. package/source/legacy-components/datagrid/hooks/useDataSource.ts +54 -0
  424. package/source/legacy-components/datagrid/hooks/useFiltering.ts +169 -0
  425. package/source/legacy-components/datagrid/hooks/usePagination.ts +112 -0
  426. package/source/legacy-components/datagrid/hooks/useRowSelection.ts +48 -0
  427. package/source/legacy-components/datagrid/hooks/useSearch.ts +90 -0
  428. package/source/legacy-components/datagrid/index.tsx +28 -0
  429. package/source/legacy-components/datagrid/layout/FilterPopup.tsx +92 -0
  430. package/source/legacy-components/datagrid/layout/GridBody.tsx +184 -0
  431. package/source/legacy-components/datagrid/layout/GridPagination.tsx +119 -0
  432. package/source/legacy-components/datagrid/layout/GridToolbar.tsx +109 -0
  433. package/source/legacy-components/datagrid/layout/index.tsx +68 -0
  434. package/source/legacy-components/datagrid/type.ts +198 -0
  435. package/source/legacy-components/datepicker/index.tsx +365 -0
  436. package/source/legacy-components/datepicker/types.ts +12 -0
  437. package/source/legacy-components/dialog/index.tsx +44 -0
  438. package/source/legacy-components/dialog/types.ts +12 -0
  439. package/source/legacy-components/formrenderer/componentHandles/CheckBoxHandles.tsx +80 -0
  440. package/source/legacy-components/formrenderer/componentHandles/DatePickerHandles.tsx +93 -0
  441. package/source/legacy-components/formrenderer/componentHandles/InputHandles.tsx +106 -0
  442. package/source/legacy-components/formrenderer/componentHandles/MultiHandles.tsx +93 -0
  443. package/source/legacy-components/formrenderer/componentHandles/SelectHandles.tsx +95 -0
  444. package/source/legacy-components/formrenderer/helperFunctions.ts +72 -0
  445. package/source/legacy-components/formrenderer/index.tsx +93 -0
  446. package/source/legacy-components/formrenderer/types.ts +127 -0
  447. package/source/legacy-components/input/index.tsx +142 -0
  448. package/source/legacy-components/input/types.ts +10 -0
  449. package/source/legacy-components/materialInput/index.tsx +138 -0
  450. package/source/legacy-components/materialInput/types.ts +16 -0
  451. package/source/legacy-components/modal/index.tsx +152 -0
  452. package/source/legacy-components/modal/types.ts +19 -0
  453. package/source/legacy-components/multiselect/PortalDropDown.tsx +44 -0
  454. package/source/legacy-components/multiselect/index.tsx +269 -0
  455. package/source/legacy-components/multiselect/types.ts +26 -0
  456. package/source/legacy-components/navbar/AuthSection.tsx +98 -0
  457. package/source/legacy-components/navbar/MobileToggle.tsx +31 -0
  458. package/source/legacy-components/navbar/NavItemComponent.tsx +119 -0
  459. package/source/legacy-components/navbar/SearchBar.tsx +55 -0
  460. package/source/legacy-components/navbar/helperFunctions.ts +27 -0
  461. package/source/legacy-components/navbar/index.tsx +156 -0
  462. package/source/legacy-components/navbar/types.ts +69 -0
  463. package/source/legacy-components/select/PortalDropDown.tsx +59 -0
  464. package/source/legacy-components/select/index.tsx +249 -0
  465. package/source/legacy-components/select/types.ts +29 -0
  466. package/source/legacy-components/sidebar/components/MenuItem.tsx +101 -0
  467. package/source/legacy-components/sidebar/components/MenuSection.tsx +34 -0
  468. package/source/legacy-components/sidebar/components/SidebarFooter.tsx +50 -0
  469. package/source/legacy-components/sidebar/components/SidebarLogo.tsx +24 -0
  470. package/source/legacy-components/sidebar/components/SidebarMenu.tsx +29 -0
  471. package/source/legacy-components/sidebar/components/UserProfile.tsx +31 -0
  472. package/source/legacy-components/sidebar/hooks/useSidebarState.ts +41 -0
  473. package/source/legacy-components/sidebar/index.tsx +77 -0
  474. package/source/legacy-components/sidebar/type.ts +42 -0
  475. package/source/legacy-components/spinner/Stroke.tsx +89 -0
  476. package/source/legacy-components/spinner/index.tsx +54 -0
  477. package/source/legacy-components/spinner/types.ts +9 -0
  478. package/source/legacy-components/tabs/index.tsx +71 -0
  479. package/source/legacy-components/tabs/types.ts +16 -0
  480. package/source/legacy-components/textarea/index.tsx +123 -0
  481. package/source/legacy-components/textarea/types.ts +15 -0
  482. package/source/legacy-components/toast/ToastComponent.tsx +101 -0
  483. package/source/legacy-components/toast/ToastIcon.tsx +61 -0
  484. package/source/legacy-components/toast/index.tsx +42 -0
  485. package/source/legacy-components/toast/toastStore.ts +42 -0
  486. package/source/legacy-components/toast/types.ts +18 -0
  487. package/source/legacy-components/toast/useToast.ts +12 -0
  488. package/source/legacy-components/uploader/ProgressAnimation.tsx +50 -0
  489. package/source/legacy-components/uploader/UploadedFilePreview.tsx +130 -0
  490. package/source/legacy-components/uploader/index.tsx +311 -0
  491. package/source/legacy-components/uploader/types.ts +30 -0
  492. package/source/legacy-components/uploader/uploaderIcon.tsx +72 -0
  493. package/source/legacy-components/uploader/uploaderService.ts +134 -0
  494. package/source/legacy-components/useUploader/useUploader.tsx +310 -0
  495. package/source/legacy-components/usepaginateddata/usePaginatedData.ts +174 -0
  496. package/source/theme.ts +40 -0
  497. package/source/utils.ts +10 -0
  498. package/tools/env.cjs +61 -0
  499. package/tools/passport/cli.cjs +79 -0
  500. package/tools/passport/extract.cjs +493 -0
  501. package/tools/passport/index.cjs +185 -0
  502. package/tools/passport/merge.cjs +131 -0
  503. package/tools/passport/policy.cjs +65 -0
  504. package/tools/passport/validate.cjs +277 -0
  505. package/tools/ts-require.cjs +79 -0
@@ -0,0 +1,68 @@
1
+ import React, { forwardRef, useImperativeHandle } from "react";
2
+ import type { GridProps } from "../type";
3
+ import Pagination from "./GridPagination";
4
+ import GridBody from "./GridBody";
5
+ import GridToolbar from "./GridToolbar";
6
+ import { GridProvider, useGridContext } from "../context/GridContext";
7
+
8
+ // Main Grid component that uses context
9
+ export const GridMemoised = forwardRef((props: GridProps, ref) => {
10
+ return (
11
+ <GridProvider props={props}>
12
+ <GridContent ref={ref} />
13
+ </GridProvider>
14
+ );
15
+ });
16
+
17
+ // Internal component that uses context
18
+ const GridContent = forwardRef((_, ref) => {
19
+ const {
20
+ gridContainerClass,
21
+ handleSearch,
22
+ handleApplyFilter,
23
+ clearFilter,
24
+ goToPage,
25
+ nextPage,
26
+ prevPage,
27
+ goToFirstPage,
28
+ goToEndPage,
29
+ activeFilterArray,
30
+ } = useGridContext();
31
+
32
+ // Making Grid Functions Accessible in Parent
33
+ useImperativeHandle(
34
+ ref,
35
+ () => {
36
+ return {
37
+ goToPage,
38
+ nextPage,
39
+ prevPage,
40
+ goToFirstPage,
41
+ goToEndPage,
42
+ handleSearch,
43
+ handleApplyFilter,
44
+ clearFilter,
45
+ getActiveFilters: () => activeFilterArray,
46
+ };
47
+ },
48
+ [
49
+ goToPage,
50
+ nextPage,
51
+ prevPage,
52
+ goToFirstPage,
53
+ goToEndPage,
54
+ handleSearch,
55
+ handleApplyFilter,
56
+ clearFilter,
57
+ activeFilterArray,
58
+ ]
59
+ );
60
+
61
+ return (
62
+ <div className={gridContainerClass}>
63
+ <GridToolbar />
64
+ <GridBody />
65
+ <Pagination />
66
+ </div>
67
+ );
68
+ });
@@ -0,0 +1,198 @@
1
+ import type { ChangeEvent } from "react";
2
+
3
+ interface PageSettingsProps {
4
+ pageNumber: number;
5
+ totalCount?: number;
6
+ }
7
+
8
+ export interface ActiveFilterArrayValue {
9
+ filterColumn: string;
10
+ filterCondition: string;
11
+ filterValue: string;
12
+ }
13
+
14
+ export type GridProps = {
15
+ dataSource: any[] | string;
16
+ columns?: any[];
17
+ pageSettings?: PageSettingsProps;
18
+ pageSize?: number;
19
+ enableSearch?: boolean;
20
+ lazy?: boolean;
21
+ enableExcelExport?: boolean;
22
+ excelName?: string;
23
+ enablePdfExport?: boolean;
24
+ pdfName?: string;
25
+ gridContainerClass?: string;
26
+ gridButtonClass?: string;
27
+ gridHeaderClass?: string;
28
+ gridToolbarClass?: string;
29
+ gridPaginationClass?: string;
30
+ gridRowEvenClass?: string;
31
+ gridRowOddClass?: string;
32
+ gridRowSelectedClass?: string;
33
+ gridGlobalSearchButtonClass?: string;
34
+ gridPaginationButtonClass?: string;
35
+ pdfOptions?: any;
36
+ isFetching?: boolean;
37
+ showPagination?: boolean;
38
+ selectAll?: boolean;
39
+ onSelectRow?: (value: any) => void;
40
+ tableHeaderStyle?: string;
41
+ gridColumnStyleSelectAll?: string;
42
+ gridColumnStyle?: string;
43
+ rowChange?: (rowData: any) => void;
44
+ onRowClick?: (rowData: any) => void;
45
+ pageStatus?: ({ currentPage }: { currentPage: number }) => void;
46
+ onPageChange?: ({ currentPage }: { currentPage: number }) => void;
47
+ activeFilterArrayValue?: ActiveFilterArrayValue[] | any;
48
+ onFilterChange?: (filters: ActiveFilterArrayValue[]) => void;
49
+ searchParamValue?: (value: string) => void;
50
+ onSearchChange?: (value: string) => void;
51
+ showTotalPages?: boolean;
52
+ onSearch?: (value: string) => void;
53
+ onToolbarButtonClick?: (action: string) => void;
54
+ initialFilters?: ActiveFilterArrayValue[];
55
+ initialSearchParam?: string;
56
+ };
57
+
58
+ interface GridColumn {
59
+ key: string;
60
+ label: string;
61
+ [key: string]: any;
62
+ }
63
+
64
+ interface PDFExportOptions {
65
+ layout: "portrait" | "landscape";
66
+ paperSize:
67
+ | "a3"
68
+ | "a4"
69
+ | "letter"
70
+ | "legal"
71
+ | "tabloid"
72
+ | "statement"
73
+ | "executive";
74
+ }
75
+
76
+ export type GridToolbarProps = {
77
+ enableExcelExport: boolean;
78
+ enableSearch: boolean;
79
+ enablePdfExport: boolean;
80
+ gridButtonClass: string;
81
+ workingDataSource: any[];
82
+ columns: GridColumn[];
83
+ excelName: string;
84
+ pdfName: string;
85
+ pdfOptions: PDFExportOptions;
86
+ searchParam: string;
87
+ handleSearchInput: (event: ChangeEvent<HTMLInputElement>) => void;
88
+ handleSearch: (searchTerm: string) => void;
89
+ };
90
+
91
+ export type PaginationProps = {
92
+ goToFirstPage: () => void;
93
+ currentPage: number;
94
+ prevPage: () => void;
95
+ pageStart: number;
96
+ goToPage: (page: number) => void;
97
+ workingDataSource: any[];
98
+ pageEnd: number;
99
+ totalPages: number;
100
+ nextPage: () => void;
101
+ goToEndPage: () => void;
102
+ };
103
+
104
+ export type Column = {
105
+ field: string;
106
+ headerText?: string;
107
+ width?: number;
108
+ filter?: boolean;
109
+ template?: React.FC<{
110
+ rowData: any;
111
+ rowIndex: number;
112
+ rowChange: (changes: any) => void;
113
+ }>;
114
+ tooltip?: boolean;
115
+ showFilterPopup?: boolean;
116
+ };
117
+
118
+ export type GridBodyProps = {
119
+ selectAll?: boolean;
120
+ handleSelectAll: () => void;
121
+ workingColumns: Column[];
122
+ tableHeaderStyle: string;
123
+ toggleFilterPopup: (index: number) => void;
124
+ activeFilterArray: { filterColumn: string }[];
125
+ handleFilterAction: (action: any, index: number) => void;
126
+ workingDataSource: any[];
127
+ isFetching: boolean | undefined;
128
+ currentPage: number;
129
+ pageSettings: { pageNumber: number };
130
+ gridColumnStyleSelectAll: string;
131
+ isRowSelected: (rowData: any) => boolean;
132
+ handleSelect: (rowData: any) => void;
133
+ gridColumnStyle: string;
134
+ rowChange?: (changes: any) => void;
135
+ };
136
+
137
+ export interface GridContextType {
138
+ workingDataSource: any[];
139
+ fallbackSourceData: any[];
140
+ workingColumns: any[];
141
+ currentPage: number;
142
+ pageStart: number;
143
+ pageEnd: number;
144
+ totalPages: number;
145
+ searchParam: string;
146
+ activeFilterArray: any[];
147
+ selectedRows: any[];
148
+ isFetching: boolean | undefined;
149
+
150
+ // Navigation methods
151
+ nextPage: () => void;
152
+ prevPage: () => void;
153
+ goToEndPage: () => void;
154
+ goToFirstPage: () => void;
155
+ goToPage: (page: number) => void;
156
+ lazy: boolean;
157
+
158
+ // Search methods
159
+ handleSearchInput: (e: any) => void;
160
+ handleSearch: (searchParam: string) => void;
161
+
162
+ // Filter methods
163
+ toggleFilterPopup: (index: number) => void;
164
+ handleApplyFilter: (event: any) => void;
165
+ clearFilter: (event: any) => void;
166
+ handleFilterAction: (action: any, colIndex: number) => void;
167
+
168
+ // Row selection methods
169
+ handleSelectAll: (event: React.ChangeEvent<HTMLInputElement>) => void;
170
+ handleSelect: (rowData: any) => void;
171
+ isRowSelected: (rowData: any) => boolean;
172
+
173
+ // Grid settings
174
+ columns: any[];
175
+ pageSettings: any;
176
+ pageSize: number;
177
+ enableSearch: boolean;
178
+ enableExcelExport: boolean;
179
+ enablePdfExport: boolean;
180
+ excelName: string;
181
+ pdfName: string;
182
+ pdfOptions: any;
183
+ gridButtonClass: string;
184
+ selectAll: boolean;
185
+ tableHeaderStyle: string;
186
+ gridContainerClass: string;
187
+ gridToolbarClass: string;
188
+ gridPaginationClass: string;
189
+ gridRowEvenClass: string;
190
+ gridRowOddClass: string;
191
+ gridRowSelectedClass: string;
192
+ gridColumnStyleSelectAll: string;
193
+ gridColumnStyle: string;
194
+ rowChange: (rowData: any) => void;
195
+ showTotalPages?: boolean;
196
+ onSearch?: (searchParam: string) => void;
197
+ onToolbarButtonClick?: (action: string) => void;
198
+ }
@@ -0,0 +1,365 @@
1
+ /**
2
+ * Copyright (c) Grampro Business Services and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import React, { useRef } from "react";
9
+ import {
10
+ useDatePickerState,
11
+ useYearMonthNavigation,
12
+ useClickOutside,
13
+ isAtYearLimit,
14
+ months,
15
+ applyScrollbarStyles,
16
+ } from "@grampro/headless-helpers";
17
+ import Icon from "../icon/Icon";
18
+ import { calender, down, leftArrow, rightArrow, x } from "../icon/iconPaths";
19
+ import type { DatePickerProps } from "./types";
20
+ import { iconClass, popUp, primary } from "../globalStyle";
21
+
22
+ export const DatePicker = ({
23
+ selectedDateValue,
24
+ minDate = null,
25
+ maxDate = null,
26
+ yearLimitStart = 50,
27
+ yearLimitEnd = 0,
28
+ onDateChange,
29
+ name,
30
+ error,
31
+ placeholder = "Select a date",
32
+ disabled = false,
33
+ ...props
34
+ }: DatePickerProps) => {
35
+ applyScrollbarStyles();
36
+
37
+ const dateRef = useRef<HTMLDivElement>(null);
38
+ const today = new Date();
39
+ const actualCurrentYear = today.getFullYear();
40
+
41
+ const {
42
+ showDatepicker,
43
+ setShowDatepicker,
44
+ showYearMonthPicker,
45
+ setShowYearMonthPicker,
46
+ currentMonth,
47
+ setCurrentMonth,
48
+ currentYear,
49
+ setCurrentYear,
50
+ days,
51
+ selectedDate,
52
+ setSelectedDate,
53
+ tempSelectedDate,
54
+ setTempSelectedDate,
55
+ hasMounted,
56
+ clearSelected,
57
+ } = useDatePickerState(selectedDateValue || null);
58
+
59
+ const { prevMonth, nextMonth } = useYearMonthNavigation(
60
+ currentMonth,
61
+ currentYear,
62
+ yearLimitStart,
63
+ yearLimitEnd,
64
+ setCurrentMonth,
65
+ setCurrentYear
66
+ );
67
+
68
+ useClickOutside(
69
+ dateRef as React.RefObject<HTMLElement>,
70
+ () => {
71
+ setShowDatepicker(false);
72
+ setTempSelectedDate(selectedDate || new Date());
73
+ },
74
+ [selectedDate]
75
+ );
76
+
77
+ const years = Array.from(
78
+ { length: yearLimitStart + yearLimitEnd + 1 },
79
+ (_, i) => actualCurrentYear - yearLimitStart + i
80
+ ).sort((a, b) => b - a);
81
+
82
+ const toggleDatepicker = () => {
83
+ setShowDatepicker(!showDatepicker);
84
+ setShowYearMonthPicker(false);
85
+ if (!showDatepicker) {
86
+ setTempSelectedDate(selectedDate || new Date());
87
+ const date = selectedDate || new Date();
88
+ setCurrentMonth(date.getMonth());
89
+ setCurrentYear(date.getFullYear());
90
+ }
91
+ };
92
+
93
+ const toggleYearMonthPicker = () => {
94
+ setShowYearMonthPicker(!showYearMonthPicker);
95
+ };
96
+
97
+ const selectDate = (date: Date) => {
98
+ setSelectedDate(date);
99
+ setTempSelectedDate(date);
100
+ setShowDatepicker(false);
101
+ if (onDateChange) onDateChange(date);
102
+ };
103
+
104
+ const selectYearMonth = (year: number, month: number) => {
105
+ setCurrentYear(year);
106
+ setCurrentMonth(month);
107
+ setShowYearMonthPicker(false);
108
+ };
109
+
110
+ const goToToday = () => {
111
+ const today = new Date();
112
+ setCurrentMonth(today.getMonth());
113
+ setCurrentYear(today.getFullYear());
114
+ setSelectedDate(today);
115
+ setTempSelectedDate(today);
116
+ if (onDateChange) onDateChange(today);
117
+ setShowDatepicker(false);
118
+ };
119
+
120
+ if (!hasMounted) {
121
+ return null;
122
+ }
123
+
124
+ const clearSelectedHandler = () => {
125
+ clearSelected();
126
+ if (onDateChange) onDateChange(null);
127
+ };
128
+
129
+ return (
130
+ <div className="relative inline-block w-full" ref={dateRef}>
131
+ <div
132
+ className={`${
133
+ error ? primary["error-border"] : "border border-gray-300"
134
+ } p-2 rounded-lg w-full flex items-center justify-between gap-2 ${
135
+ disabled ? "opacity-50 cursor-not-allowed" : ""
136
+ }`}
137
+ >
138
+ <button
139
+ type="button"
140
+ onClick={toggleDatepicker}
141
+ disabled={disabled}
142
+ className="flex items-center gap-2 w-full cursor-pointer"
143
+ >
144
+ <Icon
145
+ dimensions={{ width: "20", height: "20" }}
146
+ elements={calender}
147
+ svgClass={iconClass["grey-common"]}
148
+ />
149
+ <span className={!selectedDate ? "text-gray-400 text-sm" : "text-sm"}>
150
+ {selectedDate
151
+ ? selectedDate.toLocaleDateString("en-GB")
152
+ : placeholder}
153
+ </span>
154
+ </button>
155
+
156
+ {selectedDate && !disabled && (
157
+ <button onClick={clearSelectedHandler} type="button">
158
+ <Icon elements={x} svgClass={iconClass["grey-common"]} />
159
+ </button>
160
+ )}
161
+ </div>
162
+
163
+ {error && <p className={primary["error-primary"]}>{error}</p>}
164
+
165
+ <input
166
+ type="hidden"
167
+ name={name}
168
+ value={selectedDate?.toDateString() || ""}
169
+ readOnly
170
+ {...props}
171
+ />
172
+
173
+ {showDatepicker && !disabled && (
174
+ <div className={popUp["pop-up-style-calender"]}>
175
+ <div className="flex justify-between items-center p-2 text-xs">
176
+ <div className="flex items-center space-x-2">
177
+ <span className="text-md font-semibold">
178
+ {new Date(currentYear, currentMonth).toLocaleString("default", {
179
+ month: "long",
180
+ })}{" "}
181
+ {currentYear}
182
+ </span>
183
+ <button
184
+ onClick={toggleYearMonthPicker}
185
+ className=""
186
+ type="button"
187
+ >
188
+ <Icon
189
+ elements={down}
190
+ svgClass={"stroke-black fill-none dark:stroke-white"}
191
+ dimensions={{ width: "20", height: "20" }}
192
+ />
193
+ </button>
194
+ </div>
195
+
196
+ <div className="flex items-center space-x-2">
197
+ <button
198
+ type="button"
199
+ onClick={prevMonth}
200
+ disabled={isAtYearLimit(
201
+ "prev",
202
+ currentMonth,
203
+ currentYear,
204
+ yearLimitStart,
205
+ yearLimitEnd
206
+ )}
207
+ className={`text-gray-500 hover:text-gray-700 w-8 h-8 rounded-full flex items-center justify-center hover:bg-gray-100 ${
208
+ isAtYearLimit(
209
+ "prev",
210
+ currentMonth,
211
+ currentYear,
212
+ yearLimitStart,
213
+ yearLimitEnd
214
+ )
215
+ ? "opacity-50"
216
+ : ""
217
+ }`}
218
+ >
219
+ <Icon
220
+ elements={leftArrow}
221
+ svgClass={"stroke-black fill-none dark:stroke-white"}
222
+ dimensions={{ width: "20", height: "20" }}
223
+ />
224
+ </button>
225
+
226
+ <button
227
+ type="button"
228
+ onClick={nextMonth}
229
+ disabled={isAtYearLimit(
230
+ "next",
231
+ currentMonth,
232
+ currentYear,
233
+ yearLimitStart,
234
+ yearLimitEnd
235
+ )}
236
+ className={`text-gray-500 hover:text-gray-700 w-8 h-8 rounded-full flex items-center justify-center hover:bg-gray-100 ${
237
+ isAtYearLimit(
238
+ "next",
239
+ currentMonth,
240
+ currentYear,
241
+ yearLimitStart,
242
+ yearLimitEnd
243
+ )
244
+ ? "opacity-50"
245
+ : ""
246
+ }`}
247
+ >
248
+ <Icon
249
+ elements={rightArrow}
250
+ svgClass={"stroke-black fill-none dark:stroke-white"}
251
+ dimensions={{ width: "20", height: "20" }}
252
+ />
253
+ </button>
254
+ </div>
255
+ </div>
256
+ {showYearMonthPicker ? (
257
+ <div className="flex p-2 h-[224px] scrollbar">
258
+ <div className="w-1/2 pr-1">
259
+ <h3 className="text-sm font-semibold mb-1">Month</h3>
260
+ <div className="overflow-y-auto h-[200px] scrollbar-thin scrollbar-thumb-gray-300 scrollbar-track-gray-100 scrollbar">
261
+ {months.map((month, index) => (
262
+ <button
263
+ type="button"
264
+ key={month}
265
+ onClick={() => selectYearMonth(currentYear, index)}
266
+ className={`w-full text-left p-2 cursor-pointer rounded hover:bg-gray-200 transition duration-150 ease-in-out ${
267
+ index === currentMonth
268
+ ? "bg-black text-white dark:bg-zinc-500"
269
+ : ""
270
+ }`}
271
+ >
272
+ {month}
273
+ </button>
274
+ ))}
275
+ </div>
276
+ </div>
277
+ <div className="w-1/2 pl-1">
278
+ <h3 className="text-sm font-semibold mb-1">Year</h3>
279
+ <div className="overflow-y-auto h-[200px] scrollbar-thin scrollbar-thumb-gray-300 scrollbar-track-gray-100 scrollbar">
280
+ {years.map((year) => (
281
+ <button
282
+ type="button"
283
+ key={year}
284
+ onClick={() => selectYearMonth(year, currentMonth)}
285
+ className={`w-full text-left p-2 cursor-pointer rounded hover:bg-gray-200 transition duration-150 ease-in-out ${
286
+ year === currentYear
287
+ ? "bg-black text-white dark:bg-zinc-500"
288
+ : ""
289
+ }`}
290
+ >
291
+ {year}
292
+ </button>
293
+ ))}
294
+ </div>
295
+ </div>
296
+ </div>
297
+ ) : (
298
+ <div className="grid grid-cols-7 gap-1 p-2">
299
+ {["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map((day) => (
300
+ <div key={day} className="text-center font-bold text-xs p-1">
301
+ {day}
302
+ </div>
303
+ ))}
304
+ {days.flat().map((day: Date | null, index: number) => {
305
+ if (!day) {
306
+ return (
307
+ <div
308
+ key={index}
309
+ className="text-center p-1 w-8 h-8 text-xs"
310
+ ></div>
311
+ );
312
+ }
313
+ const isDisabled: boolean | undefined =
314
+ (minDate && day < minDate) ||
315
+ (maxDate && day > maxDate) ||
316
+ undefined;
317
+ const isSelected =
318
+ day.getDate() === tempSelectedDate?.getDate() &&
319
+ day.getMonth() === tempSelectedDate?.getMonth() &&
320
+ day.getFullYear() === tempSelectedDate?.getFullYear();
321
+
322
+ return (
323
+ <button
324
+ type="button"
325
+ key={index}
326
+ onClick={() => !isDisabled && selectDate(day)}
327
+ disabled={isDisabled}
328
+ className={`text-center text-xs p-1 w-8 h-8 cursor-pointer rounded-md transition duration-150 ease-in-out ${
329
+ isSelected
330
+ ? "bg-black text-white hover:bg-zinc-900 dark:bg-white dark:text-black dark:hover:bg-zinc-200"
331
+ : "hover:bg-gray-200 dark:hover:bg-zinc-800"
332
+ } ${
333
+ isDisabled
334
+ ? "bg-gray-100 text-gray-400 cursor-not-allowed dark:bg-zinc-900 dark:text-zinc-600"
335
+ : ""
336
+ }`}
337
+ >
338
+ {day.getDate()}
339
+ </button>
340
+ );
341
+ })}
342
+ </div>
343
+ )}
344
+ <div className="px-2 py-2 flex justify-between mb-8 text-xs">
345
+ <button
346
+ type="button"
347
+ onClick={goToToday}
348
+ className="text-black hover:text-zinc-650 transition duration-150 ease-in-out dark:text-zinc-400 dark:hover:text-zinc-200 font-semibold"
349
+ >
350
+ Today
351
+ </button>
352
+ <button
353
+ type="button"
354
+ onClick={toggleDatepicker}
355
+ className="text-gray-500 hover:text-gray-600 transition duration-150 ease-in-out"
356
+ >
357
+ Close
358
+ </button>
359
+ </div>
360
+ </div>
361
+ )}
362
+ </div>
363
+ );
364
+ };
365
+
@@ -0,0 +1,12 @@
1
+ export type DatePickerProps = {
2
+ placeholder?: string | undefined;
3
+ selectedDateValue?: Date;
4
+ minDate?: Date | null;
5
+ maxDate?: Date | null;
6
+ yearLimitStart?: number;
7
+ yearLimitEnd?: number;
8
+ onDateChange?: (date: Date | null) => void;
9
+ name?: string;
10
+ error?: string;
11
+ disabled?: boolean;
12
+ };
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Copyright (c) Grampro Business Services and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import React from "react";
9
+ import { twMerge } from "tailwind-merge";
10
+ import type { DialogProps } from "./types";
11
+
12
+ export const Dialog = ({
13
+ showDialog = false,
14
+ dialogMessage = "Are you sure?",
15
+ dialogActionOne = "OK",
16
+ dialogActionTwo = "Cancel",
17
+ onDialogActionOneClick,
18
+ onDialogActionTwoClick,
19
+ dialogClass = "bg-white p-4 rounded-lg shadow-lg w-96",
20
+ dialogContentClass = "text-lg",
21
+ dialogActionOneStyle = "bg-black hover:bg-black text-white font-bold px-2 py-1 rounded mt-4",
22
+ dialogActionTwoStyle = "border text-black font-bold px-2 py-1 rounded mt-4 ml-2",
23
+ }: DialogProps) => {
24
+ if (!showDialog) return null;
25
+ return (
26
+ <div
27
+ className={twMerge(
28
+ dialogClass,
29
+ "fixed top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"
30
+ )}
31
+ role="dialog"
32
+ aria-modal="true"
33
+ aria-labelledby="dialog-title"
34
+ >
35
+ <p className={dialogContentClass}>{dialogMessage}</p>
36
+ <button className={dialogActionOneStyle} onClick={onDialogActionOneClick}>
37
+ {dialogActionOne}
38
+ </button>
39
+ <button className={dialogActionTwoStyle} onClick={onDialogActionTwoClick}>
40
+ {dialogActionTwo}
41
+ </button>
42
+ </div>
43
+ );
44
+ };
@@ -0,0 +1,12 @@
1
+ export type DialogProps = {
2
+ showDialog?: boolean;
3
+ dialogMessage?: string;
4
+ dialogActionOne?: string;
5
+ dialogActionTwo?: string;
6
+ onDialogActionOneClick?: () => void;
7
+ onDialogActionTwoClick?: () => void;
8
+ dialogClass?: string;
9
+ dialogContentClass?: string;
10
+ dialogActionOneStyle?: string;
11
+ dialogActionTwoStyle?: string;
12
+ };