@coveord/plasma-mantine 47.0.1-next.2

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 (450) hide show
  1. package/.eslintrc.js +27 -0
  2. package/.turbo/turbo-build.log +8 -0
  3. package/.turbo/turbo-test.log +30 -0
  4. package/LICENSE +15 -0
  5. package/dist/.tsbuildinfo +1 -0
  6. package/dist/cjs/__tests__/GlobalSetup.js +17 -0
  7. package/dist/cjs/__tests__/GlobalSetup.js.map +1 -0
  8. package/dist/cjs/__tests__/Setup.js +6 -0
  9. package/dist/cjs/__tests__/Setup.js.map +1 -0
  10. package/dist/cjs/__tests__/SetupAfterEnv.js +19 -0
  11. package/dist/cjs/__tests__/SetupAfterEnv.js.map +1 -0
  12. package/dist/cjs/__tests__/Utils.js +38 -0
  13. package/dist/cjs/__tests__/Utils.js.map +1 -0
  14. package/dist/cjs/components/blank-slate/BlankSlate.js +26 -0
  15. package/dist/cjs/components/blank-slate/BlankSlate.js.map +1 -0
  16. package/dist/cjs/components/blank-slate/index.js +8 -0
  17. package/dist/cjs/components/blank-slate/index.js.map +1 -0
  18. package/dist/cjs/components/code-editor/CodeEditor.example.js +41 -0
  19. package/dist/cjs/components/code-editor/CodeEditor.example.js.map +1 -0
  20. package/dist/cjs/components/code-editor/CodeEditor.js +214 -0
  21. package/dist/cjs/components/code-editor/CodeEditor.js.map +1 -0
  22. package/dist/cjs/components/code-editor/__mocks__/@monaco-editor/react.js +30 -0
  23. package/dist/cjs/components/code-editor/__mocks__/@monaco-editor/react.js.map +1 -0
  24. package/dist/cjs/components/code-editor/__mocks__/monaco-editor.js +24 -0
  25. package/dist/cjs/components/code-editor/__mocks__/monaco-editor.js.map +1 -0
  26. package/dist/cjs/components/code-editor/index.js +8 -0
  27. package/dist/cjs/components/code-editor/index.js.map +1 -0
  28. package/dist/cjs/components/collection/Collection.example.js +64 -0
  29. package/dist/cjs/components/collection/Collection.example.js.map +1 -0
  30. package/dist/cjs/components/collection/Collection.js +129 -0
  31. package/dist/cjs/components/collection/Collection.js.map +1 -0
  32. package/dist/cjs/components/collection/CollectionItem.js +109 -0
  33. package/dist/cjs/components/collection/CollectionItem.js.map +1 -0
  34. package/dist/cjs/components/collection/Colllection.styles.js +25 -0
  35. package/dist/cjs/components/collection/Colllection.styles.js.map +1 -0
  36. package/dist/cjs/components/collection/index.js +8 -0
  37. package/dist/cjs/components/collection/index.js.map +1 -0
  38. package/dist/cjs/components/date-range-picker/DateRangePickerInlineCalendar.js +102 -0
  39. package/dist/cjs/components/date-range-picker/DateRangePickerInlineCalendar.js.map +1 -0
  40. package/dist/cjs/components/date-range-picker/DateRangePickerPopoverCalendar.js +93 -0
  41. package/dist/cjs/components/date-range-picker/DateRangePickerPopoverCalendar.js.map +1 -0
  42. package/dist/cjs/components/date-range-picker/DateRangePickerPresetSelect.js +64 -0
  43. package/dist/cjs/components/date-range-picker/DateRangePickerPresetSelect.js.map +1 -0
  44. package/dist/cjs/components/date-range-picker/EditableDateRangePicker.js +66 -0
  45. package/dist/cjs/components/date-range-picker/EditableDateRangePicker.js.map +1 -0
  46. package/dist/cjs/components/date-range-picker/index.js +9 -0
  47. package/dist/cjs/components/date-range-picker/index.js.map +1 -0
  48. package/dist/cjs/components/header/Header.js +78 -0
  49. package/dist/cjs/components/header/Header.js.map +1 -0
  50. package/dist/cjs/components/header/index.js +8 -0
  51. package/dist/cjs/components/header/index.js.map +1 -0
  52. package/dist/cjs/components/index.js +17 -0
  53. package/dist/cjs/components/index.js.map +1 -0
  54. package/dist/cjs/components/inline-confirm/InlineConfirm.js +39 -0
  55. package/dist/cjs/components/inline-confirm/InlineConfirm.js.map +1 -0
  56. package/dist/cjs/components/inline-confirm/InlineConfirmButton.js +28 -0
  57. package/dist/cjs/components/inline-confirm/InlineConfirmButton.js.map +1 -0
  58. package/dist/cjs/components/inline-confirm/InlineConfirmContext.js +14 -0
  59. package/dist/cjs/components/inline-confirm/InlineConfirmContext.js.map +1 -0
  60. package/dist/cjs/components/inline-confirm/InlineConfirmPrompt.js +48 -0
  61. package/dist/cjs/components/inline-confirm/InlineConfirmPrompt.js.map +1 -0
  62. package/dist/cjs/components/inline-confirm/index.js +10 -0
  63. package/dist/cjs/components/inline-confirm/index.js.map +1 -0
  64. package/dist/cjs/components/inline-confirm/useInlineConfirm.js +21 -0
  65. package/dist/cjs/components/inline-confirm/useInlineConfirm.js.map +1 -0
  66. package/dist/cjs/components/modal-wizard/ModalWizard.js +132 -0
  67. package/dist/cjs/components/modal-wizard/ModalWizard.js.map +1 -0
  68. package/dist/cjs/components/modal-wizard/ModalWizardStep.js +23 -0
  69. package/dist/cjs/components/modal-wizard/ModalWizardStep.js.map +1 -0
  70. package/dist/cjs/components/modal-wizard/index.js +8 -0
  71. package/dist/cjs/components/modal-wizard/index.js.map +1 -0
  72. package/dist/cjs/components/prompt/Prompt.js +100 -0
  73. package/dist/cjs/components/prompt/Prompt.js.map +1 -0
  74. package/dist/cjs/components/prompt/PromptFooter.js +25 -0
  75. package/dist/cjs/components/prompt/PromptFooter.js.map +1 -0
  76. package/dist/cjs/components/prompt/index.js +8 -0
  77. package/dist/cjs/components/prompt/index.js.map +1 -0
  78. package/dist/cjs/components/sticky-footer/StickyFooter.js +50 -0
  79. package/dist/cjs/components/sticky-footer/StickyFooter.js.map +1 -0
  80. package/dist/cjs/components/sticky-footer/index.js +8 -0
  81. package/dist/cjs/components/sticky-footer/index.js.map +1 -0
  82. package/dist/cjs/components/table/Table.js +259 -0
  83. package/dist/cjs/components/table/Table.js.map +1 -0
  84. package/dist/cjs/components/table/TableActions.js +25 -0
  85. package/dist/cjs/components/table/TableActions.js.map +1 -0
  86. package/dist/cjs/components/table/TableCollapsibleColumn.js +33 -0
  87. package/dist/cjs/components/table/TableCollapsibleColumn.js.map +1 -0
  88. package/dist/cjs/components/table/TableContext.js +14 -0
  89. package/dist/cjs/components/table/TableContext.js.map +1 -0
  90. package/dist/cjs/components/table/TableDateRangePicker.js +72 -0
  91. package/dist/cjs/components/table/TableDateRangePicker.js.map +1 -0
  92. package/dist/cjs/components/table/TableFilter.js +53 -0
  93. package/dist/cjs/components/table/TableFilter.js.map +1 -0
  94. package/dist/cjs/components/table/TableFooter.js +23 -0
  95. package/dist/cjs/components/table/TableFooter.js.map +1 -0
  96. package/dist/cjs/components/table/TableHeader.js +37 -0
  97. package/dist/cjs/components/table/TableHeader.js.map +1 -0
  98. package/dist/cjs/components/table/TablePagination.js +47 -0
  99. package/dist/cjs/components/table/TablePagination.js.map +1 -0
  100. package/dist/cjs/components/table/TablePerPage.js +52 -0
  101. package/dist/cjs/components/table/TablePerPage.js.map +1 -0
  102. package/dist/cjs/components/table/TablePredicate.js +45 -0
  103. package/dist/cjs/components/table/TablePredicate.js.map +1 -0
  104. package/dist/cjs/components/table/Th.js +107 -0
  105. package/dist/cjs/components/table/Th.js.map +1 -0
  106. package/dist/cjs/components/table/index.js +9 -0
  107. package/dist/cjs/components/table/index.js.map +1 -0
  108. package/dist/cjs/components/table/useTable.js +21 -0
  109. package/dist/cjs/components/table/useTable.js.map +1 -0
  110. package/dist/cjs/hooks/index.js +9 -0
  111. package/dist/cjs/hooks/index.js.map +1 -0
  112. package/dist/cjs/hooks/useControlledList.js +52 -0
  113. package/dist/cjs/hooks/useControlledList.js.map +1 -0
  114. package/dist/cjs/hooks/useParentHeight.js +36 -0
  115. package/dist/cjs/hooks/useParentHeight.js.map +1 -0
  116. package/dist/cjs/index.js +31 -0
  117. package/dist/cjs/index.js.map +1 -0
  118. package/dist/cjs/theme/PlasmaColors.js +54 -0
  119. package/dist/cjs/theme/PlasmaColors.js.map +1 -0
  120. package/dist/cjs/theme/Plasmantine.js +24 -0
  121. package/dist/cjs/theme/Plasmantine.js.map +1 -0
  122. package/dist/cjs/theme/Theme.js +223 -0
  123. package/dist/cjs/theme/Theme.js.map +1 -0
  124. package/dist/cjs/theme/index.js +8 -0
  125. package/dist/cjs/theme/index.js.map +1 -0
  126. package/dist/definitions/__tests__/GlobalSetup.d.ts +3 -0
  127. package/dist/definitions/__tests__/GlobalSetup.d.ts.map +1 -0
  128. package/dist/definitions/__tests__/Setup.d.ts +5 -0
  129. package/dist/definitions/__tests__/Setup.d.ts.map +1 -0
  130. package/dist/definitions/__tests__/SetupAfterEnv.d.ts +7 -0
  131. package/dist/definitions/__tests__/SetupAfterEnv.d.ts.map +1 -0
  132. package/dist/definitions/__tests__/Utils.d.ts +8 -0
  133. package/dist/definitions/__tests__/Utils.d.ts.map +1 -0
  134. package/dist/definitions/components/blank-slate/BlankSlate.d.ts +12 -0
  135. package/dist/definitions/components/blank-slate/BlankSlate.d.ts.map +1 -0
  136. package/dist/definitions/components/blank-slate/index.d.ts +2 -0
  137. package/dist/definitions/components/blank-slate/index.d.ts.map +1 -0
  138. package/dist/definitions/components/code-editor/CodeEditor.d.ts +50 -0
  139. package/dist/definitions/components/code-editor/CodeEditor.d.ts.map +1 -0
  140. package/dist/definitions/components/code-editor/CodeEditor.example.d.ts +4 -0
  141. package/dist/definitions/components/code-editor/CodeEditor.example.d.ts.map +1 -0
  142. package/dist/definitions/components/code-editor/__mocks__/@monaco-editor/react.d.ts +9 -0
  143. package/dist/definitions/components/code-editor/__mocks__/@monaco-editor/react.d.ts.map +1 -0
  144. package/dist/definitions/components/code-editor/__mocks__/monaco-editor.d.ts +8 -0
  145. package/dist/definitions/components/code-editor/__mocks__/monaco-editor.d.ts.map +1 -0
  146. package/dist/definitions/components/code-editor/index.d.ts +2 -0
  147. package/dist/definitions/components/code-editor/index.d.ts.map +1 -0
  148. package/dist/definitions/components/collection/Collection.d.ts +21 -0
  149. package/dist/definitions/components/collection/Collection.d.ts.map +1 -0
  150. package/dist/definitions/components/collection/Collection.example.d.ts +4 -0
  151. package/dist/definitions/components/collection/Collection.example.d.ts.map +1 -0
  152. package/dist/definitions/components/collection/CollectionItem.d.ts +15 -0
  153. package/dist/definitions/components/collection/CollectionItem.d.ts.map +1 -0
  154. package/dist/definitions/components/collection/Colllection.styles.d.ts +9 -0
  155. package/dist/definitions/components/collection/Colllection.styles.d.ts.map +1 -0
  156. package/dist/definitions/components/collection/index.d.ts +2 -0
  157. package/dist/definitions/components/collection/index.d.ts.map +1 -0
  158. package/dist/definitions/components/date-range-picker/DateRangePickerInlineCalendar.d.ts +37 -0
  159. package/dist/definitions/components/date-range-picker/DateRangePickerInlineCalendar.d.ts.map +1 -0
  160. package/dist/definitions/components/date-range-picker/DateRangePickerPopoverCalendar.d.ts +30 -0
  161. package/dist/definitions/components/date-range-picker/DateRangePickerPopoverCalendar.d.ts.map +1 -0
  162. package/dist/definitions/components/date-range-picker/DateRangePickerPresetSelect.d.ts +16 -0
  163. package/dist/definitions/components/date-range-picker/DateRangePickerPresetSelect.d.ts.map +1 -0
  164. package/dist/definitions/components/date-range-picker/EditableDateRangePicker.d.ts +18 -0
  165. package/dist/definitions/components/date-range-picker/EditableDateRangePicker.d.ts.map +1 -0
  166. package/dist/definitions/components/date-range-picker/index.d.ts +3 -0
  167. package/dist/definitions/components/date-range-picker/index.d.ts.map +1 -0
  168. package/dist/definitions/components/header/Header.d.ts +12 -0
  169. package/dist/definitions/components/header/Header.d.ts.map +1 -0
  170. package/dist/definitions/components/header/index.d.ts +2 -0
  171. package/dist/definitions/components/header/index.d.ts.map +1 -0
  172. package/dist/definitions/components/index.d.ts +11 -0
  173. package/dist/definitions/components/index.d.ts.map +1 -0
  174. package/dist/definitions/components/inline-confirm/InlineConfirm.d.ts +10 -0
  175. package/dist/definitions/components/inline-confirm/InlineConfirm.d.ts.map +1 -0
  176. package/dist/definitions/components/inline-confirm/InlineConfirmButton.d.ts +8 -0
  177. package/dist/definitions/components/inline-confirm/InlineConfirmButton.d.ts.map +1 -0
  178. package/dist/definitions/components/inline-confirm/InlineConfirmContext.d.ts +9 -0
  179. package/dist/definitions/components/inline-confirm/InlineConfirmContext.d.ts.map +1 -0
  180. package/dist/definitions/components/inline-confirm/InlineConfirmPrompt.d.ts +11 -0
  181. package/dist/definitions/components/inline-confirm/InlineConfirmPrompt.d.ts.map +1 -0
  182. package/dist/definitions/components/inline-confirm/index.d.ts +4 -0
  183. package/dist/definitions/components/inline-confirm/index.d.ts.map +1 -0
  184. package/dist/definitions/components/inline-confirm/useInlineConfirm.d.ts +6 -0
  185. package/dist/definitions/components/inline-confirm/useInlineConfirm.d.ts.map +1 -0
  186. package/dist/definitions/components/modal-wizard/ModalWizard.d.ts +73 -0
  187. package/dist/definitions/components/modal-wizard/ModalWizard.d.ts.map +1 -0
  188. package/dist/definitions/components/modal-wizard/ModalWizardStep.d.ts +42 -0
  189. package/dist/definitions/components/modal-wizard/ModalWizardStep.d.ts.map +1 -0
  190. package/dist/definitions/components/modal-wizard/index.d.ts +3 -0
  191. package/dist/definitions/components/modal-wizard/index.d.ts.map +1 -0
  192. package/dist/definitions/components/prompt/Prompt.d.ts +14 -0
  193. package/dist/definitions/components/prompt/Prompt.d.ts.map +1 -0
  194. package/dist/definitions/components/prompt/PromptFooter.d.ts +6 -0
  195. package/dist/definitions/components/prompt/PromptFooter.d.ts.map +1 -0
  196. package/dist/definitions/components/prompt/index.d.ts +2 -0
  197. package/dist/definitions/components/prompt/index.d.ts.map +1 -0
  198. package/dist/definitions/components/sticky-footer/StickyFooter.d.ts +10 -0
  199. package/dist/definitions/components/sticky-footer/StickyFooter.d.ts.map +1 -0
  200. package/dist/definitions/components/sticky-footer/index.d.ts +2 -0
  201. package/dist/definitions/components/sticky-footer/index.d.ts.map +1 -0
  202. package/dist/definitions/components/table/Table.d.ts +84 -0
  203. package/dist/definitions/components/table/Table.d.ts.map +1 -0
  204. package/dist/definitions/components/table/TableActions.d.ts +26 -0
  205. package/dist/definitions/components/table/TableActions.d.ts.map +1 -0
  206. package/dist/definitions/components/table/TableCollapsibleColumn.d.ts +6 -0
  207. package/dist/definitions/components/table/TableCollapsibleColumn.d.ts.map +1 -0
  208. package/dist/definitions/components/table/TableContext.d.ts +54 -0
  209. package/dist/definitions/components/table/TableContext.d.ts.map +1 -0
  210. package/dist/definitions/components/table/TableDateRangePicker.d.ts +20 -0
  211. package/dist/definitions/components/table/TableDateRangePicker.d.ts.map +1 -0
  212. package/dist/definitions/components/table/TableFilter.d.ts +12 -0
  213. package/dist/definitions/components/table/TableFilter.d.ts.map +1 -0
  214. package/dist/definitions/components/table/TableFooter.d.ts +3 -0
  215. package/dist/definitions/components/table/TableFooter.d.ts.map +1 -0
  216. package/dist/definitions/components/table/TableHeader.d.ts +3 -0
  217. package/dist/definitions/components/table/TableHeader.d.ts.map +1 -0
  218. package/dist/definitions/components/table/TablePagination.d.ts +10 -0
  219. package/dist/definitions/components/table/TablePagination.d.ts.map +1 -0
  220. package/dist/definitions/components/table/TablePerPage.d.ts +20 -0
  221. package/dist/definitions/components/table/TablePerPage.d.ts.map +1 -0
  222. package/dist/definitions/components/table/TablePredicate.d.ts +21 -0
  223. package/dist/definitions/components/table/TablePredicate.d.ts.map +1 -0
  224. package/dist/definitions/components/table/Th.d.ts +8 -0
  225. package/dist/definitions/components/table/Th.d.ts.map +1 -0
  226. package/dist/definitions/components/table/index.d.ts +4 -0
  227. package/dist/definitions/components/table/index.d.ts.map +1 -0
  228. package/dist/definitions/components/table/useTable.d.ts +11 -0
  229. package/dist/definitions/components/table/useTable.d.ts.map +1 -0
  230. package/dist/definitions/hooks/index.d.ts +3 -0
  231. package/dist/definitions/hooks/index.d.ts.map +1 -0
  232. package/dist/definitions/hooks/useControlledList.d.ts +25 -0
  233. package/dist/definitions/hooks/useControlledList.d.ts.map +1 -0
  234. package/dist/definitions/hooks/useParentHeight.d.ts +5 -0
  235. package/dist/definitions/hooks/useParentHeight.d.ts.map +1 -0
  236. package/dist/definitions/index.d.ts +17 -0
  237. package/dist/definitions/index.d.ts.map +1 -0
  238. package/dist/definitions/theme/PlasmaColors.d.ts +14 -0
  239. package/dist/definitions/theme/PlasmaColors.d.ts.map +1 -0
  240. package/dist/definitions/theme/Plasmantine.d.ts +3 -0
  241. package/dist/definitions/theme/Plasmantine.d.ts.map +1 -0
  242. package/dist/definitions/theme/Theme.d.ts +3 -0
  243. package/dist/definitions/theme/Theme.d.ts.map +1 -0
  244. package/dist/definitions/theme/index.d.ts +2 -0
  245. package/dist/definitions/theme/index.d.ts.map +1 -0
  246. package/dist/esm/__tests__/GlobalSetup.js +7 -0
  247. package/dist/esm/__tests__/GlobalSetup.js.map +1 -0
  248. package/dist/esm/__tests__/Setup.js +5 -0
  249. package/dist/esm/__tests__/Setup.js.map +1 -0
  250. package/dist/esm/__tests__/SetupAfterEnv.js +15 -0
  251. package/dist/esm/__tests__/SetupAfterEnv.js.map +1 -0
  252. package/dist/esm/__tests__/Utils.js +21 -0
  253. package/dist/esm/__tests__/Utils.js.map +1 -0
  254. package/dist/esm/components/blank-slate/BlankSlate.js +16 -0
  255. package/dist/esm/components/blank-slate/BlankSlate.js.map +1 -0
  256. package/dist/esm/components/blank-slate/index.js +3 -0
  257. package/dist/esm/components/blank-slate/index.js.map +1 -0
  258. package/dist/esm/components/code-editor/CodeEditor.example.js +31 -0
  259. package/dist/esm/components/code-editor/CodeEditor.example.js.map +1 -0
  260. package/dist/esm/components/code-editor/CodeEditor.js +201 -0
  261. package/dist/esm/components/code-editor/CodeEditor.js.map +1 -0
  262. package/dist/esm/components/code-editor/__mocks__/@monaco-editor/react.js +12 -0
  263. package/dist/esm/components/code-editor/__mocks__/@monaco-editor/react.js.map +1 -0
  264. package/dist/esm/components/code-editor/__mocks__/monaco-editor.js +14 -0
  265. package/dist/esm/components/code-editor/__mocks__/monaco-editor.js.map +1 -0
  266. package/dist/esm/components/code-editor/index.js +3 -0
  267. package/dist/esm/components/code-editor/index.js.map +1 -0
  268. package/dist/esm/components/collection/Collection.example.js +54 -0
  269. package/dist/esm/components/collection/Collection.example.js.map +1 -0
  270. package/dist/esm/components/collection/Collection.js +118 -0
  271. package/dist/esm/components/collection/Collection.js.map +1 -0
  272. package/dist/esm/components/collection/CollectionItem.js +98 -0
  273. package/dist/esm/components/collection/CollectionItem.js.map +1 -0
  274. package/dist/esm/components/collection/Colllection.styles.js +15 -0
  275. package/dist/esm/components/collection/Colllection.styles.js.map +1 -0
  276. package/dist/esm/components/collection/index.js +3 -0
  277. package/dist/esm/components/collection/index.js.map +1 -0
  278. package/dist/esm/components/date-range-picker/DateRangePickerInlineCalendar.js +92 -0
  279. package/dist/esm/components/date-range-picker/DateRangePickerInlineCalendar.js.map +1 -0
  280. package/dist/esm/components/date-range-picker/DateRangePickerPopoverCalendar.js +83 -0
  281. package/dist/esm/components/date-range-picker/DateRangePickerPopoverCalendar.js.map +1 -0
  282. package/dist/esm/components/date-range-picker/DateRangePickerPresetSelect.js +53 -0
  283. package/dist/esm/components/date-range-picker/DateRangePickerPresetSelect.js.map +1 -0
  284. package/dist/esm/components/date-range-picker/EditableDateRangePicker.js +55 -0
  285. package/dist/esm/components/date-range-picker/EditableDateRangePicker.js.map +1 -0
  286. package/dist/esm/components/date-range-picker/index.js +4 -0
  287. package/dist/esm/components/date-range-picker/index.js.map +1 -0
  288. package/dist/esm/components/header/Header.js +68 -0
  289. package/dist/esm/components/header/Header.js.map +1 -0
  290. package/dist/esm/components/header/index.js +3 -0
  291. package/dist/esm/components/header/index.js.map +1 -0
  292. package/dist/esm/components/index.js +12 -0
  293. package/dist/esm/components/index.js.map +1 -0
  294. package/dist/esm/components/inline-confirm/InlineConfirm.js +29 -0
  295. package/dist/esm/components/inline-confirm/InlineConfirm.js.map +1 -0
  296. package/dist/esm/components/inline-confirm/InlineConfirmButton.js +18 -0
  297. package/dist/esm/components/inline-confirm/InlineConfirmButton.js.map +1 -0
  298. package/dist/esm/components/inline-confirm/InlineConfirmContext.js +4 -0
  299. package/dist/esm/components/inline-confirm/InlineConfirmContext.js.map +1 -0
  300. package/dist/esm/components/inline-confirm/InlineConfirmPrompt.js +38 -0
  301. package/dist/esm/components/inline-confirm/InlineConfirmPrompt.js.map +1 -0
  302. package/dist/esm/components/inline-confirm/index.js +5 -0
  303. package/dist/esm/components/inline-confirm/index.js.map +1 -0
  304. package/dist/esm/components/inline-confirm/useInlineConfirm.js +11 -0
  305. package/dist/esm/components/inline-confirm/useInlineConfirm.js.map +1 -0
  306. package/dist/esm/components/modal-wizard/ModalWizard.js +122 -0
  307. package/dist/esm/components/modal-wizard/ModalWizard.js.map +1 -0
  308. package/dist/esm/components/modal-wizard/ModalWizardStep.js +14 -0
  309. package/dist/esm/components/modal-wizard/ModalWizardStep.js.map +1 -0
  310. package/dist/esm/components/modal-wizard/index.js +3 -0
  311. package/dist/esm/components/modal-wizard/index.js.map +1 -0
  312. package/dist/esm/components/prompt/Prompt.js +90 -0
  313. package/dist/esm/components/prompt/Prompt.js.map +1 -0
  314. package/dist/esm/components/prompt/PromptFooter.js +15 -0
  315. package/dist/esm/components/prompt/PromptFooter.js.map +1 -0
  316. package/dist/esm/components/prompt/index.js +3 -0
  317. package/dist/esm/components/prompt/index.js.map +1 -0
  318. package/dist/esm/components/sticky-footer/StickyFooter.js +40 -0
  319. package/dist/esm/components/sticky-footer/StickyFooter.js.map +1 -0
  320. package/dist/esm/components/sticky-footer/index.js +3 -0
  321. package/dist/esm/components/sticky-footer/index.js.map +1 -0
  322. package/dist/esm/components/table/Table.js +248 -0
  323. package/dist/esm/components/table/Table.js.map +1 -0
  324. package/dist/esm/components/table/TableActions.js +15 -0
  325. package/dist/esm/components/table/TableActions.js.map +1 -0
  326. package/dist/esm/components/table/TableCollapsibleColumn.js +25 -0
  327. package/dist/esm/components/table/TableCollapsibleColumn.js.map +1 -0
  328. package/dist/esm/components/table/TableContext.js +4 -0
  329. package/dist/esm/components/table/TableContext.js.map +1 -0
  330. package/dist/esm/components/table/TableDateRangePicker.js +61 -0
  331. package/dist/esm/components/table/TableDateRangePicker.js.map +1 -0
  332. package/dist/esm/components/table/TableFilter.js +43 -0
  333. package/dist/esm/components/table/TableFilter.js.map +1 -0
  334. package/dist/esm/components/table/TableFooter.js +13 -0
  335. package/dist/esm/components/table/TableFooter.js.map +1 -0
  336. package/dist/esm/components/table/TableHeader.js +27 -0
  337. package/dist/esm/components/table/TableHeader.js.map +1 -0
  338. package/dist/esm/components/table/TablePagination.js +37 -0
  339. package/dist/esm/components/table/TablePagination.js.map +1 -0
  340. package/dist/esm/components/table/TablePerPage.js +42 -0
  341. package/dist/esm/components/table/TablePerPage.js.map +1 -0
  342. package/dist/esm/components/table/TablePredicate.js +35 -0
  343. package/dist/esm/components/table/TablePredicate.js.map +1 -0
  344. package/dist/esm/components/table/Th.js +97 -0
  345. package/dist/esm/components/table/Th.js.map +1 -0
  346. package/dist/esm/components/table/index.js +4 -0
  347. package/dist/esm/components/table/index.js.map +1 -0
  348. package/dist/esm/components/table/useTable.js +11 -0
  349. package/dist/esm/components/table/useTable.js.map +1 -0
  350. package/dist/esm/hooks/index.js +4 -0
  351. package/dist/esm/hooks/index.js.map +1 -0
  352. package/dist/esm/hooks/useControlledList.js +44 -0
  353. package/dist/esm/hooks/useControlledList.js.map +1 -0
  354. package/dist/esm/hooks/useParentHeight.js +28 -0
  355. package/dist/esm/hooks/useParentHeight.js.map +1 -0
  356. package/dist/esm/index.js +11 -0
  357. package/dist/esm/index.js.map +1 -0
  358. package/dist/esm/theme/PlasmaColors.js +44 -0
  359. package/dist/esm/theme/PlasmaColors.js.map +1 -0
  360. package/dist/esm/theme/Plasmantine.js +14 -0
  361. package/dist/esm/theme/Plasmantine.js.map +1 -0
  362. package/dist/esm/theme/Theme.js +213 -0
  363. package/dist/esm/theme/Theme.js.map +1 -0
  364. package/dist/esm/theme/index.js +3 -0
  365. package/dist/esm/theme/index.js.map +1 -0
  366. package/jest.config.js +25 -0
  367. package/package.json +88 -0
  368. package/src/__tests__/GlobalSetup.ts +5 -0
  369. package/src/__tests__/Setup.ts +4 -0
  370. package/src/__tests__/SetupAfterEnv.ts +16 -0
  371. package/src/__tests__/Utils.tsx +15 -0
  372. package/src/components/blank-slate/BlankSlate.tsx +17 -0
  373. package/src/components/blank-slate/__tests__/BlankSlate.spec.tsx +11 -0
  374. package/src/components/blank-slate/index.ts +1 -0
  375. package/src/components/code-editor/CodeEditor.example.tsx +32 -0
  376. package/src/components/code-editor/CodeEditor.tsx +214 -0
  377. package/src/components/code-editor/__mocks__/@monaco-editor/react.tsx +10 -0
  378. package/src/components/code-editor/__mocks__/monaco-editor.ts +9 -0
  379. package/src/components/code-editor/__tests__/CodeEditor.spec.tsx +56 -0
  380. package/src/components/code-editor/index.ts +1 -0
  381. package/src/components/collection/Collection.example.tsx +37 -0
  382. package/src/components/collection/Collection.tsx +129 -0
  383. package/src/components/collection/CollectionItem.tsx +92 -0
  384. package/src/components/collection/Colllection.styles.ts +14 -0
  385. package/src/components/collection/__tests__/Collection.spec.tsx +247 -0
  386. package/src/components/collection/index.ts +1 -0
  387. package/src/components/date-range-picker/DateRangePickerInlineCalendar.tsx +111 -0
  388. package/src/components/date-range-picker/DateRangePickerPopoverCalendar.tsx +94 -0
  389. package/src/components/date-range-picker/DateRangePickerPresetSelect.tsx +62 -0
  390. package/src/components/date-range-picker/EditableDateRangePicker.tsx +60 -0
  391. package/src/components/date-range-picker/__tests__/DateRangePickerInlineCalendar.spec.tsx +95 -0
  392. package/src/components/date-range-picker/__tests__/DateRangePickerPopoverCalendar.spec.tsx +101 -0
  393. package/src/components/date-range-picker/__tests__/DateRangePickerPresetSelect.spec.tsx +53 -0
  394. package/src/components/date-range-picker/__tests__/EditableDateRangePicker.spec.tsx +47 -0
  395. package/src/components/date-range-picker/index.tsx +2 -0
  396. package/src/components/header/Header.tsx +43 -0
  397. package/src/components/header/__tests__/Header.spec.tsx +79 -0
  398. package/src/components/header/index.ts +1 -0
  399. package/src/components/index.ts +10 -0
  400. package/src/components/inline-confirm/InlineConfirm.tsx +29 -0
  401. package/src/components/inline-confirm/InlineConfirmButton.tsx +17 -0
  402. package/src/components/inline-confirm/InlineConfirmContext.ts +9 -0
  403. package/src/components/inline-confirm/InlineConfirmPrompt.tsx +48 -0
  404. package/src/components/inline-confirm/__tests__/InlineConfirm.spec.tsx +94 -0
  405. package/src/components/inline-confirm/index.ts +3 -0
  406. package/src/components/inline-confirm/useInlineConfirm.ts +12 -0
  407. package/src/components/modal-wizard/ModalWizard.tsx +211 -0
  408. package/src/components/modal-wizard/ModalWizardStep.tsx +55 -0
  409. package/src/components/modal-wizard/__tests__/ModalWizard.spec.tsx +345 -0
  410. package/src/components/modal-wizard/index.ts +2 -0
  411. package/src/components/prompt/Prompt.tsx +66 -0
  412. package/src/components/prompt/PromptFooter.tsx +8 -0
  413. package/src/components/prompt/__tests__/Prompt.spec.tsx +29 -0
  414. package/src/components/prompt/index.ts +1 -0
  415. package/src/components/sticky-footer/StickyFooter.tsx +35 -0
  416. package/src/components/sticky-footer/__tests__/StickyFooter.spec.tsx +20 -0
  417. package/src/components/sticky-footer/index.ts +1 -0
  418. package/src/components/table/Table.tsx +293 -0
  419. package/src/components/table/TableActions.tsx +36 -0
  420. package/src/components/table/TableCollapsibleColumn.tsx +26 -0
  421. package/src/components/table/TableContext.tsx +56 -0
  422. package/src/components/table/TableDateRangePicker.tsx +65 -0
  423. package/src/components/table/TableFilter.tsx +44 -0
  424. package/src/components/table/TableFooter.tsx +8 -0
  425. package/src/components/table/TableHeader.tsx +21 -0
  426. package/src/components/table/TablePagination.tsx +41 -0
  427. package/src/components/table/TablePerPage.tsx +49 -0
  428. package/src/components/table/TablePredicate.tsx +43 -0
  429. package/src/components/table/Th.tsx +84 -0
  430. package/src/components/table/__tests__/Table.spec.tsx +128 -0
  431. package/src/components/table/__tests__/TableActions.spec.tsx +36 -0
  432. package/src/components/table/__tests__/TableDateRangePicker.spec.tsx +87 -0
  433. package/src/components/table/__tests__/TableFilter.spec.tsx +39 -0
  434. package/src/components/table/__tests__/TablePagination.spec.tsx +50 -0
  435. package/src/components/table/__tests__/TablePerPage.spec.tsx +81 -0
  436. package/src/components/table/__tests__/TablePredicate.spec.tsx +120 -0
  437. package/src/components/table/__tests__/Th.spec.tsx +63 -0
  438. package/src/components/table/index.ts +3 -0
  439. package/src/components/table/useTable.tsx +11 -0
  440. package/src/hooks/__tests__/useControlledList.spec.tsx +41 -0
  441. package/src/hooks/index.ts +2 -0
  442. package/src/hooks/useControlledList.ts +53 -0
  443. package/src/hooks/useParentHeight.ts +25 -0
  444. package/src/index.ts +21 -0
  445. package/src/theme/PlasmaColors.ts +44 -0
  446. package/src/theme/Plasmantine.tsx +10 -0
  447. package/src/theme/Theme.tsx +161 -0
  448. package/src/theme/index.ts +1 -0
  449. package/tsconfig.build.json +4 -0
  450. package/tsconfig.json +14 -0
