@archbase/components 3.0.0 → 3.0.3

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 (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +56 -0
  3. package/dist/buttons/ArchbaseActionButtons.d.ts +1 -1
  4. package/dist/charts/vis-timeline/ArchbaseVisTimeline.d.ts +1 -1
  5. package/dist/charts/vis-timeline/ArchbaseVisTimeline.types.d.ts +1 -1
  6. package/dist/charts/vis-timeline/utils/timelineOptions.d.ts +1 -1
  7. package/dist/datagrid/components/index.d.ts +2 -2
  8. package/dist/datagrid/components/pagination/grid-pagination.d.ts +1 -1
  9. package/dist/datagrid/components/toolbar/global-search-input.d.ts +1 -1
  10. package/dist/datagrid/components/toolbar/grid-toolbar.d.ts +1 -1
  11. package/dist/datagrid/hooks/use-grid-details-panel.d.ts +2 -2
  12. package/dist/datagrid/main/archbase-data-grid-pagination.d.ts +1 -1
  13. package/dist/datagrid/main/archbase-data-grid-toolbar.d.ts +1 -1
  14. package/dist/datagrid/main/archbase-data-grid-types.d.ts +28 -3
  15. package/dist/datagrid/main/archbase-data-grid-utils.d.ts +1 -1
  16. package/dist/datagrid/main/archbase-detail-panel-component.d.ts +1 -1
  17. package/dist/datagrid/main/archbase-expand-button.d.ts +1 -1
  18. package/dist/datagrid/main/archbase-grid-popover.d.ts +1 -1
  19. package/dist/datagrid/modals/print-data.d.ts +0 -1
  20. package/dist/editors/ArchbaseAsyncMultiSelect.d.ts +1 -1
  21. package/dist/editors/ArchbaseAsyncSelect.context.d.ts +1 -1
  22. package/dist/editors/ArchbaseAsyncSelect.d.ts +1 -5
  23. package/dist/editors/ArchbaseAvatarEdit.d.ts +2 -2
  24. package/dist/editors/ArchbaseCheckbox.d.ts +2 -3
  25. package/dist/editors/ArchbaseChip.d.ts +2 -3
  26. package/dist/editors/ArchbaseChipGroup.d.ts +1 -1
  27. package/dist/editors/ArchbaseDatePickerEdit.d.ts +3 -3
  28. package/dist/editors/ArchbaseDatePickerRange.d.ts +1 -2
  29. package/dist/editors/ArchbaseDateTimePickerEdit.d.ts +2 -3
  30. package/dist/editors/ArchbaseDateTimePickerRange.d.ts +2 -3
  31. package/dist/editors/ArchbaseEdit.d.ts +2 -7
  32. package/dist/editors/ArchbaseFileAttachment.d.ts +1 -1
  33. package/dist/editors/ArchbaseImageEdit.d.ts +2 -2
  34. package/dist/editors/ArchbaseJsonEdit.d.ts +2 -3
  35. package/dist/editors/ArchbaseLookupEdit.d.ts +2 -3
  36. package/dist/editors/ArchbaseLookupNumber.d.ts +2 -3
  37. package/dist/editors/ArchbaseMarkdownEdit.d.ts +1 -1
  38. package/dist/editors/ArchbaseMaskEdit.d.ts +3 -8
  39. package/dist/editors/ArchbaseNumberEdit.d.ts +1 -2
  40. package/dist/editors/ArchbasePasswordEdit.d.ts +2 -3
  41. package/dist/editors/ArchbaseRadioGroup.d.ts +2 -3
  42. package/dist/editors/ArchbaseRating.d.ts +1 -1
  43. package/dist/editors/ArchbaseRichTextEdit.d.ts +3 -3
  44. package/dist/editors/ArchbaseSelect.context.d.ts +1 -1
  45. package/dist/editors/ArchbaseSelect.d.ts +1 -1
  46. package/dist/editors/ArchbaseSwitch.d.ts +2 -3
  47. package/dist/editors/ArchbaseTextArea.d.ts +2 -3
  48. package/dist/editors/ArchbaseTimeEdit.d.ts +2 -3
  49. package/dist/editors/ArchbaseTimeRangeSelector.d.ts +1 -1
  50. package/dist/editors/ArchbaseTreeSelect.d.ts +1 -1
  51. package/dist/editors/index.d.ts +5 -5
  52. package/dist/filters/ArchbaseCompositeFilters.d.ts +1 -1
  53. package/dist/filters/ArchbaseCompositeFilters.types.d.ts +1 -1
  54. package/dist/filters/ArchbaseCompositeFilters.utils.d.ts +1 -1
  55. package/dist/filters/components/FilterPill.d.ts +1 -1
  56. package/dist/filters/hooks/useArchbaseFilterHistory.d.ts +1 -1
  57. package/dist/filters/hooks/useArchbaseFilterPresets.d.ts +1 -1
  58. package/dist/filters/hooks/useArchbaseFilters.d.ts +1 -1
  59. package/dist/filters/hooks/useArchbaseQuickFilters.d.ts +1 -1
  60. package/dist/hooks/useArchbaseListContext.d.ts +1 -1
  61. package/dist/hooks/useArchbaseNavigateParams.d.ts +2 -2
  62. package/dist/hooks/useArchbaseVisible.d.ts +1 -1
  63. package/dist/image/ArchbaseImage.d.ts +1 -1
  64. package/dist/image/editor/components/BasicFilters/BasicFilter.d.ts +1 -1
  65. package/dist/image/editor/components/CropprWrapper/ArchbaseCropperWrapper.d.ts +1 -2
  66. package/dist/image/editor/components/EditImage/ArchbaseEditImage.d.ts +1 -2
  67. package/dist/image/editor/components/Input/Input.d.ts +1 -1
  68. package/dist/image/editor/components/Tab/Tab.d.ts +1 -2
  69. package/dist/image/editor/functions/croppr/core.d.ts +1 -5
  70. package/dist/image/editor/functions/croppr/croppr.d.ts +1 -10
  71. package/dist/image/editor/functions/croppr/index.d.ts +1 -1
  72. package/dist/image/editor/index.d.ts +1 -2
  73. package/dist/index.d.ts +0 -3
  74. package/dist/index.js +5315 -5379
  75. package/dist/jsonschema/JsonSchemaEditor/ArchbaseJsonSchemaEditor.context.d.ts +1 -1
  76. package/dist/list/ArchbaseList.context.d.ts +1 -1
  77. package/dist/list/ArchbaseList.d.ts +1 -1
  78. package/dist/list/index.d.ts +1 -1
  79. package/dist/list/treeview/ArchbaseTreeView.d.ts +1 -1
  80. package/dist/list/treeview/ArchbaseTreeViewItem.d.ts +1 -1
  81. package/dist/list-view/ArchbaseListViewTable.d.ts +1 -1
  82. package/dist/markdown/ArchbaseMarkdown.d.ts +1 -1
  83. package/dist/markdown/ArchbaseMarkdown.types.d.ts +2 -2
  84. package/dist/markdown/components/CodeBlock.d.ts +2 -2
  85. package/dist/markdown/components/LinkRenderer.d.ts +1 -1
  86. package/dist/masonry/ArchbaseMasonry.context.d.ts +1 -1
  87. package/dist/masonry/ArchbaseMasonry.d.ts +1 -5
  88. package/dist/masonry/index.d.ts +1 -1
  89. package/dist/notification/ArchbaseAlert.d.ts +1 -5
  90. package/dist/onboarding/ArchbaseOnboardingTour.d.ts +1 -1
  91. package/dist/printer/ArchbaseThermalPrinter.d.ts +1 -1
  92. package/dist/printer/ArchbaseThermalPrinter.types.d.ts +1 -1
  93. package/dist/printer/utils/escpos.d.ts +1 -1
  94. package/dist/theme-editor/ArchbaseThemeEditor.d.ts +1 -1
  95. package/dist/theme-editor/ArchbaseThemeEditor.types.d.ts +2 -2
  96. package/dist/theme-editor/utils/themeExport.d.ts +2 -2
  97. package/dist/themes/ArchbaseThemeEditor.d.ts +2 -3
  98. package/dist/video/ArchbaseVideoPlayer.d.ts +1 -1
  99. package/dist/video/ArchbaseVideoPlayer.types.d.ts +1 -1
  100. package/dist/video/hooks/useVideoPlayer.d.ts +5 -5
  101. package/dist/viewers/ArchbasePDFViewer.annotations.d.ts +1 -1
  102. package/dist/viewers/ArchbasePDFViewer.d.ts +1 -1
  103. package/dist/viewers/ArchbasePDFViewer.toolbar.d.ts +1 -1
  104. package/dist/viewers/ArchbasePDFViewer.types.d.ts +2 -2
  105. package/dist/viewers/file-preview/ArchbaseFilePreviewer.d.ts +1 -1
  106. package/dist/viewers/file-preview/ArchbaseFilePreviewer.types.d.ts +1 -1
  107. package/dist/viewers/file-preview/utils/fileTypeDetector.d.ts +1 -1
  108. package/package.json +21 -21
  109. package/src/datagrid/main/archbase-data-grid-pagination.tsx +16 -5
  110. package/src/datagrid/main/archbase-data-grid-toolbar.tsx +15 -4
  111. package/src/datagrid/main/archbase-data-grid-types.tsx +32 -0
  112. package/src/datagrid/main/archbase-data-grid.tsx +64 -4
  113. package/src/index.ts +0 -1
  114. package/dist/archbase-components-3.0.0.tgz +0 -0
  115. package/dist/debug/index.d.ts +0 -4
  116. package/dist/debug/jsonpathpicker/ArchbaseJsonPathPicker.d.ts +0 -37
  117. package/dist/debug/jsonpathpicker/index.d.ts +0 -1
  118. package/dist/debug/jsonview/ArchbaseJsonViewDataRenderer.d.ts +0 -34
  119. package/dist/debug/jsonview/ArchbaseJsonViewDataTypeDetection.d.ts +0 -8
  120. package/dist/debug/jsonview/index.d.ts +0 -11
  121. package/dist/debug/objectinspector/ArchbaseDebugInspector.d.ts +0 -23
  122. package/dist/debug/objectinspector/ArchbaseFloatingWindow.d.ts +0 -24
  123. package/dist/debug/objectinspector/ArchbaseObjectInspector.d.ts +0 -6
  124. package/dist/debug/objectinspector/index.d.ts +0 -3
  125. package/dist/spreadsheet/ArchbaseSpreadsheetImport.d.ts +0 -4
  126. package/dist/spreadsheet/ArchbaseSpreadsheetImport.types.d.ts +0 -65
  127. package/dist/spreadsheet/index.d.ts +0 -2
  128. package/src/debug/jsonview/styles.module.css.d.ts +0 -4
  129. package/src/spreadsheet/ArchbaseSpreadsheetImport.tsx +0 -223
  130. package/src/spreadsheet/ArchbaseSpreadsheetImport.types.ts +0 -66
  131. package/src/spreadsheet/index.ts +0 -10
@@ -156,12 +156,14 @@ function ArchbaseDataGrid<T extends object = any, ID = any>(props: ArchbaseDataG
156
156
  csvOptions,
157
157
  toolbarAlignment = 'right',
158
158
  positionActionsColumn = 'first',
159
+ actionsColumnWidth = 60,
159
160
  toolbarLeftContent,
160
161
  columnAutoWidth = false,
161
162
  rowHeight = 52,
162
163
  paginationLabels,
163
164
  onExport,
164
165
  onPrint,
166
+ onFilterModelChange,
165
167
  showProgressBars = true,
166
168
  variant = 'filled',
167
169
  fontSize,
@@ -192,6 +194,11 @@ function ArchbaseDataGrid<T extends object = any, ID = any>(props: ArchbaseDataG
192
194
  activeFilters: externalActiveFilters,
193
195
  onFiltersChange: externalOnFiltersChange,
194
196
  hideMuiFilters = false,
197
+ // Props para controle de bordas internas
198
+ withToolbarBorder = true,
199
+ withPaginationBorder = true,
200
+ toolbarPadding,
201
+ paginationPadding,
195
202
  } = props
196
203
  const theme = useArchbaseTheme()
197
204
  const { colorScheme } = useMantineColorScheme();
@@ -567,6 +574,11 @@ function ArchbaseDataGrid<T extends object = any, ID = any>(props: ArchbaseDataG
567
574
  // Atualizar o estado do filtro primeiro
568
575
  setFilterModel(newFilterModel)
569
576
 
577
+ // Notificar callback externo (parent component) se fornecido
578
+ if (onFilterModelChange) {
579
+ onFilterModelChange(newFilterModel)
580
+ }
581
+
570
582
  // Certificar que estamos usando o valor mais recente
571
583
  console.log('[FILTER] Aplicando filtro:', newFilterModel)
572
584
 
@@ -727,15 +739,17 @@ function ArchbaseDataGrid<T extends object = any, ID = any>(props: ArchbaseDataG
727
739
  expandRow: (rowId: GridRowId) => expandDetailPanel(rowId),
728
740
  collapseRow: (rowId: GridRowId) => closeDetailPanel(rowId),
729
741
  collapseAllRows: closeAllDetailPanels,
730
- getExpandedRows: () => Array.from(expandedRowIds)
742
+ getExpandedRows: () => Array.from(expandedRowIds),
743
+ getFilterModel: () => filterModel
731
744
  }),
732
- [selectedRows, expandedRowIds, expandDetailPanel, closeDetailPanel, closeAllDetailPanels]
745
+ [selectedRows, expandedRowIds, expandDetailPanel, closeDetailPanel, closeAllDetailPanels, filterModel]
733
746
  )
734
747
 
735
748
  // Configurar estilos personalizados para o grid
736
749
  const getThemedStyles = () => {
737
750
  return {
738
751
  root: {
752
+ height: '100%', // Garante que o DataGrid ocupe toda a altura do container
739
753
  border: withBorder
740
754
  ? `1px solid ${theme.colors.gray[colorScheme === 'dark' ? 8 : 3]}`
741
755
  : '0',
@@ -743,6 +757,46 @@ function ArchbaseDataGrid<T extends object = any, ID = any>(props: ArchbaseDataG
743
757
  overflow: 'hidden', // Garante que o conteúdo respeite o border-radius
744
758
  backgroundColor: colorScheme === 'dark' ? theme.colors.dark[6] : theme.white,
745
759
  color: colorScheme === 'dark' ? theme.colors.gray[0] : theme.colors.dark[9],
760
+
761
+ // Scrollbar customizada do MUI DataGrid - estilo Mantine (mais fina e elegante)
762
+ '& .MuiDataGrid-scrollbar': {
763
+ '&.MuiDataGrid-scrollbar--horizontal': {
764
+ height: '8px !important',
765
+ },
766
+ '&.MuiDataGrid-scrollbar--vertical': {
767
+ width: '8px !important',
768
+ },
769
+ backgroundColor: colorScheme === 'dark' ? theme.colors.dark[6] : theme.colors.gray[1],
770
+ borderRadius: '4px',
771
+ '& .MuiDataGrid-scrollbarContent': {
772
+ borderRadius: '4px',
773
+ },
774
+ },
775
+
776
+ // Scrollbar nativa (fallback) - estilo Mantine
777
+ '& .MuiDataGrid-virtualScroller': {
778
+ '&::-webkit-scrollbar': {
779
+ width: '8px',
780
+ height: '8px',
781
+ },
782
+ '&::-webkit-scrollbar-track': {
783
+ backgroundColor: colorScheme === 'dark' ? theme.colors.dark[6] : theme.colors.gray[1],
784
+ borderRadius: '4px',
785
+ },
786
+ '&::-webkit-scrollbar-thumb': {
787
+ backgroundColor: colorScheme === 'dark' ? theme.colors.dark[3] : theme.colors.gray[4],
788
+ borderRadius: '4px',
789
+ '&:hover': {
790
+ backgroundColor: colorScheme === 'dark' ? theme.colors.dark[2] : theme.colors.gray[5],
791
+ },
792
+ },
793
+ // Firefox
794
+ scrollbarWidth: 'thin',
795
+ scrollbarColor: colorScheme === 'dark'
796
+ ? `${theme.colors.dark[3]} ${theme.colors.dark[6]}`
797
+ : `${theme.colors.gray[4]} ${theme.colors.gray[1]}`,
798
+ },
799
+
746
800
  fontSize:
747
801
  typeof fontSize === 'string' &&
748
802
  ['xs', 'sm', 'md', 'lg', 'xl'].includes(fontSize as string)
@@ -868,7 +922,7 @@ function ArchbaseDataGrid<T extends object = any, ID = any>(props: ArchbaseDataG
868
922
  type: 'string' as const,
869
923
  sortable: false,
870
924
  filterable: false,
871
- width: 120,
925
+ width: actionsColumnWidth,
872
926
  renderCell: (params) => renderRowActions(params.row as T)
873
927
  }
874
928
 
@@ -1368,6 +1422,9 @@ function ArchbaseDataGrid<T extends object = any, ID = any>(props: ArchbaseDataG
1368
1422
  activeFilters={activeFilters}
1369
1423
  onFiltersChange={handleCompositeFiltersChange}
1370
1424
  hideMuiFilters={hideMuiFilters}
1425
+ // Props para controle de bordas
1426
+ withBorder={withToolbarBorder}
1427
+ padding={toolbarPadding}
1371
1428
  />
1372
1429
  )}
1373
1430
 
@@ -1377,7 +1434,7 @@ function ArchbaseDataGrid<T extends object = any, ID = any>(props: ArchbaseDataG
1377
1434
  renderFixedDetailPanel()}
1378
1435
 
1379
1436
  {/* Grid sem toolbar interna */}
1380
- <Box style={{ flex: 1, overflow: 'hidden', position: 'relative' }}>
1437
+ <Box style={{ flex: 1, overflow: 'hidden', position: 'relative', minHeight: 0 }}>
1381
1438
  <DataGrid
1382
1439
  apiRef={apiRef}
1383
1440
  rows={rows}
@@ -1427,6 +1484,9 @@ function ArchbaseDataGrid<T extends object = any, ID = any>(props: ArchbaseDataG
1427
1484
  paginationLabels={paginationLabels}
1428
1485
  bottomToolbarMinHeight={bottomToolbarMinHeight}
1429
1486
  theme={theme}
1487
+ // Props para controle de bordas
1488
+ withBorder={withPaginationBorder}
1489
+ padding={paginationPadding}
1430
1490
  />:null}
1431
1491
 
1432
1492
  {/* Painéis de detalhes nos modos não-inline (modal/drawer) */}
package/src/index.ts CHANGED
@@ -15,7 +15,6 @@ export * from './masonry';
15
15
  export * from './notification';
16
16
  export * from './onboarding';
17
17
  export * from './viewers';
18
- export * from './spreadsheet';
19
18
  export * from './filters';
20
19
 
21
20
  // New Components
Binary file
@@ -1,4 +0,0 @@
1
- export { ArchbaseJsonView } from './jsonview/index';
2
- export { ArchbaseJsonPathPicker } from './jsonpathpicker';
3
- export { ArchbaseObjectInspector, ArchbaseDebugInspector } from './objectinspector';
4
- export type { ArchbaseObjectToInspect } from './objectinspector';
@@ -1,37 +0,0 @@
1
- import { Component } from 'react';
2
- import './ArchbaseJsonPathPicker.css';
3
- export interface ArchbaseJsonPathPickerOptions {
4
- outputCollapsed: boolean;
5
- outputWithQuotes: boolean;
6
- pathNotation: string;
7
- pathQuotesType: string;
8
- processKeys: boolean;
9
- keyReplaceRegexPattern: string | undefined;
10
- keyReplaceRegexFlags: string | undefined;
11
- keyReplacementText: string;
12
- pickerIcon: string;
13
- withoutPicker: boolean;
14
- }
15
- export interface ArchbaseJsonPathPickerProps {
16
- data: any;
17
- onSelect: (path: string) => void;
18
- options?: ArchbaseJsonPathPickerOptions;
19
- }
20
- export declare class ArchbaseJsonPathPicker extends Component<ArchbaseJsonPathPickerProps> {
21
- static defaultProps: {
22
- options: ArchbaseJsonPathPickerOptions;
23
- };
24
- private pickerRef;
25
- private destRef;
26
- private jsonPathPickerInstance;
27
- constructor(props: ArchbaseJsonPathPickerProps);
28
- json2jsx: (json: any, options: any) => import("react/jsx-runtime").JSX.Element | "[]" | "{}";
29
- handlerEventToggle: (elm: any, event: any) => void;
30
- toggleEventListener: (event: any) => void;
31
- simulateClickHandler: (elm: any, event: any) => void;
32
- simulateClickEventListener: (event: any) => void;
33
- pickPathHandler: (elm: any) => void;
34
- pickEventListener: (event: any) => void;
35
- componentDidMount(): void;
36
- render(): import("react/jsx-runtime").JSX.Element;
37
- }
@@ -1 +0,0 @@
1
- export { ArchbaseJsonPathPicker } from './ArchbaseJsonPathPicker';
@@ -1,34 +0,0 @@
1
- export interface StyleProps {
2
- container: string;
3
- basicChildStyle: string;
4
- expander: string;
5
- label: string;
6
- nullValue: string;
7
- undefinedValue: string;
8
- numberValue: string;
9
- stringValue: string;
10
- booleanValue: string;
11
- otherValue: string;
12
- punctuation: string;
13
- pointer: string;
14
- }
15
- export interface JsonRenderProps<T> {
16
- field?: string;
17
- value: T;
18
- lastElement: boolean;
19
- level: number;
20
- style: StyleProps;
21
- shouldInitiallyExpand: (level: number, value: any, field?: string) => boolean;
22
- }
23
- export interface ExpandableRenderProps {
24
- field?: string;
25
- value: Array<any> | object;
26
- data: Array<[string | undefined, any]>;
27
- openBracket: string;
28
- closeBracket: string;
29
- lastElement: boolean;
30
- level: number;
31
- style: StyleProps;
32
- shouldInitiallyExpand: (level: number, value: any, field?: string) => boolean;
33
- }
34
- export default function ArchbaseJsonViewDataRender(props: JsonRenderProps<any>): import("react/jsx-runtime").JSX.Element;
@@ -1,8 +0,0 @@
1
- export declare const isBoolean: (data: any) => data is boolean | Boolean;
2
- export declare const isNumber: (data: any) => data is number | Number;
3
- export declare const isBigInt: (data: any) => data is bigint | BigInt;
4
- export declare const isString: (data: any) => data is string | String;
5
- export declare const isArray: (data: any) => data is any[];
6
- export declare const isObject: (data: any) => boolean;
7
- export declare const isNull: (data: any) => boolean;
8
- export declare const isUndefined: (data: any) => boolean;
@@ -1,11 +0,0 @@
1
- import { StyleProps } from './ArchbaseJsonViewDataRenderer';
2
- export interface ArchbaseJsonViewProps {
3
- data: NonNullable<unknown> | Array<any>;
4
- style?: StyleProps;
5
- shouldInitiallyExpand?: (level: number, value: any, field?: string) => boolean;
6
- }
7
- export declare const defaultStyles: StyleProps;
8
- export declare const darkStyles: StyleProps;
9
- export declare const allExpanded: () => boolean;
10
- export declare const collapseAllNested: (level: number) => boolean;
11
- export declare const ArchbaseJsonView: ({ data, style, shouldInitiallyExpand, }: ArchbaseJsonViewProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,23 +0,0 @@
1
- export interface ArchbaseDebugInspectorProps {
2
- /** Título a ser exibido */
3
- title?: string;
4
- /** Título a ser exibido*/
5
- icon?: string | HTMLImageElement;
6
- /** Comando para abrir e fechar o Object Inspector */
7
- debugObjectInspectorHotKey?: string;
8
- /** Lista de objetos a serem inspecionados */
9
- objectsToInspect?: ArchbaseObjectToInspect[];
10
- /** Indica se o Object Inspector será visível inicialmente ou não */
11
- visible?: boolean;
12
- /** Altura inicial do Object Inspector */
13
- height?: number;
14
- /** Largura inicial do Object Inspector */
15
- width?: number;
16
- }
17
- export interface ArchbaseObjectToInspect {
18
- /**Nome do objeto a ser inspecionado*/
19
- name: string;
20
- /**Objeto a ser inspecionado*/
21
- object: NonNullable<unknown>;
22
- }
23
- export declare function ArchbaseDebugInspector({ title, icon, debugObjectInspectorHotKey, objectsToInspect, visible, height, width, }: ArchbaseDebugInspectorProps): import("react/jsx-runtime").JSX.Element;
@@ -1,24 +0,0 @@
1
- import React from 'react';
2
- import './ArchbaseFloatingWindow.css';
3
- export interface ArchbaseFloatingWindowProps {
4
- id: string;
5
- children?: any;
6
- height: number;
7
- width: number;
8
- top?: number;
9
- left?: number;
10
- resizable?: boolean;
11
- titleBar?: {
12
- icon?: string | HTMLImageElement;
13
- title?: string;
14
- buttons?: {
15
- minimize?: boolean;
16
- maximize?: boolean;
17
- close?: () => void;
18
- };
19
- };
20
- style?: React.CSSProperties;
21
- /** Referência para o container que envolve o componente filho */
22
- innerRef?: React.RefObject<HTMLInputElement> | undefined;
23
- }
24
- export declare const ArchbaseFloatingWindow: React.FC<ArchbaseFloatingWindowProps>;
@@ -1,6 +0,0 @@
1
- export interface ArchbaseObjectInspectorProps {
2
- /** Objeto a ser exibido */
3
- data: any;
4
- expandLevel?: number;
5
- }
6
- export declare function ArchbaseObjectInspector({ data, expandLevel }: ArchbaseObjectInspectorProps): import("react/jsx-runtime").JSX.Element;
@@ -1,3 +0,0 @@
1
- export { ArchbaseDebugInspector } from './ArchbaseDebugInspector';
2
- export { ArchbaseObjectInspector } from './ArchbaseObjectInspector';
3
- export type { ArchbaseObjectToInspect } from './ArchbaseDebugInspector';
@@ -1,4 +0,0 @@
1
- import type { ArchbaseSpreadsheetImportProps } from './ArchbaseSpreadsheetImport.types';
2
- export declare function ArchbaseSpreadsheetImport<T = any>({ dataSource, onDataLoaded, onRowAdded, fields, isOpen, onClose, title, description, allowedFileTypes, maxFileSize, // 10MB
3
- maxRows, customHeaderComponent, customButtonComponent, translations, style, className, disabled, initialData, mapRows, validationCallback, }: ArchbaseSpreadsheetImportProps<T>): import("react/jsx-runtime").JSX.Element;
4
- export type { ArchbaseSpreadsheetImportProps, SpreadsheetField, SpreadsheetRow, SpreadsheetFileType, } from './ArchbaseSpreadsheetImport.types';
@@ -1,65 +0,0 @@
1
- import type { CSSProperties, ReactNode } from 'react';
2
- import type { IArchbaseDataSourceBase } from '@archbase/data';
3
- export type SpreadsheetFileType = 'csv' | 'xlsx' | 'xls' | 'all';
4
- export interface SpreadsheetField {
5
- key: string;
6
- label: string;
7
- required?: boolean;
8
- fieldType?: 'text' | 'number' | 'date' | 'email' | 'boolean' | 'select';
9
- options?: string[];
10
- validations?: {
11
- min?: number;
12
- max?: number;
13
- pattern?: string;
14
- custom?: (value: any) => boolean | string;
15
- };
16
- }
17
- export interface SpreadsheetRow {
18
- [key: string]: any;
19
- }
20
- export interface ArchbaseSpreadsheetImportProps<T = any> {
21
- dataSource?: IArchbaseDataSourceBase<T>;
22
- onDataLoaded?: (data: T[]) => void;
23
- onRowAdded?: (row: T) => void;
24
- fields?: SpreadsheetField[];
25
- isOpen?: boolean;
26
- onClose?: () => void;
27
- title?: string;
28
- description?: string;
29
- allowedFileTypes?: SpreadsheetFileType[];
30
- maxFileSize?: number;
31
- maxRows?: number;
32
- customHeaderComponent?: ReactNode;
33
- customButtonComponent?: ReactNode;
34
- translations?: {
35
- uploadStep?: string;
36
- selectFile?: string;
37
- dragDrop?: string;
38
- supportedFormats?: string;
39
- reviewStep?: string;
40
- reviewDescription?: string;
41
- confirmStep?: string;
42
- confirmDescription?: string;
43
- successStep?: string;
44
- successDescription?: string;
45
- uploadButton?: string;
46
- nextButton?: string;
47
- backButton?: string;
48
- confirmButton?: string;
49
- doneButton?: string;
50
- closeButton?: string;
51
- invalidRow?: string;
52
- requiredField?: string;
53
- rowsAdded?: string;
54
- rowsSkipped?: string;
55
- };
56
- style?: CSSProperties;
57
- className?: string;
58
- disabled?: boolean;
59
- initialData?: SpreadsheetRow[];
60
- mapRows?: (rows: SpreadsheetRow[]) => T[];
61
- validationCallback?: (row: SpreadsheetRow, index: number) => {
62
- valid: boolean;
63
- errors?: string[];
64
- };
65
- }
@@ -1,2 +0,0 @@
1
- export { ArchbaseSpreadsheetImport, } from './ArchbaseSpreadsheetImport';
2
- export type { ArchbaseSpreadsheetImportProps, SpreadsheetField, SpreadsheetRow, SpreadsheetFileType, } from './ArchbaseSpreadsheetImport.types';
@@ -1,4 +0,0 @@
1
- declare const styles: {
2
- readonly [key: string]: string;
3
- };
4
- export default styles;
@@ -1,223 +0,0 @@
1
- import React, { useState, useCallback, useMemo } from 'react';
2
- import { Modal, Button, Group, Text, Stack, Paper, Progress, Alert } from '@mantine/core';
3
- import { useArchbaseTranslation } from '@archbase/core';
4
- import { ReactSpreadsheetImport } from 'react-spreadsheet-import';
5
- import type {
6
- ArchbaseSpreadsheetImportProps,
7
- SpreadsheetField,
8
- SpreadsheetRow,
9
- } from './ArchbaseSpreadsheetImport.types';
10
-
11
- type RsiField = {
12
- label: string;
13
- key: string;
14
- description?: string;
15
- alternateMatches?: string[];
16
- validations?: any[];
17
- fieldType: { type: 'input' } | { type: 'checkbox'; booleanMatches?: { [key: string]: boolean } } | { type: 'select'; options: { label: string; value: string }[] };
18
- example?: string;
19
- };
20
-
21
- function convertFieldToRsi(field: SpreadsheetField): RsiField {
22
- const baseField: RsiField = {
23
- label: field.label,
24
- key: field.key,
25
- fieldType: { type: 'input' },
26
- };
27
-
28
- if (field.fieldType === 'boolean') {
29
- baseField.fieldType = { type: 'checkbox' };
30
- } else if (field.fieldType === 'select' && field.options) {
31
- baseField.fieldType = {
32
- type: 'select',
33
- options: field.options.map((opt) => ({ label: opt, value: opt })),
34
- };
35
- }
36
-
37
- // Add validations
38
- if (field.validations) {
39
- baseField.validations = [];
40
-
41
- if (field.validations.pattern) {
42
- baseField.validations!.push({
43
- rule: 'regex',
44
- value: field.validations.pattern,
45
- errorMessage: 'Invalid format',
46
- });
47
- }
48
- }
49
-
50
- return baseField;
51
- }
52
-
53
- export function ArchbaseSpreadsheetImport<T = any>({
54
- dataSource,
55
- onDataLoaded,
56
- onRowAdded,
57
- fields,
58
- isOpen = true,
59
- onClose,
60
- title,
61
- description,
62
- allowedFileTypes = ['csv', 'xlsx', 'xls'],
63
- maxFileSize = 10 * 1024 * 1024, // 10MB
64
- maxRows = 1000,
65
- customHeaderComponent,
66
- customButtonComponent,
67
- translations,
68
- style,
69
- className,
70
- disabled = false,
71
- initialData,
72
- mapRows,
73
- validationCallback,
74
- }: ArchbaseSpreadsheetImportProps<T>) {
75
- const { t } = useArchbaseTranslation();
76
- const [isOpenState, setIsOpenState] = useState(isOpen);
77
- const [step, setStep] = useState<'upload' | 'review' | 'complete'>('upload');
78
- const [isProcessing, setIsProcessing] = useState(false);
79
- const [errors, setErrors] = useState<string[]>([]);
80
- const [resultData, setResultData] = useState<{ validCount: number; invalidCount: number } | null>(null);
81
-
82
- const rsiFields = useMemo(() => {
83
- if (!fields) return undefined;
84
-
85
- return fields.map(convertFieldToRsi) as RsiField[];
86
- }, [fields]);
87
-
88
- const defaultFields = useMemo<RsiField[]>(() => {
89
- if (rsiFields) return rsiFields;
90
-
91
- return [
92
- { label: 'Column 1', key: 'column1', fieldType: { type: 'input' }, validations: [{ rule: 'required' }] },
93
- { label: 'Column 2', key: 'column2', fieldType: { type: 'input' } },
94
- { label: 'Column 3', key: 'column3', fieldType: { type: 'input' } },
95
- ];
96
- }, [rsiFields]);
97
-
98
- const rsiTranslations = useMemo(() => ({
99
- uploadStep: {
100
- title: translations?.uploadStep || String(t('Import Spreadsheet')),
101
- description: translations?.dragDrop || String(t('Drag and drop your file here')),
102
- fileFormatError: translations?.supportedFormats || String(t('Supported formats: CSV, XLSX, XLS')),
103
- maxSizeError: `File size exceeds ${maxFileSize} bytes`,
104
- },
105
- selectHeaderStep: {
106
- title: String(t('Select File')),
107
- description: String(t('Upload File')),
108
- },
109
- matchColumnsStep: {
110
- title: translations?.reviewStep || String(t('Review Data')),
111
- description: translations?.reviewDescription || String(t('Review and edit your data before importing')),
112
- },
113
- validationStep: {
114
- title: translations?.confirmStep || String(t('Confirm Import')),
115
- description: translations?.confirmDescription || String(t('Confirm the data to be imported')),
116
- },
117
- }), [translations, t, maxFileSize]);
118
-
119
- const handleClose = useCallback(() => {
120
- setIsOpenState(false);
121
- setStep('upload');
122
- setResultData(null);
123
- setErrors([]);
124
- onClose?.();
125
- }, [onClose]);
126
-
127
- const handleSubmit = useCallback(async (data: any, file: File) => {
128
- setIsProcessing(true);
129
- setStep('complete');
130
-
131
- try {
132
- // Combine valid and invalid data
133
- const allData = [...data.validData, ...data.invalidData];
134
-
135
- // Map rows if mapper provided
136
- const mappedData = mapRows ? mapRows(allData as SpreadsheetRow[]) : (allData as unknown[] as T[]);
137
-
138
- // Add to data source if provided
139
- if (dataSource && mappedData.length > 0) {
140
- for (const row of mappedData) {
141
- onRowAdded?.(row);
142
- }
143
- }
144
-
145
- // Set result data
146
- setResultData({
147
- validCount: data.validData.length,
148
- invalidCount: data.invalidData.length,
149
- });
150
-
151
- // Callback with loaded data
152
- onDataLoaded?.(mappedData);
153
-
154
- setIsProcessing(false);
155
- } catch (error) {
156
- setErrors([String(error)]);
157
- setIsProcessing(false);
158
- }
159
- }, [mapRows, dataSource, onRowAdded, onDataLoaded]);
160
-
161
- const controlledIsOpen = isOpen !== undefined ? isOpen : isOpenState;
162
-
163
- return (
164
- <Modal
165
- opened={controlledIsOpen}
166
- onClose={handleClose}
167
- size={step === 'complete' ? 'md' : 'xl'}
168
- title={title || String(t('Import Spreadsheet'))}
169
- style={style}
170
- className={className}
171
- >
172
- <Stack gap="md">
173
- {description && <Text size="sm">{description}</Text>}
174
-
175
- {errors.length > 0 && (
176
- <Alert color="red" title={String(t('Error'))}>
177
- {errors.map((error, i) => (
178
- <Text key={i} size="sm">{error}</Text>
179
- ))}
180
- </Alert>
181
- )}
182
-
183
- {isProcessing && (
184
- <Progress value={undefined} size="sm" />
185
- )}
186
-
187
- {step === 'complete' && resultData ? (
188
- <Stack align="center" gap="md">
189
- <Text size="lg" fw={500}>
190
- {resultData.validCount} {String(t('rows imported'))}
191
- </Text>
192
- {resultData.invalidCount > 0 && (
193
- <Text size="sm" c="orange">
194
- {resultData.invalidCount} {String(t('rows skipped'))}
195
- </Text>
196
- )}
197
- <Button onClick={handleClose}>
198
- {translations?.closeButton || String(t('Close'))}
199
- </Button>
200
- </Stack>
201
- ) : (
202
- <ReactSpreadsheetImport
203
- isOpen={controlledIsOpen}
204
- onClose={handleClose}
205
- onSubmit={handleSubmit}
206
- fields={defaultFields}
207
- translations={rsiTranslations}
208
- maxRecords={maxRows}
209
- maxFileSize={maxFileSize}
210
- />
211
- )}
212
- </Stack>
213
- </Modal>
214
- );
215
- }
216
-
217
- // Export types
218
- export type {
219
- ArchbaseSpreadsheetImportProps,
220
- SpreadsheetField,
221
- SpreadsheetRow,
222
- SpreadsheetFileType,
223
- } from './ArchbaseSpreadsheetImport.types';