@tap-payments/os-micro-frontend-shared 0.1.373-test.2 → 0.1.373-test.3-test.4-test.5

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.
@@ -46,9 +46,16 @@ function CreateViewDialog({ open, onClose, onCreate, availableColumns = [], defa
46
46
  return;
47
47
  setIsLoading(true);
48
48
  try {
49
- const columnsToCreate = selectedColumns.filter((col) => col.selected);
50
- const layout = convertColumnsToLayoutSection(columnsToCreate, mode);
51
- yield (onCreate === null || onCreate === void 0 ? void 0 : onCreate({ name: templateName, selectedColumns: columnsToCreate, layout }));
49
+ if (editingView) {
50
+ // On update: send whole layout with current selected/default (true/false) for every column and field
51
+ const layout = convertColumnsToLayoutSection(selectedColumns, mode);
52
+ yield (onCreate === null || onCreate === void 0 ? void 0 : onCreate({ name: templateName, selectedColumns, layout }));
53
+ }
54
+ else {
55
+ const columnsToCreate = selectedColumns.filter((col) => col.selected);
56
+ const layout = convertColumnsToLayoutSection(columnsToCreate, mode);
57
+ yield (onCreate === null || onCreate === void 0 ? void 0 : onCreate({ name: templateName, selectedColumns: columnsToCreate, layout }));
58
+ }
52
59
  onClose();
53
60
  }
54
61
  catch (error) {
@@ -71,6 +71,6 @@ function ViewsMenu({ onViewChange, onCreateCustomView, onEditCustomView, onDelet
71
71
  });
72
72
  return (_jsxs(_Fragment, { children: [_jsx(ClickAwayListener, Object.assign({ onClickAway: handleCloseViewDropdown }, { children: _jsxs(ViewWrapper, Object.assign({ sx: { width: '32px' }, "data-testid": "ViewsMenu" }, { children: [_jsx(StyledButton, Object.assign({ title: t('tableView'), "data-testid": "ViewsMenu_button", onClick: handleViewButtonClick }, { children: _jsx(Icon, { src: viewIcon, alt: "view", sx: { width: 14, height: 14 } }) })), _jsx(ViewsDropdown, { open: Boolean(anchorEl), anchorEl: anchorEl, onClose: handleCloseViewDropdown, defaultModified: (_a = modifiedModes[tableMode]) !== null && _a !== void 0 ? _a : false, onMarkDefaultModified: () => {
73
73
  setModifiedModes((current) => (Object.assign(Object.assign({}, current), { [tableMode]: true })));
74
- }, setSelectedViewInfo: handleSelectedViewInfo, selectedViewInfo: selectedViewInfo, onCreateCustomView: handleOpenCreateDialog, customViews: customViews, onEditCustomView: handleOpenEditDialog, onSaveDefaultColumns: handleSaveDefaultColumns, defaultColumns: defaultColumns, setDefaultColumns: updateDefaultColumns, updateSelectedView: updateSelectedView, baseDefaultColumns: baseDefaultColumns, mode: tableMode, defaultTemplate: defaultTemplate })] })) })), _jsx(CreateViewDialog, { open: isCreateDialogOpen, onClose: handleCloseCreateDialog, availableColumns: defaultColumns, defaultColumns: defaultColumns, onCreate: handleSaveView, editingView: editingView, onDelete: handleDeleteView, tableViews: shouldUseCurrentState ? currentViewColumns : undefined, mode: tableMode })] }));
74
+ }, setSelectedViewInfo: handleSelectedViewInfo, selectedViewInfo: selectedViewInfo, onCreateCustomView: handleOpenCreateDialog, customViews: customViews, onEditCustomView: handleOpenEditDialog, onSaveDefaultColumns: handleSaveDefaultColumns, defaultColumns: defaultColumns, setDefaultColumns: updateDefaultColumns, updateSelectedView: updateSelectedView, baseDefaultColumns: baseDefaultColumns, mode: tableMode, defaultTemplate: defaultTemplate })] })) })), _jsx(CreateViewDialog, { open: isCreateDialogOpen, onClose: handleCloseCreateDialog, availableColumns: editingView && baseDefaultColumns.length > 0 ? baseDefaultColumns : defaultColumns, defaultColumns: defaultColumns, onCreate: handleSaveView, editingView: editingView, onDelete: handleDeleteView, tableViews: shouldUseCurrentState ? currentViewColumns : undefined, mode: tableMode })] }));
75
75
  }