@@ -0,0 +1,211 @@
1
+ import {Button, createStyles, Modal, Progress} from '@mantine/core';
2
+ import {Children, ReactElement, useMemo, useState} from 'react';
3
+ import {StickyFooter} from '../sticky-footer';
4
+ import {ModalWizardStep} from './ModalWizardStep';
5
+ import {Header} from '../header';
6
+
7
+ interface ModalWizardProps {
8
+ /**
9
+ * The label of the cancel button
10
+ *
11
+ * @default "Cancel"
12
+ */
13
+ cancelButtonLabel?: string;
14
+
15
+ /**
16
+ * The label of the next button
17
+ *
18
+ * @default "Next"
19
+ */
20
+
21
+ nextButtonLabel?: string;
22
+ /**
23
+ * The label of the previous button
24
+ *
25
+ * @default "Previous"
26
+ */
27
+ previousButtonLabel?: string;
28
+ /**
29
+ * The label of the finish button
30
+ *
31
+ * @default "Finish"
32
+ */
33
+
34
+ finishButtonLabel?: string;
35
+
36
+ /**
37
+ * A callback function that is executed when the user clicks on the next button
38
+ */
39
+ onNext?: () => unknown;
40
+
41
+ /**
42
+ * A callback function that is executed when the user clicks on the previous button
43
+ */
44
+ onPrevious?: () => unknown;
45
+
46
+ /**
47
+ * A callback function that is executed when the user clicks on the cancel button
48
+ */
49
+
50
+ onClose?: () => unknown;
51
+
52
+ /**
53
+ * A function that is executed when user completes all the steps.
54
+ *
55
+ * @param close A function that closes the modal when called.
56
+ */
57
+ onFinish?: () => unknown;
58
+
59
+ /**
60
+ * Determine if user interacted with any steps in the modal wizard
61
+ */
62
+
63
+ isDirty?: () => boolean;
64
+
65
+ /**
66
+ * A function to confirm close if the state is dirty before closing
67
+ */
68
+ handleDirtyState?: () => boolean;
69
+
70
+ /**
71
+ * Props to pass to each modal
72
+ */
73
+ modalProps?: any;
74
+
75
+ /**
76
+ * Label for close button
77
+ */
78
+ closeButtonLabel?: string;
79
+
80
+ /**
81
+ * Children to display in modal wizard
82
+ * */
83
+ children?: Array<ReturnType<typeof ModalWizardStep>>;
84
+ }
85
+
86
+ const useStyles = createStyles(() => ({
87
+ modal: {
88
+ height: '70%',
89
+ display: 'flex',
90
+ flexDirection: 'column',
91
+ },
92
+ }));
93
+
94
+ interface ModalWizardType {
95
+ <T>(props: ModalWizardProps): ReactElement;
96
+
97
+ Step: typeof ModalWizardStep;
98
+ }
99
+
100
+ export const ModalWizard: ModalWizardType = ({
101
+ cancelButtonLabel = 'Cancel',
102
+ nextButtonLabel = 'Next',
103
+ previousButtonLabel = 'Previous',
104
+ finishButtonLabel = 'Finish',
105
+ onNext,
106
+ onPrevious,
107
+ onClose,
108
+ onFinish,
109
+ isDirty,
110
+ modalProps,
111
+ handleDirtyState,
112
+ closeButtonLabel,
113
+ children,
114
+ }) => {
115
+ const [currentStepIndex, setCurrentStepIndex] = useState(0);
116
+ const modalSteps = (Children.toArray(children) as ReactElement[]).filter((child) => child.type === ModalWizardStep);
117
+
118
+ const numberOfSteps = modalSteps.length;
119
+ const numberOfStepsCountAsProgress = modalSteps.filter((step) => step.props.countsAsProgress).length;
120
+ const isFirstStep = currentStepIndex === 0;
121
+ const isLastStep = currentStepIndex === numberOfSteps - 1;
122
+ const currentStep = modalSteps.filter((step: ReactElement, index: number) => index === currentStepIndex)[0];
123
+
124
+ const {isValid} = currentStep?.props?.validateStep?.(currentStepIndex, numberOfSteps) ?? {isValid: true};
125
+ const isModalDirty = isDirty && isDirty();
126
+
127
+ const {classes} = useStyles();
128
+
129
+ const closeModalWizard = () => {
130
+ if (isModalDirty && handleDirtyState) {
131
+ handleDirtyState() && onClose?.();
132
+ } else {
133
+ onClose?.();
134
+ }
135
+ };
136
+
137
+ const getProgress = (currStepIndex: number) => {
138
+ const validSteps = modalSteps.filter(
139
+ (step, index) => step.props.countsAsProgress && index <= currStepIndex
140
+ ).length;
141
+ return (validSteps / numberOfStepsCountAsProgress) * 100;
142
+ };
143
+
144
+ const getProgressMemo = useMemo(() => getProgress(currentStepIndex), [currentStepIndex]);
145
+
146
+ return (
147
+ <Modal
148
+ opened
149
+ classNames={{modal: classes.modal}}
150
+ centered
151
+ closeButtonLabel={closeButtonLabel}
152
+ padding="xl"
153
+ title={
154
+ <Header
155
+ docLink={currentStep.props.docLin}
156
+ description={
157
+ typeof currentStep.props.description === 'function'
158
+ ? currentStep.props.description(currentStepIndex + 1, numberOfSteps)
159
+ : currentStep.props.description
160
+ }
161
+ py={null}
162
+ px={null}
163
+ >
164
+ {typeof currentStep.props.title === 'function'
165
+ ? currentStep.props.title(currentStepIndex + 1, numberOfSteps)
166
+ : currentStep.props.title}
167
+ </Header>
168
+ }
169
+ onClose={closeModalWizard}
170
+ {...modalProps}
171
+ >
172
+ {currentStep.props.showProgressBar && <Progress value={getProgressMemo} />}
173
+ {currentStep}
174
+ <StickyFooter borderTop py={null} px={null} pt="md">
175
+ <Button
176
+ name={isFirstStep ? cancelButtonLabel : previousButtonLabel}
177
+ disabled={false}
178
+ size="md"
179
+ variant="outline"
180
+ onClick={() => {
181
+ if (isFirstStep) {
182
+ closeModalWizard();
183
+ } else {
184
+ onPrevious?.();
185
+ setCurrentStepIndex(currentStepIndex - 1);
186
+ }
187
+ }}
188
+ >
189
+ {isFirstStep ? cancelButtonLabel : previousButtonLabel}
190
+ </Button>
191
+
192
+ <Button
193
+ disabled={!isValid}
194
+ size="md"
195
+ onClick={() => {
196
+ if (isLastStep) {
197
+ onFinish ? onFinish() : onClose();
198
+ } else {
199
+ onNext?.();
200
+ setCurrentStepIndex(currentStepIndex + 1);
201
+ }
202
+ }}
203
+ >
204
+ {isLastStep ? finishButtonLabel : nextButtonLabel}
205
+ </Button>
206
+ </StickyFooter>
207
+ </Modal>
208
+ );
209
+ };
210
+
211
+ ModalWizard.Step = ModalWizardStep;
@@ -0,0 +1,55 @@
1
+ import {FunctionComponent, PropsWithChildren, ReactElement} from 'react';
2
+
3
+ type DependsOnStep<T> = (currentStep: number, numberOfSteps: number) => T;
4
+
5
+ export interface ModalWizardStepProps {
6
+ /**
7
+ * The title of the current step. The title can be dependent on the current step if needed
8
+ */
9
+ title?: string | ReactElement | DependsOnStep<string | ReactElement>;
10
+
11
+ /**
12
+ * The description of the current step. The description can be dependent on the current step if needed
13
+ */
14
+ description?: string | ReactElement | DependsOnStep<string | ReactElement>;
15
+
16
+ /**
17
+ * A link to the documentation for the current step
18
+ */
19
+ docLink: string;
20
+
21
+ /**
22
+ * A tooltip label for the docLink
23
+ */
24
+ docLinkTooltipLabel?: string | ReactElement | DependsOnStep<string | ReactElement>;
25
+
26
+ /**
27
+ * A function to validate the current step, it determines if the next step should be enabled or not.
28
+ */
29
+ validateStep: (currentStep: any, numberOfSteps: any) => {isValid: boolean; messsage?: unknown};
30
+
31
+ /**
32
+ * Show progress bar at this step
33
+ *
34
+ * @default true
35
+ */
36
+ showProgressBar?: boolean;
37
+
38
+ /**
39
+ * Does completion of current step count moves the progress bar
40
+ *
41
+ * @default true
42
+ */
43
+ countsAsProgress?: boolean;
44
+ }
45
+
46
+ const ModalWizardStep: FunctionComponent<PropsWithChildren<ModalWizardStepProps>> = ({children}) => (
47
+ <div>{children}</div>
48
+ );
49
+
50
+ ModalWizardStep.defaultProps = {
51
+ showProgressBar: true,
52
+ countsAsProgress: true,
53
+ };
54
+
55
+ export {ModalWizardStep};
@@ -0,0 +1,345 @@
1
+ import {render, screen, userEvent} from '@test-utils';
2
+ import {ModalWizard} from '../ModalWizard';
3
+
4
+ describe('ModalWizard', () => {
5
+ it('navigate slides using footer buttons', () => {
6
+ const modelSteps = [
7
+ {
8
+ docLink: 'https://google.com',
9
+ title: (currentStep, numberOfSteps) => 'Current Step is: ' + currentStep,
10
+ validateStep: (currentStep, numberOfSteps) => ({isValid: true}),
11
+ element: <div> Slide 1</div>,
12
+ },
13
+ {
14
+ docLink: 'https://google.com',
15
+ title: (currentStep, numberOfSteps) => 'Current Step is: ' + currentStep,
16
+ validateStep: (currentStep, numberOfSteps) => ({isValid: true}),
17
+ element: <div> Slide 2</div>,
18
+ },
19
+ {
20
+ docLink: 'https://google.com',
21
+ title: (currentStep, numberOfSteps) => 'Current Step is: ' + currentStep,
22
+ validateStep: (currentStep, numberOfSteps) => ({isValid: false}),
23
+ element: <div> Slide 3</div>,
24
+ },
25
+ {
26
+ docLink: 'https://google.com',
27
+ title: (currentStep, numberOfSteps) => 'Current Step is: ' + currentStep,
28
+ validateStep: (currentStep, numberOfSteps) => ({isValid: false}),
29
+ element: <div> Unreachable slide</div>,
30
+ },
31
+ ];
32
+
33
+ const isDirty = () => false;
34
+
35
+ render(
36
+ <ModalWizard
37
+ closeButtonLabel="closebuttonlabel"
38
+ isDirty={isDirty}
39
+ handleDirtyState={() => confirm('Are you sure you want to close?')}
40
+ >
41
+ {modelSteps.map((model_item) => (
42
+ <ModalWizard.Step
43
+ docLink={model_item.docLink}
44
+ title={(currentStep, numberOfSteps) => 'Current Step is: ' + currentStep}
45
+ validateStep={model_item.validateStep}
46
+ >
47
+ {model_item.element}
48
+ </ModalWizard.Step>
49
+ ))}
50
+ </ModalWizard>
51
+ );
52
+
53
+ expect(
54
+ screen.getByRole('heading', {
55
+ name: /current step is: 1/i,
56
+ })
57
+ ).toBeInTheDocument();
58
+
59
+ expect(screen.getByText(/slide 1/i)).toBeInTheDocument();
60
+
61
+ expect(
62
+ screen.getByRole('button', {
63
+ name: /closebuttonlabel/i,
64
+ })
65
+ ).toBeInTheDocument();
66
+
67
+ let nextButton = screen.getByRole('button', {
68
+ name: /next/i,
69
+ });
70
+ expect(nextButton).toBeInTheDocument();
71
+
72
+ userEvent.click(nextButton);
73
+
74
+ expect(
75
+ screen.getByRole('heading', {
76
+ name: /current step is: 2/i,
77
+ })
78
+ ).toBeInTheDocument();
79
+
80
+ expect(
81
+ screen.getByRole('button', {
82
+ name: /closebuttonlabel/i,
83
+ })
84
+ ).toBeInTheDocument();
85
+
86
+ expect(screen.getByText(/slide 2/i)).toBeInTheDocument();
87
+
88
+ expect(
89
+ screen.getByRole('button', {
90
+ name: /previous/i,
91
+ })
92
+ ).toBeInTheDocument();
93
+
94
+ nextButton = screen.getByRole('button', {
95
+ name: /next/i,
96
+ });
97
+ expect(nextButton).toBeInTheDocument();
98
+
99
+ userEvent.click(nextButton);
100
+
101
+ expect(
102
+ screen.getByRole('heading', {
103
+ name: /current step is: 3/i,
104
+ })
105
+ ).toBeInTheDocument();
106
+
107
+ expect(
108
+ screen.getByRole('button', {
109
+ name: /closebuttonlabel/i,
110
+ })
111
+ ).toBeInTheDocument();
112
+
113
+ expect(screen.getByText(/slide 3/i)).toBeInTheDocument();
114
+
115
+ expect(
116
+ screen.getByRole('button', {
117
+ name: /previous/i,
118
+ })
119
+ ).toBeInTheDocument();
120
+
121
+ nextButton = screen.getByRole('button', {
122
+ name: /next/i,
123
+ });
124
+
125
+ expect(nextButton).toBeInTheDocument();
126
+ expect(nextButton).toBeDisabled();
127
+
128
+ userEvent.click(
129
+ screen.getByRole('button', {
130
+ name: /previous/i,
131
+ })
132
+ );
133
+
134
+ expect(
135
+ screen.getByRole('heading', {
136
+ name: /current step is: 2/i,
137
+ })
138
+ ).toBeInTheDocument();
139
+
140
+ expect(
141
+ screen.getByRole('button', {
142
+ name: /closebuttonlabel/i,
143
+ })
144
+ ).toBeInTheDocument();
145
+
146
+ expect(screen.getByText(/slide 2/i)).toBeInTheDocument();
147
+
148
+ expect(
149
+ screen.getByRole('button', {
150
+ name: /previous/i,
151
+ })
152
+ ).toBeInTheDocument();
153
+ });
154
+
155
+ it('modal wizard onClose', () => {
156
+ const modelSteps = [
157
+ {
158
+ docLink: 'https://google.com',
159
+ title: (currentStep, numberOfSteps) => 'Current Step is: ' + currentStep,
160
+ validateStep: (currentStep, numberOfSteps) => ({isValid: true}),
161
+ element: <div> Slide 1</div>,
162
+ },
163
+ ];
164
+
165
+ const isDirty = () => false;
166
+ const onClose = jest.fn();
167
+
168
+ render(
169
+ <ModalWizard isDirty={isDirty} onClose={onClose} closeButtonLabel="closebuttonlabel">
170
+ {modelSteps.map((model_item) => (
171
+ <ModalWizard.Step
172
+ docLink={model_item.docLink}
173
+ title={(currentStep, numberOfSteps) => 'Current Step is: ' + currentStep}
174
+ validateStep={model_item.validateStep}
175
+ >
176
+ {model_item.element}
177
+ </ModalWizard.Step>
178
+ ))}
179
+ </ModalWizard>
180
+ );
181
+
182
+ const closeButton = screen.getByRole('button', {
183
+ name: /closebuttonlabel/i,
184
+ });
185
+ userEvent.click(closeButton);
186
+
187
+ expect(onClose).toHaveBeenCalledTimes(1);
188
+ });
189
+
190
+ it('modal wizard onCancel', () => {
191
+ const modelSteps = [
192
+ {
193
+ docLink: 'https://google.com',
194
+ title: (currentStep, numberOfSteps) => 'Current Step is: ' + currentStep,
195
+ validateStep: (currentStep, numberOfSteps) => ({isValid: true}),
196
+ element: <div> Slide 1</div>,
197
+ },
198
+ ];
199
+
200
+ const isDirty = () => false;
201
+ const onClose = jest.fn();
202
+
203
+ render(
204
+ <ModalWizard isDirty={isDirty} onClose={onClose}>
205
+ {modelSteps.map((model_item) => (
206
+ <ModalWizard.Step
207
+ docLink={model_item.docLink}
208
+ title={(currentStep, numberOfSteps) => 'Current Step is: ' + currentStep}
209
+ validateStep={model_item.validateStep}
210
+ >
211
+ {model_item.element}
212
+ </ModalWizard.Step>
213
+ ))}
214
+ </ModalWizard>
215
+ );
216
+
217
+ const cancelButton = screen.getByRole('button', {
218
+ name: /cancel/i,
219
+ });
220
+ userEvent.click(cancelButton);
221
+
222
+ expect(onClose).toHaveBeenCalledTimes(1);
223
+ });
224
+
225
+ it('modal wizard onFinish', () => {
226
+ const modelSteps = [
227
+ {
228
+ docLink: 'https://google.com',
229
+ title: (currentStep, numberOfSteps) => 'Current Step is: ' + currentStep,
230
+ validateStep: (currentStep, numberOfSteps) => ({isValid: true}),
231
+ element: <div> Slide 1</div>,
232
+ },
233
+ ];
234
+
235
+ const isDirty = () => false;
236
+ const onClose = jest.fn();
237
+ const onFinish = jest.fn();
238
+
239
+ render(
240
+ <ModalWizard isDirty={isDirty} onClose={onClose} onFinish={onFinish}>
241
+ {modelSteps.map((model_item) => (
242
+ <ModalWizard.Step
243
+ docLink={model_item.docLink}
244
+ title={(currentStep, numberOfSteps) => 'Current Step is: ' + currentStep}
245
+ validateStep={model_item.validateStep}
246
+ >
247
+ {model_item.element}
248
+ </ModalWizard.Step>
249
+ ))}
250
+ </ModalWizard>
251
+ );
252
+
253
+ const finishButton = screen.getByRole('button', {
254
+ name: /finish/i,
255
+ });
256
+
257
+ userEvent.click(finishButton);
258
+ expect(onFinish).toHaveBeenCalledTimes(1);
259
+ });
260
+
261
+ it('handle dirty state if user confirms close', () => {
262
+ const modelSteps = [
263
+ {
264
+ docLink: 'https://google.com',
265
+ title: (currentStep, numberOfSteps) => 'Current Step is: ' + currentStep,
266
+ validateStep: (currentStep, numberOfSteps) => ({isValid: true}),
267
+ element: <div> Slide 1</div>,
268
+ },
269
+ ];
270
+
271
+ const isDirty = () => true;
272
+ const onClose = jest.fn();
273
+ const handleDirtyState = jest.fn();
274
+
275
+ render(
276
+ <ModalWizard
277
+ isDirty={isDirty}
278
+ onClose={onClose}
279
+ handleDirtyState={handleDirtyState}
280
+ closeButtonLabel="closebuttonlabel"
281
+ >
282
+ {modelSteps.map((model_item) => (
283
+ <ModalWizard.Step
284
+ docLink={model_item.docLink}
285
+ title={(currentStep, numberOfSteps) => 'Current Step is: ' + currentStep}
286
+ validateStep={model_item.validateStep}
287
+ >
288
+ {model_item.element}
289
+ </ModalWizard.Step>
290
+ ))}
291
+ </ModalWizard>
292
+ );
293
+ const closeButton = screen.getByRole('button', {
294
+ name: /closebuttonlabel/i,
295
+ });
296
+
297
+ handleDirtyState.mockReturnValueOnce(true);
298
+ userEvent.click(closeButton);
299
+
300
+ expect(handleDirtyState).toHaveBeenCalledTimes(1);
301
+ expect(onClose).toHaveBeenCalledTimes(1);
302
+ });
303
+
304
+ it('handle dirty state if user confirms cancel', () => {
305
+ const modelSteps = [
306
+ {
307
+ docLink: 'https://google.com',
308
+ title: (currentStep, numberOfSteps) => 'Current Step is: ' + currentStep,
309
+ validateStep: (currentStep, numberOfSteps) => ({isValid: true}),
310
+ element: <div> Slide 1</div>,
311
+ },
312
+ ];
313
+
314
+ const isDirty = () => true;
315
+ const onClose = jest.fn();
316
+ const handleDirtyState = jest.fn();
317
+
318
+ render(
319
+ <ModalWizard
320
+ isDirty={isDirty}
321
+ onClose={onClose}
322
+ handleDirtyState={handleDirtyState}
323
+ closeButtonLabel="closebuttonlabel"
324
+ >
325
+ {modelSteps.map((model_item) => (
326
+ <ModalWizard.Step
327
+ docLink={model_item.docLink}
328
+ title={(currentStep, numberOfSteps) => 'Current Step is: ' + currentStep}
329
+ validateStep={model_item.validateStep}
330
+ >
331
+ {model_item.element}
332
+ </ModalWizard.Step>
333
+ ))}
334
+ </ModalWizard>
335
+ );
336
+ const closeButton = screen.getByRole('button', {
337
+ name: /closebuttonlabel/i,
338
+ });
339
+
340
+ handleDirtyState.mockReturnValueOnce(false);
341
+ userEvent.click(closeButton);
342
+ expect(handleDirtyState).toHaveBeenCalledTimes(1);
343
+ expect(onClose).toHaveBeenCalledTimes(0);
344
+ });
345
+ });
@@ -0,0 +1,2 @@
1
+ export * from './ModalWizard';
2
+ export {type ModalWizardStepProps} from './ModalWizardStep';
@@ -0,0 +1,66 @@
1
+ import {createStyles, Modal, ModalProps} from '@mantine/core';
2
+ import {Children, ReactElement, ReactNode} from 'react';
3
+ import {PromptFooter} from './PromptFooter';
4
+
5
+ const useStyles = createStyles((theme) => {
6
+ const white = '#fff';
7
+ return {
8
+ body: {
9
+ padding: 0,
10
+ },
11
+ modalType: {overflow: 'hidden', width: 550},
12
+ innerBody: {
13
+ padding: `${theme.spacing.md}px ${theme.spacing.xl}px ${theme.spacing.lg}px`,
14
+ },
15
+ header: {
16
+ padding: `${theme.spacing.md}px ${theme.spacing.xl}px`,
17
+ width: '100%',
18
+ borderBottom: `1px solid ${theme.colors.gray[3]}`,
19
+ fontSize: theme.headings.sizes.h4.fontSize,
20
+ lineHeight: theme.headings.sizes.h4.fontSize,
21
+ },
22
+ default: {},
23
+ success: {backgroundColor: theme.colors.lime[6], color: white},
24
+ warning: {backgroundColor: theme.colors.yellow[5], color: white},
25
+ critical: {
26
+ backgroundColor: theme.colors.red[6],
27
+ color: white,
28
+ },
29
+ info: {backgroundColor: theme.colors.navy[5], color: white},
30
+ whiteClose: {color: white, '&:hover': {backgroundColor: 'transparent'}},
31
+ };
32
+ });
33
+
34
+ export interface PromptProps extends ModalProps {
35
+ variant: 'default' | 'success' | 'warning' | 'critical' | 'info';
36
+ children: ReactNode;
37
+ }
38
+ interface PromptType {
39
+ (props: PromptProps): ReactElement;
40
+ Footer: typeof PromptFooter;
41
+ }
42
+
43
+ export const Prompt: PromptType = ({children, variant, size, ...otherProps}) => {
44
+ const {classes, cx} = useStyles();
45
+ const defaultVariant = variant === 'default';
46
+ const convertedChildren = Children.toArray(children) as ReactElement[];
47
+
48
+ const otherChildren = convertedChildren.filter((child) => child.type !== PromptFooter);
49
+ const footer = convertedChildren.find((child) => child.type === PromptFooter);
50
+
51
+ const classNames = {
52
+ header: cx(classes.header, classes[variant]),
53
+ close: !defaultVariant && classes.whiteClose,
54
+ body: classes.body,
55
+ modal: !defaultVariant && classes.modalType,
56
+ };
57
+
58
+ return (
59
+ <Modal padding={0} classNames={classNames} size={defaultVariant ? size : 'sm'} {...otherProps}>
60
+ <div className={classes.innerBody}>{otherChildren}</div>
61
+ {footer}
62
+ </Modal>
63
+ );
64
+ };
65
+
66
+ Prompt.Footer = PromptFooter;
@@ -0,0 +1,8 @@
1
+ import {FunctionComponent, PropsWithChildren} from 'react';
2
+ import {StickyFooter, StickyFooterProps} from '../sticky-footer';
3
+
4
+ export interface PromptFooterProps extends StickyFooterProps {}
5
+
6
+ export const PromptFooter: FunctionComponent<PropsWithChildren<PromptFooterProps>> = ({children, ...otherProps}) => (
7
+ <StickyFooter {...otherProps}>{children}</StickyFooter>
8
+ );