@sqrzro/ui 4.0.0-alpha.4 → 4.0.0-alpha.41

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 (281) hide show
  1. package/dist/addon/config.d.ts +5 -0
  2. package/dist/addon/config.js +12 -0
  3. package/dist/addon/defaults.d.ts +3 -0
  4. package/dist/addon/defaults.js +6 -0
  5. package/dist/addon/index.d.ts +5 -0
  6. package/dist/addon/index.js +8 -0
  7. package/dist/addon/interfaces.d.ts +8 -0
  8. package/dist/components/buttons/ActionButton/index.d.ts +8 -6
  9. package/dist/components/buttons/ActionButton/index.js +3 -27
  10. package/dist/components/buttons/Button/index.d.ts +5 -5
  11. package/dist/components/buttons/Button/index.js +7 -17
  12. package/dist/components/collections/Collection/index.d.ts +9 -3
  13. package/dist/components/collections/Collection/index.js +8 -7
  14. package/dist/components/collections/DataTable/index.d.ts +14 -0
  15. package/dist/components/collections/DataTable/index.js +14 -0
  16. package/dist/components/collections/EmptyMessage/index.d.ts +1 -1
  17. package/dist/components/collections/EmptyMessage/index.js +6 -4
  18. package/dist/components/collections/EmptyMessageAction/index.d.ts +2 -2
  19. package/dist/components/collections/EmptyMessageAction/index.js +1 -1
  20. package/dist/components/collections/List/index.d.ts +6 -4
  21. package/dist/components/collections/List/index.js +2 -2
  22. package/dist/components/collections/ListClientComponent/index.d.ts +7 -4
  23. package/dist/components/collections/ListClientComponent/index.js +8 -5
  24. package/dist/components/collections/ListItem/index.d.ts +10 -3
  25. package/dist/components/collections/ListItem/index.js +15 -23
  26. package/dist/components/collections/ListItemMenu/index.d.ts +8 -0
  27. package/dist/components/collections/ListItemMenu/index.js +7 -0
  28. package/dist/components/collections/ListItemMeta/index.d.ts +6 -4
  29. package/dist/components/collections/ListItemMeta/index.js +13 -7
  30. package/dist/components/collections/ListItemSecondary/index.d.ts +5 -3
  31. package/dist/components/collections/ListItemSecondary/index.js +5 -5
  32. package/dist/components/collections/Pagination/index.d.ts +1 -1
  33. package/dist/components/collections/Pagination/index.js +6 -7
  34. package/dist/components/collections/PaginationLink/index.d.ts +9 -0
  35. package/dist/components/collections/PaginationLink/index.js +9 -0
  36. package/dist/components/collections/Table/index.d.ts +4 -5
  37. package/dist/components/collections/Table/index.js +2 -8
  38. package/dist/components/collections/TableClientComponent/index.d.ts +7 -6
  39. package/dist/components/collections/TableClientComponent/index.js +11 -26
  40. package/dist/components/collections/TableRow/index.d.ts +13 -0
  41. package/dist/components/collections/TableRow/index.js +15 -0
  42. package/dist/components/collections/interfaces.d.ts +41 -34
  43. package/dist/components/collections/utility/is-right-aligned.d.ts +3 -0
  44. package/dist/components/collections/utility/is-right-aligned.js +11 -0
  45. package/dist/components/collections/utility/normalize-href.d.ts +2 -0
  46. package/dist/components/collections/utility/normalize-href.js +8 -0
  47. package/dist/components/collections/utility/render-cell.d.ts +5 -0
  48. package/dist/components/collections/utility/render-cell.js +33 -0
  49. package/dist/components/elements/Badge/index.d.ts +12 -0
  50. package/dist/components/elements/Badge/index.js +9 -0
  51. package/dist/components/elements/InfoPanel/index.d.ts +11 -0
  52. package/dist/components/elements/InfoPanel/index.js +9 -0
  53. package/dist/components/{utility → elements}/Link/index.d.ts +1 -1
  54. package/dist/components/{utility → elements}/Link/index.js +6 -7
  55. package/dist/components/elements/Menu/index.d.ts +19 -0
  56. package/dist/components/elements/Menu/index.js +17 -0
  57. package/dist/components/elements/MenuItem/index.d.ts +7 -0
  58. package/dist/components/elements/MenuItem/index.js +12 -0
  59. package/dist/components/elements/Page/index.d.ts +19 -0
  60. package/dist/components/elements/Page/index.js +18 -0
  61. package/dist/components/elements/Reference/index.d.ts +9 -0
  62. package/dist/components/elements/Reference/index.js +16 -0
  63. package/dist/components/elements/Summary/index.d.ts +13 -0
  64. package/dist/components/elements/Summary/index.js +22 -0
  65. package/dist/components/errors/AppError/index.d.ts +19 -0
  66. package/dist/components/errors/AppError/index.js +9 -0
  67. package/dist/components/errors/AppForbiddenError/index.d.ts +7 -0
  68. package/dist/components/errors/AppForbiddenError/index.js +6 -0
  69. package/dist/components/errors/AppNotFoundError/index.d.ts +7 -0
  70. package/dist/components/errors/AppNotFoundError/index.js +6 -0
  71. package/dist/components/errors/AppServerError/index.d.ts +8 -0
  72. package/dist/components/errors/AppServerError/index.js +17 -0
  73. package/dist/components/index.d.ts +37 -6
  74. package/dist/components/index.js +18 -3
  75. package/dist/components/mail/Mail/index.d.ts +7 -0
  76. package/dist/components/mail/Mail/index.js +113 -0
  77. package/dist/components/mail/MailBlock/index.d.ts +5 -0
  78. package/dist/components/mail/MailBlock/index.js +5 -0
  79. package/dist/components/mail/MailButton/index.d.ts +7 -0
  80. package/dist/components/mail/MailButton/index.js +38 -0
  81. package/dist/components/mail/MailTable/index.d.ts +9 -0
  82. package/dist/components/mail/MailTable/index.js +7 -0
  83. package/dist/components/modals/ConfirmModal/index.d.ts +5 -3
  84. package/dist/components/modals/ConfirmModal/index.js +3 -3
  85. package/dist/components/modals/Modal/index.d.ts +4 -4
  86. package/dist/components/modals/Modal/index.js +3 -3
  87. package/dist/components/modals/ModalActions/index.d.ts +3 -3
  88. package/dist/components/modals/ModalActions/index.js +4 -3
  89. package/dist/components/utility/Action/index.d.ts +11 -0
  90. package/dist/components/utility/Action/index.js +48 -0
  91. package/dist/components/utility/ActionList/index.d.ts +5 -5
  92. package/dist/components/utility/ActionList/index.js +5 -3
  93. package/dist/components/utility/AppBody/index.d.ts +5 -0
  94. package/dist/components/utility/AppBody/index.js +9 -0
  95. package/dist/components/utility/Calendar/index.d.ts +32 -0
  96. package/dist/components/utility/Calendar/index.js +67 -0
  97. package/dist/components/utility/CalendarDay/index.d.ts +11 -0
  98. package/dist/components/utility/CalendarDay/index.js +23 -0
  99. package/dist/components/utility/Confirmable/index.d.ts +9 -0
  100. package/dist/components/utility/Confirmable/index.js +14 -0
  101. package/dist/components/utility/Container/index.d.ts +1 -1
  102. package/dist/components/utility/Container/index.js +2 -2
  103. package/dist/components/utility/Loader/index.d.ts +1 -1
  104. package/dist/components/utility/Loader/index.js +5 -4
  105. package/dist/components/utility/Popover/index.d.ts +1 -1
  106. package/dist/components/utility/Popover/index.js +5 -5
  107. package/dist/components/utility/Toast/index.d.ts +2 -2
  108. package/dist/components/utility/Toast/index.js +6 -4
  109. package/dist/components/utility/Toaster/index.js +5 -5
  110. package/dist/filters/components/FilterBar/index.d.ts +5 -2
  111. package/dist/filters/components/FilterBarClientComponent/index.d.ts +2 -4
  112. package/dist/filters/components/FilterBarClientComponent/index.js +3 -43
  113. package/dist/filters/components/FilterClearButton/index.d.ts +7 -2
  114. package/dist/filters/components/FilterClearButton/index.js +8 -4
  115. package/dist/filters/components/FilterControl/index.d.ts +1 -1
  116. package/dist/filters/components/FilterControl/index.js +11 -4
  117. package/dist/filters/components/FilterItem/index.d.ts +2 -1
  118. package/dist/filters/components/FilterItem/index.js +3 -7
  119. package/dist/filters/components/FilterPanel/index.d.ts +1 -1
  120. package/dist/filters/{utility/filter.d.ts → filter.d.ts} +1 -1
  121. package/dist/filters/{utility/filter.js → filter.js} +8 -8
  122. package/dist/filters/filters/BooleanFilter/index.js +1 -1
  123. package/dist/filters/filters/CalendarFilter/index.js +3 -2
  124. package/dist/filters/filters/DateFilter/index.d.ts +1 -1
  125. package/dist/filters/filters/DateFilter/index.js +9 -4
  126. package/dist/filters/filters/DropdownFilter/index.js +1 -1
  127. package/dist/filters/filters/Filter/index.d.ts +5 -4
  128. package/dist/filters/filters/Filter/index.js +7 -7
  129. package/dist/filters/filters/SearchFilter/index.d.ts +7 -2
  130. package/dist/filters/filters/SearchFilter/index.js +8 -8
  131. package/dist/filters/filters/interfaces.d.ts +0 -2
  132. package/dist/filters/index.d.ts +2 -1
  133. package/dist/filters/index.js +2 -1
  134. package/dist/filters/interfaces.d.ts +4 -4
  135. package/dist/filters/utility/parse-filters.d.ts +1 -1
  136. package/dist/filters/utility/parse-filters.js +3 -2
  137. package/dist/filters/utility/render-value.js +4 -4
  138. package/dist/filters/utility/transform-boolean.d.ts +1 -1
  139. package/dist/filters/utility/transform-date.d.ts +1 -1
  140. package/dist/filters/utility/transform-multi.d.ts +1 -1
  141. package/dist/forms/components/Autocomplete/index.d.ts +11 -0
  142. package/dist/forms/components/Autocomplete/index.js +37 -0
  143. package/dist/forms/components/CSVInput/index.d.ts +11 -0
  144. package/dist/forms/components/CSVInput/index.js +32 -0
  145. package/dist/forms/components/Dropdown/index.d.ts +1 -1
  146. package/dist/forms/components/Dropdown/index.js +8 -7
  147. package/dist/forms/components/DropdownItem/index.d.ts +9 -0
  148. package/dist/forms/components/DropdownItem/index.js +9 -0
  149. package/dist/forms/components/DropdownList/index.d.ts +1 -1
  150. package/dist/forms/components/DropdownList/index.js +7 -9
  151. package/dist/forms/components/EditableForm/index.d.ts +3 -3
  152. package/dist/forms/components/EditableForm/index.js +9 -9
  153. package/dist/forms/components/EditableFormField/index.d.ts +1 -1
  154. package/dist/forms/components/EditableFormField/index.js +3 -3
  155. package/dist/forms/components/EditableFormFields/index.d.ts +3 -0
  156. package/dist/forms/components/EditableFormFields/index.js +6 -0
  157. package/dist/forms/components/Form/index.d.ts +3 -2
  158. package/dist/forms/components/Form/index.js +5 -5
  159. package/dist/forms/components/FormError/index.d.ts +2 -2
  160. package/dist/forms/components/FormError/index.js +4 -3
  161. package/dist/forms/components/FormField/index.d.ts +4 -4
  162. package/dist/forms/components/FormField/index.js +8 -6
  163. package/dist/forms/components/FormFields/index.d.ts +14 -0
  164. package/dist/forms/components/FormFields/index.js +30 -0
  165. package/dist/forms/components/FormLabel/index.d.ts +1 -1
  166. package/dist/forms/components/FormLabel/index.js +4 -3
  167. package/dist/forms/components/ModalForm/index.js +1 -1
  168. package/dist/forms/components/NumberInput/index.d.ts +7 -0
  169. package/dist/forms/components/NumberInput/index.js +27 -0
  170. package/dist/forms/components/PasswordComplexity/index.d.ts +16 -0
  171. package/dist/forms/components/PasswordComplexity/index.js +14 -0
  172. package/dist/forms/components/PasswordComplexityItem/index.d.ts +8 -0
  173. package/dist/forms/components/PasswordComplexityItem/index.js +10 -0
  174. package/dist/forms/components/PasswordInput/index.d.ts +1 -1
  175. package/dist/forms/components/PasswordInput/index.js +6 -6
  176. package/dist/forms/components/PointsInput/index.d.ts +5 -0
  177. package/dist/forms/components/PointsInput/index.js +22 -0
  178. package/dist/forms/components/RangeCalendarInput/index.d.ts +5 -0
  179. package/dist/forms/components/RangeCalendarInput/index.js +10 -0
  180. package/dist/forms/components/StaticTextInput/index.d.ts +2 -3
  181. package/dist/forms/components/StaticTextInput/index.js +8 -8
  182. package/dist/forms/components/Switch/index.d.ts +1 -1
  183. package/dist/forms/components/Switch/index.js +5 -4
  184. package/dist/forms/components/TextArea/index.d.ts +14 -0
  185. package/dist/forms/components/TextArea/index.js +15 -0
  186. package/dist/forms/components/TextInput/index.d.ts +2 -2
  187. package/dist/forms/components/TextInput/index.js +7 -6
  188. package/dist/forms/hooks/useAutocomplete.d.ts +9 -0
  189. package/dist/forms/hooks/useAutocomplete.js +31 -0
  190. package/dist/forms/hooks/useDropdown.d.ts +2 -2
  191. package/dist/forms/hooks/useForm.d.ts +3 -5
  192. package/dist/forms/hooks/useForm.js +14 -24
  193. package/dist/forms/hooks/useModalForm.d.ts +2 -2
  194. package/dist/forms/index.d.ts +26 -4
  195. package/dist/forms/index.js +11 -3
  196. package/dist/forms/interfaces.d.ts +1 -0
  197. package/dist/forms/utility/format-file-size.d.ts +2 -0
  198. package/dist/forms/utility/format-file-size.js +11 -0
  199. package/dist/hooks/index.d.ts +3 -0
  200. package/dist/hooks/index.js +3 -0
  201. package/dist/hooks/useConfirmable.d.ts +21 -0
  202. package/dist/hooks/useConfirmable.js +58 -0
  203. package/dist/hooks/useDownload.d.ts +2 -0
  204. package/dist/hooks/useDownload.js +18 -0
  205. package/dist/hooks/usePopover.d.ts +12 -0
  206. package/dist/hooks/usePopover.js +24 -0
  207. package/dist/hooks/useSelected.d.ts +12 -0
  208. package/dist/hooks/useSelected.js +35 -0
  209. package/dist/hooks/useServerAction.d.ts +10 -0
  210. package/dist/hooks/useServerAction.js +17 -0
  211. package/dist/hooks/useSuccess.d.ts +10 -0
  212. package/dist/hooks/useSuccess.js +22 -0
  213. package/dist/navigation/components/AppNavigation/index.d.ts +3 -1
  214. package/dist/navigation/components/AppNavigation/index.js +4 -4
  215. package/dist/navigation/components/AppNavigationItem/index.d.ts +5 -3
  216. package/dist/navigation/components/AppNavigationItem/index.js +16 -7
  217. package/dist/navigation/components/Tabs/index.js +1 -4
  218. package/dist/navigation/hooks/useNavigation.d.ts +3 -3
  219. package/dist/navigation/hooks/useNavigation.js +5 -5
  220. package/dist/styles/classnames/config.d.ts +87 -0
  221. package/dist/styles/classnames/config.js +1 -0
  222. package/dist/styles/classnames/interfaces.d.ts +56 -0
  223. package/dist/styles/classnames/interfaces.js +1 -0
  224. package/dist/styles/classnames/utility/apply-sizes.d.ts +3 -0
  225. package/dist/styles/classnames/utility/apply-sizes.js +21 -0
  226. package/dist/styles/classnames/utility/apply-variants.d.ts +3 -0
  227. package/dist/styles/classnames/utility/apply-variants.js +26 -0
  228. package/dist/styles/classnames/utility/is-classname-object.d.ts +3 -0
  229. package/dist/styles/classnames/utility/is-classname-object.js +7 -0
  230. package/dist/styles/classnames/utility/parse-classnames.d.ts +6 -0
  231. package/dist/styles/classnames/utility/parse-classnames.js +33 -0
  232. package/dist/styles/context.d.ts +28 -0
  233. package/dist/styles/context.js +19 -0
  234. package/dist/styles/icons/config.d.ts +20 -0
  235. package/dist/styles/icons/config.js +1 -0
  236. package/dist/styles/icons/interfaces.d.ts +4 -0
  237. package/dist/styles/icons/interfaces.js +1 -0
  238. package/dist/styles/index.d.ts +6 -2
  239. package/dist/styles/index.js +2 -1
  240. package/dist/styles/styles.css +60 -0
  241. package/dist/utility/compare-dates.d.ts +2 -0
  242. package/dist/utility/compare-dates.js +13 -0
  243. package/dist/utility/convert-to-datauri.d.ts +2 -0
  244. package/dist/utility/convert-to-datauri.js +16 -0
  245. package/dist/utility/get-days.d.ts +2 -0
  246. package/dist/utility/get-days.js +5 -0
  247. package/dist/utility/get-weeks.d.ts +2 -0
  248. package/dist/utility/get-weeks.js +31 -0
  249. package/dist/utility/index.d.ts +1 -1
  250. package/dist/utility/interfaces.d.ts +33 -17
  251. package/dist/utility/is-data-object-array.d.ts +3 -0
  252. package/dist/utility/is-data-object-array.js +5 -0
  253. package/dist/utility/is-data-object.d.ts +3 -0
  254. package/dist/utility/is-data-object.js +4 -0
  255. package/dist/utility/is-date-highlighted.d.ts +2 -0
  256. package/dist/utility/is-date-highlighted.js +8 -0
  257. package/dist/utility/is-date-selected.d.ts +2 -0
  258. package/dist/utility/is-date-selected.js +16 -0
  259. package/package.json +28 -16
  260. package/dist/components/buttons/ConfirmableButton/index.d.ts +0 -7
  261. package/dist/components/buttons/ConfirmableButton/index.js +0 -13
  262. package/dist/components/collections/utility/filter-columns.d.ts +0 -3
  263. package/dist/components/collections/utility/filter-columns.js +0 -8
  264. package/dist/components/collections/utility/get-selected-from-search-params.d.ts +0 -2
  265. package/dist/components/collections/utility/get-selected-from-search-params.js +0 -5
  266. package/dist/components/collections/utility/set-selected-to-search-params.d.ts +0 -2
  267. package/dist/components/collections/utility/set-selected-to-search-params.js +0 -4
  268. package/dist/components/utility/ClassNames/index.d.ts +0 -6
  269. package/dist/components/utility/ClassNames/index.js +0 -7
  270. package/dist/components/utility/Page/index.d.ts +0 -18
  271. package/dist/components/utility/Page/index.js +0 -34
  272. package/dist/components/utility/RootLayout/index.d.ts +0 -12
  273. package/dist/components/utility/RootLayout/index.js +0 -14
  274. package/dist/styles/config.d.ts +0 -64
  275. package/dist/styles/config.js +0 -43
  276. package/dist/styles/icons.d.ts +0 -15
  277. package/dist/styles/icons.js +0 -7
  278. package/dist/styles/interfaces.d.ts +0 -41
  279. /package/dist/{styles → addon}/interfaces.js +0 -0
  280. /package/dist/styles/{tw.d.ts → classnames/utility/tw.d.ts} +0 -0
  281. /package/dist/styles/{tw.js → classnames/utility/tw.js} +0 -0
