@coveord/plasma-mantine 55.3.4-next.0 → 55.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/.turbo/turbo-test.log +46 -45
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/cjs/components/browser-preview/BrowserPreview.module.css +1 -1
  5. package/dist/cjs/components/button/Button.d.ts +0 -5
  6. package/dist/cjs/components/button/Button.d.ts.map +1 -1
  7. package/dist/cjs/components/button/Button.js +3 -40
  8. package/dist/cjs/components/button/Button.js.map +1 -1
  9. package/dist/cjs/components/date-range-picker/DateRangePickerInlineCalendar.d.ts.map +1 -1
  10. package/dist/cjs/components/date-range-picker/DateRangePickerInlineCalendar.js +21 -3
  11. package/dist/cjs/components/date-range-picker/DateRangePickerInlineCalendar.js.map +1 -1
  12. package/dist/cjs/components/header/Header.module.css +7 -2
  13. package/dist/cjs/components/index.d.ts +0 -2
  14. package/dist/cjs/components/index.d.ts.map +1 -1
  15. package/dist/cjs/components/index.js +0 -2
  16. package/dist/cjs/components/index.js.map +1 -1
  17. package/dist/cjs/components/prompt/Prompt.js +1 -1
  18. package/dist/cjs/components/prompt/Prompt.js.map +1 -1
  19. package/dist/cjs/components/prompt/Prompt.module.css +15 -4
  20. package/dist/cjs/components/prompt/PromptConfirmButton.js +4 -4
  21. package/dist/cjs/components/prompt/PromptConfirmButton.js.map +1 -1
  22. package/dist/cjs/components/sticky-footer/StickyFooter.module.css +3 -3
  23. package/dist/cjs/components/table/use-table.d.ts +10 -4
  24. package/dist/cjs/components/table/use-table.d.ts.map +1 -1
  25. package/dist/cjs/components/table/use-table.js +184 -12
  26. package/dist/cjs/components/table/use-table.js.map +1 -1
  27. package/dist/cjs/components/table/use-url-synced-state.d.ts +29 -0
  28. package/dist/cjs/components/table/use-url-synced-state.d.ts.map +1 -0
  29. package/dist/cjs/components/table/use-url-synced-state.js +58 -0
  30. package/dist/cjs/components/table/use-url-synced-state.js.map +1 -0
  31. package/dist/cjs/styles/ActionIcon.module.css +6 -0
  32. package/dist/cjs/styles/Alert.module.css +26 -1
  33. package/dist/cjs/styles/Anchor.module.css +6 -0
  34. package/dist/cjs/styles/AppShellNavBar.module.css +3 -0
  35. package/dist/cjs/styles/Badge.module.css +2 -0
  36. package/dist/cjs/styles/Checkbox.module.css +17 -0
  37. package/dist/cjs/styles/Combobox.module.css +2 -3
  38. package/dist/cjs/styles/DatePicker.module.css +3 -0
  39. package/dist/cjs/styles/Input.module.css +3 -0
  40. package/dist/cjs/styles/InputWrapper.module.css +9 -0
  41. package/dist/cjs/styles/Modal.module.css +62 -0
  42. package/dist/cjs/styles/NavLink.module.css +18 -0
  43. package/dist/cjs/styles/Notification.module.css +20 -0
  44. package/dist/cjs/styles/Pagination.module.css +30 -0
  45. package/dist/cjs/styles/Radio.module.css +6 -0
  46. package/dist/cjs/styles/ReadOnlyInput.module.css +3 -3
  47. package/dist/cjs/styles/SegmentedControl.module.css +32 -0
  48. package/dist/cjs/styles/Select.module.css +39 -0
  49. package/dist/cjs/styles/Stepper.module.css +66 -0
  50. package/dist/cjs/styles/Tabs.module.css +4 -0
  51. package/dist/cjs/theme/PlasmaColors.d.ts +7 -11
  52. package/dist/cjs/theme/PlasmaColors.d.ts.map +1 -1
  53. package/dist/cjs/theme/PlasmaColors.js +19 -144
  54. package/dist/cjs/theme/PlasmaColors.js.map +1 -1
  55. package/dist/cjs/theme/Theme.d.ts.map +1 -1
  56. package/dist/cjs/theme/Theme.js +115 -43
  57. package/dist/cjs/theme/Theme.js.map +1 -1
  58. package/dist/cjs/theme/plasmaCSSVariablesResolver.d.ts.map +1 -1
  59. package/dist/cjs/theme/plasmaCSSVariablesResolver.js +5 -1
  60. package/dist/cjs/theme/plasmaCSSVariablesResolver.js.map +1 -1
  61. package/dist/cjs/vars/Notification.vars.d.ts +3 -0
  62. package/dist/cjs/vars/Notification.vars.d.ts.map +1 -0
  63. package/dist/cjs/vars/Notification.vars.js +44 -0
  64. package/dist/cjs/vars/Notification.vars.js.map +1 -0
  65. package/dist/cjs/vars/Text.vars.d.ts +3 -0
  66. package/dist/cjs/vars/Text.vars.d.ts.map +1 -0
  67. package/dist/cjs/vars/Text.vars.js +25 -0
  68. package/dist/cjs/vars/Text.vars.js.map +1 -0
  69. package/dist/esm/components/browser-preview/BrowserPreview.module.css +1 -1
  70. package/dist/esm/components/button/Button.d.ts +0 -5
  71. package/dist/esm/components/button/Button.d.ts.map +1 -1
  72. package/dist/esm/components/button/Button.js +0 -17
  73. package/dist/esm/components/button/Button.js.map +1 -1
  74. package/dist/esm/components/date-range-picker/DateRangePickerInlineCalendar.d.ts.map +1 -1
  75. package/dist/esm/components/date-range-picker/DateRangePickerInlineCalendar.js +15 -2
  76. package/dist/esm/components/date-range-picker/DateRangePickerInlineCalendar.js.map +1 -1
  77. package/dist/esm/components/header/Header.module.css +7 -2
  78. package/dist/esm/components/index.d.ts +0 -2
  79. package/dist/esm/components/index.d.ts.map +1 -1
  80. package/dist/esm/components/index.js +0 -2
  81. package/dist/esm/components/index.js.map +1 -1
  82. package/dist/esm/components/prompt/Prompt.js +1 -1
  83. package/dist/esm/components/prompt/Prompt.js.map +1 -1
  84. package/dist/esm/components/prompt/Prompt.module.css +15 -4
  85. package/dist/esm/components/prompt/PromptConfirmButton.js +4 -4
  86. package/dist/esm/components/prompt/PromptConfirmButton.js.map +1 -1
  87. package/dist/esm/components/sticky-footer/StickyFooter.module.css +3 -3
  88. package/dist/esm/components/table/use-table.d.ts +10 -4
  89. package/dist/esm/components/table/use-table.d.ts.map +1 -1
  90. package/dist/esm/components/table/use-table.js +127 -8
  91. package/dist/esm/components/table/use-table.js.map +1 -1
  92. package/dist/esm/components/table/use-url-synced-state.d.ts +29 -0
  93. package/dist/esm/components/table/use-url-synced-state.d.ts.map +1 -0
  94. package/dist/esm/components/table/use-url-synced-state.js +41 -0
  95. package/dist/esm/components/table/use-url-synced-state.js.map +1 -0
  96. package/dist/esm/styles/ActionIcon.module.css +6 -0
  97. package/dist/esm/styles/Alert.module.css +26 -1
  98. package/dist/esm/styles/Anchor.module.css +6 -0
  99. package/dist/esm/styles/AppShellNavBar.module.css +3 -0
  100. package/dist/esm/styles/Badge.module.css +2 -0
  101. package/dist/esm/styles/Checkbox.module.css +17 -0
  102. package/dist/esm/styles/Combobox.module.css +2 -3
  103. package/dist/esm/styles/DatePicker.module.css +3 -0
  104. package/dist/esm/styles/Input.module.css +3 -0
  105. package/dist/esm/styles/InputWrapper.module.css +9 -0
  106. package/dist/esm/styles/Modal.module.css +62 -0
  107. package/dist/esm/styles/NavLink.module.css +18 -0
  108. package/dist/esm/styles/Notification.module.css +20 -0
  109. package/dist/esm/styles/Pagination.module.css +30 -0
  110. package/dist/esm/styles/Radio.module.css +6 -0
  111. package/dist/esm/styles/ReadOnlyInput.module.css +3 -3
  112. package/dist/esm/styles/SegmentedControl.module.css +32 -0
  113. package/dist/esm/styles/Select.module.css +39 -0
  114. package/dist/esm/styles/Stepper.module.css +66 -0
  115. package/dist/esm/styles/Tabs.module.css +4 -0
  116. package/dist/esm/theme/PlasmaColors.d.ts +7 -11
  117. package/dist/esm/theme/PlasmaColors.d.ts.map +1 -1
  118. package/dist/esm/theme/PlasmaColors.js +19 -144
  119. package/dist/esm/theme/PlasmaColors.js.map +1 -1
  120. package/dist/esm/theme/Theme.d.ts.map +1 -1
  121. package/dist/esm/theme/Theme.js +114 -44
  122. package/dist/esm/theme/Theme.js.map +1 -1
  123. package/dist/esm/theme/plasmaCSSVariablesResolver.d.ts.map +1 -1
  124. package/dist/esm/theme/plasmaCSSVariablesResolver.js +5 -1
  125. package/dist/esm/theme/plasmaCSSVariablesResolver.js.map +1 -1
  126. package/dist/esm/vars/Notification.vars.d.ts +3 -0
  127. package/dist/esm/vars/Notification.vars.d.ts.map +1 -0
  128. package/dist/esm/vars/Notification.vars.js +34 -0
  129. package/dist/esm/vars/Notification.vars.js.map +1 -0
  130. package/dist/esm/vars/Text.vars.d.ts +3 -0
  131. package/dist/esm/vars/Text.vars.d.ts.map +1 -0
  132. package/dist/esm/vars/Text.vars.js +15 -0
  133. package/dist/esm/vars/Text.vars.js.map +1 -0
  134. package/package.json +5 -5
  135. package/src/components/browser-preview/BrowserPreview.module.css +1 -1
  136. package/src/components/button/Button.tsx +0 -6
  137. package/src/components/date-range-picker/DateRangePickerInlineCalendar.tsx +15 -1
  138. package/src/components/date-range-picker/__tests__/DateRangePickerInlineCalendar.spec.tsx +6 -4
  139. package/src/components/header/Header.module.css +7 -2
  140. package/src/components/index.ts +0 -2
  141. package/src/components/prompt/Prompt.module.css +15 -4
  142. package/src/components/prompt/Prompt.tsx +1 -1
  143. package/src/components/prompt/PromptConfirmButton.tsx +4 -4
  144. package/src/components/sticky-footer/StickyFooter.module.css +3 -3
  145. package/src/components/table/__tests__/TableColumnsSelector.spec.tsx +51 -0
  146. package/src/components/table/__tests__/TableDateRangePicker.spec.tsx +53 -1
  147. package/src/components/table/__tests__/TableFilter.spec.tsx +43 -0
  148. package/src/components/table/__tests__/TablePagination.spec.tsx +54 -0
  149. package/src/components/table/__tests__/TablePerPage.spec.tsx +55 -0
  150. package/src/components/table/__tests__/TablePredicate.spec.tsx +69 -0
  151. package/src/components/table/__tests__/Th.spec.tsx +35 -0
  152. package/src/components/table/__tests__/use-url-synced-state.unit.spec.ts +113 -0
  153. package/src/components/table/use-table.ts +120 -15
  154. package/src/components/table/use-url-synced-state.ts +70 -0
  155. package/src/styles/ActionIcon.module.css +6 -0
  156. package/src/styles/Alert.module.css +26 -1
  157. package/src/styles/Anchor.module.css +6 -0
  158. package/src/styles/AppShellNavBar.module.css +3 -0
  159. package/src/styles/Badge.module.css +2 -0
  160. package/src/styles/Checkbox.module.css +17 -0
  161. package/src/styles/Combobox.module.css +2 -3
  162. package/src/styles/DatePicker.module.css +3 -0
  163. package/src/styles/Input.module.css +3 -0
  164. package/src/styles/InputWrapper.module.css +9 -0
  165. package/src/styles/Modal.module.css +62 -0
  166. package/src/styles/NavLink.module.css +18 -0
  167. package/src/styles/Notification.module.css +20 -0
  168. package/src/styles/Pagination.module.css +30 -0
  169. package/src/styles/Radio.module.css +6 -0
  170. package/src/styles/ReadOnlyInput.module.css +3 -3
  171. package/src/styles/SegmentedControl.module.css +32 -0
  172. package/src/styles/Select.module.css +39 -0
  173. package/src/styles/Stepper.module.css +66 -0
  174. package/src/styles/Tabs.module.css +4 -0
  175. package/src/theme/PlasmaColors.ts +19 -144
  176. package/src/theme/Theme.tsx +86 -37
  177. package/src/theme/__tests__/plasmaCSSVariablesResolver.spec.ts +46 -3
  178. package/src/theme/plasmaCSSVariablesResolver.ts +5 -2
  179. package/src/vars/Notification.vars.ts +14 -0
  180. package/src/vars/Text.vars.ts +8 -0
  181. package/dist/cjs/components/alert/Alert.d.ts +0 -17
  182. package/dist/cjs/components/alert/Alert.d.ts.map +0 -1
  183. package/dist/cjs/components/alert/Alert.js +0 -53
  184. package/dist/cjs/components/alert/Alert.js.map +0 -1
  185. package/dist/cjs/components/alert/index.d.ts +0 -2
  186. package/dist/cjs/components/alert/index.d.ts.map +0 -1
  187. package/dist/cjs/components/alert/index.js +0 -8
  188. package/dist/cjs/components/alert/index.js.map +0 -1
  189. package/dist/cjs/components/badge/Badge.d.ts +0 -8
  190. package/dist/cjs/components/badge/Badge.d.ts.map +0 -1
  191. package/dist/cjs/components/badge/Badge.js +0 -60
  192. package/dist/cjs/components/badge/Badge.js.map +0 -1
  193. package/dist/cjs/components/badge/index.d.ts +0 -2
  194. package/dist/cjs/components/badge/index.d.ts.map +0 -1
  195. package/dist/cjs/components/badge/index.js +0 -8
  196. package/dist/cjs/components/badge/index.js.map +0 -1
  197. package/dist/esm/components/alert/Alert.d.ts +0 -17
  198. package/dist/esm/components/alert/Alert.d.ts.map +0 -1
  199. package/dist/esm/components/alert/Alert.js +0 -29
  200. package/dist/esm/components/alert/Alert.js.map +0 -1
  201. package/dist/esm/components/alert/index.d.ts +0 -2
  202. package/dist/esm/components/alert/index.d.ts.map +0 -1
  203. package/dist/esm/components/alert/index.js +0 -3
  204. package/dist/esm/components/alert/index.js.map +0 -1
  205. package/dist/esm/components/badge/Badge.d.ts +0 -8
  206. package/dist/esm/components/badge/Badge.d.ts.map +0 -1
  207. package/dist/esm/components/badge/Badge.js +0 -27
  208. package/dist/esm/components/badge/Badge.js.map +0 -1
  209. package/dist/esm/components/badge/index.d.ts +0 -2
  210. package/dist/esm/components/badge/index.d.ts.map +0 -1
  211. package/dist/esm/components/badge/index.js +0 -3
  212. package/dist/esm/components/badge/index.js.map +0 -1
  213. package/src/components/alert/Alert.tsx +0 -7
  214. package/src/components/alert/index.ts +0 -1
  215. package/src/components/badge/Badge.tsx +0 -10
  216. package/src/components/badge/index.ts +0 -1