76
76
  export default memo(ViewsMenu);
@@ -8,4 +8,8 @@ export declare const DATE_COLUMN_CONFIG: {
8
8
  readonly label: "Date";
9
9
  readonly selected: true;
10
10
  readonly menuItems: undefined;
11
+ readonly order: 1;
12
+ readonly pinned: "start";
13
+ readonly isDefaultPinned: true;
14
+ readonly pinnable: true;
11
15
  };
@@ -8,4 +8,8 @@ export const DATE_COLUMN_CONFIG = {
8
8
  label: 'Date',
9
9
  selected: true,
10
10
  menuItems: undefined,
11
+ order: 1,
12
+ pinned: 'start',
13
+ isDefaultPinned: true,
14
+ pinnable: true,
11
15
  };
@@ -1,6 +1,6 @@
1
1
  import { useState, useEffect, useMemo, useRef } from 'react';
2
2
  import { DATE_COLUMN_CONFIG, TEMPLATE_NAME_MAX_LENGTH } from '../constants';
3
- import { initializeEditingColumns, initializeCreateColumns, initializeCreateColumnsWithCurrentState, toggleColumn, toggleSubItem, toggleAllColumns, areAllColumnsSelected, areSomeColumnsSelected, isValidTemplateName, deepCloneColumns as copyColumns, } from '../utils';
3
+ import { isDateColumn, initializeCreateColumns, initializeCreateColumnsWithCurrentState, toggleColumn, toggleSubItem, toggleAllColumns, areAllColumnsSelected, areSomeColumnsSelected, isValidTemplateName, deepCloneColumns as copyColumns, } from '../utils';
4
4
  import { useSubmenuHover } from './useSubmenuHover';