@@ -0,0 +1,32 @@
1
+ import { ClassNameProps } from '../../../styles/classnames/interfaces';
2
+ export interface CalendarClassNames {
3
+ root: string;
4
+ header: string;
5
+ title: string;
6
+ navigation: string;
7
+ month: string;
8
+ control: string;
9
+ head: string;
10
+ day: string;
11
+ }
12
+ interface BaseCalendarProps extends ClassNameProps<CalendarClassNames> {
13
+ disabledDates?: Date[] | ((date: Date) => boolean);
14
+ }
15
+ interface CalendarPropsWithoutRange extends BaseCalendarProps {
16
+ isRange?: false;
17
+ onChange?: (date: Date | null) => void;
18
+ value?: Date | null;
19
+ }
20
+ interface CalendarPropsWithRange extends BaseCalendarProps {
21
+ isRange: true;
22
+ onChange?: (date: [Date, Date] | null) => void;
23
+ value?: [Date, Date] | null;
24
+ }
25
+ export interface CalendarProps extends BaseCalendarProps {
26
+ isRange?: boolean;
27
+ onChange?: ((date: Date | null) => void) | ((date: [Date, Date] | null) => void);
28
+ value?: Date | [Date, Date] | null;
29
+ }
30
+ declare function Calendar(props: CalendarPropsWithRange): React.ReactElement;
31
+ declare function Calendar(props: CalendarPropsWithoutRange): React.ReactElement;
32
+ export default Calendar;
@@ -0,0 +1,67 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Fragment, useState } from 'react';
4
+ import tw from '../../../styles/classnames/utility/tw';
5
+ import getDays from '../../../utility/get-days';
6
+ import getWeeks from '../../../utility/get-weeks';
7
+ import isDateHighlighted from '../../../utility/is-date-highlighted';
8
+ import isDateSelected from '../../../utility/is-date-selected';
9
+ import CalendarDay from '../CalendarDay';
10
+ import { useClassNames, useIcon } from '../../../styles/context';
11
+ function sortDates(dates) {
12
+ return dates[0] > dates[1] ? [dates[1], dates[0]] : [dates[0], dates[1]];
13
+ }
14
+ function makeValidDate(date) {
15
+ if (date.toString() === 'Invalid Date') {
16
+ return new Date();
17
+ }
18
+ return new Date(date);
19
+ }
20
+ function getActiveDate(value) {
21
+ if (!value || (Array.isArray(value) && !value.length)) {
22
+ return new Date();
23
+ }
24
+ return makeValidDate(Array.isArray(value) ? value[0] : value);
25
+ }
26
+ function Calendar({ classNameProps, classNames, isRange, onChange, value, }) {
27
+ const componentClassNames = useClassNames('calendar', { props: classNameProps }, classNames);
28
+ const NextIcon = useIcon('calendar.next');
29
+ const PreviousIcon = useIcon('calendar.previous');
30
+ const [date, setDate] = useState(getActiveDate(value));
31
+ /*
32
+ * `pendingValue` is used when the BaseCalendar takes a date range, to select the first date in
33
+ * the range without affecting the onChange handlers or anything higher up the chain. Only when
34
+ * the second date has been selected will the handlers fire.
35
+ */
36
+ const [pendingValue, setPendingValue] = useState(null);
37
+ function handleMonth(offset) {
38
+ const newDate = new Date(date);
39
+ newDate.setDate(1);
40
+ newDate.setMonth(date.getMonth() + offset);
41
+ setDate(newDate);
42
+ }
43
+ function handlePrevious() {
44
+ handleMonth(-1);
45
+ }
46
+ function handleNext() {
47
+ handleMonth(1);
48
+ }
49
+ function handleChange(date) {
50
+ if (!onChange) {
51
+ return;
52
+ }
53
+ if (!isRange) {
54
+ onChange(date);
55
+ return;
56
+ }
57
+ if (pendingValue) {
58
+ onChange(sortDates([pendingValue, date]));
59
+ setPendingValue(null);
60
+ return;
61
+ }
62
+ onChange(null);
63
+ setPendingValue(date);
64
+ }
65
+ return (_jsxs("div", { className: componentClassNames?.root, children: [_jsxs("div", { className: componentClassNames?.header, children: [_jsx("p", { className: componentClassNames?.title, children: new Intl.DateTimeFormat('en-GB', { month: 'long', year: 'numeric' }).format(date) }), _jsx("button", { className: componentClassNames?.navigation, onClick: handlePrevious, type: "button", children: PreviousIcon ? (_jsxs(Fragment, { children: [_jsx(PreviousIcon, {}), _jsx("span", { className: "sr-only", children: "Previous" })] })) : ('Previous') }), _jsx("button", { className: componentClassNames?.navigation, onClick: handleNext, type: "button", children: NextIcon ? (_jsxs(Fragment, { children: [_jsx(NextIcon, {}), _jsx("span", { className: "sr-only", children: "Next" })] })) : ('Next') })] }), _jsxs("table", { className: tw('w-full', componentClassNames?.month), children: [_jsx("thead", { children: _jsx("tr", { children: getDays().map((item) => (_jsx("th", { className: componentClassNames?.head, children: item }, item))) }) }), _jsx("tbody", { children: getWeeks(date).map((days) => (_jsx("tr", { children: days.map((day, index) => (_jsx(CalendarDay, { date: day, isHighlighted: isDateHighlighted(day, pendingValue, value), isSelected: isDateSelected(day, pendingValue, value), onClick: handleChange }, day ? day.toString() : index))) }, days.map((d) => d?.toString()).join('-')))) })] })] }));
66
+ }
67
+ export default Calendar;
@@ -0,0 +1,11 @@
1
+ import { ClassNameProps } from '../../../styles/classnames/interfaces';
2
+ import type { CalendarClassNames } from '../Calendar';
3
+ interface CalendarDayProps extends ClassNameProps<CalendarClassNames> {
4
+ date: Date | null;
5
+ onClick?: (date: Date) => void;
6
+ isDisabled?: boolean;
7
+ isHighlighted?: boolean;
8
+ isSelected?: boolean;
9
+ }
10
+ declare function CalendarDay({ classNames, classNameProps, date, isDisabled, isHighlighted, isSelected, onClick, }: Readonly<CalendarDayProps>): React.ReactElement;
11
+ export default CalendarDay;
@@ -0,0 +1,23 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useClassNames } from '../../../styles/context';
4
+ function CalendarDay({ classNames, classNameProps, date, isDisabled, isHighlighted, isSelected, onClick, }) {
5
+ const componentClassNames = useClassNames('calendar', {
6
+ props: {
7
+ ...classNameProps,
8
+ isHighlighted: isHighlighted ?? false,
9
+ isSelected: isSelected ?? false,
10
+ },
11
+ }, classNames);
12
+ if (date === null) {
13
+ return _jsx("td", { className: componentClassNames?.day });
14
+ }
15
+ function handleClick() {
16
+ if (onClick && date instanceof Date) {
17
+ onClick(date);
18
+ }
19
+ }
20
+ const day = new Intl.DateTimeFormat('en-GB', { day: 'numeric' }).format(date);
21
+ return (_jsx("td", { className: componentClassNames?.day, children: _jsx("button", { className: componentClassNames?.control, disabled: isDisabled, onClick: handleClick, type: "button", children: day }) }));
22
+ }
23
+ export default CalendarDay;
@@ -0,0 +1,9 @@
1
+ import { ButtonProps } from '../../../components/buttons/Button';
2
+ import type { ConfirmableObject } from '../../../utility/interfaces';
3
+ export interface ConfirmableProps<Data, Response> {
4
+ confirmable: ConfirmableObject<Data, Response>;
5
+ renderProps: ButtonProps;
6
+ render: (props: ButtonProps) => React.ReactElement;
7
+ }
8
+ declare function Confirmable<Data, Response>({ confirmable, renderProps, render, }: Readonly<ConfirmableProps<Data, Response>>): React.ReactElement;
9
+ export default Confirmable;
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Fragment } from 'react';
4
+ import useConfirmable from '../../../hooks/useConfirmable';
5
+ import ConfirmModal from '../../modals/ConfirmModal';
6
+ function Confirmable({ confirmable, renderProps, render, }) {
7
+ const { handle, isOpen, modalProps } = useConfirmable({
8
+ isLoading: renderProps.isLoading,
9
+ onConfirm: (event) => renderProps.onClick?.(event),
10
+ refreshOnSuccess: true,
11
+ });
12
+ return (_jsxs(Fragment, { children: [render({ ...renderProps, isLoading: renderProps.isLoading, onClick: handle }), isOpen ? _jsx(ConfirmModal, { confirmable: confirmable, ...modalProps }) : null] }));
13
+ }
14
+ export default Confirmable;
@@ -1,4 +1,4 @@
1
- import type { ClassNameProps } from '../../../styles/interfaces';
1
+ import type { ClassNameProps } from '../../../styles/classnames/interfaces';
2
2
  export interface ContainerClassNames {
3
3
  root: string;
4
4
  }
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { getClassNames } from '../../../styles/config';
3
+ import { useClassNames } from '../../../styles/context';
4
4
  function Container({ children, classNameProps, classNames, }) {
5
- const componentClassNames = classNames || getClassNames('container')?.(classNameProps);
5
+ const componentClassNames = useClassNames('container', { props: classNameProps }, classNames);
6
6
  return _jsx("div", { className: componentClassNames?.root, children: children });
7
7
  }