@@ -2,10 +2,13 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { Center, Group, Space } from '@mantine/core';
3
3
  import { DatePicker } from '@mantine/dates';
4
4
  import { useForm } from '@mantine/form';
5
+ import dayjs from 'dayjs';
5
6
  import { Button } from '../button';
6
7
  import DateRangeClasses from './DateRange.module.css';
7
8
  import { DateRangePickerPresetSelect } from './DateRangePickerPresetSelect';
8
9
  import { EditableDateRangePicker } from './EditableDateRangePicker';
10
+ const isDateRangePickerValue = (value)=>Array.isArray(value) && value.length === 2;
11
+ const endOfDay = (value)=>value ? dayjs(value).endOf('day').toDate() : value;
9
12
  export const DateRangePickerInlineCalendar = ({ initialRange, onApply, onCancel, presets, startProps, endProps, rangeCalendarProps })=>{
10
13
  const form = useForm({
11
14
  initialValues: {
@@ -13,9 +16,18 @@ export const DateRangePickerInlineCalendar = ({ initialRange, onApply, onCancel,
13
16
  }
14
17
  });
15
18
  const calendarInputProps = form.getInputProps('dates');
19
+ const onCalendarChange = (range)=>{
20
+ const normalized = isDateRangePickerValue(range) && range[1] ? [
21
+ range[0],
22
+ endOfDay(range[1])
23
+ ] : range;
24
+ calendarInputProps.onChange(normalized);
25
+ };
16
26
  const onCalendarApply = ()=>{
27
+ // In case the user only clicked the start date, but not the end date,
28
+ // assume a single day was meant to be selected.
17
29
  if (!form.values.dates[1]) {
18
- form.values.dates[1] = form.values.dates[0]; // when date range is the same day
30
+ form.values.dates[1] = endOfDay(form.values.dates[0]);
19
31
  }
20
32
  onApply(form.values.dates);
21
33
  };
@@ -69,7 +81,8 @@ export const DateRangePickerInlineCalendar = ({ initialRange, onApply, onCancel,
69
81
  firstDayOfWeek: 0,
70
82
  allowSingleDateInRange: true,
71
83
  ...rangeCalendarProps,
72
- ...calendarInputProps
84
+ ...calendarInputProps,
85
+ onChange: onCalendarChange
73
86
  })
74
87
  }),
75
88
  /*#__PURE__*/ _jsxs(Group, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/date-range-picker/DateRangePickerInlineCalendar.tsx"],"sourcesContent":["import {Center, Group, Space} from '@mantine/core';\nimport {DatePicker, DatePickerBaseProps} from '@mantine/dates';\nimport {useForm} from '@mantine/form';\n\nimport {Button} from '../button';\nimport DateRangeClasses from './DateRange.module.css';\nimport {DateRangePickerPreset, DateRangePickerPresetSelect} from './DateRangePickerPresetSelect';\nimport {EditableDateRangePicker, EditableDateRangePickerProps} from './EditableDateRangePicker';\n\nexport type DateRangePickerValue = [Date | null, Date | null];\nexport interface DateRangePickerInlineCalendarProps\n extends Pick<EditableDateRangePickerProps, 'startProps' | 'endProps'> {\n /**\n * Initial selected range\n */\n initialRange: DateRangePickerValue;\n /**\n * Function called when the user applies the new date range\n *\n * @param range the newly selected dates\n */\n onApply: (range: DateRangePickerValue) => void;\n /**\n * Function called when the user click on the cancel button\n */\n onCancel: () => void;\n /**\n * The presets to display\n *\n * @default {}\n * @example\n * {\n * january: {label: 'January', range: [new Date(2022, 0, 1), new Date(2022, 0, 31)]},\n * february: {label: 'February', range: [new Date(2022, 1, 1), new Date(2022, 1, 28)]}\n * }\n */\n presets?: Record<string, DateRangePickerPreset>;\n /**\n * Props for RangeCalendar displayed in the popover\n */\n rangeCalendarProps?: Omit<\n DatePickerBaseProps,\n 'value' | 'onChange' | 'isDateInRange' | 'isDateFirstInRange' | 'isDateLastInRange'\n >;\n}\n\nexport const DateRangePickerInlineCalendar = ({\n initialRange,\n onApply,\n onCancel,\n presets,\n startProps,\n endProps,\n rangeCalendarProps,\n}: DateRangePickerInlineCalendarProps) => {\n const form = useForm({\n initialValues: {\n dates: initialRange,\n },\n });\n const calendarInputProps = form.getInputProps('dates');\n\n const onCalendarApply = () => {\n if (!form.values.dates[1]) {\n form.values.dates[1] = form.values.dates[0]; // when date range is the same day\n }\n onApply(form.values.dates);\n };\n\n return (\n <>\n <Group align=\"center\" gap=\"xs\" grow px=\"md\" py=\"sm\" className={DateRangeClasses.picker}>\n <EditableDateRangePicker\n value={calendarInputProps.value}\n {...calendarInputProps}\n startProps={startProps}\n endProps={endProps}\n />\n {presets ? (\n <>\n <Space w=\"sm\" />\n <DateRangePickerPresetSelect\n value={calendarInputProps.value}\n presets={presets}\n {...calendarInputProps}\n selectProps={{comboboxProps: {withinPortal: false}}}\n />\n </>\n ) : null}\n </Group>\n\n <Center py=\"sm\" px=\"md\">\n <DatePicker\n numberOfColumns={2}\n columnsToScroll={1}\n type=\"range\"\n styles={{day: {textAlign: 'center'}}}\n firstDayOfWeek={0}\n allowSingleDateInRange\n {...rangeCalendarProps}\n {...calendarInputProps}\n />\n </Center>\n\n <Group justify=\"right\" gap=\"xs\" px=\"md\" py=\"sm\" className={DateRangeClasses.save}>\n <Button variant=\"outline\" size=\"xs\" onClick={onCancel}>\n Cancel\n </Button>\n <Button size=\"xs\" onClick={onCalendarApply}>\n Apply\n </Button>\n </Group>\n </>\n );\n};\n"],"names":["Center","Group","Space","DatePicker","useForm","Button","DateRangeClasses","DateRangePickerPresetSelect","EditableDateRangePicker","DateRangePickerInlineCalendar","initialRange","onApply","onCancel","presets","startProps","endProps","rangeCalendarProps","form","initialValues","dates","calendarInputProps","getInputProps","onCalendarApply","values","align","gap","grow","px","py","className","picker","value","w","selectProps","comboboxProps","withinPortal","numberOfColumns","columnsToScroll","type","styles","day","textAlign","firstDayOfWeek","allowSingleDateInRange","justify","save","variant","size","onClick"],"mappings":";AAAA,SAAQA,MAAM,EAAEC,KAAK,EAAEC,KAAK,QAAO,gBAAgB;AACnD,SAAQC,UAAU,QAA4B,iBAAiB;AAC/D,SAAQC,OAAO,QAAO,gBAAgB;AAEtC,SAAQC,MAAM,QAAO,YAAY;AACjC,OAAOC,sBAAsB,yBAAyB;AACtD,SAA+BC,2BAA2B,QAAO,gCAAgC;AACjG,SAAQC,uBAAuB,QAAqC,4BAA4B;AAuChG,OAAO,MAAMC,gCAAgC,CAAC,EAC1CC,YAAY,EACZC,OAAO,EACPC,QAAQ,EACRC,OAAO,EACPC,UAAU,EACVC,QAAQ,EACRC,kBAAkB,EACe;IACjC,MAAMC,OAAOb,QAAQ;QACjBc,eAAe;YACXC,OAAOT;QACX;IACJ;IACA,MAAMU,qBAAqBH,KAAKI,aAAa,CAAC;IAE9C,MAAMC,kBAAkB;QACpB,IAAI,CAACL,KAAKM,MAAM,CAACJ,KAAK,CAAC,EAAE,EAAE;YACvBF,KAAKM,MAAM,CAACJ,KAAK,CAAC,EAAE,GAAGF,KAAKM,MAAM,CAACJ,KAAK,CAAC,EAAE,EAAE,kCAAkC;QACnF;QACAR,QAAQM,KAAKM,MAAM,CAACJ,KAAK;IAC7B;IAEA,qBACI;;0BACI,MAAClB;gBAAMuB,OAAM;gBAASC,KAAI;gBAAKC,IAAI;gBAACC,IAAG;gBAAKC,IAAG;gBAAKC,WAAWvB,iBAAiBwB,MAAM;;kCAClF,KAACtB;wBACGuB,OAAOX,mBAAmBW,KAAK;wBAC9B,GAAGX,kBAAkB;wBACtBN,YAAYA;wBACZC,UAAUA;;oBAEbF,wBACG;;0CACI,KAACX;gCAAM8B,GAAE;;0CACT,KAACzB;gCACGwB,OAAOX,mBAAmBW,KAAK;gCAC/BlB,SAASA;gCACR,GAAGO,kBAAkB;gCACtBa,aAAa;oCAACC,eAAe;wCAACC,cAAc;oCAAK;gCAAC;;;yBAG1D;;;0BAGR,KAACnC;gBAAO4B,IAAG;gBAAKD,IAAG;0BACf,cAAA,KAACxB;oBACGiC,iBAAiB;oBACjBC,iBAAiB;oBACjBC,MAAK;oBACLC,QAAQ;wBAACC,KAAK;4BAACC,WAAW;wBAAQ;oBAAC;oBACnCC,gBAAgB;oBAChBC,sBAAsB;oBACrB,GAAG3B,kBAAkB;oBACrB,GAAGI,kBAAkB;;;0BAI9B,MAACnB;gBAAM2C,SAAQ;gBAAQnB,KAAI;gBAAKE,IAAG;gBAAKC,IAAG;gBAAKC,WAAWvB,iBAAiBuC,IAAI;;kCAC5E,KAACxC;wBAAOyC,SAAQ;wBAAUC,MAAK;wBAAKC,SAASpC;kCAAU;;kCAGvD,KAACP;wBAAO0C,MAAK;wBAAKC,SAAS1B;kCAAiB;;;;;;AAM5D,EAAE"}
1
+ {"version":3,"sources":["../../../../src/components/date-range-picker/DateRangePickerInlineCalendar.tsx"],"sourcesContent":["import {Center, Group, Space} from '@mantine/core';\nimport {DatePicker, DatePickerBaseProps} from '@mantine/dates';\nimport {useForm} from '@mantine/form';\n\nimport dayjs from 'dayjs';\nimport {Button} from '../button';\nimport DateRangeClasses from './DateRange.module.css';\nimport {DateRangePickerPreset, DateRangePickerPresetSelect} from './DateRangePickerPresetSelect';\nimport {EditableDateRangePicker, EditableDateRangePickerProps} from './EditableDateRangePicker';\n\nexport type DateRangePickerValue = [Date | null, Date | null];\nexport interface DateRangePickerInlineCalendarProps\n extends Pick<EditableDateRangePickerProps, 'startProps' | 'endProps'> {\n /**\n * Initial selected range\n */\n initialRange: DateRangePickerValue;\n /**\n * Function called when the user applies the new date range\n *\n * @param range the newly selected dates\n */\n onApply: (range: DateRangePickerValue) => void;\n /**\n * Function called when the user click on the cancel button\n */\n onCancel: () => void;\n /**\n * The presets to display\n *\n * @default {}\n * @example\n * {\n * january: {label: 'January', range: [new Date(2022, 0, 1), new Date(2022, 0, 31)]},\n * february: {label: 'February', range: [new Date(2022, 1, 1), new Date(2022, 1, 28)]}\n * }\n */\n presets?: Record<string, DateRangePickerPreset>;\n /**\n * Props for RangeCalendar displayed in the popover\n */\n rangeCalendarProps?: Omit<\n DatePickerBaseProps,\n 'value' | 'onChange' | 'isDateInRange' | 'isDateFirstInRange' | 'isDateLastInRange'\n >;\n}\n\nconst isDateRangePickerValue = (value: unknown): value is DateRangePickerValue =>\n Array.isArray(value) && value.length === 2;\n\nconst endOfDay = (value: Date): Date => (value ? dayjs(value).endOf('day').toDate() : value);\n\nexport const DateRangePickerInlineCalendar = ({\n initialRange,\n onApply,\n onCancel,\n presets,\n startProps,\n endProps,\n rangeCalendarProps,\n}: DateRangePickerInlineCalendarProps) => {\n const form = useForm({\n initialValues: {\n dates: initialRange,\n },\n });\n const calendarInputProps = form.getInputProps('dates');\n\n const onCalendarChange = (range: Date | Date[] | DateRangePickerValue): void => {\n const normalized = isDateRangePickerValue(range) && range[1] ? [range[0], endOfDay(range[1])] : range;\n calendarInputProps.onChange(normalized);\n };\n\n const onCalendarApply = () => {\n // In case the user only clicked the start date, but not the end date,\n // assume a single day was meant to be selected.\n if (!form.values.dates[1]) {\n form.values.dates[1] = endOfDay(form.values.dates[0]);\n }\n onApply(form.values.dates);\n };\n\n return (\n <>\n <Group align=\"center\" gap=\"xs\" grow px=\"md\" py=\"sm\" className={DateRangeClasses.picker}>\n <EditableDateRangePicker\n value={calendarInputProps.value}\n {...calendarInputProps}\n startProps={startProps}\n endProps={endProps}\n />\n {presets ? (\n <>\n <Space w=\"sm\" />\n <DateRangePickerPresetSelect\n value={calendarInputProps.value}\n presets={presets}\n {...calendarInputProps}\n selectProps={{comboboxProps: {withinPortal: false}}}\n />\n </>\n ) : null}\n </Group>\n\n <Center py=\"sm\" px=\"md\">\n <DatePicker\n numberOfColumns={2}\n columnsToScroll={1}\n type=\"range\"\n styles={{day: {textAlign: 'center'}}}\n firstDayOfWeek={0}\n allowSingleDateInRange\n {...rangeCalendarProps}\n {...calendarInputProps}\n onChange={onCalendarChange}\n />\n </Center>\n\n <Group justify=\"right\" gap=\"xs\" px=\"md\" py=\"sm\" className={DateRangeClasses.save}>\n <Button variant=\"outline\" size=\"xs\" onClick={onCancel}>\n Cancel\n </Button>\n <Button size=\"xs\" onClick={onCalendarApply}>\n Apply\n </Button>\n </Group>\n </>\n );\n};\n"],"names":["Center","Group","Space","DatePicker","useForm","dayjs","Button","DateRangeClasses","DateRangePickerPresetSelect","EditableDateRangePicker","isDateRangePickerValue","value","Array","isArray","length","endOfDay","endOf","toDate","DateRangePickerInlineCalendar","initialRange","onApply","onCancel","presets","startProps","endProps","rangeCalendarProps","form","initialValues","dates","calendarInputProps","getInputProps","onCalendarChange","range","normalized","onChange","onCalendarApply","values","align","gap","grow","px","py","className","picker","w","selectProps","comboboxProps","withinPortal","numberOfColumns","columnsToScroll","type","styles","day","textAlign","firstDayOfWeek","allowSingleDateInRange","justify","save","variant","size","onClick"],"mappings":";AAAA,SAAQA,MAAM,EAAEC,KAAK,EAAEC,KAAK,QAAO,gBAAgB;AACnD,SAAQC,UAAU,QAA4B,iBAAiB;AAC/D,SAAQC,OAAO,QAAO,gBAAgB;AAEtC,OAAOC,WAAW,QAAQ;AAC1B,SAAQC,MAAM,QAAO,YAAY;AACjC,OAAOC,sBAAsB,yBAAyB;AACtD,SAA+BC,2BAA2B,QAAO,gCAAgC;AACjG,SAAQC,uBAAuB,QAAqC,4BAA4B;AAuChG,MAAMC,yBAAyB,CAACC,QAC5BC,MAAMC,OAAO,CAACF,UAAUA,MAAMG,MAAM,KAAK;AAE7C,MAAMC,WAAW,CAACJ,QAAuBA,QAAQN,MAAMM,OAAOK,KAAK,CAAC,OAAOC,MAAM,KAAKN;AAEtF,OAAO,MAAMO,gCAAgC,CAAC,EAC1CC,YAAY,EACZC,OAAO,EACPC,QAAQ,EACRC,OAAO,EACPC,UAAU,EACVC,QAAQ,EACRC,kBAAkB,EACe;IACjC,MAAMC,OAAOtB,QAAQ;QACjBuB,eAAe;YACXC,OAAOT;QACX;IACJ;IACA,MAAMU,qBAAqBH,KAAKI,aAAa,CAAC;IAE9C,MAAMC,mBAAmB,CAACC;QACtB,MAAMC,aAAavB,uBAAuBsB,UAAUA,KAAK,CAAC,EAAE,GAAG;YAACA,KAAK,CAAC,EAAE;YAAEjB,SAASiB,KAAK,CAAC,EAAE;SAAE,GAAGA;QAChGH,mBAAmBK,QAAQ,CAACD;IAChC;IAEA,MAAME,kBAAkB;QACpB,sEAAsE;QACtE,gDAAgD;QAChD,IAAI,CAACT,KAAKU,MAAM,CAACR,KAAK,CAAC,EAAE,EAAE;YACvBF,KAAKU,MAAM,CAACR,KAAK,CAAC,EAAE,GAAGb,SAASW,KAAKU,MAAM,CAACR,KAAK,CAAC,EAAE;QACxD;QACAR,QAAQM,KAAKU,MAAM,CAACR,KAAK;IAC7B;IAEA,qBACI;;0BACI,MAAC3B;gBAAMoC,OAAM;gBAASC,KAAI;gBAAKC,IAAI;gBAACC,IAAG;gBAAKC,IAAG;gBAAKC,WAAWnC,iBAAiBoC,MAAM;;kCAClF,KAAClC;wBACGE,OAAOkB,mBAAmBlB,KAAK;wBAC9B,GAAGkB,kBAAkB;wBACtBN,YAAYA;wBACZC,UAAUA;;oBAEbF,wBACG;;0CACI,KAACpB;gCAAM0C,GAAE;;0CACT,KAACpC;gCACGG,OAAOkB,mBAAmBlB,KAAK;gCAC/BW,SAASA;gCACR,GAAGO,kBAAkB;gCACtBgB,aAAa;oCAACC,eAAe;wCAACC,cAAc;oCAAK;gCAAC;;;yBAG1D;;;0BAGR,KAAC/C;gBAAOyC,IAAG;gBAAKD,IAAG;0BACf,cAAA,KAACrC;oBACG6C,iBAAiB;oBACjBC,iBAAiB;oBACjBC,MAAK;oBACLC,QAAQ;wBAACC,KAAK;4BAACC,WAAW;wBAAQ;oBAAC;oBACnCC,gBAAgB;oBAChBC,sBAAsB;oBACrB,GAAG9B,kBAAkB;oBACrB,GAAGI,kBAAkB;oBACtBK,UAAUH;;;0BAIlB,MAAC9B;gBAAMuD,SAAQ;gBAAQlB,KAAI;gBAAKE,IAAG;gBAAKC,IAAG;gBAAKC,WAAWnC,iBAAiBkD,IAAI;;kCAC5E,KAACnD;wBAAOoD,SAAQ;wBAAUC,MAAK;wBAAKC,SAASvC;kCAAU;;kCAGvD,KAACf;wBAAOqD,MAAK;wBAAKC,SAASzB;kCAAiB;;;;;;AAM5D,EAAE"}
@@ -5,13 +5,18 @@
5
5
  }
6
6
 
7
7
  & .description {
8
- color: var(--mantine-color-dimmed);
8
+ color: var(--mantine-color-gray-6);
9
9
  font-weight: 300;
10
10
  }
11
11
  }
12
12
 
13
13
  .title {
14
14
  word-break: break-word;
15
+
16
+ &[data-variant='primary'] {
17
+ color: var(--mantine-color-gray-5);
18
+ }
19
+
15
20
  line-height: var(--mantine-line-height-md);
16
21
  }
17
22
 
@@ -26,5 +31,5 @@
26
31
  }
27
32
 
28
33
  .breadcrumbsSeparator {
29
- color: var(--mantine-color-dimmed);
34
+ color: var(--mantine-color-gray-5);
30
35
  }
@@ -1,6 +1,4 @@
1
1
  export * from './action-icon';
2
- export * from './alert';
3
- export * from './badge';
4
2
  export * from './blank-slate';
5
3
  export * from './browser-preview';
6
4
  export * from './button';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC"}
@@ -1,6 +1,4 @@
1
1
  export * from './action-icon';
2
- export * from './alert';
3
- export * from './badge';
4
2
  export * from './blank-slate';
5
3
  export * from './browser-preview';
6
4
  export * from './button';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/index.ts"],"sourcesContent":["export * from './action-icon';\nexport * from './alert';\nexport * from './badge';\nexport * from './blank-slate';\nexport * from './browser-preview';\nexport * from './button';\nexport * from './code-editor';\nexport * from './collection';\nexport * from './copyToClipboard';\nexport * from './date-range-picker';\nexport * from './ellipsis-text';\nexport * from './header';\nexport * from './inline-confirm';\nexport * from './menu';\nexport * from './prompt';\nexport * from './read-only';\nexport * from './sticky-footer';\nexport * from './table';\nexport * from './child-form';\n"],"names":[],"mappings":"AAAA,cAAc,gBAAgB;AAC9B,cAAc,UAAU;AACxB,cAAc,UAAU;AACxB,cAAc,gBAAgB;AAC9B,cAAc,oBAAoB;AAClC,cAAc,WAAW;AACzB,cAAc,gBAAgB;AAC9B,cAAc,eAAe;AAC7B,cAAc,oBAAoB;AAClC,cAAc,sBAAsB;AACpC,cAAc,kBAAkB;AAChC,cAAc,WAAW;AACzB,cAAc,mBAAmB;AACjC,cAAc,SAAS;AACvB,cAAc,WAAW;AACzB,cAAc,cAAc;AAC5B,cAAc,kBAAkB;AAChC,cAAc,UAAU;AACxB,cAAc,eAAe"}
1
+ {"version":3,"sources":["../../../src/components/index.ts"],"sourcesContent":["export * from './action-icon';\nexport * from './blank-slate';\nexport * from './browser-preview';\nexport * from './button';\nexport * from './code-editor';\nexport * from './collection';\nexport * from './copyToClipboard';\nexport * from './date-range-picker';\nexport * from './ellipsis-text';\nexport * from './header';\nexport * from './inline-confirm';\nexport * from './menu';\nexport * from './prompt';\nexport * from './read-only';\nexport * from './sticky-footer';\nexport * from './table';\nexport * from './child-form';\n"],"names":[],"mappings":"AAAA,cAAc,gBAAgB;AAC9B,cAAc,gBAAgB;AAC9B,cAAc,oBAAoB;AAClC,cAAc,WAAW;AACzB,cAAc,gBAAgB;AAC9B,cAAc,eAAe;AAC7B,cAAc,oBAAoB;AAClC,cAAc,sBAAsB;AACpC,cAAc,kBAAkB;AAChC,cAAc,WAAW;AACzB,cAAc,mBAAmB;AACjC,cAAc,SAAS;AACvB,cAAc,WAAW;AACzB,cAAc,cAAc;AAC5B,cAAc,kBAAkB;AAChC,cAAc,UAAU;AACxB,cAAc,eAAe"}
@@ -55,7 +55,7 @@ export const Prompt = factory((_props, ref)=>{
55
55
  children: /*#__PURE__*/ _jsxs(Modal.Root, {
56
56
  ref: ref,
57
57
  variant: "prompt",
58
- size: "lg",
58
+ size: "sm",
59
59
  ...others,
60
60
  ...getStyles('root'),
61
61
  children: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/prompt/Prompt.tsx"],"sourcesContent":["import {\n Box,\n createVarsResolver,\n factory,\n Factory,\n Image,\n Modal,\n ModalRootProps,\n ModalStylesNames,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport {Children, ReactElement, ReactNode} from 'react';\nimport Critical from './icons/critical.svg';\nimport Info from './icons/info.svg';\nimport Success from './icons/success.svg';\nimport Warning from './icons/warning.svg';\nimport {PromptContextProvider} from './Prompt.context';\nimport classes from './Prompt.module.css';\nimport {PromptCancelButton, PromptCancelButtonStylesNamesVariant} from './PromptCancelButton';\nimport {PromptConfirmButton, PromptConfirmButtonStylesNamesVariant} from './PromptConfirmButton';\nimport {PromptFooter} from './PromptFooter';\n\nexport type PromptVariant = 'success' | 'warning' | 'critical' | 'info';\nexport type PromptVars = {root: '--prompt-icon-size'};\nexport type PromptStylesNames =\n | ModalStylesNames\n | 'icon'\n | PromptCancelButtonStylesNamesVariant\n | PromptConfirmButtonStylesNamesVariant;\n\nexport interface PromptProps\n extends StylesApiProps<PromptFactory>,\n Omit<ModalRootProps, 'classNames' | 'styles' | 'vars'> {\n /**\n * Controls prompt appearance\n *\n * @default \"info\"\n */\n variant?: PromptVariant;\n children: ReactNode;\n title: ReactNode;\n icon?: ReactNode;\n}\n\nexport type PromptFactory = Factory<{\n props: PromptProps;\n ref: HTMLDivElement;\n vars: PromptVars;\n variant: PromptVariant;\n stylesNames: PromptStylesNames;\n staticComponents: {\n CancelButton: typeof PromptCancelButton;\n ConfirmButton: typeof PromptConfirmButton;\n Footer: typeof PromptFooter;\n };\n}>;\n\nconst PROMPT_VARIANT_ICONS_SRC: Record<PromptVariant, string> = {\n success: Success,\n warning: Warning,\n critical: Critical,\n info: Info,\n};\n\nconst defaultProps: Partial<PromptProps> = {\n variant: 'info',\n centered: true,\n};\n\nconst varsResolver = createVarsResolver<PromptFactory>((_theme, {icon}) => ({\n root: {\n '--prompt-icon-size': icon ? undefined : '88px',\n },\n}));\n\nexport const Prompt = factory<PromptFactory>((_props, ref) => {\n const props = useProps('Prompt', defaultProps, _props);\n const {variant, title, icon, children, className, classNames, style, styles, unstyled, vars, ...others} = props;\n const getStyles = useStyles<PromptFactory>({\n name: 'Prompt',\n props,\n classes,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n varsResolver,\n });\n const stylesApiProps = {classNames, styles};\n\n const convertedChildren = Children.toArray(children) as ReactElement[];\n\n const otherChildren = convertedChildren.filter((child) => child.type !== PromptFooter);\n const footer = convertedChildren.find((child) => child.type === PromptFooter);\n\n return (\n <PromptContextProvider value={{variant, getStyles}}>\n <Modal.Root ref={ref} variant=\"prompt\" size=\"lg\" {...others} {...getStyles('root')}>\n <Modal.Overlay {...getStyles('overlay', stylesApiProps)} />\n <Modal.Content {...getStyles('content', stylesApiProps)}>\n <Modal.Header {...getStyles('header', stylesApiProps)}>\n {icon || icon === null ? (\n icon\n ) : (\n <Image\n alt=\"\"\n role=\"presentation\"\n {...getStyles('icon', stylesApiProps)}\n src={PROMPT_VARIANT_ICONS_SRC[variant]}\n />\n )}\n <Modal.Title {...getStyles('title', stylesApiProps)}>{title}</Modal.Title>\n <Modal.CloseButton {...getStyles('close', stylesApiProps)} />\n </Modal.Header>\n <Modal.Body {...getStyles('body', stylesApiProps)}>\n <Box {...getStyles('inner', stylesApiProps)}>{otherChildren}</Box>\n </Modal.Body>\n {footer}\n </Modal.Content>\n </Modal.Root>\n </PromptContextProvider>\n );\n});\n\nPrompt.CancelButton = PromptCancelButton;\nPrompt.ConfirmButton = PromptConfirmButton;\nPrompt.Footer = PromptFooter;\n"],"names":["Box","createVarsResolver","factory","Image","Modal","useProps","useStyles","Children","Critical","Info","Success","Warning","PromptContextProvider","classes","PromptCancelButton","PromptConfirmButton","PromptFooter","PROMPT_VARIANT_ICONS_SRC","success","warning","critical","info","defaultProps","variant","centered","varsResolver","_theme","icon","root","undefined","Prompt","_props","ref","props","title","children","className","classNames","style","styles","unstyled","vars","others","getStyles","name","stylesApiProps","convertedChildren","toArray","otherChildren","filter","child","type","footer","find","value","Root","size","Overlay","Content","Header","alt","role","src","Title","CloseButton","Body","CancelButton","ConfirmButton","Footer"],"mappings":";AAAA,SACIA,GAAG,EACHC,kBAAkB,EAClBC,OAAO,EAEPC,KAAK,EACLC,KAAK,EAILC,QAAQ,EACRC,SAAS,QACN,gBAAgB;AACvB,SAAQC,QAAQ,QAAgC,QAAQ;AACxD,OAAOC,cAAc,uBAAuB;AAC5C,OAAOC,UAAU,mBAAmB;AACpC,OAAOC,aAAa,sBAAsB;AAC1C,OAAOC,aAAa,sBAAsB;AAC1C,SAAQC,qBAAqB,QAAO,mBAAmB;AACvD,OAAOC,aAAa,sBAAsB;AAC1C,SAAQC,kBAAkB,QAA6C,uBAAuB;AAC9F,SAAQC,mBAAmB,QAA8C,wBAAwB;AACjG,SAAQC,YAAY,QAAO,iBAAiB;AAqC5C,MAAMC,2BAA0D;IAC5DC,SAASR;IACTS,SAASR;IACTS,UAAUZ;IACVa,MAAMZ;AACV;AAEA,MAAMa,eAAqC;IACvCC,SAAS;IACTC,UAAU;AACd;AAEA,MAAMC,eAAexB,mBAAkC,CAACyB,QAAQ,EAACC,IAAI,EAAC,GAAM,CAAA;QACxEC,MAAM;YACF,sBAAsBD,OAAOE,YAAY;QAC7C;IACJ,CAAA;AAEA,OAAO,MAAMC,SAAS5B,QAAuB,CAAC6B,QAAQC;IAClD,MAAMC,QAAQ5B,SAAS,UAAUiB,cAAcS;IAC/C,MAAM,EAACR,OAAO,EAAEW,KAAK,EAAEP,IAAI,EAAEQ,QAAQ,EAAEC,SAAS,EAAEC,UAAU,EAAEC,KAAK,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,IAAI,EAAE,GAAGC,QAAO,GAAGT;IAC1G,MAAMU,YAAYrC,UAAyB;QACvCsC,MAAM;QACNX;QACApB;QACAuB;QACAE;QACAD;QACAE;QACAC;QACAC;QACAhB;IACJ;IACA,MAAMoB,iBAAiB;QAACR;QAAYE;IAAM;IAE1C,MAAMO,oBAAoBvC,SAASwC,OAAO,CAACZ;IAE3C,MAAMa,gBAAgBF,kBAAkBG,MAAM,CAAC,CAACC,QAAUA,MAAMC,IAAI,KAAKnC;IACzE,MAAMoC,SAASN,kBAAkBO,IAAI,CAAC,CAACH,QAAUA,MAAMC,IAAI,KAAKnC;IAEhE,qBACI,KAACJ;QAAsB0C,OAAO;YAAC/B;YAASoB;QAAS;kBAC7C,cAAA,MAACvC,MAAMmD,IAAI;YAACvB,KAAKA;YAAKT,SAAQ;YAASiC,MAAK;YAAM,GAAGd,MAAM;YAAG,GAAGC,UAAU,OAAO;;8BAC9E,KAACvC,MAAMqD,OAAO;oBAAE,GAAGd,UAAU,WAAWE,eAAe;;8BACvD,MAACzC,MAAMsD,OAAO;oBAAE,GAAGf,UAAU,WAAWE,eAAe;;sCACnD,MAACzC,MAAMuD,MAAM;4BAAE,GAAGhB,UAAU,UAAUE,eAAe;;gCAChDlB,QAAQA,SAAS,OACdA,qBAEA,KAACxB;oCACGyD,KAAI;oCACJC,MAAK;oCACJ,GAAGlB,UAAU,QAAQE,eAAe;oCACrCiB,KAAK7C,wBAAwB,CAACM,QAAQ;;8CAG9C,KAACnB,MAAM2D,KAAK;oCAAE,GAAGpB,UAAU,SAASE,eAAe;8CAAGX;;8CACtD,KAAC9B,MAAM4D,WAAW;oCAAE,GAAGrB,UAAU,SAASE,eAAe;;;;sCAE7D,KAACzC,MAAM6D,IAAI;4BAAE,GAAGtB,UAAU,QAAQE,eAAe;sCAC7C,cAAA,KAAC7C;gCAAK,GAAG2C,UAAU,SAASE,eAAe;0CAAGG;;;wBAEjDI;;;;;;AAKrB,GAAG;AAEHtB,OAAOoC,YAAY,GAAGpD;AACtBgB,OAAOqC,aAAa,GAAGpD;AACvBe,OAAOsC,MAAM,GAAGpD"}
1
+ {"version":3,"sources":["../../../../src/components/prompt/Prompt.tsx"],"sourcesContent":["import {\n Box,\n createVarsResolver,\n factory,\n Factory,\n Image,\n Modal,\n ModalRootProps,\n ModalStylesNames,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport {Children, ReactElement, ReactNode} from 'react';\nimport Critical from './icons/critical.svg';\nimport Info from './icons/info.svg';\nimport Success from './icons/success.svg';\nimport Warning from './icons/warning.svg';\nimport {PromptContextProvider} from './Prompt.context';\nimport classes from './Prompt.module.css';\nimport {PromptCancelButton, PromptCancelButtonStylesNamesVariant} from './PromptCancelButton';\nimport {PromptConfirmButton, PromptConfirmButtonStylesNamesVariant} from './PromptConfirmButton';\nimport {PromptFooter} from './PromptFooter';\n\nexport type PromptVariant = 'success' | 'warning' | 'critical' | 'info';\nexport type PromptVars = {root: '--prompt-icon-size'};\nexport type PromptStylesNames =\n | ModalStylesNames\n | 'icon'\n | PromptCancelButtonStylesNamesVariant\n | PromptConfirmButtonStylesNamesVariant;\n\nexport interface PromptProps\n extends StylesApiProps<PromptFactory>,\n Omit<ModalRootProps, 'classNames' | 'styles' | 'vars'> {\n /**\n * Controls prompt appearance\n *\n * @default \"info\"\n */\n variant?: PromptVariant;\n children: ReactNode;\n title: ReactNode;\n icon?: ReactNode;\n}\n\nexport type PromptFactory = Factory<{\n props: PromptProps;\n ref: HTMLDivElement;\n vars: PromptVars;\n variant: PromptVariant;\n stylesNames: PromptStylesNames;\n staticComponents: {\n CancelButton: typeof PromptCancelButton;\n ConfirmButton: typeof PromptConfirmButton;\n Footer: typeof PromptFooter;\n };\n}>;\n\nconst PROMPT_VARIANT_ICONS_SRC: Record<PromptVariant, string> = {\n success: Success,\n warning: Warning,\n critical: Critical,\n info: Info,\n};\n\nconst defaultProps: Partial<PromptProps> = {\n variant: 'info',\n centered: true,\n};\n\nconst varsResolver = createVarsResolver<PromptFactory>((_theme, {icon}) => ({\n root: {\n '--prompt-icon-size': icon ? undefined : '88px',\n },\n}));\n\nexport const Prompt = factory<PromptFactory>((_props, ref) => {\n const props = useProps('Prompt', defaultProps, _props);\n const {variant, title, icon, children, className, classNames, style, styles, unstyled, vars, ...others} = props;\n const getStyles = useStyles<PromptFactory>({\n name: 'Prompt',\n props,\n classes,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n varsResolver,\n });\n const stylesApiProps = {classNames, styles};\n\n const convertedChildren = Children.toArray(children) as ReactElement[];\n\n const otherChildren = convertedChildren.filter((child) => child.type !== PromptFooter);\n const footer = convertedChildren.find((child) => child.type === PromptFooter);\n\n return (\n <PromptContextProvider value={{variant, getStyles}}>\n <Modal.Root ref={ref} variant=\"prompt\" size=\"sm\" {...others} {...getStyles('root')}>\n <Modal.Overlay {...getStyles('overlay', stylesApiProps)} />\n <Modal.Content {...getStyles('content', stylesApiProps)}>\n <Modal.Header {...getStyles('header', stylesApiProps)}>\n {icon || icon === null ? (\n icon\n ) : (\n <Image\n alt=\"\"\n role=\"presentation\"\n {...getStyles('icon', stylesApiProps)}\n src={PROMPT_VARIANT_ICONS_SRC[variant]}\n />\n )}\n <Modal.Title {...getStyles('title', stylesApiProps)}>{title}</Modal.Title>\n <Modal.CloseButton {...getStyles('close', stylesApiProps)} />\n </Modal.Header>\n <Modal.Body {...getStyles('body', stylesApiProps)}>\n <Box {...getStyles('inner', stylesApiProps)}>{otherChildren}</Box>\n </Modal.Body>\n {footer}\n </Modal.Content>\n </Modal.Root>\n </PromptContextProvider>\n );\n});\n\nPrompt.CancelButton = PromptCancelButton;\nPrompt.ConfirmButton = PromptConfirmButton;\nPrompt.Footer = PromptFooter;\n"],"names":["Box","createVarsResolver","factory","Image","Modal","useProps","useStyles","Children","Critical","Info","Success","Warning","PromptContextProvider","classes","PromptCancelButton","PromptConfirmButton","PromptFooter","PROMPT_VARIANT_ICONS_SRC","success","warning","critical","info","defaultProps","variant","centered","varsResolver","_theme","icon","root","undefined","Prompt","_props","ref","props","title","children","className","classNames","style","styles","unstyled","vars","others","getStyles","name","stylesApiProps","convertedChildren","toArray","otherChildren","filter","child","type","footer","find","value","Root","size","Overlay","Content","Header","alt","role","src","Title","CloseButton","Body","CancelButton","ConfirmButton","Footer"],"mappings":";AAAA,SACIA,GAAG,EACHC,kBAAkB,EAClBC,OAAO,EAEPC,KAAK,EACLC,KAAK,EAILC,QAAQ,EACRC,SAAS,QACN,gBAAgB;AACvB,SAAQC,QAAQ,QAAgC,QAAQ;AACxD,OAAOC,cAAc,uBAAuB;AAC5C,OAAOC,UAAU,mBAAmB;AACpC,OAAOC,aAAa,sBAAsB;AAC1C,OAAOC,aAAa,sBAAsB;AAC1C,SAAQC,qBAAqB,QAAO,mBAAmB;AACvD,OAAOC,aAAa,sBAAsB;AAC1C,SAAQC,kBAAkB,QAA6C,uBAAuB;AAC9F,SAAQC,mBAAmB,QAA8C,wBAAwB;AACjG,SAAQC,YAAY,QAAO,iBAAiB;AAqC5C,MAAMC,2BAA0D;IAC5DC,SAASR;IACTS,SAASR;IACTS,UAAUZ;IACVa,MAAMZ;AACV;AAEA,MAAMa,eAAqC;IACvCC,SAAS;IACTC,UAAU;AACd;AAEA,MAAMC,eAAexB,mBAAkC,CAACyB,QAAQ,EAACC,IAAI,EAAC,GAAM,CAAA;QACxEC,MAAM;YACF,sBAAsBD,OAAOE,YAAY;QAC7C;IACJ,CAAA;AAEA,OAAO,MAAMC,SAAS5B,QAAuB,CAAC6B,QAAQC;IAClD,MAAMC,QAAQ5B,SAAS,UAAUiB,cAAcS;IAC/C,MAAM,EAACR,OAAO,EAAEW,KAAK,EAAEP,IAAI,EAAEQ,QAAQ,EAAEC,SAAS,EAAEC,UAAU,EAAEC,KAAK,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,IAAI,EAAE,GAAGC,QAAO,GAAGT;IAC1G,MAAMU,YAAYrC,UAAyB;QACvCsC,MAAM;QACNX;QACApB;QACAuB;QACAE;QACAD;QACAE;QACAC;QACAC;QACAhB;IACJ;IACA,MAAMoB,iBAAiB;QAACR;QAAYE;IAAM;IAE1C,MAAMO,oBAAoBvC,SAASwC,OAAO,CAACZ;IAE3C,MAAMa,gBAAgBF,kBAAkBG,MAAM,CAAC,CAACC,QAAUA,MAAMC,IAAI,KAAKnC;IACzE,MAAMoC,SAASN,kBAAkBO,IAAI,CAAC,CAACH,QAAUA,MAAMC,IAAI,KAAKnC;IAEhE,qBACI,KAACJ;QAAsB0C,OAAO;YAAC/B;YAASoB;QAAS;kBAC7C,cAAA,MAACvC,MAAMmD,IAAI;YAACvB,KAAKA;YAAKT,SAAQ;YAASiC,MAAK;YAAM,GAAGd,MAAM;YAAG,GAAGC,UAAU,OAAO;;8BAC9E,KAACvC,MAAMqD,OAAO;oBAAE,GAAGd,UAAU,WAAWE,eAAe;;8BACvD,MAACzC,MAAMsD,OAAO;oBAAE,GAAGf,UAAU,WAAWE,eAAe;;sCACnD,MAACzC,MAAMuD,MAAM;4BAAE,GAAGhB,UAAU,UAAUE,eAAe;;gCAChDlB,QAAQA,SAAS,OACdA,qBAEA,KAACxB;oCACGyD,KAAI;oCACJC,MAAK;oCACJ,GAAGlB,UAAU,QAAQE,eAAe;oCACrCiB,KAAK7C,wBAAwB,CAACM,QAAQ;;8CAG9C,KAACnB,MAAM2D,KAAK;oCAAE,GAAGpB,UAAU,SAASE,eAAe;8CAAGX;;8CACtD,KAAC9B,MAAM4D,WAAW;oCAAE,GAAGrB,UAAU,SAASE,eAAe;;;;sCAE7D,KAACzC,MAAM6D,IAAI;4BAAE,GAAGtB,UAAU,QAAQE,eAAe;sCAC7C,cAAA,KAAC7C;gCAAK,GAAG2C,UAAU,SAASE,eAAe;0CAAGG;;;wBAEjDI;;;;;;AAKrB,GAAG;AAEHtB,OAAOoC,YAAY,GAAGpD;AACtBgB,OAAOqC,aAAa,GAAGpD;AACvBe,OAAOsC,MAAM,GAAGpD"}
@@ -1,9 +1,14 @@
1
1
  .root {
2
- --prompt-icon-size: 68px;
2
+ --prompt-icon-size: 88px;
3
+
4
+ .header {
5
+ border-bottom: none;
6
+ align-items: center;
7
+ }
3
8
 
4
9
  .body {
5
10
  padding: 0 var(--mantine-spacing-lg) var(--mantine-spacing-lg)
6
- calc(var(--prompt-icon-size) + var(--mantine-spacing-md) + var(--mantine-spacing-lg));
11
+ calc(var(--prompt-icon-size) + (2 * var(--mantine-spacing-lg)));
7
12
  }
8
13
  }
9
14
 
@@ -13,12 +18,18 @@
13
18
  }
14
19
 
15
20
  .header {
16
- gap: var(--mantine-spacing-md);
21
+ gap: var(--mantine-spacing-lg);
17
22
  width: 100%;
23
+ font-size: var(--mantine-h3-font-size);
24
+ line-height: var(--mantine-h3-line-height);
18
25
  overflow-wrap: anywhere;
19
26
  padding: var(--mantine-spacing-lg) var(--mantine-spacing-md) var(--mantine-spacing-xs) var(--mantine-spacing-lg);
20
27
  }
21
28
 
29
+ .close {
30
+ align-self: flex-start;
31
+ }
32
+
22
33
  .inner {
23
- color: var(--mantine-color-dimmed);
34
+ color: var(--mantine-color-gray-7);
24
35
  }
@@ -3,10 +3,10 @@ import { factory, useProps } from '@mantine/core';
3
3
  import { Button } from '../button/Button';
4
4
  import { usePromptContext } from './Prompt.context';
5
5
  const COLOR_BY_VARIANT = {
6
- success: 'var(--mantine-primary-color-filled)',
7
- info: 'var(--mantine-primary-color-filled)',
8
- warning: 'var(--mantine-color-error)',
9
- critical: 'var(--mantine-color-error)'
6
+ success: 'action',
7
+ info: 'action',
8
+ warning: 'critical',
9
+ critical: 'critical'
10
10
  };
11
11
  const defaultProps = {};
12
12
  export const PromptConfirmButton = factory((_props, ref)=>{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/prompt/PromptConfirmButton.tsx"],"sourcesContent":["import {CompoundStylesApiProps, factory, Factory, useProps} from '@mantine/core';\nimport {Button, ButtonProps} from '../button/Button';\nimport {PromptVariant} from './Prompt';\nimport {usePromptContext} from './Prompt.context';\n\nexport type PromptConfirmButtonStylesNamesVariant = 'confirm';\n\nexport interface PromptConfirmButtonProps\n extends CompoundStylesApiProps<PromptConfirmButtonFactory>,\n Omit<ButtonProps, 'primary' | 'classNames' | 'styles' | 'vars' | 'variant'> {}\n\nexport type PromptConfirmButtonFactory = Factory<{\n props: PromptConfirmButtonProps;\n ref: HTMLButtonElement;\n stylesNames: PromptConfirmButtonStylesNamesVariant;\n compound: true;\n}>;\n\nconst COLOR_BY_VARIANT: Record<PromptVariant, string> = {\n success: 'var(--mantine-primary-color-filled)',\n info: 'var(--mantine-primary-color-filled)',\n warning: 'var(--mantine-color-error)',\n critical: 'var(--mantine-color-error)',\n};\n\nconst defaultProps: Partial<PromptConfirmButtonProps> = {};\n\nexport const PromptConfirmButton = factory<PromptConfirmButtonFactory>((_props, ref) => {\n const {variant, getStyles} = usePromptContext();\n const props = useProps('PromptConfirmButton', defaultProps, _props);\n const {\n className,\n classNames,\n style,\n styles,\n unstyled,\n vars,\n disabled,\n disabledTooltip,\n disabledTooltipProps,\n ...others\n } = props;\n\n return (\n <Button\n ref={ref}\n variant=\"filled\"\n color={COLOR_BY_VARIANT[variant]}\n disabled={disabled}\n disabledTooltip={disabledTooltip}\n disabledTooltipProps={disabledTooltipProps}\n {...others}\n {...getStyles('confirm', {style, styles, className, classNames})}\n />\n );\n});\n"],"names":["factory","useProps","Button","usePromptContext","COLOR_BY_VARIANT","success","info","warning","critical","defaultProps","PromptConfirmButton","_props","ref","variant","getStyles","props","className","classNames","style","styles","unstyled","vars","disabled","disabledTooltip","disabledTooltipProps","others","color"],"mappings":";AAAA,SAAgCA,OAAO,EAAWC,QAAQ,QAAO,gBAAgB;AACjF,SAAQC,MAAM,QAAoB,mBAAmB;AAErD,SAAQC,gBAAgB,QAAO,mBAAmB;AAelD,MAAMC,mBAAkD;IACpDC,SAAS;IACTC,MAAM;IACNC,SAAS;IACTC,UAAU;AACd;AAEA,MAAMC,eAAkD,CAAC;AAEzD,OAAO,MAAMC,sBAAsBV,QAAoC,CAACW,QAAQC;IAC5E,MAAM,EAACC,OAAO,EAAEC,SAAS,EAAC,GAAGX;IAC7B,MAAMY,QAAQd,SAAS,uBAAuBQ,cAAcE;IAC5D,MAAM,EACFK,SAAS,EACTC,UAAU,EACVC,KAAK,EACLC,MAAM,EACNC,QAAQ,EACRC,IAAI,EACJC,QAAQ,EACRC,eAAe,EACfC,oBAAoB,EACpB,GAAGC,QACN,GAAGV;IAEJ,qBACI,KAACb;QACGU,KAAKA;QACLC,SAAQ;QACRa,OAAOtB,gBAAgB,CAACS,QAAQ;QAChCS,UAAUA;QACVC,iBAAiBA;QACjBC,sBAAsBA;QACrB,GAAGC,MAAM;QACT,GAAGX,UAAU,WAAW;YAACI;YAAOC;YAAQH;YAAWC;QAAU,EAAE;;AAG5E,GAAG"}
1
+ {"version":3,"sources":["../../../../src/components/prompt/PromptConfirmButton.tsx"],"sourcesContent":["import {CompoundStylesApiProps, factory, Factory, useProps} from '@mantine/core';\nimport {Button, ButtonProps} from '../button/Button';\nimport {PromptVariant} from './Prompt';\nimport {usePromptContext} from './Prompt.context';\n\nexport type PromptConfirmButtonStylesNamesVariant = 'confirm';\n\nexport interface PromptConfirmButtonProps\n extends CompoundStylesApiProps<PromptConfirmButtonFactory>,\n Omit<ButtonProps, 'primary' | 'classNames' | 'styles' | 'vars' | 'variant'> {}\n\nexport type PromptConfirmButtonFactory = Factory<{\n props: PromptConfirmButtonProps;\n ref: HTMLButtonElement;\n stylesNames: PromptConfirmButtonStylesNamesVariant;\n compound: true;\n}>;\n\nconst COLOR_BY_VARIANT: Record<PromptVariant, string> = {\n success: 'action',\n info: 'action',\n warning: 'critical',\n critical: 'critical',\n};\n\nconst defaultProps: Partial<PromptConfirmButtonProps> = {};\n\nexport const PromptConfirmButton = factory<PromptConfirmButtonFactory>((_props, ref) => {\n const {variant, getStyles} = usePromptContext();\n const props = useProps('PromptConfirmButton', defaultProps, _props);\n const {\n className,\n classNames,\n style,\n styles,\n unstyled,\n vars,\n disabled,\n disabledTooltip,\n disabledTooltipProps,\n ...others\n } = props;\n\n return (\n <Button\n ref={ref}\n variant=\"filled\"\n color={COLOR_BY_VARIANT[variant]}\n disabled={disabled}\n disabledTooltip={disabledTooltip}\n disabledTooltipProps={disabledTooltipProps}\n {...others}\n {...getStyles('confirm', {style, styles, className, classNames})}\n />\n );\n});\n"],"names":["factory","useProps","Button","usePromptContext","COLOR_BY_VARIANT","success","info","warning","critical","defaultProps","PromptConfirmButton","_props","ref","variant","getStyles","props","className","classNames","style","styles","unstyled","vars","disabled","disabledTooltip","disabledTooltipProps","others","color"],"mappings":";AAAA,SAAgCA,OAAO,EAAWC,QAAQ,QAAO,gBAAgB;AACjF,SAAQC,MAAM,QAAoB,mBAAmB;AAErD,SAAQC,gBAAgB,QAAO,mBAAmB;AAelD,MAAMC,mBAAkD;IACpDC,SAAS;IACTC,MAAM;IACNC,SAAS;IACTC,UAAU;AACd;AAEA,MAAMC,eAAkD,CAAC;AAEzD,OAAO,MAAMC,sBAAsBV,QAAoC,CAACW,QAAQC;IAC5E,MAAM,EAACC,OAAO,EAAEC,SAAS,EAAC,GAAGX;IAC7B,MAAMY,QAAQd,SAAS,uBAAuBQ,cAAcE;IAC5D,MAAM,EACFK,SAAS,EACTC,UAAU,EACVC,KAAK,EACLC,MAAM,EACNC,QAAQ,EACRC,IAAI,EACJC,QAAQ,EACRC,eAAe,EACfC,oBAAoB,EACpB,GAAGC,QACN,GAAGV;IAEJ,qBACI,KAACb;QACGU,KAAKA;QACLC,SAAQ;QACRa,OAAOtB,gBAAgB,CAACS,QAAQ;QAChCS,UAAUA;QACVC,iBAAiBA;QACjBC,sBAAsBA;QACrB,GAAGC,MAAM;QACT,GAAGX,UAAU,WAAW;YAACI;YAAOC;YAAQH;YAAWC;QAAU,EAAE;;AAG5E,GAAG"}
@@ -2,11 +2,11 @@
2
2
  position: sticky;
3
3
  bottom: 0;
4
4
  z-index: 10;
5
- background-color: var(--mantine-color-body);
5
+ background-color: white;
6
6
  padding: var(--mantine-spacing-md) var(--mantine-spacing-lg);
7
7
 
8
8
  &[data-variant='modal-footer'] {
9
- border-top: 1px solid var(--mantine-color-default-border);
9
+ border-top: 1px solid var(--mantine-color-gray-3);
10
10
  padding-bottom: 0;
11
11
  margin: var(--mb-padding) calc(-1 * var(--mb-padding)) calc(var(--mantine-spacing-md) - var(--mb-padding))
12
12
  calc(-1 * var(--mb-padding));
@@ -14,5 +14,5 @@
14
14
  }
15
15
 
16
16
  .border {
17
- border-top: 1px solid var(--mantine-color-default-border);
17
+ border-top: 1px solid var(--mantine-color-gray-3);
18
18
  }
@@ -1,9 +1,9 @@
1
1
  import { type ExpandedState, type PaginationState, type SortingState } from '@tanstack/table-core';
2
2
  import { Dispatch, SetStateAction } from 'react';
3
3
  import { type DateRangePickerValue } from '../date-range-picker';
4
- type PartialDeep<T> = T extends object ? {
5
- [P in keyof T]?: PartialDeep<T[P]>;
6
- } : T;
4
+ type DeepPartial<T> = {
5
+ [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
6
+ };
7
7
  export interface TableState<TData = unknown> {
8
8
  /**
9
9
  * Current pagination state
@@ -156,7 +156,7 @@ export interface UseTableOptions<TData = unknown> {
156
156
  /**
157
157
  * Initial state of the table.
158
158
  */
159
- initialState?: PartialDeep<TableState<TData>>;
159
+ initialState?: DeepPartial<TableState<TData>>;
160
160
  /**
161
161
  * Whether rows can be selected.
162
162
  *
@@ -176,6 +176,12 @@ export interface UseTableOptions<TData = unknown> {
176
176
  * @default false
177
177
  */
178
178
  forceSelection?: boolean;
179
+ /**
180
+ * Whether to sync the table state with the URL.
181
+ *
182
+ * @default false
183
+ */
184
+ syncWithUrl?: boolean;
179
185
  }
180
186
  export declare const useTable: <TData>(userOptions?: UseTableOptions<TData>) => TableStore<TData>;
181
187
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"use-table.d.ts","sourceRoot":"","sources":["../../../../src/components/table/use-table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-table.d.ts","sourceRoot":"","sources":["../../../../src/components/table/use-table.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,12 @@
1
1
  import { useDidUpdate } from '@mantine/hooks';
2
2
  import defaultsDeep from 'lodash.defaultsdeep';
3
3
  import { useCallback, useMemo, useState } from 'react';
4
+ import { useUrlSyncedState } from './use-url-synced-state';
4
5
  const defaultOptions = {
5
6
  enableRowSelection: true,
6
7
  enableMultiRowSelection: false,
7
- forceSelection: false
8
+ forceSelection: false,
9
+ syncWithUrl: false
8
10
  };
9
11
  const defaultState = {
10
12
  pagination: {
@@ -26,17 +28,134 @@ const defaultState = {
26
28
  export const useTable = (userOptions = {})=>{
27
29
  const options = defaultsDeep({}, userOptions, defaultOptions);
28
30
  const initialState = defaultsDeep({}, options.initialState, defaultState);
29
- const [pagination, setPagination] = useState(initialState.pagination);
31
+ // synced with url
32
+ const [pagination, setPagination] = useUrlSyncedState({
33
+ initialState: initialState.pagination,
34
+ serializer: ({ pageIndex, pageSize })=>[
35
+ [
36
+ 'page',
37
+ (pageIndex + 1).toString()
38
+ ],
39
+ [
40
+ 'pageSize',
41
+ pageSize.toString()
42
+ ]
43
+ ],
44
+ deserializer: (params)=>defaultsDeep({
45
+ pageIndex: params.get('page') ? parseInt(params.get('page'), 10) - 1 : undefined,
46
+ pageSize: params.get('pageSize') ? parseInt(params.get('pageSize'), 10) : undefined
47
+ }, initialState.pagination),
48
+ sync: options.syncWithUrl
49
+ });
50
+ const [sorting, setSorting] = useUrlSyncedState({
51
+ initialState: initialState.sorting,
52
+ serializer: (_sorting)=>[
53
+ [
54
+ 'sortBy',
55
+ _sorting.map(({ id, desc })=>`${id}.${desc ? 'desc' : 'asc'}`).join(',')
56
+ ]
57
+ ],
58
+ deserializer: (params)=>{
59
+ if (!params.has('sortBy')) {
60
+ return initialState.sorting;
61
+ }
62
+ const sorts = params.get('sortBy')?.split(',') ?? [];
63
+ return sorts.map((sort)=>{
64
+ const [id, order] = sort.split('.');
65
+ return {
66
+ id,
67
+ desc: order === 'desc'
68
+ };
69
+ });
70
+ },
71
+ sync: options.syncWithUrl
72
+ });
73
+ const [globalFilter, setGlobalFilter] = useUrlSyncedState({
74
+ initialState: initialState.globalFilter,
75
+ serializer: (filter)=>[
76
+ [
77
+ 'filter',
78
+ filter
79
+ ]
80
+ ],
81
+ deserializer: (params)=>params.get('filter') ?? initialState.globalFilter,
82
+ sync: options.syncWithUrl
83
+ });
84
+ const [predicates, setPredicates] = useUrlSyncedState({
85
+ initialState: initialState.predicates,
86
+ serializer: (_predicates)=>Object.entries(_predicates).map(([key, value])=>[
87
+ key,
88
+ value
89
+ ]),
90
+ deserializer: (params)=>Object.keys(initialState.predicates).reduce((acc, predicateKey)=>{
91
+ acc[predicateKey] = params.get(predicateKey) ?? initialState.predicates[predicateKey];
92
+ return acc;
93
+ }, {}),
94
+ sync: options.syncWithUrl
95
+ });
96
+ const [layout, setLayout] = useUrlSyncedState({
97
+ initialState: initialState.layout,
98
+ serializer: (_layout)=>[
99
+ [
100
+ 'layout',
101
+ _layout
102
+ ]
103
+ ],
104
+ deserializer: (params)=>params.get('layout') ?? initialState.layout,
105
+ sync: options.syncWithUrl
106
+ });
107
+ const [dateRange, setDateRange] = useUrlSyncedState({
108
+ initialState: initialState.dateRange,
109
+ serializer: ([from, to])=>[
110
+ [
111
+ 'from',
112
+ from?.toISOString() ?? ''
113
+ ],
114
+ [
115
+ 'to',
116
+ to?.toISOString() ?? ''
117
+ ]
118
+ ],
119
+ deserializer: (params)=>[
120
+ params.get('from') ? new Date(params.get('from')) : initialState.dateRange[0],
121
+ params.get('to') ? new Date(params.get('to')) : initialState.dateRange[1]
122
+ ],
123
+ sync: options.syncWithUrl
124
+ });
125
+ const [columnVisibility, setColumnVisibility] = useUrlSyncedState({
126
+ initialState: initialState.columnVisibility,
127
+ serializer: (columns)=>[
128
+ [
129
+ 'show',
130
+ Object.entries(columns).filter(([, visible])=>visible === true).map(([columnName])=>columnName).join(',')
131
+ ],
132
+ [
133
+ 'hide',
134
+ Object.entries(columns).filter(([, visible])=>visible === false).map(([columnName])=>columnName).join(',')
135
+ ]
136
+ ],
137
+ deserializer: (params)=>{
138
+ if (!params.has('show') && !params.has('hide')) {
139
+ return initialState.columnVisibility;
140
+ }
141
+ const visible = params.get('show')?.split(',') ?? [];
142
+ const invisible = params.get('hide')?.split(',') ?? [];
143
+ const columns = {};
144
+ visible.forEach((column)=>{
145
+ columns[column] = true;
146
+ });
147
+ invisible.forEach((column)=>{
148
+ columns[column] = false;
149
+ });
150
+ return columns;
151
+ },
152
+ sync: options.syncWithUrl
153
+ });
154
+ // unsynced
30
155
  const [totalEntries, _setTotalEntries] = useState(initialState.totalEntries);
31
156
  const [unfilteredTotalEntries, setUnfilteredTotalEntries] = useState(initialState.totalEntries);
32
- const [sorting, setSorting] = useState(initialState.sorting);
33
- const [globalFilter, setGlobalFilter] = useState(initialState.globalFilter);
34
157
  const [expanded, setExpanded] = useState(initialState.expanded);
35
- const [predicates, setPredicates] = useState(initialState.predicates);
36
- const [layout, setLayout] = useState(initialState.layout);
37
- const [dateRange, setDateRange] = useState(initialState.dateRange);
38
158
  const [rowSelection, setRowSelection] = useState(initialState.rowSelection);
39
- const [columnVisibility, setColumnVisibility] = useState(initialState.columnVisibility);
40
159
  const isFiltered = !!globalFilter || Object.keys(predicates).some((predicate)=>!!predicates[predicate]) || !!dateRange?.[0] || !!dateRange?.[1];
41
160
  const isVacant = unfilteredTotalEntries === 0;
42
161
  const setTotalEntries = useCallback((updater)=>{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/table/use-table.ts"],"sourcesContent":["import {useDidUpdate} from '@mantine/hooks';\nimport {type ExpandedState, type PaginationState, type SortingState} from '@tanstack/table-core';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport {Dispatch, SetStateAction, useCallback, useMemo, useState} from 'react';\nimport {type DateRangePickerValue} from '../date-range-picker';\n\n// Create a deeply optional version of another type\ntype PartialDeep<T> = T extends object\n ? {\n [P in keyof T]?: PartialDeep<T[P]>;\n }\n : T;\n\nexport interface TableState<TData = unknown> {\n /**\n * Current pagination state\n *\n * @default { pageIndex: 0, pageSize: 50 }\n */\n pagination: PaginationState;\n /**\n * Total number of entries in the table.\n * This number is used to calculate the number of pages in the pagination.\n * When null, the number of pages is calculated using the current data length.\n *\n * @default null\n */\n totalEntries: number | null;\n /**\n * Current sorting state\n *\n * @default []\n */\n sorting: SortingState;\n /**\n * Current global filter value\n *\n * @default ''\n */\n globalFilter: string;\n\n /**\n * Current expanded state\n *\n * @default {}\n */\n expanded: ExpandedState;\n /**\n * Predicates and their current value\n *\n * @default {}\n */\n predicates: Record<string, string>;\n /**\n * Layout currently selected. When null, the first layout is used.\n *\n * @default null\n */\n layout: string | null;\n /**\n * Currently selected date range\n *\n * @default [null, null]\n */\n dateRange: DateRangePickerValue;\n /**\n * Currently selected rows\n *\n * @default {}\n */\n rowSelection: Record<string, TData>;\n /**\n * Columns that are currently visible\n *\n * @default {}\n */\n columnVisibility: Record<string, boolean>;\n}\n\nexport interface TableStore<TData = unknown> {\n /**\n * Current state of the table.\n */\n state: TableState<TData>;\n /**\n * Allows to change the pagination state.\n */\n setPagination: Dispatch<SetStateAction<TableState<TData>['pagination']>>;\n /**\n * Allows to change the total number of entries.\n */\n setTotalEntries: Dispatch<SetStateAction<TableState<TData>['totalEntries']>>;\n /**\n * Allows to change the sorting state.\n */\n setSorting: Dispatch<SetStateAction<TableState<TData>['sorting']>>;\n /**\n * Allows to change the global filter value.\n */\n setGlobalFilter: Dispatch<SetStateAction<TableState<TData>['globalFilter']>>;\n /**\n * Allows to change the rows expanded state.\n */\n setExpanded: Dispatch<SetStateAction<TableState<TData>['expanded']>>;\n /**\n * Allows to change the predicates values.\n */\n setPredicates: Dispatch<SetStateAction<TableState<TData>['predicates']>>;\n /**\n * Allows to change the selected layout.\n */\n setLayout: Dispatch<SetStateAction<TableState<TData>['layout']>>;\n /**\n * Allows to change the selected date range.\n */\n setDateRange: Dispatch<SetStateAction<TableState<TData>['dateRange']>>;\n /**\n * Allows to change the current row selection.\n */\n setRowSelection: Dispatch<SetStateAction<TableState<TData>['rowSelection']>>;\n /**\n * Allows to change the visible columns.\n */\n setColumnVisibility: Dispatch<SetStateAction<TableState<TData>['columnVisibility']>>;\n /**\n * Whether the table is currently filtered.\n */\n isFiltered: boolean;\n /**\n * Whether the table has data when unfiltered.\n *\n * This is derived from the totalEntries so make sure you set that number correctly, even if you're using a client side table.\n */\n isVacant: boolean;\n /**\n * Clear currently applied filters.\n */\n clearFilters: () => void;\n /**\n * Deselects all currently selected rows.\n */\n clearRowSelection: () => void;\n /**\n * Get currently selected rows.\n */\n getSelectedRows: () => TData[];\n /**\n * Get currently selected row\n */\n getSelectedRow: () => TData | null;\n /**\n * Whether the user can select multiple rows at the same time.\n */\n multiRowSelectionEnabled: boolean;\n /**\n * Whether rows can be selected.\n */\n rowSelectionEnabled: boolean;\n /**\n * Whether row selection is forced.\n */\n rowSelectionForced: boolean;\n}\n\nexport interface UseTableOptions<TData = unknown> {\n /**\n * Initial state of the table.\n */\n initialState?: PartialDeep<TableState<TData>>;\n /**\n * Whether rows can be selected.\n *\n * @default true\n */\n enableRowSelection?: boolean;\n /**\n * Whether multiple rows can be selected at the same time.\n *\n * @default false\n */\n enableMultiRowSelection?: boolean;\n /**\n * Forces the user to always have one row selected.\n * When activating that setting, a good practice is to have a row already selected in the initial state.\n *\n * @default false\n */\n forceSelection?: boolean;\n}\n\nconst defaultOptions: UseTableOptions = {\n enableRowSelection: true,\n enableMultiRowSelection: false,\n forceSelection: false,\n};\n\nconst defaultState: Partial<TableState> = {\n pagination: {\n pageIndex: 0,\n pageSize: 50,\n },\n totalEntries: null,\n sorting: [],\n globalFilter: '',\n predicates: {},\n layout: null,\n dateRange: [null, null],\n rowSelection: {},\n columnVisibility: {},\n};\n\nexport const useTable = <TData>(userOptions: UseTableOptions<TData> = {}): TableStore<TData> => {\n const options = defaultsDeep({}, userOptions, defaultOptions) as UseTableOptions<TData>;\n const initialState = defaultsDeep({}, options.initialState, defaultState) as TableState<TData>;\n\n const [pagination, setPagination] = useState<TableState<TData>['pagination']>(initialState.pagination);\n const [totalEntries, _setTotalEntries] = useState<TableState<TData>['totalEntries']>(initialState.totalEntries);\n const [unfilteredTotalEntries, setUnfilteredTotalEntries] = useState<TableState<TData>['totalEntries']>(\n initialState.totalEntries,\n );\n const [sorting, setSorting] = useState<TableState<TData>['sorting']>(initialState.sorting);\n const [globalFilter, setGlobalFilter] = useState<TableState<TData>['globalFilter']>(initialState.globalFilter);\n const [expanded, setExpanded] = useState<TableState<TData>['expanded']>(initialState.expanded);\n const [predicates, setPredicates] = useState<TableState<TData>['predicates']>(initialState.predicates);\n const [layout, setLayout] = useState<TableState<TData>['layout']>(initialState.layout);\n const [dateRange, setDateRange] = useState<TableState<TData>['dateRange']>(initialState.dateRange);\n const [rowSelection, setRowSelection] = useState<TableState<TData>['rowSelection']>(initialState.rowSelection);\n const [columnVisibility, setColumnVisibility] = useState<TableState<TData>['columnVisibility']>(\n initialState.columnVisibility,\n );\n\n const isFiltered =\n !!globalFilter ||\n Object.keys(predicates).some((predicate) => !!predicates[predicate]) ||\n !!dateRange?.[0] ||\n !!dateRange?.[1];\n\n const isVacant = unfilteredTotalEntries === 0;\n\n const setTotalEntries: typeof _setTotalEntries = useCallback(\n (updater) => {\n _setTotalEntries((old) => {\n const newTotalEntries = updater instanceof Function ? updater(old) : updater;\n if (!isFiltered) {\n setUnfilteredTotalEntries(newTotalEntries);\n }\n return newTotalEntries;\n });\n },\n [isFiltered],\n );\n\n const clearFilters = useCallback(() => {\n setPredicates(initialState.predicates);\n setGlobalFilter('');\n }, []);\n\n const clearRowSelection = useCallback(() => {\n setRowSelection({});\n }, []);\n\n const getSelectedRows = useCallback(() => Object.values(rowSelection), [rowSelection]);\n\n const getSelectedRow = () => getSelectedRows()[0] ?? null;\n\n useDidUpdate(() => {\n if (!options.enableMultiRowSelection) {\n clearRowSelection();\n }\n }, [globalFilter, pagination, sorting, dateRange, predicates]);\n\n const state = useMemo(\n () => ({\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n }),\n [\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n ],\n );\n\n return {\n state,\n setPagination,\n setTotalEntries,\n setSorting,\n setGlobalFilter,\n setExpanded,\n setPredicates,\n setLayout,\n setDateRange,\n setRowSelection,\n setColumnVisibility,\n isFiltered,\n isVacant,\n clearFilters,\n clearRowSelection,\n getSelectedRows,\n getSelectedRow,\n rowSelectionEnabled: options.enableRowSelection,\n rowSelectionForced: options.forceSelection,\n multiRowSelectionEnabled: options.enableMultiRowSelection,\n };\n};\n"],"names":["useDidUpdate","defaultsDeep","useCallback","useMemo","useState","defaultOptions","enableRowSelection","enableMultiRowSelection","forceSelection","defaultState","pagination","pageIndex","pageSize","totalEntries","sorting","globalFilter","predicates","layout","dateRange","rowSelection","columnVisibility","useTable","userOptions","options","initialState","setPagination","_setTotalEntries","unfilteredTotalEntries","setUnfilteredTotalEntries","setSorting","setGlobalFilter","expanded","setExpanded","setPredicates","setLayout","setDateRange","setRowSelection","setColumnVisibility","isFiltered","Object","keys","some","predicate","isVacant","setTotalEntries","updater","old","newTotalEntries","Function","clearFilters","clearRowSelection","getSelectedRows","values","getSelectedRow","state","rowSelectionEnabled","rowSelectionForced","multiRowSelectionEnabled"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/table/use-table.ts"],"sourcesContent":["import {useDidUpdate} from '@mantine/hooks';\nimport {type ExpandedState, type PaginationState, type SortingState} from '@tanstack/table-core';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport {Dispatch, SetStateAction, useCallback, useMemo, useState} from 'react';\nimport {type DateRangePickerValue} from '../date-range-picker';\nimport {useUrlSyncedState} from './use-url-synced-state';\n\n// Create a deeply optional version of another type\ntype DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\nexport interface TableState<TData = unknown> {\n /**\n * Current pagination state\n *\n * @default { pageIndex: 0, pageSize: 50 }\n */\n pagination: PaginationState;\n /**\n * Total number of entries in the table.\n * This number is used to calculate the number of pages in the pagination.\n * When null, the number of pages is calculated using the current data length.\n *\n * @default null\n */\n totalEntries: number | null;\n /**\n * Current sorting state\n *\n * @default []\n */\n sorting: SortingState;\n /**\n * Current global filter value\n *\n * @default ''\n */\n globalFilter: string;\n\n /**\n * Current expanded state\n *\n * @default {}\n */\n expanded: ExpandedState;\n /**\n * Predicates and their current value\n *\n * @default {}\n */\n predicates: Record<string, string>;\n /**\n * Layout currently selected. When null, the first layout is used.\n *\n * @default null\n */\n layout: string | null;\n /**\n * Currently selected date range\n *\n * @default [null, null]\n */\n dateRange: DateRangePickerValue;\n /**\n * Currently selected rows\n *\n * @default {}\n */\n rowSelection: Record<string, TData>;\n /**\n * Columns that are currently visible\n *\n * @default {}\n */\n columnVisibility: Record<string, boolean>;\n}\n\nexport interface TableStore<TData = unknown> {\n /**\n * Current state of the table.\n */\n state: TableState<TData>;\n /**\n * Allows to change the pagination state.\n */\n setPagination: Dispatch<SetStateAction<TableState<TData>['pagination']>>;\n /**\n * Allows to change the total number of entries.\n */\n setTotalEntries: Dispatch<SetStateAction<TableState<TData>['totalEntries']>>;\n /**\n * Allows to change the sorting state.\n */\n setSorting: Dispatch<SetStateAction<TableState<TData>['sorting']>>;\n /**\n * Allows to change the global filter value.\n */\n setGlobalFilter: Dispatch<SetStateAction<TableState<TData>['globalFilter']>>;\n /**\n * Allows to change the rows expanded state.\n */\n setExpanded: Dispatch<SetStateAction<TableState<TData>['expanded']>>;\n /**\n * Allows to change the predicates values.\n */\n setPredicates: Dispatch<SetStateAction<TableState<TData>['predicates']>>;\n /**\n * Allows to change the selected layout.\n */\n setLayout: Dispatch<SetStateAction<TableState<TData>['layout']>>;\n /**\n * Allows to change the selected date range.\n */\n setDateRange: Dispatch<SetStateAction<TableState<TData>['dateRange']>>;\n /**\n * Allows to change the current row selection.\n */\n setRowSelection: Dispatch<SetStateAction<TableState<TData>['rowSelection']>>;\n /**\n * Allows to change the visible columns.\n */\n setColumnVisibility: Dispatch<SetStateAction<TableState<TData>['columnVisibility']>>;\n /**\n * Whether the table is currently filtered.\n */\n isFiltered: boolean;\n /**\n * Whether the table has data when unfiltered.\n *\n * This is derived from the totalEntries so make sure you set that number correctly, even if you're using a client side table.\n */\n isVacant: boolean;\n /**\n * Clear currently applied filters.\n */\n clearFilters: () => void;\n /**\n * Deselects all currently selected rows.\n */\n clearRowSelection: () => void;\n /**\n * Get currently selected rows.\n */\n getSelectedRows: () => TData[];\n /**\n * Get currently selected row\n */\n getSelectedRow: () => TData | null;\n /**\n * Whether the user can select multiple rows at the same time.\n */\n multiRowSelectionEnabled: boolean;\n /**\n * Whether rows can be selected.\n */\n rowSelectionEnabled: boolean;\n /**\n * Whether row selection is forced.\n */\n rowSelectionForced: boolean;\n}\n\nexport interface UseTableOptions<TData = unknown> {\n /**\n * Initial state of the table.\n */\n initialState?: DeepPartial<TableState<TData>>;\n /**\n * Whether rows can be selected.\n *\n * @default true\n */\n enableRowSelection?: boolean;\n /**\n * Whether multiple rows can be selected at the same time.\n *\n * @default false\n */\n enableMultiRowSelection?: boolean;\n /**\n * Forces the user to always have one row selected.\n * When activating that setting, a good practice is to have a row already selected in the initial state.\n *\n * @default false\n */\n forceSelection?: boolean;\n /**\n * Whether to sync the table state with the URL.\n *\n * @default false\n */\n syncWithUrl?: boolean;\n}\n\nconst defaultOptions: UseTableOptions = {\n enableRowSelection: true,\n enableMultiRowSelection: false,\n forceSelection: false,\n syncWithUrl: false,\n};\n\nconst defaultState: Partial<TableState> = {\n pagination: {\n pageIndex: 0,\n pageSize: 50,\n },\n totalEntries: null,\n sorting: [],\n globalFilter: '',\n predicates: {},\n layout: null,\n dateRange: [null, null],\n rowSelection: {},\n columnVisibility: {},\n};\n\nexport const useTable = <TData>(userOptions: UseTableOptions<TData> = {}): TableStore<TData> => {\n const options = defaultsDeep({}, userOptions, defaultOptions) as UseTableOptions<TData>;\n const initialState = defaultsDeep({}, options.initialState, defaultState) as TableState<TData>;\n\n // synced with url\n const [pagination, setPagination] = useUrlSyncedState<TableState<TData>['pagination']>({\n initialState: initialState.pagination,\n serializer: ({pageIndex, pageSize}) => [\n ['page', (pageIndex + 1).toString()],\n ['pageSize', pageSize.toString()],\n ],\n deserializer: (params) =>\n defaultsDeep(\n {\n pageIndex: params.get('page') ? parseInt(params.get('page'), 10) - 1 : undefined,\n pageSize: params.get('pageSize') ? parseInt(params.get('pageSize'), 10) : undefined,\n },\n initialState.pagination,\n ),\n sync: options.syncWithUrl,\n });\n const [sorting, setSorting] = useUrlSyncedState<TableState<TData>['sorting']>({\n initialState: initialState.sorting,\n serializer: (_sorting) => [\n ['sortBy', _sorting.map(({id, desc}) => `${id}.${desc ? 'desc' : 'asc'}`).join(',')],\n ],\n deserializer: (params) => {\n if (!params.has('sortBy')) {\n return initialState.sorting;\n }\n const sorts = params.get('sortBy')?.split(',') ?? [];\n return sorts.map((sort) => {\n const [id, order] = sort.split('.');\n return {id, desc: order === 'desc'};\n });\n },\n sync: options.syncWithUrl,\n });\n const [globalFilter, setGlobalFilter] = useUrlSyncedState<TableState<TData>['globalFilter']>({\n initialState: initialState.globalFilter,\n serializer: (filter) => [['filter', filter]],\n deserializer: (params) => params.get('filter') ?? initialState.globalFilter,\n sync: options.syncWithUrl,\n });\n const [predicates, setPredicates] = useUrlSyncedState<TableState<TData>['predicates']>({\n initialState: initialState.predicates,\n serializer: (_predicates) => Object.entries(_predicates).map(([key, value]) => [key, value]),\n deserializer: (params) =>\n Object.keys(initialState.predicates).reduce(\n (acc, predicateKey) => {\n acc[predicateKey] = params.get(predicateKey) ?? initialState.predicates[predicateKey];\n return acc;\n },\n {} as TableState<TData>['predicates'],\n ),\n sync: options.syncWithUrl,\n });\n const [layout, setLayout] = useUrlSyncedState<TableState<TData>['layout']>({\n initialState: initialState.layout,\n serializer: (_layout) => [['layout', _layout]],\n deserializer: (params) => params.get('layout') ?? initialState.layout,\n sync: options.syncWithUrl,\n });\n const [dateRange, setDateRange] = useUrlSyncedState<TableState<TData>['dateRange']>({\n initialState: initialState.dateRange,\n serializer: ([from, to]) => [\n ['from', from?.toISOString() ?? ''],\n ['to', to?.toISOString() ?? ''],\n ],\n deserializer: (params) => [\n params.get('from') ? new Date(params.get('from') as string) : initialState.dateRange[0],\n params.get('to') ? new Date(params.get('to') as string) : initialState.dateRange[1],\n ],\n sync: options.syncWithUrl,\n });\n const [columnVisibility, setColumnVisibility] = useUrlSyncedState<TableState<TData>['columnVisibility']>({\n initialState: initialState.columnVisibility,\n serializer: (columns) => [\n [\n 'show',\n Object.entries(columns)\n .filter(([, visible]) => visible === true)\n .map(([columnName]) => columnName)\n .join(','),\n ],\n [\n 'hide',\n Object.entries(columns)\n .filter(([, visible]) => visible === false)\n .map(([columnName]) => columnName)\n .join(','),\n ],\n ],\n deserializer: (params) => {\n if (!params.has('show') && !params.has('hide')) {\n return initialState.columnVisibility;\n }\n const visible = params.get('show')?.split(',') ?? [];\n const invisible = params.get('hide')?.split(',') ?? [];\n const columns = {} as TableState<TData>['columnVisibility'];\n visible.forEach((column) => {\n columns[column] = true;\n });\n invisible.forEach((column) => {\n columns[column] = false;\n });\n return columns;\n },\n sync: options.syncWithUrl,\n });\n\n // unsynced\n const [totalEntries, _setTotalEntries] = useState<TableState<TData>['totalEntries']>(initialState.totalEntries);\n const [unfilteredTotalEntries, setUnfilteredTotalEntries] = useState<TableState<TData>['totalEntries']>(\n initialState.totalEntries,\n );\n const [expanded, setExpanded] = useState<TableState<TData>['expanded']>(initialState.expanded);\n const [rowSelection, setRowSelection] = useState<TableState<TData>['rowSelection']>(initialState.rowSelection);\n\n const isFiltered =\n !!globalFilter ||\n Object.keys(predicates).some((predicate) => !!predicates[predicate]) ||\n !!dateRange?.[0] ||\n !!dateRange?.[1];\n\n const isVacant = unfilteredTotalEntries === 0;\n\n const setTotalEntries: typeof _setTotalEntries = useCallback(\n (updater) => {\n _setTotalEntries((old) => {\n const newTotalEntries = updater instanceof Function ? updater(old) : updater;\n if (!isFiltered) {\n setUnfilteredTotalEntries(newTotalEntries);\n }\n return newTotalEntries;\n });\n },\n [isFiltered],\n );\n\n const clearFilters = useCallback(() => {\n setPredicates(initialState.predicates);\n setGlobalFilter('');\n }, []);\n\n const clearRowSelection = useCallback(() => {\n setRowSelection({});\n }, []);\n\n const getSelectedRows = useCallback(() => Object.values(rowSelection), [rowSelection]);\n\n const getSelectedRow = () => getSelectedRows()[0] ?? null;\n\n useDidUpdate(() => {\n if (!options.enableMultiRowSelection) {\n clearRowSelection();\n }\n }, [globalFilter, pagination, sorting, dateRange, predicates]);\n\n const state = useMemo(\n () => ({\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n }),\n [\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n ],\n );\n\n return {\n state,\n setPagination,\n setTotalEntries,\n setSorting,\n setGlobalFilter,\n setExpanded,\n setPredicates,\n setLayout,\n setDateRange,\n setRowSelection,\n setColumnVisibility,\n isFiltered,\n isVacant,\n clearFilters,\n clearRowSelection,\n getSelectedRows,\n getSelectedRow,\n rowSelectionEnabled: options.enableRowSelection,\n rowSelectionForced: options.forceSelection,\n multiRowSelectionEnabled: options.enableMultiRowSelection,\n };\n};\n"],"names":["useDidUpdate","defaultsDeep","useCallback","useMemo","useState","useUrlSyncedState","defaultOptions","enableRowSelection","enableMultiRowSelection","forceSelection","syncWithUrl","defaultState","pagination","pageIndex","pageSize","totalEntries","sorting","globalFilter","predicates","layout","dateRange","rowSelection","columnVisibility","useTable","userOptions","options","initialState","setPagination","serializer","toString","deserializer","params","get","parseInt","undefined","sync","setSorting","_sorting","map","id","desc","join","has","sorts","split","sort","order","setGlobalFilter","filter","setPredicates","_predicates","Object","entries","key","value","keys","reduce","acc","predicateKey","setLayout","_layout","setDateRange","from","to","toISOString","Date","setColumnVisibility","columns","visible","columnName","invisible","forEach","column","_setTotalEntries","unfilteredTotalEntries","setUnfilteredTotalEntries","expanded","setExpanded","setRowSelection","isFiltered","some","predicate","isVacant","setTotalEntries","updater","old","newTotalEntries","Function","clearFilters","clearRowSelection","getSelectedRows","values","getSelectedRow","state","rowSelectionEnabled","rowSelectionForced","multiRowSelectionEnabled"],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export interface UseUrlSyncedStateOptions<T> {
2
+ /**
3
+ * The initial state
4
+ */
5
+ initialState: T;
6
+ /**
7
+ * The serializer function is used to determine how the state is translated to url search parameters.
8
+ * Called each time the state changes.
9
+ * @param stateValue The new state value to serialize.
10
+ * @returns A list of [key, value] to set as url search parameters.
11
+ * @example (filterValue) => [['filter', filterValue]] // ?filter=filterValue
12
+ */
13
+ serializer: (stateValue: T) => Array<[string, string]>;
14
+ /**
15
+ * The deserializer function is used to determine how the url parameters influence the initial state.
16
+ * Called only once when initializing the state.
17
+ * @param params All the search parameters of the current url.
18
+ * @returns The initial state based on the current url.
19
+ * @example (params) => params.get('filter') ?? '',
20
+ */
21
+ deserializer: (params: URLSearchParams) => T;
22
+ /**
23
+ * Whether the state should be synced with the url.
24
+ * When set to false, the hook behaves just like a regular useState hook from react.
25
+ */
26
+ sync?: boolean;
27
+ }
28
+ export declare const useUrlSyncedState: <T>({ initialState, serializer, deserializer, sync }: UseUrlSyncedStateOptions<T>) => readonly [T, import("react").Dispatch<import("react").SetStateAction<T>>];
29
+ //# sourceMappingURL=use-url-synced-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-url-synced-state.d.ts","sourceRoot":"","sources":["../../../../src/components/table/use-url-synced-state.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACvC;;OAEG;IACH,YAAY,EAAE,CAAC,CAAC;IAChB;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD;;;;;;OAMG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,CAAC,CAAC;IAC7C;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,GAAI,CAAC,oDAAkD,wBAAwB,CAAC,CAAC,CAAC,8EAwB/G,CAAC"}