@appcorp/stellar-solutions-invoice-module 0.1.4 → 0.1.6

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.
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import { VistaFormElements } from '@appcorp/app-corp-vista/type/vista-form-elements';
3
+ export declare const renderCompanyFormElements: (elementProps: VistaFormElements) => React.JSX.Element;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ /* eslint-disable */
3
+ var __assign = (this && this.__assign) || function () {
4
+ __assign = Object.assign || function(t) {
5
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
6
+ s = arguments[i];
7
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
8
+ t[p] = s[p];
9
+ }
10
+ return t;
11
+ };
12
+ return __assign.apply(this, arguments);
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.renderCompanyFormElements = void 0;
19
+ var react_1 = __importDefault(require("react"));
20
+ var form_schema_1 = require("@appcorp/app-corp-vista/utils/form-schema");
21
+ var renderCompanyFormElements = function (elementProps) {
22
+ var _a;
23
+ var elementsArray = (_a = Object.entries(form_schema_1.vistaFormSchema)
24
+ .flatMap(function (_a) {
25
+ var _b, _c;
26
+ var key = _a[0], config = _a[1];
27
+ var Component = config;
28
+ return (_c = (_b = (elementProps[key] || [])) === null || _b === void 0 ? void 0 : _b.filter(function (props) { return props.enabled; })) === null || _c === void 0 ? void 0 : _c.map(function (props) { return ({
29
+ Component: Component,
30
+ key: key,
31
+ order: props.order,
32
+ props: props,
33
+ }); });
34
+ })) === null || _a === void 0 ? void 0 : _a.sort(function (a, b) { return a.order - b.order; });
35
+ return (react_1.default.createElement("div", { className: "grid grid-cols-3 gap-4" }, elementsArray === null || elementsArray === void 0 ? void 0 : elementsArray.map(function (_a, index) {
36
+ var key = _a.key, Component = _a.Component, props = _a.props;
37
+ return (react_1.default.createElement("div", { key: "".concat(key, "-").concat(index) },
38
+ react_1.default.createElement(Component, __assign({}, props))));
39
+ })));
40
+ };
41
+ exports.renderCompanyFormElements = renderCompanyFormElements;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const CompanySection: () => React.JSX.Element;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CompanySection = void 0;
7
+ var react_1 = __importDefault(require("react"));
8
+ var vista_vertical_divider_v4_1 = require("@appcorp/app-corp-vista/molecules/vista-vertical-divider-v4");
9
+ var company_form_elements_1 = require("./company-form-elements");
10
+ var context_1 = require("./context");
11
+ var CompanySection = function () {
12
+ var dynamicCompanyFormElements = (0, context_1.useInvoiceStateContext)().dynamicCompanyFormElements;
13
+ return (react_1.default.createElement("div", { className: "flex flex-col gap-4" },
14
+ react_1.default.createElement(vista_vertical_divider_v4_1.VistaVerticalDividerV4, { label: "Company" }),
15
+ (0, company_form_elements_1.renderCompanyFormElements)(dynamicCompanyFormElements)));
16
+ };
17
+ exports.CompanySection = CompanySection;
@@ -35,7 +35,7 @@ exports.staticCompanySection = (_a = {},
35
35
  error: '',
36
36
  handleOnChange: function () { return void 0; },
37
37
  id: 'ref',
38
- label: '',
38
+ label: 'Ref',
39
39
  order: 6,
40
40
  placeholder: '',
41
41
  required: true,
@@ -47,10 +47,10 @@ exports.staticCompanySection = (_a = {},
47
47
  error: '',
48
48
  handleOnChange: function () { return void 0; },
49
49
  id: 'date',
50
- label: '',
50
+ label: 'Date',
51
51
  order: 2,
52
52
  placeholder: '',
53
- required: false,
53
+ required: true,
54
54
  type: 'date',
55
55
  value: '',
56
56
  },
@@ -59,10 +59,10 @@ exports.staticCompanySection = (_a = {},
59
59
  error: '',
60
60
  handleOnChange: function () { return void 0; },
61
61
  id: 'expiryDate',
62
- label: '',
62
+ label: 'Expire Date',
63
63
  order: 3,
64
64
  placeholder: '',
65
- required: false,
65
+ required: true,
66
66
  type: 'date',
67
67
  value: '',
68
68
  },
@@ -71,7 +71,7 @@ exports.staticCompanySection = (_a = {},
71
71
  error: '',
72
72
  handleOnChange: function () { return void 0; },
73
73
  id: 'note',
74
- label: '',
74
+ label: 'Note',
75
75
  order: 5,
76
76
  placeholder: 'This is invoice for...',
77
77
  required: false,
@@ -79,29 +79,35 @@ exports.staticCompanySection = (_a = {},
79
79
  value: '',
80
80
  },
81
81
  ],
82
- _a[form_schema_1.VISTA_FORM_ELEMENTS.SELECT_V1] = [
82
+ _a[form_schema_1.VISTA_FORM_ELEMENTS.COMBOBOX_V1] = [
83
83
  {
84
84
  enabled: true,
85
+ handleInputOnChange: function () { return void 0; },
86
+ handleOnBlur: function () { return void 0; },
85
87
  handleOnChange: function () { return void 0; },
86
88
  label: 'Company',
87
89
  listItems: [],
90
+ nodeQueryKey: '',
88
91
  nodeSelectKey: 'companyId',
89
92
  order: 1,
90
- required: false,
93
+ query: '',
94
+ required: true,
91
95
  selectKey1: 'name',
92
- selectKey2: '',
93
96
  selectedItem: { name: '' },
94
97
  },
95
98
  {
96
99
  enabled: true,
100
+ handleInputOnChange: function () { return void 0; },
101
+ handleOnBlur: function () { return void 0; },
97
102
  handleOnChange: function () { return void 0; },
98
103
  label: 'Currency',
99
104
  listItems: [],
105
+ nodeQueryKey: '',
100
106
  nodeSelectKey: 'currency',
101
107
  order: 4,
102
- required: false,
108
+ query: '',
109
+ required: true,
103
110
  selectKey1: 'label',
104
- selectKey2: '',
105
111
  selectedItem: { label: '' },
106
112
  },
107
113
  // {
@@ -103,9 +103,12 @@ var validate_1 = require("./validate");
103
103
  var generate_toast_1 = require("@appcorp/app-corp-vista/utils/generate-toast");
104
104
  var calculate_subtotal_1 = require("./calculate-subtotal");
105
105
  var context_1 = require("@appcorp/stellar-solutions-product-module/base-modules/product/context");
106
+ var context_2 = require("@appcorp/stellar-solutions-company-module/base-modules/company/context");
107
+ var date_fns_1 = require("date-fns");
106
108
  var useInvoiceState = function () {
107
109
  var _a = (0, react_1.useReducer)(reducer_1.invoiceReducer, reducer_1.initialInvoiceState), state = _a[0], dispatch = _a[1];
108
110
  var products = (0, context_1.useProductStateContext)().products;
111
+ var companies = (0, context_2.useCompanyStateContext)().companies;
109
112
  var debouncedQuery = (0, util_functions_1.useDebounce)(state.searchQuery, 800);
110
113
  var listParams = {
111
114
  currentPage: state.currentPage,
@@ -313,9 +316,8 @@ var useInvoiceState = function () {
313
316
  body: JSON.stringify(__assign({})),
314
317
  });
315
318
  }
316
- // eslint-disable-next-line
317
319
  }
318
- catch (err) {
320
+ catch (_b) {
319
321
  (0, generate_toast_1.generateToast)({
320
322
  description: constants_1.messages.error,
321
323
  variant: vista_notification_type_1.VISTA_NOTIFICATION_V1_VARIANT.ERROR,
@@ -330,7 +332,16 @@ var useInvoiceState = function () {
330
332
  return [2 /*return*/];
331
333
  });
332
334
  }); }, [updateFetchNow]);
333
- var handleChange = function (key, value) {
335
+ var handleChange = (0, react_1.useCallback)(function (key, value) {
336
+ if (key === 'taxValue') {
337
+ dispatch({
338
+ type: actions_1.INVOICE_ACTION_TYPES.SET_INPUT_FIELD,
339
+ payload: {
340
+ key: key,
341
+ value: value,
342
+ },
343
+ });
344
+ }
334
345
  dispatch({
335
346
  type: actions_1.INVOICE_ACTION_TYPES.SET_INPUT_FIELD,
336
347
  payload: { key: key, value: String(value).trim(), },
@@ -342,6 +353,29 @@ var useInvoiceState = function () {
342
353
  dispatch({
343
354
  type: actions_1.INVOICE_ACTION_TYPES.CLEAR_ERRORS,
344
355
  });
356
+ }, []);
357
+ var handleDateChange = function (key, date) {
358
+ var _a, _b;
359
+ var selectedDate = (_a = new Date(date)) === null || _a === void 0 ? void 0 : _a.toISOString();
360
+ var expireDate = (_b = (0, date_fns_1.addDays)(selectedDate, 7)) === null || _b === void 0 ? void 0 : _b.toISOString();
361
+ if (key === 'expiryDate') {
362
+ dispatch({
363
+ type: actions_1.INVOICE_ACTION_TYPES.SET_INPUT_FIELD,
364
+ payload: { key: 'expiryDate', value: selectedDate },
365
+ });
366
+ return;
367
+ }
368
+ dispatch({
369
+ type: actions_1.INVOICE_ACTION_TYPES.SET_INPUT_FIELD,
370
+ payload: {
371
+ key: key,
372
+ value: selectedDate,
373
+ },
374
+ });
375
+ dispatch({
376
+ type: actions_1.INVOICE_ACTION_TYPES.SET_INPUT_FIELD,
377
+ payload: { key: 'expiryDate', value: expireDate },
378
+ });
345
379
  };
346
380
  var handleItemChangeServices = (0, react_1.useCallback)(function (_a) {
347
381
  var _b;
@@ -484,19 +518,29 @@ var useInvoiceState = function () {
484
518
  type: actions_1.INVOICE_ACTION_TYPES.CLEAR_ERRORS,
485
519
  });
486
520
  };
487
- var dynamicFormElements = (0, react_1.useMemo)(function () {
488
- var _a, _b, _c, _d, _e;
521
+ var dynamicCompanyFormElements = (0, react_1.useMemo)(function () {
522
+ var _a, _b, _c, _d, _e, _f;
489
523
  var elements = __assign({}, constants_1.staticCompanySection);
490
524
  var textInputElements = (_a = elements[form_schema_1.VISTA_FORM_ELEMENTS.TEXT_INPUT_V1]) === null || _a === void 0 ? void 0 : _a.sort(function (a, b) { return a.order - b.order; });
491
525
  if (textInputElements) {
492
- textInputElements === null || textInputElements === void 0 ? void 0 : textInputElements.map(function (_a, i) {
493
- var id = _a.id;
494
- textInputElements[i].value = state[id];
495
- textInputElements[i].handleOnChange = handleChange;
496
- textInputElements[i].error = state.errors[id];
497
- });
526
+ textInputElements[0].value = state.date ? (0, date_fns_1.format)(state === null || state === void 0 ? void 0 : state.date, 'yyyy-MM-dd') : '';
527
+ textInputElements[0].handleOnChange = handleDateChange;
528
+ textInputElements[0].error = state.errors.date;
529
+ textInputElements[1].value = state.expiryDate ? (0, date_fns_1.format)(new Date(state.expiryDate), 'yyyy-MM-dd') : '';
530
+ textInputElements[1].handleOnChange = handleDateChange;
531
+ textInputElements[1].error = state.errors.expiryDate;
532
+ textInputElements[2].value = state.note;
533
+ textInputElements[2].handleOnChange = handleChange;
534
+ textInputElements[2].error = state.errors.note;
535
+ textInputElements[3].value = state.ref || (0, util_functions_1.generateRef)({ refLength: 5 });
536
+ var comboboxElements_1 = (_b = elements[form_schema_1.VISTA_FORM_ELEMENTS.COMBOBOX_V1]) === null || _b === void 0 ? void 0 : _b.sort(function (a, b) { return a.order - b.order; });
537
+ if (comboboxElements_1) {
538
+ comboboxElements_1[0].selectedItem = {};
539
+ comboboxElements_1[0].listItems = companies;
540
+ }
541
+ return elements;
498
542
  }
499
- var textAreaElements = (_b = elements[form_schema_1.VISTA_FORM_ELEMENTS.TEXT_AREA_V1]) === null || _b === void 0 ? void 0 : _b.sort(function (a, b) { return a.order - b.order; });
543
+ var textAreaElements = (_c = elements[form_schema_1.VISTA_FORM_ELEMENTS.TEXT_AREA_V1]) === null || _c === void 0 ? void 0 : _c.sort(function (a, b) { return a.order - b.order; });
500
544
  if (textAreaElements) {
501
545
  textAreaElements === null || textAreaElements === void 0 ? void 0 : textAreaElements.forEach(function (_a, i) {
502
546
  var id = _a.id;
@@ -505,7 +549,7 @@ var useInvoiceState = function () {
505
549
  textAreaElements[i].error = state.errors.description;
506
550
  });
507
551
  }
508
- var selectElements = (_c = elements[form_schema_1.VISTA_FORM_ELEMENTS.SELECT_V1]) === null || _c === void 0 ? void 0 : _c.sort(function (a, b) { return a.order - b.order; });
552
+ var selectElements = (_d = elements[form_schema_1.VISTA_FORM_ELEMENTS.SELECT_V1]) === null || _d === void 0 ? void 0 : _d.sort(function (a, b) { return a.order - b.order; });
509
553
  if (selectElements) {
510
554
  selectElements === null || selectElements === void 0 ? void 0 : selectElements.forEach(function (_a, i) {
511
555
  var nodeSelectKey = _a.nodeSelectKey;
@@ -513,7 +557,7 @@ var useInvoiceState = function () {
513
557
  selectElements[i].selectedItem = { option: state[nodeSelectKey] };
514
558
  });
515
559
  }
516
- var comboboxElements = (_d = elements[form_schema_1.VISTA_FORM_ELEMENTS.COMBOBOX_V1]) === null || _d === void 0 ? void 0 : _d.sort(function (a, b) { return a.order - b.order; });
560
+ var comboboxElements = (_e = elements[form_schema_1.VISTA_FORM_ELEMENTS.COMBOBOX_V1]) === null || _e === void 0 ? void 0 : _e.sort(function (a, b) { return a.order - b.order; });
517
561
  if (comboboxElements) {
518
562
  // comboboxElements?.forEach(({ nodeSelectKey }, i) => {
519
563
  // comboboxElements[i].handleOnChange = handleSelectChange;
@@ -524,7 +568,7 @@ var useInvoiceState = function () {
524
568
  // comboboxElements[i].handleOnBlur = handleSelectInputChange;
525
569
  // });
526
570
  }
527
- var uploadElements = (_e = elements[form_schema_1.VISTA_FORM_ELEMENTS.UPLOAD_V1]) === null || _e === void 0 ? void 0 : _e.sort(function (a, b) { return a.order - b.order; });
571
+ var uploadElements = (_f = elements[form_schema_1.VISTA_FORM_ELEMENTS.UPLOAD_V1]) === null || _f === void 0 ? void 0 : _f.sort(function (a, b) { return a.order - b.order; });
528
572
  if (uploadElements) {
529
573
  // uploadElements?.forEach((_, i) => {
530
574
  // uploadElements[i].imageUrls = state.images;
@@ -536,7 +580,7 @@ var useInvoiceState = function () {
536
580
  // });
537
581
  }
538
582
  return elements;
539
- }, [state]);
583
+ }, [state, handleChange, companies]);
540
584
  var dynamicPricingFormElements = (0, react_1.useMemo)(function () {
541
585
  var elements = __assign({}, constants_1.staticPricingSection);
542
586
  return elements;
@@ -575,6 +619,8 @@ var useInvoiceState = function () {
575
619
  value: v,
576
620
  }); };
577
621
  // textInputElements[i].error = state.errors[id];
622
+ textInputElements[4].value = state.services[0].rowTotal;
623
+ // textInputElements[i].error = state.errors[id];
578
624
  });
579
625
  }
580
626
  return elements;
@@ -592,12 +638,13 @@ var useInvoiceState = function () {
592
638
  value: Number(v),
593
639
  }); };
594
640
  // textInputElements[i].error = state.errors[id];
641
+ textInputElements[2].value = product.rowTotal;
595
642
  });
596
643
  }
597
644
  var comboboxElements = (_c = elements[form_schema_1.VISTA_FORM_ELEMENTS.COMBOBOX_V1]) === null || _c === void 0 ? void 0 : _c.sort(function (a, b) { return a.order - b.order; });
598
645
  if (comboboxElements) {
599
646
  (_d = state.products) === null || _d === void 0 ? void 0 : _d.forEach(function (product, i) {
600
- comboboxElements[0].listItems = [];
647
+ comboboxElements[0].listItems = products;
601
648
  comboboxElements[0].handleOnChange = function (k, v) {
602
649
  var val = __assign({}, v);
603
650
  handleItemChangeProducts({
@@ -609,7 +656,7 @@ var useInvoiceState = function () {
609
656
  });
610
657
  }
611
658
  return elements;
612
- }, [state, handleItemChangeProducts]);
659
+ }, [state, handleItemChangeProducts, products]);
613
660
  var headerActions = [
614
661
  {
615
662
  enabled: true,
@@ -638,11 +685,11 @@ var useInvoiceState = function () {
638
685
  order: 2,
639
686
  },
640
687
  ];
641
- return __assign(__assign({}, state), { byIdError: byIdError, byIdLoading: byIdLoading, clearSearch: clearSearch, closeDrawer: closeDrawer, deleteError: deleteError, deleteLoading: deleteLoading, dispatch: dispatch, dynamicFormElements: dynamicFormElements, dynamicPricingFormElements: dynamicPricingFormElements, dynamicProductFormElements: dynamicProductFormElements, dynamicServiceFormElements: dynamicServiceFormElements, handleChange: handleChange, handleNextClick: handleNextClick, handlePageLimit: handlePageLimit, handlePreviousClick: handlePreviousClick, handleSubmit: handleSubmit,
688
+ return __assign(__assign({}, state), { byIdError: byIdError, byIdLoading: byIdLoading, clearSearch: clearSearch, closeDrawer: closeDrawer, deleteError: deleteError, deleteLoading: deleteLoading, dispatch: dispatch, dynamicCompanyFormElements: dynamicCompanyFormElements, dynamicPricingFormElements: dynamicPricingFormElements, dynamicProductFormElements: dynamicProductFormElements, dynamicServiceFormElements: dynamicServiceFormElements, handleChange: handleChange, handleNextClick: handleNextClick, handlePageLimit: handlePageLimit, handlePreviousClick: handlePreviousClick, handleSubmit: handleSubmit,
642
689
  // handleUploadImage,
643
690
  headerActions: headerActions, listError: listError, listFetchNow: listFetchNow, listLoading: listLoading, rowActions: rowActions, searchOnChange: searchOnChange, updateError: updateError, updateLoading: updateLoading });
644
691
  };
645
- exports.InvoiceStateContext = (0, react_1.createContext)(__assign(__assign({}, reducer_1.initialInvoiceState), { byIdError: undefined, byIdLoading: false, clearSearch: function () { return void 0; }, closeDrawer: function () { return void 0; }, deleteError: undefined, deleteLoading: false, dispatch: function () { return void 0; }, dynamicFormElements: {}, dynamicPricingFormElements: {}, dynamicProductFormElements: {}, dynamicServiceFormElements: {}, handleChange: function () { return void 0; }, handleNextClick: function () { return void 0; }, handlePageLimit: function () { return void 0; }, handlePreviousClick: function () { return void 0; }, handleSubmit: function () { return void 0; },
692
+ exports.InvoiceStateContext = (0, react_1.createContext)(__assign(__assign({}, reducer_1.initialInvoiceState), { byIdError: undefined, byIdLoading: false, clearSearch: function () { return void 0; }, closeDrawer: function () { return void 0; }, deleteError: undefined, deleteLoading: false, dispatch: function () { return void 0; }, dynamicCompanyFormElements: {}, dynamicPricingFormElements: {}, dynamicProductFormElements: {}, dynamicServiceFormElements: {}, handleChange: function () { return void 0; }, handleNextClick: function () { return void 0; }, handlePageLimit: function () { return void 0; }, handlePreviousClick: function () { return void 0; }, handleSubmit: function () { return void 0; },
646
693
  // handleUploadImage: () => void 0,
647
694
  headerActions: [], listError: undefined, listFetchNow: function () { return void 0; }, listLoading: false, rowActions: [], searchOnChange: function () { return void 0; }, updateError: undefined, updateLoading: false }));
648
695
  var InvoiceStateContextProvider = function (_a) {
@@ -18,6 +18,7 @@ var products_form_section_1 = require("./products-form-section");
18
18
  var pricing_form_section_1 = require("./pricing-form-section");
19
19
  var add_service_product_section_1 = require("./add-service-product-section");
20
20
  var services_form_section_1 = require("./services-form-section");
21
+ var company_form_section_1 = require("./company-form-section");
21
22
  var InvoiceForm = function () {
22
23
  // const updated = useMemo(() => {
23
24
  // const elements: VistaFormElements = { ...dynamicFormElements };
@@ -59,6 +60,7 @@ var InvoiceForm = function () {
59
60
  // return elements;
60
61
  // }, [dynamicFormElements, translationMap]);
61
62
  return (react_1.default.createElement("div", { className: "flex flex-col gap-8" },
63
+ react_1.default.createElement(company_form_section_1.CompanySection, null),
62
64
  react_1.default.createElement(services_form_section_1.ServicesSection, null),
63
65
  react_1.default.createElement(products_form_section_1.ProductsSection, null),
64
66
  react_1.default.createElement(add_service_product_section_1.AddServiceProductSection, null),
@@ -12,7 +12,7 @@ export interface InvoiceContextType {
12
12
  deleteError?: Error;
13
13
  deleteLoading: boolean;
14
14
  dispatch: Dispatch<InvoiceActions>;
15
- dynamicFormElements: VistaFormElements;
15
+ dynamicCompanyFormElements: VistaFormElements;
16
16
  dynamicPricingFormElements: VistaFormElements;
17
17
  dynamicProductFormElements: VistaFormElements;
18
18
  dynamicServiceFormElements: VistaFormElements;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appcorp/stellar-solutions-invoice-module",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "scripts": {
5
5
  "build": "yarn clean && yarn build:ts && cp package.json lib && cp README.md lib",
6
6
  "build:next": "next build",
@@ -16,19 +16,17 @@
16
16
  "start": "next start",
17
17
  "upgrade": "ncu -u"
18
18
  },
19
- "dependencies": {
20
- "@appcorp/stellar-solutions-company-module": "^0.1.16",
21
- "@appcorp/stellar-solutions-product-module": "^0.1.84",
22
- "date-fns": "^4.1.0"
23
- },
19
+ "dependencies": {},
24
20
  "devDependencies": {
25
21
  "@appcorp/app-corp-designs": "^0.4.79",
26
- "@appcorp/app-corp-vista": "^0.1.95",
22
+ "@appcorp/app-corp-vista": "^0.2.20",
23
+ "@appcorp/stellar-solutions-company-module": "^0.1.16",
27
24
  "@appcorp/stellar-solutions-modules": "^0.1.5",
25
+ "@appcorp/stellar-solutions-product-module": "^0.1.87",
28
26
  "@eslint/eslintrc": "^3",
29
27
  "@headlessui/react": "^2.2.0",
30
28
  "@heroicons/react": "^2.2.0",
31
- "@react-pakistan/util-functions": "^1.24.10",
29
+ "@react-pakistan/util-functions": "^1.24.16",
32
30
  "@supabase/supabase-js": "^2.50.0",
33
31
  "@tailwindcss/forms": "^0.5.10",
34
32
  "@tailwindcss/postcss": "^4",
@@ -36,6 +34,7 @@
36
34
  "@types/react": "^19",
37
35
  "@types/react-dom": "^19",
38
36
  "@types/react-slick": "^0",
37
+ "date-fns": "^4.1.0",
39
38
  "dayjs": "^1.11.13",
40
39
  "eslint": "^9",
41
40
  "eslint-config-next": "15",