5
5
  export const useCreateViewDialog = ({ open, availableColumns, defaultColumns, editingView, tableViews = [] }) => {
6
6
  const [templateName, setTemplateName] = useState(() => (editingView === null || editingView === void 0 ? void 0 : editingView.label) || '');
@@ -10,7 +10,7 @@ export const useCreateViewDialog = ({ open, availableColumns, defaultColumns, ed
10
10
  const { hoveredColumn, anchorEl, openSubmenu, closeSubmenu, cancelClose } = useSubmenuHover();
11
11
  const dateColumn = DATE_COLUMN_CONFIG;
12
12
  useEffect(() => {
13
- var _a, _b;
13
+ var _a, _b, _c;
14
14
  if (!open) {
15
15
  previousOpenRef.current = false;
16
16
  return;
@@ -18,12 +18,21 @@ export const useCreateViewDialog = ({ open, availableColumns, defaultColumns, ed
18
18
  const wasClosed = !previousOpenRef.current;
19
19
  if (wasClosed && open) {
20
20
  if (editingView) {
21
- const savedColumns = editingView.submenu && editingView.submenu.length > 0 ? editingView.submenu : defaultColumns;
22
- const otherColumns = initializeEditingColumns(savedColumns, availableColumns);
23
- const columnsToSet = [dateColumn, ...otherColumns];
21
+ // Use template's submenu as source of truth so selection state is preserved (don't rely on name matching vs availableColumns)
22
+ const submenu = ((_a = editingView.submenu) === null || _a === void 0 ? void 0 : _a.length) ? copyColumns(editingView.submenu) : [];
23
+ const templateNonDate = submenu.filter((c) => !isDateColumn(c.name));
24
+ const templateWithDateFirst = [dateColumn, ...templateNonDate];
25
+ const templateNames = new Set(templateWithDateFirst.map((c) => c.name));
26
+ const missingFromAvailable = availableColumns
27
+ .filter((col) => !isDateColumn(col.name) && !templateNames.has(col.name))
28
+ .map((col) => {
29
+ var _a;
30
+ return (Object.assign(Object.assign({}, col), { selected: false, menuItems: (_a = col.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => (Object.assign(Object.assign({}, item), { selected: false }))) }));
31
+ });
32
+ const columnsToSet = [...templateWithDateFirst, ...missingFromAvailable];
24
33
  setSelectedColumns(columnsToSet);
25
34
  initialColumnsRef.current = copyColumns(columnsToSet);
26
- const nameToSet = ((_a = editingView.label) === null || _a === void 0 ? void 0 : _a.trim()) || '';
35
+ const nameToSet = ((_b = editingView.label) === null || _b === void 0 ? void 0 : _b.trim()) || '';
27
36
  setTemplateName(nameToSet);
28
37
  }
29
38
  else {
@@ -37,7 +46,7 @@ export const useCreateViewDialog = ({ open, availableColumns, defaultColumns, ed
37
46
  }
38
47
  }
39
48
  else if (open && editingView) {
40
- const nameToSet = ((_b = editingView.label) === null || _b === void 0 ? void 0 : _b.trim()) || '';
49
+ const nameToSet = ((_c = editingView.label) === null || _c === void 0 ? void 0 : _c.trim()) || '';
41
50
  setTemplateName(nameToSet);
42
51
  }
43
52
  previousOpenRef.current = open;
@@ -139,16 +139,12 @@ export const useViewsMenu = ({ mode, onViewChange, onCreateCustomView, onEditCus
139
139
  if (editingView) {
140
140
  const templateId = editingView.templateId || editingView.id;
141
141
  yield (onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(templateId, data));
142
- const updatedView = Object.assign(Object.assign({}, editingView), { label: data.name, submenu: deepCloneColumns(data.selectedColumns), columns: data.selectedColumns.map((c) => c.name) });
143
- setSelectedView(updatedView);
144
- setSelectedViewInfo({ id: updatedView.id, label: updatedView.label });
145
- setCurrentViewColumns(deepCloneColumns(data.selectedColumns));
146
- onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(updatedView));
142
+ // List/selection update is handled internally by parent (e.g. templates state refresh)
147
143
  }
148
144
  else {
149
145
  yield (onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(data));
150
146
  }
151
- }), [editingView, onEditCustomView, onCreateCustomView, onViewChange, getViewForParent]);
147
+ }), [editingView, onEditCustomView, onCreateCustomView]);
152
148
  const handleDeleteView = useCallback((viewId) => __awaiter(void 0, void 0, void 0, function* () {
153
149
  const viewToDelete = allTemplates.find((view) => view.id === viewId || view.templateId === viewId);
154
150
  const templateId = (viewToDelete === null || viewToDelete === void 0 ? void 0 : viewToDelete.templateId) || viewId;
@@ -356,18 +356,19 @@ export const getSubmenuItems = (item, defaultColumns) => {
356
356
  // Always include date column at the beginning if it's not already present (date column submenu disabled)
357
357
  const hasDateColumn = columns.some((col) => col.name.toLowerCase() === 'date');
358
358
  if (!hasDateColumn) {
359
- const dateColumn = Object.assign(Object.assign({}, DATE_COLUMN_CONFIG), { menuItems: undefined });
359
+ const dateColumn = Object.assign({}, DATE_COLUMN_CONFIG);
360
360
  return [dateColumn, ...columns];
361
361
  }
362
- // Ensure date column is first and strip submenu from date (date column submenu disabled)
362
+ // Ensure date column is first and strip submenu from date (date column submenu disabled); always apply date pin/order config
363
363
  const dateColumnIndex = columns.findIndex((col) => col.name.toLowerCase() === 'date');
364
364
  if (dateColumnIndex > 0) {
365
365
  const dateCol = columns[dateColumnIndex];
366
- const dateColumn = Object.assign(Object.assign({}, dateCol), { menuItems: undefined });
366
+ const dateColumn = Object.assign(Object.assign(Object.assign({}, DATE_COLUMN_CONFIG), dateCol), { menuItems: undefined });
367
367
  const otherColumns = columns.filter((col) => col.name.toLowerCase() !== 'date');
368
368
  return [dateColumn, ...otherColumns];
369
369
  }
370
- return columns.map((col) => col.name.toLowerCase() === 'date' ? Object.assign(Object.assign({}, col), { menuItems: undefined }) : col);
370
+ return columns.map((col) => col.name.toLowerCase() === 'date'
371
+ ? Object.assign(Object.assign(Object.assign({}, DATE_COLUMN_CONFIG), col), { menuItems: undefined }) : col);
371
372
  };
372
373
  /**
373
374
  * Check if a view menu item has submenu
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { ISheetViewVirtualTable } from './types';
3
- declare function SheetViewVirtualTable({ columns, rows, threshold, showHeader, headerProps, rowProps, footerProps, rowHeight, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded, tableBodyStyles, tableTitle, onStartDrag, onColumnPin, clearBackdropVisibilityTimeout, isPinnable, tableMode, overscanCount, windowId, serviceCode, customNoDataComponent, }: Readonly<ISheetViewVirtualTable>): import("react/jsx-runtime").JSX.Element;
3
+ declare function SheetViewVirtualTable({ columns: inputColumns, rows, threshold, showHeader, headerProps, rowProps, footerProps, rowHeight, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded, tableBodyStyles, tableTitle, onStartDrag, onColumnPin, clearBackdropVisibilityTimeout, isPinnable, tableMode, overscanCount, windowId, serviceCode, customNoDataComponent, defaultSkeleton, }: Readonly<ISheetViewVirtualTable>): import("react/jsx-runtime").JSX.Element;
4
4
  declare const _default: import("react").MemoExoticComponent<typeof SheetViewVirtualTable>;
5
5
  export default _default;
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { memo, useCallback, useMemo, useRef, useEffect } from 'react';
3
3
  import { SHEET_VIEW_TABLE_THRESHOLD } from '../../../constants/index.js';
4
+ import { getProcessedColumns } from '../../../utils/index.js';
4
5
  import TableFooter from '../components/TableFooter/TableFooter';
5
6
  import { SheetViewTableContainer } from '../components/style';
6
7
  import { SheetViewVirtualTableWrapper } from './style';
@@ -8,7 +9,9 @@ import { usePinnedColumns, useSynchronizedScroll, useTableState, useTableData, u
8
9
  import { useColumnResize, useColumnResizeWithPinned, applyColumnWidths } from './features/resize';
9
10
  import { ResizeOverlay } from './features/resize/components';
10
11
  import { PinnedColumn, MainTable, LoadingMainTable, NoDataView, VirtualTable } from './components';
11
- function SheetViewVirtualTable({ columns, rows, threshold = SHEET_VIEW_TABLE_THRESHOLD, showHeader, headerProps, rowProps, footerProps, rowHeight = 28, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded = false, tableBodyStyles, tableTitle, onStartDrag, onColumnPin, clearBackdropVisibilityTimeout = 100, isPinnable = false, tableMode, overscanCount, windowId, serviceCode, customNoDataComponent, }) {
12
+ function SheetViewVirtualTable({ columns: inputColumns, rows, threshold = SHEET_VIEW_TABLE_THRESHOLD, showHeader, headerProps, rowProps, footerProps, rowHeight = 28, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded = false, tableBodyStyles, tableTitle, onStartDrag, onColumnPin, clearBackdropVisibilityTimeout = 100, isPinnable = false, tableMode, overscanCount, windowId, serviceCode, customNoDataComponent, defaultSkeleton = false, }) {
13
+ // Use skeleton columns when loading and defaultSkeleton is true (same behavior as VirtualTable)
14
+ const columns = useMemo(() => getProcessedColumns(inputColumns, isLoading !== null && isLoading !== void 0 ? isLoading : false, defaultSkeleton), [inputColumns, isLoading, defaultSkeleton]);
12
15
  // Custom hooks for state management
13
16
  const { selectedCell, selectedColumn, selectedRow, showBackDrop, setShowBackdrop, handleCellClick, handleColumnClick, handleChipClick, selectedChip, } = useTableState();
14
17
  // Refs and state for resize indicator positioning
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import type { IVirtualTable } from '../../../types/index.js';
3
- declare function VirtualTable({ columns, rows, threshold, showHeader, headerProps, rowProps, footerProps, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded, tableBodyStyles, tableMode, tableTitle, onStartDrag, isSheetView, isMinimized, footerComponent, customNoDataComponent, defaultSkeleton, }: Readonly<IVirtualTable>): import("react/jsx-runtime").JSX.Element;
3
+ declare function VirtualTable({ columns: inputColumns, rows, threshold, showHeader, headerProps, rowProps, footerProps, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded, tableBodyStyles, tableMode, tableTitle, onStartDrag, isSheetView, isMinimized, footerComponent, customNoDataComponent, defaultSkeleton, }: Readonly<IVirtualTable>): import("react/jsx-runtime").JSX.Element;
4
4
  declare const _default: import("react").MemoExoticComponent<typeof VirtualTable>;
5
5
  export default _default;
@@ -34,7 +34,7 @@ const createItemData = memoize((columns, isLoading, rows, rowProps, scrollToInde
34
34
  areAllRowsLoaded,
35
35
  isSheetView,
36
36
  }));
37
- function VirtualTable({ columns, rows, threshold = TABLE_THRESHOLD, showHeader, headerProps, rowProps, footerProps, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded = false, tableBodyStyles, tableMode, tableTitle, onStartDrag, isSheetView = false, isMinimized, footerComponent, customNoDataComponent, defaultSkeleton = false, }) {
37
+ function VirtualTable({ columns: inputColumns, rows, threshold = TABLE_THRESHOLD, showHeader, headerProps, rowProps, footerProps, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded = false, tableBodyStyles, tableMode, tableTitle, onStartDrag, isSheetView = false, isMinimized, footerComponent, customNoDataComponent, defaultSkeleton = false, }) {
38
38
  var _a;
39
39
  const theme = useTheme();
40
40
  const onPointerDown = (e) => {
@@ -58,8 +58,8 @@ function VirtualTable({ columns, rows, threshold = TABLE_THRESHOLD, showHeader,
58
58
  const tableEmpty = !isLoading && rows.length === 0;
59
59
  const hasTimeoutError = isTimeoutError(error);
60
60
  const lastItemIndex = rows.length - 1;
61
- const processedColumns = useMemo(() => getProcessedColumns(columns, isLoading !== null && isLoading !== void 0 ? isLoading : false, defaultSkeleton), [columns, isLoading, defaultSkeleton]);
62
- const shownColumns = useMemo(() => processedColumns.filter((column) => !column.hidden), [processedColumns]);
61
+ const columns = useMemo(() => getProcessedColumns(inputColumns, isLoading !== null && isLoading !== void 0 ? isLoading : false, defaultSkeleton), [inputColumns, isLoading, defaultSkeleton]);
62
+ const shownColumns = useMemo(() => columns.filter((column) => !column.hidden), [columns]);
63
63
  const orderedColumns = useMemo(() => shownColumns.sort((a, b) => { var _a, _b; return ((_a = a === null || a === void 0 ? void 0 : a.order) !== null && _a !== void 0 ? _a : 1000000) - ((_b = b === null || b === void 0 ? void 0 : b.order) !== null && _b !== void 0 ? _b : 1000000); }), [shownColumns]);
64
64
  const areTotalRowsNotFillingHeight = isHeightNotFullyFilledByRows(rows.length) && !tableLoading;
65
65
  const itemsCount = isDelayedFetchingNextPage || (areAllRowsLoaded && !areTotalRowsNotFillingHeight) ? rows.length + 1 : rows.length;
@@ -40,4 +40,12 @@ export interface ColumnViewProps {
40
40
  disabled?: boolean;
41
41
  sx?: SxProps<Theme>;
42
42
  menuSx?: SxProps<Theme>;
43
+ /** Table column order (date column should always be 1) */
44
+ order?: number;
45
+ /** Pinned position (date column should always be 'start') */
46
+ pinned?: 'start' | 'end';
47
+ /** Whether column is pinned by default (date column should always be true) */
48
+ isDefaultPinned?: boolean;
49
+ /** Whether column can be pinned (date column should always be true) */
50
+ pinnable?: boolean;
43
51
  }
@@ -1,4 +1,8 @@
1
1
  import type { IColumnProps } from '../types/index.js';
2
2
  export declare const DEFAULT_SKELETON_WIDTHS: string[];
3
3
  export declare const generateSkeletonColumns: (staticWidths?: string[]) => IColumnProps[];
4
+ /**
5
+ * Returns columns to display: when loading and defaultSkeleton is true, returns skeleton columns
6
+ * (with date column first so it shows skeleton); otherwise returns the given columns.
7
+ */
4
8
  export declare const getProcessedColumns: <T = unknown>(columns: readonly IColumnProps<T>[], isLoading: boolean, defaultSkeleton: boolean) => IColumnProps<T>[];
@@ -1,4 +1,16 @@
1
1
  export const DEFAULT_SKELETON_WIDTHS = ['120px', '180px', '100px', '150px', '200px', '140px', '160px', '110px', '190px', '130px'];
2
+ /** Date column config for skeleton so the date column shows skeleton like other columns */
3
+ const SKELETON_DATE_COLUMN = {
4
+ id: 'date',
5
+ header: '',
6
+ width: DEFAULT_SKELETON_WIDTHS[0],
7
+ order: 1,
8
+ pinned: 'start',
9
+ isDefaultPinned: true,
10
+ pinnable: true,
11
+ hidden: false,
12
+ sortable: false,
13
+ };
2
14
  export const generateSkeletonColumns = (staticWidths = DEFAULT_SKELETON_WIDTHS) => {
3
15
  return staticWidths.map((width, index) => ({
4
16
  id: `skeleton-col-${index}`,
@@ -9,9 +21,14 @@ export const generateSkeletonColumns = (staticWidths = DEFAULT_SKELETON_WIDTHS)
9
21
  sortable: false,
10
22
  }));
11
23
  };
24
+ /**
25
+ * Returns columns to display: when loading and defaultSkeleton is true, returns skeleton columns
26
+ * (with date column first so it shows skeleton); otherwise returns the given columns.
27
+ */
12
28
  export const getProcessedColumns = (columns, isLoading, defaultSkeleton) => {
13
29
  if (defaultSkeleton && isLoading) {
14
- return generateSkeletonColumns();
30
+ const restSkeleton = generateSkeletonColumns(DEFAULT_SKELETON_WIDTHS.slice(1)).map((col, i) => (Object.assign(Object.assign({}, col), { order: i + 2 })));
31
+ return [SKELETON_DATE_COLUMN, ...restSkeleton];
15
32
  }
16
33
  return [...columns];
17
34
  };
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@tap-payments/os-micro-frontend-shared",
3
3
  "description": "Shared components and utilities for Tap Payments micro frontends",
4
- "version": "0.1.373-test.2",
5
- "testVersion": 2,
4
+ "version": "0.1.373-test.3-test.4-test.5",
5
+ "testVersion": 5,
6
6
  "type": "module",
7
7
  "main": "build/index.js",
8
8
  "module": "build/index.js",