8
8
  export default Container;
@@ -1,4 +1,4 @@
1
- import type { ClassNameProps, SizableClassName } from '../../../styles/interfaces';
1
+ import type { ClassNameProps, SizableClassName } from '../../../styles/classnames/interfaces';
2
2
  export interface LoaderClassNames {
3
3
  root?: SizableClassName;
4
4
  inner?: SizableClassName;
@@ -1,9 +1,10 @@
1
+ 'use client';
1
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { getClassNames } from '../../../styles/config';
3
- import tw from '../../../styles/tw';
3
+ import { useClassNames } from '../../../styles/context';
4
+ import tw from '../../../styles/classnames/utility/tw';
4
5
  import Assistive from '../Assistive';
5
6
  function Loader({ classNameProps, classNames }) {
6
- const componentClassNames = classNames || getClassNames('loader')?.(classNameProps);
7
- return (_jsxs("div", { className: tw(componentClassNames?.root?.default), children: [_jsx("div", { className: tw(componentClassNames?.inner?.default) }), _jsx(Assistive, { children: "Loading..." })] }));
7
+ const componentClassNames = useClassNames('loader', { props: classNameProps }, classNames);
8
+ return (_jsxs("div", { className: tw(componentClassNames?.root), children: [_jsx("div", { className: tw(componentClassNames?.inner) }), _jsx(Assistive, { children: "Loading..." })] }));
8
9
  }
9
10
  export default Loader;
@@ -1,4 +1,4 @@
1
- import type { ClassNameProps, FocusableClassName } from '../../../styles/interfaces';
1
+ import type { ClassNameProps, FocusableClassName } from '../../../styles/classnames/interfaces';
2
2
  export interface PopoverClassNames {
3
3
  root: FocusableClassName;
4
4
  scroll: string;
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { useEffect, useRef, useState } from 'react';
4
- import { getClassNames } from '../../../styles/config';
5
- import tw from '../../../styles/tw';
4
+ import { useClassNames } from '../../../styles/context';
5
+ import tw from '../../../styles/classnames/utility/tw';
6
6
  const HORIZONTAL_THRESHOLD = 40;
7
7
  const VERTICAL_THRESHOLD = 40;
8
8
  function getPositionStyles(align = 'left', vAlign = 'top') {
@@ -22,7 +22,7 @@ function getPositionStyles(align = 'left', vAlign = 'top') {
22
22
  : 'left-1/2 -translate-x-1/2 origin-top top-full';
23
23
  }
24
24
  function Popover({ align: initialAlign = 'left', children, classNames, classNameProps, isOpen, isScrollable, vAlign: initialVAlign = 'bottom', }) {
25
- const componentClassNames = classNames || getClassNames('popover')?.(classNameProps);
25
+ const componentClassNames = useClassNames('popover', { props: classNameProps, states: { isFocused: isOpen ?? false } }, classNames);
26
26
  const [align, setAlign] = useState(initialAlign);
27
27
  const [vAlign, setVAlign] = useState(initialVAlign);
28
28
  const ref = useRef(null);
@@ -36,7 +36,7 @@ function Popover({ align: initialAlign = 'left', children, classNames, className
36
36
  shadowRef.current.style.height = `${ref.current?.offsetHeight}px`;
37
37
  shadowRef.current.style.width = `${ref.current?.offsetWidth}px`;
38
38
  shadowRef.current.style.pointerEvents = 'none';
39
- ref.current?.parentElement?.appendChild(shadowRef.current);
39
+ // ref.current?.parentElement?.appendChild(shadowRef.current);
40
40
  }
41
41
  function handleResize() {
42
42
  const rect = shadowRef.current?.getBoundingClientRect();
@@ -66,6 +66,6 @@ function Popover({ align: initialAlign = 'left', children, classNames, className
66
66
  window.removeEventListener('scroll', handleResize);
67
67
  };
68
68
  }, []);
69
- return (_jsx("div", { ref: ref, className: tw('absolute', getPositionStyles(align, vAlign), componentClassNames?.root?.default, isOpen ? componentClassNames?.root?.focused : null), style: { display: isOpen ? 'block' : 'none' }, children: isScrollable ? (_jsx("div", { className: componentClassNames?.scroll, children: children })) : (children) }));
69
+ return (_jsx("div", { ref: ref, className: tw('absolute', getPositionStyles(align, vAlign), componentClassNames?.root), style: { display: isOpen ? 'block' : 'none' }, children: isScrollable ? (_jsx("div", { className: componentClassNames?.scroll, children: children })) : (children) }));
70
70
  }
71
71
  export default Popover;
@@ -1,4 +1,4 @@
1
- import type { ClassNameProps, StylableClassName } from '../../../styles/interfaces';
1
+ import type { ClassNameProps, StylableClassName } from '../../../styles/classnames/interfaces';
2
2
  import type { StyleVariant } from '../../../utility/interfaces';
3
3
  export interface ToastClassNames {
4
4
  root: StylableClassName;
@@ -7,5 +7,5 @@ export interface ToastProps extends ClassNameProps<ToastClassNames> {
7
7
  children: React.ReactNode;
8
8
  variant?: StyleVariant | null;
9
9
  }
10
- declare function Toast({ children, classNames, classNameProps, }: Readonly<ToastProps>): React.ReactElement | null;
10
+ declare function Toast({ children, classNames, classNameProps, variant, }: Readonly<ToastProps>): React.ReactElement | null;
11
11
  export default Toast;
@@ -1,11 +1,13 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { getClassNames } from '../../../styles/config';
4
- function Toast({ children, classNames, classNameProps, }) {
5
- const componentClassNames = classNames || getClassNames('toast')?.(classNameProps);
3
+ import { useClassNames } from '../../../styles/context';
4
+ import tw from '../../../styles/classnames/utility/tw';
5
+ import applyVariants from '../../../styles/classnames/utility/apply-variants';
6
+ function Toast({ children, classNames, classNameProps, variant, }) {
7
+ const componentClassNames = useClassNames('toast', { props: { ...classNameProps, ...applyVariants(variant) } }, classNames);
6
8
  if (!children) {
7
9
  return null;
8
10
  }
9
- return _jsx("dialog", { open: true, children: children });
11
+ return (_jsx("dialog", { className: tw('pointer-events-none fixed z-50', componentClassNames?.root), open: true, children: children }));
10
12
  }
11
13
  export default Toast;
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable react/no-multi-comp */
2
2
  'use client';
3
3
  import { jsx as _jsx } from "react/jsx-runtime";
4
- import { Fragment, Suspense, useEffect, useRef, useState } from 'react';
4
+ import { Suspense, useEffect, useRef, useState } from 'react';
5
5
  import { usePathname } from 'next/navigation';
6
6
  import Toast from '../Toast';
7
7
  const TOAST_DURATION = 5000;
@@ -46,10 +46,10 @@ function ToasterComponent({ channel, duration, render = Toast, }) {
46
46
  useEffect(() => {
47
47
  hideToast();
48
48
  }, [pathname]);
49
- return visible ? (_jsx(Fragment, { children: render({
50
- children: message,
51
- variant,
52
- }) })) : null;
49
+ return render({
50
+ children: message,
51
+ variant,
52
+ });
53
53
  }
54
54
  function Toaster(props) {
55
55
  return (_jsx(Suspense, { children: _jsx(ToasterComponent, { ...props }) }));
@@ -1,7 +1,10 @@
1
1
  import type { TableColumnObject } from '../../../components/collections/interfaces';
2
+ import { ClassNameProps } from '../../../styles/classnames/interfaces';
2
3
  import type { FilterMap } from '../../interfaces';
3
- export type { FilterBarClassNames } from '../FilterBarClientComponent';
4
- interface FilterBarProps<T> {
4
+ export interface FilterBarClassNames {
5
+ root: string;
6
+ }
7
+ interface FilterBarProps<T> extends ClassNameProps<FilterBarClassNames> {
5
8
  columns?: TableColumnObject[];
6
9
  map?: FilterMap<T>;
7
10
  }
@@ -1,9 +1,7 @@
1
1
  import type { TableColumnObject } from '../../../components/collections/interfaces';
2
- import type { ClassNameProps } from '../../../styles/interfaces';
2
+ import type { ClassNameProps } from '../../../styles/classnames/interfaces';
3
3
  import type { ClientFilterMap } from '../../interfaces';
4
- export interface FilterBarClassNames {
5
- root: string;
6
- }
4
+ import type { FilterBarClassNames } from '../FilterBar';
7
5
  interface FilterBarClientComponentProps<T> extends ClassNameProps<FilterBarClassNames> {
8
6
  columns?: TableColumnObject[];
9
7
  map?: ClientFilterMap<T>;
@@ -5,17 +5,17 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  // import type { InputEvent } from '@sqrzro/interfaces';
6
6
  // import { getEntries } from '@sqrzro/utility';
7
7
  // import { useRouter } from 'next/navigation';
8
- // import { getClassNames } from '../../../styles/config';
8
+ // import { useClassNames } from '../../../styles/config';
9
9
  // import type { TableColumnObject } from '../../../tables/TableClientComponent';
10
10
  // import type { ClassNameProps } from '../../../utility/interfaces';
11
11
  import { getEntries } from '@sqrzro/utility';
12
12
  import useFilters from '../../../filters/hooks/useFilters';
13
- import { getClassNames } from '../../../styles/config';
13
+ import { useClassNames } from '../../../styles/context';
14
14
  import SearchFilter from '../../filters/SearchFilter';
15
15
  import FilterItem from '../FilterItem';
16
16
  const FILTERED_TYPES = ['assistive', 'search'];
17
17
  function FilterBarClientComponent({ classNames, classNameProps, columns, map, }) {
18
- const componentClassNames = classNames || getClassNames('filterBar')?.(classNameProps);
18
+ const componentClassNames = useClassNames('filterBar', { props: classNameProps }, classNames);
19
19
  const [filters, setFilter] = useFilters();
20
20
  const mapArray = map ? getEntries(map) : [];
21
21
  const hasSearch = mapArray.some(([, item]) => item?.type === 'search');
@@ -24,45 +24,5 @@ function FilterBarClientComponent({ classNames, classNameProps, columns, map, })
24
24
  setFilter(event.target.name, event.target.value);
25
25
  }
26
26
  return (_jsxs("ul", { className: componentClassNames?.root, children: [hasSearch ? (_jsx("li", { className: "relative", children: _jsx(SearchFilter, { onChange: handleChange, value: filters.get('search') || '' }) })) : null, filteredArray.map(([name, props]) => (_jsx("li", { className: "relative", children: _jsx(FilterItem, { name: String(name), onChange: handleChange, value: filters.get(String(name)) || '', ...props }, String(name)) }, String(name))))] }));
27
- // const componentClassNames = classNames || getClassNames('filterBar')?.(classNameProps);
28
- // const router = useRouter();
29
- // const [filters, setFilter] = useFilters();
30
- // const mapArray = map ? getEntries(map) : [];
31
- // const hasSearch = mapArray.some(([, item]) => item.type === 'search');
32
- // const filteredArray = mapArray.filter(([, item]) => !FILTERED_TYPES.includes(item.type));
33
- // function handleChange(event: InputEvent<string>): void {
34
- // setFilter(event.target.name, event.target.value);
35
- // router.refresh();
36
- // }
37
- // return (
38
- // <ul className={componentClassNames?.root}>
39
- // {hasSearch ? (
40
- // <li className="relative">
41
- // <SearchFilter onChange={handleChange} value={filters.get('search') || ''} />
42
- // </li>
43
- // ) : null}
44
- // {filteredArray.map(([name, props]) => (
45
- // <li key={String(name)} className="relative">
46
- // <FilterItem
47
- // key={String(name)}
48
- // name={String(name)}
49
- // onChange={handleChange}
50
- // value={filters.get(String(name)) || ''}
51
- // {...props}
52
- // />
53
- // </li>
54
- // ))}
55
- // {columns?.length ? (
56
- // <Fragment>
57
- // <li className="relative ml-auto">
58
- // <ColumnFilter columns={columns} filters={filters} onChange={handleChange} />
59
- // </li>
60
- // <li className="relative">
61
- // <SortFilter columns={columns} filters={filters} onChange={handleChange} />
62
- // </li>
63
- // </Fragment>
64
- // ) : null}
65
- // </ul>
66
- // );
67
27
  }
68
28
  export default FilterBarClientComponent;
@@ -1,5 +1,10 @@
1
- interface FilterClearButtonProps {
1
+ import { ClassNameProps } from '../../../styles/classnames/interfaces';
2
+ export interface FilterClearButtonClassNames {
3
+ root: string;
4
+ icon: string;
5
+ }
6
+ interface FilterClearButtonProps extends ClassNameProps<FilterClearButtonClassNames> {
2
7
  onClick: () => void;
3
8
  }
4
- declare function FilterClearButton({ onClick }: Readonly<FilterClearButtonProps>): React.ReactElement;
9
+ declare function FilterClearButton({ classNameProps, classNames, onClick, }: FilterClearButtonProps): React.ReactElement;
5
10
  export default FilterClearButton;
@@ -1,6 +1,10 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- function FilterClearButton({ onClick }) {
3
- // const Icon = getIcon('filterClearButton');
4
- return (_jsx("button", { className: "absolute right-0 top-0 z-20 flex h-full w-8 select-none items-center justify-center text-xs", onClick: onClick, type: "button", children: "Remove" }));
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Fragment } from 'react';
4
+ import { useClassNames, useIcon } from '../../../styles/context';
5
+ function FilterClearButton({ classNameProps, classNames, onClick, }) {
6
+ const componentClassNames = useClassNames('filterClear', { props: classNameProps }, classNames);
7
+ const Icon = useIcon('filter.clear');
8
+ return (_jsx("button", { className: componentClassNames?.root, onClick: onClick, type: "button", children: Icon ? (_jsxs(Fragment, { children: [_jsx("span", { className: componentClassNames?.icon, children: _jsx(Icon, {}) }), _jsx("span", { className: "sr-only", children: "Clear" })] })) : ('Clear') }));
5
9
  }
6
10
  export default FilterClearButton;
@@ -1,4 +1,4 @@
1
- import { ClassNameProps } from '../../../styles/interfaces';
1
+ import { ClassNameProps } from '../../../styles/classnames/interfaces';
2
2
  import type { FilterItemClassNames } from '../FilterItem';
3
3
  interface FilterControlProps extends ClassNameProps<FilterItemClassNames> {
4
4
  children: React.ReactNode;
@@ -1,10 +1,17 @@
1
+ 'use client';
1
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
3
  // import FilterClearButton from '../FilterClearButton';
3
- import { getClassNames } from '../../../styles/config';
4
- import tw from '../../../styles/tw';
4
+ import { useClassNames } from '../../../styles/context';
5
+ import tw from '../../../styles/classnames/utility/tw';
5
6
  import FilterClearButton from '../FilterClearButton';
6
7
  function FilterControl({ classNameProps, classNames, children, isDisabled, isFocused, isHighlighted, onClear, onClick, }) {
7
- const componentClassNames = classNames || getClassNames('filterItem')?.(classNameProps);
8
- return (_jsxs("div", { className: tw(componentClassNames?.root?.default, isDisabled ? 'pointer-events-none opacity-30' : null, isFocused ? componentClassNames?.root?.focused : null, isHighlighted ? componentClassNames?.root?.highlighted : null), children: [children, isFocused && onClear ? _jsx(FilterClearButton, { onClick: onClear }) : null, onClick ? (_jsx("button", { className: tw('absolute -inset-1 z-10 select-none text-transparent'), disabled: isDisabled, onClick: onClick, type: "button", children: "Edit" })) : null] }));
8
+ const componentClassNames = useClassNames('filterItem', {
9
+ props: {
10
+ ...classNameProps,
11
+ isFocused: isFocused ?? false,
12
+ isHighlighted: isHighlighted ?? false,
13
+ },
14
+ }, classNames);
15
+ return (_jsxs("div", { className: tw(componentClassNames?.root, isDisabled ? 'pointer-events-none opacity-30' : null), children: [children, isFocused && onClear ? _jsx(FilterClearButton, { onClick: onClear }) : null, onClick ? (_jsx("button", { className: "absolute -inset-1 z-10 select-none text-transparent", disabled: isDisabled, onClick: onClick, type: "button", children: "Edit" })) : null] }));
9
16
  }
10
17
  export default FilterControl;
@@ -1,8 +1,9 @@
1
1
  import { InputProps } from '../../../forms/interfaces';
2
- import { ClassNameProps, FocusableClassName, HighlightableClassName } from '../../../styles/interfaces';
2
+ import { ClassNameProps, FocusableClassName, HighlightableClassName } from '../../../styles/classnames/interfaces';
3
3
  import { ClientFilterObject, FilterType } from '../../interfaces';
4
4
  export interface FilterItemClassNames {
5
5
  root: FocusableClassName & HighlightableClassName;
6
+ label: string;
6
7
  value: string;
7
8
  }
8
9
  interface FilterItemProps<F extends FilterType> extends ClassNameProps<FilterItemClassNames>, ClientFilterObject<F>, InputProps<string> {
@@ -2,12 +2,12 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useEffect, useState } from 'react';
4
4
  import useClickOutside from '../../../hooks/useClickOutside';
5
- import { getClassNames } from '../../../styles/config';
5
+ import { useClassNames } from '../../../styles/context';
6
6
  import renderValue from '../../utility/render-value';
7
7
  import FilterControl from '../FilterControl';
8
8
  import FilterPanel from '../FilterPanel';
9
9
  function FilterItem({ align, classNameProps, classNames, config, icon, isDisabled, label, name, onChange, title, type, value, }) {
10
- const componentClassNames = classNames || getClassNames('filterItem')?.(classNameProps);
10
+ const componentClassNames = useClassNames('filterItem', { props: classNameProps }, classNames);
11
11
  const [isOpen, setIsOpen, node] = useClickOutside();
12
12
  // const { dynamicConfig } = useDynamicData(config);
13
13
  const [pendingValue, setPendingValue] = useState(value);
@@ -34,10 +34,6 @@ function FilterItem({ align, classNameProps, classNames, config, icon, isDisable
34
34
  // if (type === 'switch') {
35
35
  // return <SwitchFilter label={label} name={name} onChange={onChange} value={value || ''} />;
36
36
  // }
37
- return (_jsxs("div", { ref: node, children: [_jsxs(FilterControl
38
- // isDisabled={isDisabled || (config?.data && config.data.length === 0)}
39
- , {
40
- // isDisabled={isDisabled || (config?.data && config.data.length === 0)}
41
- isFocused: Boolean(value), isHighlighted: isOpen, onClear: handleClear, onClick: toggleIsOpen, children: [_jsx("p", { children: label }), value ? (_jsx("p", { className: componentClassNames?.value, children: renderValue(value, config) })) : null] }), _jsx(FilterPanel, { align: align, config: config, icon: icon, isOpen: isOpen, label: label, name: name, onApply: handleApply, onChange: handleChange, title: title, type: type, value: pendingValue })] }));
37
+ return (_jsxs("div", { ref: node, children: [_jsxs(FilterControl, { isDisabled: isDisabled || (config && 'options' in config && config.options?.length === 0), isFocused: Boolean(value), isHighlighted: isOpen, onClear: handleClear, onClick: toggleIsOpen, children: [_jsx("p", { className: componentClassNames?.label, children: label }), value ? (_jsx("p", { className: componentClassNames?.value, children: renderValue(value, config) })) : null] }), _jsx(FilterPanel, { align: align, config: config, icon: icon, isOpen: isOpen, label: label, name: name, onApply: handleApply, onChange: handleChange, title: title, type: type, value: pendingValue })] }));
42
38
  }
43
39
  export default FilterItem;
@@ -1,5 +1,5 @@
1
1
  import { InputProps } from '../../../forms/interfaces';
2
- import { SizableClassName } from '../../../styles/interfaces';
2
+ import { SizableClassName } from '../../../styles/classnames/interfaces';
3
3
  import type { ClientFilterObject, FilterType } from '../../interfaces';
4
4
  export interface FilterPanelClassNames {
5
5
  content: string;
@@ -1,4 +1,4 @@
1
- import type { FilterConfig, FilterConfigWithBooleanData, FilterConfigWithData, FilterObject, FilterType } from '../interfaces';
1
+ import type { FilterConfig, FilterConfigWithBooleanData, FilterConfigWithData, FilterObject, FilterType } from './interfaces';
2
2
  interface FilterReturn {
3
3
  $dropdown: <T>(config: FilterConfigWithData, transformer: (value: string | null) => T) => FilterObject<T, 'dropdown'>;
4
4
  $multi: <T>(config: FilterConfigWithData, transformer: (value: string | null) => T | null) => FilterObject<T[] | null, 'multi'>;
@@ -1,8 +1,8 @@
1
1
  import { filterNull } from '@sqrzro/utility';
2
- import getQuickDates from './get-quick-dates';
3
- import { transformToBoolean } from './transform-boolean';
4
- import { transformToDate } from './transform-date';
5
- import { transformToMulti } from './transform-multi';
2
+ import getQuickDates from './utility/get-quick-dates';
3
+ import { transformToBoolean } from './utility/transform-boolean';
4
+ import { transformToDate } from './utility/transform-date';
5
+ import { transformToMulti } from './utility/transform-multi';
6
6
  function defaultTransformer(value) {
7
7
  return value ? value : null;
8
8
  }
@@ -37,9 +37,9 @@ function filter() {
37
37
  return {
38
38
  config: {
39
39
  ...config,
40
- data: [
41
- { label: config?.data?.[0] || 'No', value: '0' },
42
- { label: config?.data?.[1] || 'Yes', value: '1' },
40
+ options: [
41
+ { label: config?.options?.[0] || 'No', value: '0' },
42
+ { label: config?.options?.[1] || 'Yes', value: '1' },
43
43
  ],
44
44
  },
45
45
  label,
@@ -67,7 +67,7 @@ function filter() {
67
67
  return {
68
68
  config: {
69
69
  ...config,
70
- data: [...getQuickDates(), { label: 'Custom...', value: 'custom' }],
70
+ options: [...getQuickDates(), { label: 'Custom...', value: 'custom' }],
71
71
  },
72
72
  label,
73
73
  transformer: transformToDate,
@@ -5,6 +5,6 @@ function BooleanFilter({ config, name, onChange, value, ...filterBarProps }) {
5
5
  function handleChange(event) {
6
6
  onChange?.({ target: { name, value: event.target.value || '' } });
7
7
  }
8
- return (_jsx(Filter, { ...filterBarProps, children: _jsx(Dropdown, { isPanelOnly: true, name: name, onChange: handleChange, options: config?.data, value: value }) }));
8
+ return (_jsx(Filter, { ...filterBarProps, children: _jsx(Dropdown, { isPanelOnly: true, name: name, onChange: handleChange, options: config?.options, value: value }) }));
9
9
  }
10
10
  export default BooleanFilter;
@@ -1,10 +1,11 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import RangeCalendarInput from '../../../forms/components/RangeCalendarInput';
3
+ import { transformFromDate, transformToDate } from '../../utility/transform-date';
2
4
  import Filter from '../Filter';
3
- import { transformFromDate } from '../../utility/transform-date';
4
5
  function CalendarFilter({ name, onChange, value, ...filterBarProps }) {
5
6
  function handleChange(event) {
6
7
  onChange?.({ target: { name, value: transformFromDate(event.target.value) } });
7
8
  }
8
- return (_jsx(Filter, { ...filterBarProps, size: "lg", children: "LOREM" }));
9
+ return (_jsx(Filter, { ...filterBarProps, isDisabled: !value, size: "large", children: _jsx(RangeCalendarInput, { name: name, onChange: handleChange, value: transformToDate(value) }) }));
9
10
  }
10
11
  export default CalendarFilter;
@@ -1,3 +1,3 @@
1
1
  import type { FilterComponentProps } from '../interfaces';
2
- declare function DateFilter({ isOpen, onChange, ...filterBarProps }: Readonly<FilterComponentProps<'date'>>): React.ReactElement;
2
+ declare function DateFilter({ isOpen, onChange, value, ...filterBarProps }: Readonly<FilterComponentProps<'date'>>): React.ReactElement;
3
3
  export default DateFilter;
@@ -1,21 +1,26 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { Fragment, useEffect, useState } from 'react';
4
+ import getQuickDates from '../../utility/get-quick-dates';
4
5
  import CalendarFilter from '../CalendarFilter';
5
6
  import DropdownFilter from '../DropdownFilter';
6
- function DateFilter({ isOpen, onChange, ...filterBarProps }) {
7
+ function DateFilter({ isOpen, onChange, value, ...filterBarProps }) {
7
8
  const [panel, setPanel] = useState('quick');
8
9
  function handleDropdownChange(event) {
9
- onChange?.(event);
10
10
  if (event.target.value === 'custom') {
11
11
  setPanel('calendar');
12
12
  }
13
+ else {
14
+ onChange?.(event);
15
+ }
13
16
  }
14
17
  useEffect(() => {
15
18
  if (isOpen) {
16
- setPanel('quick');
19
+ setPanel(!value || getQuickDates().some((date) => date.value === value)
20
+ ? 'quick'
21
+ : 'calendar');
17
22
  }
18
23
  }, [isOpen]);
19
- return (_jsxs(Fragment, { children: [_jsx(DropdownFilter, { ...filterBarProps, isOpen: Boolean(isOpen && panel === 'quick'), onChange: handleDropdownChange }), _jsx(CalendarFilter, { ...filterBarProps, isOpen: Boolean(isOpen && panel === 'calendar'), onChange: onChange })] }));
24
+ return (_jsxs(Fragment, { children: [_jsx(DropdownFilter, { ...filterBarProps, isOpen: Boolean(isOpen && panel === 'quick'), onChange: handleDropdownChange, value: value }), _jsx(CalendarFilter, { ...filterBarProps, isOpen: Boolean(isOpen && panel === 'calendar'), onChange: onChange, value: value })] }));
20
25
  }
21
26
  export default DateFilter;