@devcabs/folio-engine 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/App.d.ts +7 -0
- package/dist/components/canvas/CanvasAddBar.d.ts +28 -0
- package/dist/components/canvas/CanvasAddModal.d.ts +38 -0
- package/dist/components/canvas/CanvasChart.d.ts +23 -0
- package/dist/components/canvas/CanvasDeleteConfirmModal.d.ts +21 -0
- package/dist/components/canvas/CanvasGallery.d.ts +20 -0
- package/dist/components/canvas/CanvasItemControls.d.ts +33 -0
- package/dist/components/canvas/CanvasPhoto.d.ts +28 -0
- package/dist/components/canvas/CanvasSection.d.ts +27 -0
- package/dist/components/canvas/CanvasSubsection.d.ts +23 -0
- package/dist/components/canvas/CanvasText.d.ts +23 -0
- package/dist/components/canvas/DocumentCanvas.d.ts +20 -0
- package/dist/components/canvas/HeroPhoto.d.ts +17 -0
- package/dist/components/canvas/NodeCanvas.d.ts +2 -0
- package/dist/components/canvas/index.d.ts +17 -0
- package/dist/components/chart/BarChart.d.ts +23 -0
- package/dist/components/chart/ChartCard.d.ts +33 -0
- package/dist/components/chart/ChartConfigDrawer.d.ts +16 -0
- package/dist/components/chart/ChartGhostWireframe.d.ts +16 -0
- package/dist/components/chart/ChartLegend.d.ts +14 -0
- package/dist/components/chart/ChartRouter.d.ts +8 -0
- package/dist/components/chart/ChartSortingControls.d.ts +15 -0
- package/dist/components/chart/ChartTableModal.d.ts +26 -0
- package/dist/components/chart/ChartTooltip.d.ts +12 -0
- package/dist/components/chart/DataPendingCard.d.ts +28 -0
- package/dist/components/chart/DonutChart.d.ts +16 -0
- package/dist/components/chart/HistogramChart.d.ts +23 -0
- package/dist/components/chart/LineChart.d.ts +22 -0
- package/dist/components/chart/RangePreviewMatrix.d.ts +19 -0
- package/dist/components/chart/ScatterPlot.d.ts +21 -0
- package/dist/components/chart/drawer/controls/BarVisualControls.d.ts +9 -0
- package/dist/components/chart/drawer/controls/ChartTitlesSection.d.ts +15 -0
- package/dist/components/chart/drawer/controls/DonutVisualControls.d.ts +7 -0
- package/dist/components/chart/drawer/controls/HistogramVisualControls.d.ts +13 -0
- package/dist/components/chart/drawer/controls/LineVisualControls.d.ts +14 -0
- package/dist/components/chart/drawer/controls/ScatterDataControls.d.ts +17 -0
- package/dist/components/chart/drawer/controls/ScatterVisualControls.d.ts +23 -0
- package/dist/components/chart/drawer/controls/SortingAndOrderControls.d.ts +18 -0
- package/dist/components/chart/drawer/controls/StandardDataControls.d.ts +31 -0
- package/dist/components/chart/drawer/hooks/useChartConfigForm.d.ts +156 -0
- package/dist/components/chart/drawer/hooks/useLiveMatrixSync.d.ts +21 -0
- package/dist/components/chart/drawer/hooks/useSheetVerification.d.ts +26 -0
- package/dist/components/chart/drawer/index.d.ts +17 -0
- package/dist/components/chart/drawer/panels/Step1Source.d.ts +18 -0
- package/dist/components/chart/drawer/panels/Step1SourceRange.d.ts +32 -0
- package/dist/components/chart/drawer/panels/Step2DataRange.d.ts +15 -0
- package/dist/components/chart/drawer/panels/Step3ChartSetup.d.ts +17 -0
- package/dist/components/chart/drawer/panels/Step4Review.d.ts +11 -0
- package/dist/components/chart/index.d.ts +22 -0
- package/dist/components/dev/DevActionAffordance.d.ts +4 -0
- package/dist/components/dev/DevExitConfirmModal.d.ts +14 -0
- package/dist/components/dev/DevLockBlockedModal.d.ts +3 -0
- package/dist/components/dev/DevModeBadge.d.ts +3 -0
- package/dist/components/dev/DevPinModal.d.ts +3 -0
- package/dist/components/dev/DevPublishModal.d.ts +9 -0
- package/dist/components/dev/UniversalEditModal.d.ts +40 -0
- package/dist/components/dev/index.d.ts +8 -0
- package/dist/components/feedback/EmptyState.d.ts +13 -0
- package/dist/components/feedback/PageNotFound.d.ts +15 -0
- package/dist/components/feedback/Toast.d.ts +25 -0
- package/dist/components/feedback/index.d.ts +2 -0
- package/dist/components/history/HistoryHubModal.d.ts +44 -0
- package/dist/components/history/index.d.ts +1 -0
- package/dist/components/layout/AppFooter.d.ts +10 -0
- package/dist/components/layout/AppHeader.d.ts +21 -0
- package/dist/components/layout/EditorialSection.d.ts +27 -0
- package/dist/components/layout/EditorialSidebar.d.ts +34 -0
- package/dist/components/layout/HeroSection.d.ts +2 -0
- package/dist/components/layout/HeroWelcome.d.ts +11 -0
- package/dist/components/layout/SearchField.d.ts +9 -0
- package/dist/components/layout/StatusPill.d.ts +2 -0
- package/dist/components/layout/index.d.ts +8 -0
- package/dist/components/roadmap/RoadmapNode.d.ts +30 -0
- package/dist/components/roadmap/RoadmapSection.d.ts +27 -0
- package/dist/components/roadmap/RoadmapTrack.d.ts +25 -0
- package/dist/components/roadmap/serpentine-generator.d.ts +60 -0
- package/dist/components/roadmap/use-roadmap-scroll.d.ts +19 -0
- package/dist/components/source/EditPhotoModal.d.ts +22 -0
- package/dist/components/source/LightboxPhotoStrip.d.ts +23 -0
- package/dist/components/source/LinkFolderModal.d.ts +24 -0
- package/dist/components/source/SourceCard.d.ts +31 -0
- package/dist/components/source/SourceFolderAttachment.d.ts +25 -0
- package/dist/components/source/SourceGallery.d.ts +26 -0
- package/dist/components/source/SourceImage.d.ts +26 -0
- package/dist/components/source/SourceLightbox.d.ts +28 -0
- package/dist/components/source/index.d.ts +9 -0
- package/dist/components/ui/AccordionSection.d.ts +21 -0
- package/dist/components/ui/Breadcrumb.d.ts +29 -0
- package/dist/components/ui/Button.d.ts +31 -0
- package/dist/components/ui/ColumnSelect.d.ts +17 -0
- package/dist/components/ui/ColumnTypeBadge.d.ts +6 -0
- package/dist/components/ui/DevHelpTooltip.d.ts +11 -0
- package/dist/components/ui/DraggableRows.d.ts +21 -0
- package/dist/components/ui/Drawer.d.ts +50 -0
- package/dist/components/ui/DrawerTier.d.ts +8 -0
- package/dist/components/ui/EditableText.d.ts +48 -0
- package/dist/components/ui/FAB.d.ts +24 -0
- package/dist/components/ui/Modal.d.ts +24 -0
- package/dist/components/ui/PageTitle.d.ts +33 -0
- package/dist/components/ui/ParametricShape.d.ts +57 -0
- package/dist/components/ui/RevolvingButton.d.ts +5 -0
- package/dist/components/ui/SectionTitle.d.ts +42 -0
- package/dist/components/ui/SeriesSelectToolbar.d.ts +10 -0
- package/dist/components/ui/StatusPill.d.ts +21 -0
- package/dist/components/ui/TieredSlider.d.ts +19 -0
- package/dist/components/ui/Toast.d.ts +1 -0
- package/dist/components/ui/ValueLabelToggle.d.ts +10 -0
- package/dist/components/ui/index.d.ts +21 -0
- package/dist/config/engine.config.d.ts +31 -0
- package/dist/context/DeveloperModeContext.d.ts +11 -0
- package/dist/context/UndoRedoContext.d.ts +20 -0
- package/dist/folio.js +24996 -0
- package/dist/folio.umd.cjs +42 -0
- package/dist/hooks/use-auto-toc.d.ts +31 -0
- package/dist/hooks/use-discrete-step-navigation.d.ts +26 -0
- package/dist/hooks/use-dynamic-section-numbers.d.ts +30 -0
- package/dist/hooks/use-hash-route.d.ts +36 -0
- package/dist/hooks/use-scroll.d.ts +22 -0
- package/dist/hooks/use-scrollspy.d.ts +19 -0
- package/dist/hooks/useChartTooltip.d.ts +25 -0
- package/dist/hooks/useContent.d.ts +36 -0
- package/dist/hooks/useDeveloperMode.d.ts +1 -0
- package/dist/hooks/useDocumentCanvas.d.ts +53 -0
- package/dist/hooks/useDrivePhotoSync.d.ts +15 -0
- package/dist/hooks/useImageLoader.d.ts +12 -0
- package/dist/hooks/useLightboxHistory.d.ts +14 -0
- package/dist/hooks/useNodeCanvas.d.ts +2 -0
- package/dist/hooks/useSheetChartData.d.ts +30 -0
- package/dist/hooks/useSourcePoint.d.ts +35 -0
- package/dist/hooks/useSwipeGesture.d.ts +30 -0
- package/dist/hooks/useUndoRedo.d.ts +9 -0
- package/dist/hooks/useUnsavedChangesPrompt.d.ts +18 -0
- package/dist/index.d.ts +52 -0
- package/dist/main.d.ts +1 -0
- package/dist/services/canvasLayoutService.d.ts +158 -0
- package/dist/services/chartSourceService.d.ts +128 -0
- package/dist/services/devLockService.d.ts +76 -0
- package/dist/services/draftService.d.ts +129 -0
- package/dist/services/drivePhotoSyncService.d.ts +60 -0
- package/dist/services/driveVerificationService.d.ts +41 -0
- package/dist/services/edgePreBakeService.d.ts +81 -0
- package/dist/services/historyService.d.ts +215 -0
- package/dist/services/historyStorage.d.ts +17 -0
- package/dist/services/mediaService.d.ts +25 -0
- package/dist/services/sheetsDataService.d.ts +59 -0
- package/dist/services/sheetsVerificationService.d.ts +87 -0
- package/dist/services/sourceService.d.ts +43 -0
- package/dist/services/undoRedoService.d.ts +63 -0
- package/dist/services/unsavedChangesService.d.ts +32 -0
- package/dist/style.css +1 -0
- package/dist/types/canvas.d.ts +115 -0
- package/dist/types/chart.d.ts +117 -0
- package/dist/types/developer.d.ts +144 -0
- package/dist/types/draft.d.ts +21 -0
- package/dist/types/edge.d.ts +232 -0
- package/dist/types/history.d.ts +81 -0
- package/dist/types/media.d.ts +16 -0
- package/dist/types/navigation.d.ts +19 -0
- package/dist/types/node.d.ts +51 -0
- package/dist/types/source.d.ts +88 -0
- package/dist/utils/canvasDefaults.d.ts +43 -0
- package/dist/utils/chartColors.d.ts +48 -0
- package/dist/utils/chartDimensions.d.ts +50 -0
- package/dist/utils/chartMath.d.ts +142 -0
- package/dist/utils/chartSanitizer.d.ts +84 -0
- package/dist/utils/contentDb.d.ts +86 -0
- package/dist/utils/devSecurity.d.ts +84 -0
- package/dist/utils/mediaUrl.d.ts +32 -0
- package/dist/utils/modalActions.d.ts +32 -0
- package/dist/utils/node-sections.d.ts +15 -0
- package/dist/utils/page-sections.d.ts +1 -0
- package/dist/utils/runtime-env.d.ts +21 -0
- package/dist/utils/scrollLock.d.ts +10 -0
- package/dist/utils/smooth-scroll.d.ts +24 -0
- package/dist/utils/source.d.ts +25 -0
- package/dist/utils/storage.d.ts +13 -0
- package/dist/utils/supabase-config.d.ts +29 -0
- package/dist/utils/supabase-write-guard.d.ts +15 -0
- package/package.json +56 -4
- package/README.md +0 -3
package/dist/App.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { CanvasElementType } from '../../types/canvas';
|
|
3
|
+
export interface CanvasAddBarProps {
|
|
4
|
+
onAddElement: (type: CanvasElementType) => void;
|
|
5
|
+
isInitialStarter?: boolean;
|
|
6
|
+
accentColor?: string;
|
|
7
|
+
className?: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
barId?: string;
|
|
10
|
+
activeBarId?: string | null;
|
|
11
|
+
onToggleActive?: (barId: string, isOpen: boolean) => void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* CanvasAddBar Component
|
|
15
|
+
* Folio Engine — Task 8.9: Coordinated Insertion Bar with Viewport-Aware Submenu
|
|
16
|
+
*
|
|
17
|
+
* Interactive authoring trigger for coordinators in Developer Mode:
|
|
18
|
+
* - When Developer Mode is OFF: Returns null (completely invisible to public visitors)
|
|
19
|
+
* - Initial Starter Mode: Renders an inviting prompt box to add the first section
|
|
20
|
+
* - Between-Element Mode: Gutter that dynamically reveals a subtle accent guide line
|
|
21
|
+
* and centered "+ Add Element" pill button on hover
|
|
22
|
+
* - 5-Item Palette Popover: Section, Subsection, Text, Photo, Chart (parenthesis-free)
|
|
23
|
+
* - Photo Sub-Menu: Single Photo vs Photo Gallery with viewport detection (dropup vs dropdown)
|
|
24
|
+
* - Coordinated active state suppressing sibling hovers and duplicate menus
|
|
25
|
+
* - Adheres strictly to Universal Zero Outline Policy and design tokens
|
|
26
|
+
*/
|
|
27
|
+
export declare const CanvasAddBar: React.FC<CanvasAddBarProps>;
|
|
28
|
+
export default CanvasAddBar;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { CanvasElementType } from '../../types/canvas';
|
|
3
|
+
export type AddModalElementType = CanvasElementType | 'gallery';
|
|
4
|
+
export interface CanvasAddElementPayload {
|
|
5
|
+
title?: string;
|
|
6
|
+
isNumbered?: boolean;
|
|
7
|
+
content?: string;
|
|
8
|
+
as?: 'p' | 'blockquote';
|
|
9
|
+
src?: string;
|
|
10
|
+
alt?: string;
|
|
11
|
+
caption?: string;
|
|
12
|
+
showCaption?: boolean;
|
|
13
|
+
driveUrl?: string;
|
|
14
|
+
subtitle?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface CanvasAddModalProps {
|
|
17
|
+
isOpen: boolean;
|
|
18
|
+
type: AddModalElementType | null;
|
|
19
|
+
nodeId: string;
|
|
20
|
+
targetSectionId?: string;
|
|
21
|
+
targetIndex?: number;
|
|
22
|
+
targetSubsectionId?: string;
|
|
23
|
+
onClose: () => void;
|
|
24
|
+
onConfirmAdd: (type: AddModalElementType, payload: CanvasAddElementPayload, targetSectionId?: string, targetIndex?: number, targetSubsectionId?: string) => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* CanvasAddModal Component
|
|
28
|
+
* Folio Engine — Task 8.11: Required Form Fill Before Adding Elements
|
|
29
|
+
*
|
|
30
|
+
* Mandatory creation dialog requiring coordinators in Developer Mode to fill out
|
|
31
|
+
* the necessary fields (titles, narratives, media) before adding elements to the canvas:
|
|
32
|
+
* - Empty by default: Never populates fields with generic dummy values
|
|
33
|
+
* - Enforces required field validation before the Add button is enabled
|
|
34
|
+
* - Consumes canonical Modal and Button components with 100% token purity
|
|
35
|
+
* - Adheres strictly to Universal Zero Outline Policy and Absolute Ban on Dividers
|
|
36
|
+
*/
|
|
37
|
+
export declare const CanvasAddModal: React.FC<CanvasAddModalProps>;
|
|
38
|
+
export default CanvasAddModal;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ChartElement } from '../../types/canvas';
|
|
3
|
+
export interface CanvasChartProps {
|
|
4
|
+
element: ChartElement;
|
|
5
|
+
nodeId: string;
|
|
6
|
+
nodeTitle?: string;
|
|
7
|
+
accentColor?: string;
|
|
8
|
+
isDevMode?: boolean;
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* CanvasChart Component
|
|
13
|
+
* Folio Engine — Task 8.3.3: Canvas Leaf Elements (Chart)
|
|
14
|
+
*
|
|
15
|
+
* Renders indicator data visualizers on the Dynamic Canvas:
|
|
16
|
+
* - Wires useSheetChartData with element.chartId and nodeId
|
|
17
|
+
* - Mounts canonical ChartCard.tsx
|
|
18
|
+
* - Renders DataPendingCard fallback by default when unconfigured, with '✎ Edit' button wired to ChartConfigDrawer
|
|
19
|
+
* - Memoized with React.memo (Vercel Best Practice rerender-memo)
|
|
20
|
+
* - Zero parentheses in UI and Universal Zero Outline Policy adherence
|
|
21
|
+
*/
|
|
22
|
+
export declare const CanvasChart: React.FC<CanvasChartProps>;
|
|
23
|
+
export default CanvasChart;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { CanvasElementType } from '../../types/canvas';
|
|
3
|
+
export interface CanvasDeleteConfirmModalProps {
|
|
4
|
+
isOpen: boolean;
|
|
5
|
+
itemType: CanvasElementType;
|
|
6
|
+
hasChildren?: boolean;
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
onConfirm: () => void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* CanvasDeleteConfirmModal Component
|
|
12
|
+
* Folio Engine — Task 8.9: Delete Confirmation Modal Safeguard
|
|
13
|
+
*
|
|
14
|
+
* Accessible confirmation dialog (role="alertdialog") preventing accidental content deletion:
|
|
15
|
+
* - Direct consumption of canonical Modal primitive
|
|
16
|
+
* - Clean academic editorial typography with token-driven styling
|
|
17
|
+
* - Reassures coordinators that action can be reversed with Undo toast
|
|
18
|
+
* - Adheres strictly to Universal Zero Outline Policy
|
|
19
|
+
*/
|
|
20
|
+
export declare const CanvasDeleteConfirmModal: React.FC<CanvasDeleteConfirmModalProps>;
|
|
21
|
+
export default CanvasDeleteConfirmModal;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { GalleryElement } from '../../types/canvas';
|
|
3
|
+
export interface CanvasGalleryProps {
|
|
4
|
+
element: GalleryElement;
|
|
5
|
+
nodeId: string;
|
|
6
|
+
accentColor?: string;
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* CanvasGallery Component
|
|
11
|
+
* Folio Engine — Task 8.9: Canvas Leaf Elements (Photo Gallery)
|
|
12
|
+
*
|
|
13
|
+
* Renders full multi-photo source showcase on the Dynamic Canvas:
|
|
14
|
+
* - Wraps canonical SourceGallery with responsive adaptive collage grid
|
|
15
|
+
* - Integrated Google Drive photo synchronization and full-screen lightbox
|
|
16
|
+
* - Memoized with React.memo for re-render efficiency
|
|
17
|
+
* - 100% token purity and Universal Zero Outline Policy adherence
|
|
18
|
+
*/
|
|
19
|
+
export declare const CanvasGallery: React.FC<CanvasGalleryProps>;
|
|
20
|
+
export default CanvasGallery;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { CanvasElementType } from '../../types/canvas';
|
|
3
|
+
export interface CanvasItemControlsProps {
|
|
4
|
+
itemId: string;
|
|
5
|
+
itemType: CanvasElementType;
|
|
6
|
+
canMoveUp: boolean;
|
|
7
|
+
canMoveDown: boolean;
|
|
8
|
+
onMoveUp: () => void;
|
|
9
|
+
onMoveDown: () => void;
|
|
10
|
+
onDelete: () => void;
|
|
11
|
+
onEdit?: () => void;
|
|
12
|
+
children: React.ReactNode;
|
|
13
|
+
className?: string;
|
|
14
|
+
suppressHover?: boolean;
|
|
15
|
+
sourceParentId?: string;
|
|
16
|
+
sourceIndex?: number;
|
|
17
|
+
hasChildren?: boolean;
|
|
18
|
+
onDropItem?: (sourceItemId: string, targetContainerId: string, targetIndex?: number) => void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* CanvasItemControls Component
|
|
22
|
+
* Folio Engine — Task 8.9: Centered Controls, Drag-and-Drop Reordering & Delete Modal
|
|
23
|
+
*
|
|
24
|
+
* Authoring controls for canvas elements in Developer Mode:
|
|
25
|
+
* - HTML5 drag-and-drop grab handle alongside accessible tactile Move Up / Move Down buttons
|
|
26
|
+
* - Centered vertical & horizontal positioning eliminating collision with top-right edit buttons
|
|
27
|
+
* - Dedicated SVG trash can icon replacing ambiguous 'X' string
|
|
28
|
+
* - Accessible CanvasDeleteConfirmModal before executing item deletion
|
|
29
|
+
* - When Developer Mode is OFF: Only renders children with zero DOM wrapper overhead
|
|
30
|
+
* - Universal Zero Outline Policy on all controls
|
|
31
|
+
*/
|
|
32
|
+
export declare const CanvasItemControls: React.FC<CanvasItemControlsProps>;
|
|
33
|
+
export default CanvasItemControls;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { PhotoElement } from '../../types/canvas';
|
|
3
|
+
export interface CanvasPhotoProps {
|
|
4
|
+
element: PhotoElement;
|
|
5
|
+
nodeId: string;
|
|
6
|
+
accentColor?: string;
|
|
7
|
+
isDevMode?: boolean;
|
|
8
|
+
className?: string;
|
|
9
|
+
onEdit?: () => void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* CanvasPhoto Component
|
|
13
|
+
* Folio Engine — Task 8.3.2 / Task 10.6 / Task 15.4: Canvas Leaf Elements (Photo)
|
|
14
|
+
*
|
|
15
|
+
* Renders high-resolution source photographic cards on the Dynamic Canvas:
|
|
16
|
+
* - Direct integration with canonical SourceLightbox for full-screen inspection
|
|
17
|
+
* - Responsive edge media proxy delivery (/api/media/drive/:fileId?w=...)
|
|
18
|
+
* - Pre-baked / dynamically derived srcSet and sizes for mobile bandwidth reduction
|
|
19
|
+
* - Loading="lazy", decoding="async", and referrerPolicy="no-referrer"
|
|
20
|
+
* - Graceful fallback to raw Google Drive thumbnail if proxy encounters network interruption
|
|
21
|
+
* - Support for official Google Drive folder link badge ("Drive Folder ↗")
|
|
22
|
+
* - Calm placeholder with camera icon when src is empty
|
|
23
|
+
* - Delegated modal authoring via parent CanvasItemControls toolbar and onEdit prop
|
|
24
|
+
* - Memoized with React.memo (Vercel Best Practice rerender-memo)
|
|
25
|
+
* - Zero parentheses in UI and Universal Zero Outline Policy adherence
|
|
26
|
+
*/
|
|
27
|
+
export declare const CanvasPhoto: React.FC<CanvasPhotoProps>;
|
|
28
|
+
export default CanvasPhoto;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SectionElement } from '../../types/canvas';
|
|
3
|
+
export interface CanvasSectionProps {
|
|
4
|
+
section: SectionElement;
|
|
5
|
+
nodeId: string;
|
|
6
|
+
nodeTitle?: string;
|
|
7
|
+
accentColor?: string;
|
|
8
|
+
isDevMode?: boolean;
|
|
9
|
+
className?: string;
|
|
10
|
+
computedNumber?: string | null;
|
|
11
|
+
children?: React.ReactNode;
|
|
12
|
+
onEdit?: () => void;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* CanvasSection Component
|
|
16
|
+
* Folio Engine — Task 8.4.1: Canvas Sectioning & Nesting Containers
|
|
17
|
+
*
|
|
18
|
+
* Top-level structural section container for the Dynamic Canvas:
|
|
19
|
+
* - Renders semantic HTML5 <section id="sec-${id}">
|
|
20
|
+
* - Exposes data-toc-title, data-toc-number, and data-toc-numbered for automated discovery by useAutoTableOfContents
|
|
21
|
+
* - Canonical SectionTitle (h2) with toggleable numbering support
|
|
22
|
+
* - Unnumbered sections cleanly omit data-toc-number and set data-toc-numbered="false"
|
|
23
|
+
* - Pure spatial separation with zero horizontal divider lines
|
|
24
|
+
* - Memoized with React.memo for re-render efficiency
|
|
25
|
+
*/
|
|
26
|
+
export declare const CanvasSection: React.FC<CanvasSectionProps>;
|
|
27
|
+
export default CanvasSection;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SubsectionElement } from '../../types/canvas';
|
|
3
|
+
export interface CanvasSubsectionProps {
|
|
4
|
+
subsection: SubsectionElement;
|
|
5
|
+
nodeId: string;
|
|
6
|
+
accentColor?: string;
|
|
7
|
+
isDevMode?: boolean;
|
|
8
|
+
className?: string;
|
|
9
|
+
children?: React.ReactNode;
|
|
10
|
+
onEdit?: () => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* CanvasSubsection Component
|
|
14
|
+
* Folio Engine — Task 8.4.2: Canvas Sectioning & Nesting Containers
|
|
15
|
+
*
|
|
16
|
+
* Mid-level grouping container for nested initiatives on the Dynamic Canvas:
|
|
17
|
+
* - Semantic <div role="region" id="subsec-${id}"> container
|
|
18
|
+
* - Canonical SectionTitle (h3) for hierarchical document outline
|
|
19
|
+
* - Pure spatial separation without horizontal dividing lines
|
|
20
|
+
* - Memoized with React.memo for re-render efficiency
|
|
21
|
+
*/
|
|
22
|
+
export declare const CanvasSubsection: React.FC<CanvasSubsectionProps>;
|
|
23
|
+
export default CanvasSubsection;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { TextElement } from '../../types/canvas';
|
|
3
|
+
export interface CanvasTextProps {
|
|
4
|
+
element: TextElement;
|
|
5
|
+
nodeId: string;
|
|
6
|
+
accentColor?: string;
|
|
7
|
+
isDevMode?: boolean;
|
|
8
|
+
className?: string;
|
|
9
|
+
onEdit?: () => void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* CanvasText Component
|
|
13
|
+
* Folio Engine — Task 8.3.1: Canvas Leaf Elements (Text)
|
|
14
|
+
*
|
|
15
|
+
* Renders editorial narrative paragraphs or pull-quotes on the Dynamic Canvas:
|
|
16
|
+
* - Direct integration with canonical EditableText and Content DB
|
|
17
|
+
* - Fraunces serif editorial quote when element.as === 'blockquote'
|
|
18
|
+
* - Modern Academic Editorial body narrative when element.as === 'p' or default
|
|
19
|
+
* - Memoized with React.memo (Vercel Best Practice rerender-memo)
|
|
20
|
+
* - Zero parentheses in UI and Universal Zero Outline Policy adherence
|
|
21
|
+
*/
|
|
22
|
+
export declare const CanvasText: React.FC<CanvasTextProps>;
|
|
23
|
+
export default CanvasText;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface NodeCanvasProps {
|
|
3
|
+
nodeId: string;
|
|
4
|
+
nodeTitle: string;
|
|
5
|
+
accentColor?: string;
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* DocumentCanvas Component
|
|
10
|
+
* Folio Engine — Task 9.8: Unified Dynamic Canvas Add & Edit Modals and Drawers Architecture
|
|
11
|
+
*
|
|
12
|
+
* Coordinates recursive rendering of dynamic canvas sections, subsections, and leaf elements:
|
|
13
|
+
* - Reads local-first canvas document via useDocumentCanvas(nodeId)
|
|
14
|
+
* - Unified CanvasElementModal for both creating and editing elements with dual-store synchronization
|
|
15
|
+
* - Direct onEdit callbacks eliminating fragile DOM query simulation hacks
|
|
16
|
+
* - Fast-tracks indicator chart creation directly to ChartConfigDrawer in mode="add"
|
|
17
|
+
* - Returns clean layout with 0 authoring chrome in public visitor mode
|
|
18
|
+
*/
|
|
19
|
+
export declare const DocumentCanvas: React.FC<NodeCanvasProps>;
|
|
20
|
+
export default DocumentCanvas;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { NodeItem, NodeHeroImage } from "../../types/node";
|
|
3
|
+
export interface HeroPhotoProps {
|
|
4
|
+
node?: Partial<NodeItem>;
|
|
5
|
+
heroImage?: NodeHeroImage;
|
|
6
|
+
onExploreNode?: (nodeId: string) => void;
|
|
7
|
+
className?: string;
|
|
8
|
+
priority?: boolean;
|
|
9
|
+
docked?: boolean;
|
|
10
|
+
focalPoint?: {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
};
|
|
14
|
+
onClick?: () => void;
|
|
15
|
+
}
|
|
16
|
+
export declare const HeroPhoto: React.FC<HeroPhotoProps>;
|
|
17
|
+
export default HeroPhoto;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canvas Components Barrel
|
|
3
|
+
* Folio Engine — Task 18.4: Dynamic Document Canvas Engine
|
|
4
|
+
*/
|
|
5
|
+
export { CanvasText, type CanvasTextProps } from "./CanvasText";
|
|
6
|
+
export { CanvasPhoto, type CanvasPhotoProps } from "./CanvasPhoto";
|
|
7
|
+
export { CanvasGallery, type CanvasGalleryProps } from "./CanvasGallery";
|
|
8
|
+
export { CanvasChart, type CanvasChartProps } from "./CanvasChart";
|
|
9
|
+
export { CanvasSection, type CanvasSectionProps } from "./CanvasSection";
|
|
10
|
+
export { CanvasSubsection, type CanvasSubsectionProps } from "./CanvasSubsection";
|
|
11
|
+
export { CanvasAddBar, type CanvasAddBarProps } from "./CanvasAddBar";
|
|
12
|
+
export { CanvasItemControls, type CanvasItemControlsProps } from "./CanvasItemControls";
|
|
13
|
+
export { CanvasDeleteConfirmModal, type CanvasDeleteConfirmModalProps } from "./CanvasDeleteConfirmModal";
|
|
14
|
+
export { DocumentCanvas, type NodeCanvasProps } from "./DocumentCanvas";
|
|
15
|
+
export { HeroPhoto, type HeroPhotoProps } from "./HeroPhoto";
|
|
16
|
+
export { CanvasAddModal, type CanvasAddModalProps, type CanvasAddElementPayload } from "./CanvasAddModal";
|
|
17
|
+
export { default } from "./DocumentCanvas";
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ChartSeries } from '../../types/chart';
|
|
3
|
+
export interface BarChartProps {
|
|
4
|
+
categories: string[];
|
|
5
|
+
series: ChartSeries[];
|
|
6
|
+
unit?: string;
|
|
7
|
+
accentColor?: string;
|
|
8
|
+
orientation?: 'vertical' | 'horizontal';
|
|
9
|
+
barOrientation?: 'vertical' | 'horizontal';
|
|
10
|
+
stacked?: boolean;
|
|
11
|
+
showValues?: boolean;
|
|
12
|
+
xLabel?: string;
|
|
13
|
+
yLabel?: string;
|
|
14
|
+
onSelectDataPoint?: (point: {
|
|
15
|
+
category: string;
|
|
16
|
+
seriesName: string;
|
|
17
|
+
value: number | null;
|
|
18
|
+
}) => void;
|
|
19
|
+
variant?: 'standard' | 'progress';
|
|
20
|
+
targetValue?: number;
|
|
21
|
+
targetLabel?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare const BarChart: React.FC<BarChartProps>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ChartDataset, SheetChartConfig } from '../../types/chart';
|
|
3
|
+
import type { NodeCode } from '../../types/node';
|
|
4
|
+
export interface ChartCardProps {
|
|
5
|
+
chartId: string;
|
|
6
|
+
dataset?: ChartDataset | null;
|
|
7
|
+
config?: SheetChartConfig | null;
|
|
8
|
+
nodeId?: NodeCode;
|
|
9
|
+
nodeTitle?: string;
|
|
10
|
+
accentColor?: string;
|
|
11
|
+
status?: import('../../types/chart').ChartSyncStatus;
|
|
12
|
+
errorMessage?: string;
|
|
13
|
+
onConfigUpdated?: (config: SheetChartConfig) => void;
|
|
14
|
+
onSync?: () => Promise<unknown> | void;
|
|
15
|
+
isSyncing?: boolean;
|
|
16
|
+
className?: string;
|
|
17
|
+
editTriggerId?: string;
|
|
18
|
+
hideEditButton?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* ChartCard Component
|
|
22
|
+
* Folio Engine — Subtask 7.4.4, 7.7, 7.19 & Task 8.10
|
|
23
|
+
*
|
|
24
|
+
* Editorial Bento Card shell for indicator charts.
|
|
25
|
+
* Adheres to Modern Academic Editorial design standards:
|
|
26
|
+
* - Minimal header only when data is missing; full header with As of Date when valid
|
|
27
|
+
* - Uniform Administrative Edit Button ("✎ Edit") in Developer Mode
|
|
28
|
+
* - 1-Click "View Table" modal & "Download Data (CSV)" public data receipts button (zero URL leaks)
|
|
29
|
+
* - Dignified fallback with background ghost wireframe (DataPendingCard) when data is pending or problematic
|
|
30
|
+
* - Suppressed footer when hasData is false (Law of Subtraction)
|
|
31
|
+
* - Mobile caption purge on screens <= 640px
|
|
32
|
+
*/
|
|
33
|
+
export declare const ChartCard: React.FC<ChartCardProps>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SheetChartConfig } from '../../types/chart';
|
|
3
|
+
import type { NodeCode } from '../../types/node';
|
|
4
|
+
export type WizardStep = 1 | 2;
|
|
5
|
+
export type ChartSetupSubTab = 'style' | 'data' | 'sorting';
|
|
6
|
+
export interface ChartConfigDrawerProps {
|
|
7
|
+
isOpen: boolean;
|
|
8
|
+
onClose: () => void;
|
|
9
|
+
chartId: string;
|
|
10
|
+
nodeId: NodeCode;
|
|
11
|
+
initialConfig?: SheetChartConfig;
|
|
12
|
+
previewMatrix?: (string | number | null)[][];
|
|
13
|
+
onDeployed?: (config: SheetChartConfig) => void;
|
|
14
|
+
mode?: 'add' | 'edit';
|
|
15
|
+
}
|
|
16
|
+
export declare const ChartConfigDrawer: React.FC<ChartConfigDrawerProps>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface ChartGhostWireframeProps {
|
|
3
|
+
className?: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* ChartGhostWireframe Component
|
|
7
|
+
* Folio Engine — Task 8.10
|
|
8
|
+
*
|
|
9
|
+
* Universal calm, tokenized SVG wireframe skeleton:
|
|
10
|
+
* - Subtle X/Y baseline axes
|
|
11
|
+
* - Soft staggered vertical bar silhouettes
|
|
12
|
+
* - Strictly decorative background (aria-hidden="true")
|
|
13
|
+
* - Enforces Universal Zero Outline Policy and token purity
|
|
14
|
+
*/
|
|
15
|
+
export declare const ChartGhostWireframe: React.FC<ChartGhostWireframeProps>;
|
|
16
|
+
export default ChartGhostWireframe;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare const CHART_DIMMED_OPACITY = 0.15;
|
|
3
|
+
export interface ChartLegendItem {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
color: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ChartLegendProps {
|
|
9
|
+
items: ChartLegendItem[];
|
|
10
|
+
activeIndex?: number | null;
|
|
11
|
+
onHover?: (index: number | null) => void;
|
|
12
|
+
className?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const ChartLegend: React.FC<ChartLegendProps>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ChartDataset, ChartType } from '../../types/chart';
|
|
3
|
+
export interface ChartRouterProps {
|
|
4
|
+
dataset: ChartDataset;
|
|
5
|
+
overrideType?: ChartType;
|
|
6
|
+
accentColor?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const ChartRouter: React.FC<ChartRouterProps>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface ChartSortingSeriesOption {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ChartSortingControlsProps {
|
|
7
|
+
sortField: string;
|
|
8
|
+
sortDirection: 'asc' | 'desc';
|
|
9
|
+
categoryLabel?: string;
|
|
10
|
+
seriesOptions?: ChartSortingSeriesOption[];
|
|
11
|
+
onSortFieldChange: (field: string) => void;
|
|
12
|
+
onSortDirectionChange: (direction: 'asc' | 'desc') => void;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const ChartSortingControls: React.FC<ChartSortingControlsProps>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ChartDataset } from '../../types/chart';
|
|
3
|
+
export interface ChartTableModalProps {
|
|
4
|
+
isOpen: boolean;
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
dataset: ChartDataset;
|
|
7
|
+
title: string;
|
|
8
|
+
asOfDate?: string;
|
|
9
|
+
onDownloadCsv?: () => void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* ChartTableModal Component
|
|
13
|
+
* Folio Engine — Subtask 7.19
|
|
14
|
+
*
|
|
15
|
+
* Full-scale Large Editorial Modal displaying the pure tabular dataset
|
|
16
|
+
* powering an indicator chart. Gives citizens, teachers, and administrators
|
|
17
|
+
* immediate visual access to public data tables without downloading files.
|
|
18
|
+
*
|
|
19
|
+
* Adheres strictly to Modern Academic Editorial design standards:
|
|
20
|
+
* - Large responsive dialog layout (max-width ~1000px, 85vh max-height)
|
|
21
|
+
* - Sticky table headers and row indices for seamless vertical/horizontal touch scroll
|
|
22
|
+
* - Right-aligned monospace numbers (`var(--font-mono)`)
|
|
23
|
+
* - Universal Zero Outline Policy (`outline: none;`)
|
|
24
|
+
* - Polymorphic support for Bar, Line, Donut, Scatter, and Histogram charts
|
|
25
|
+
*/
|
|
26
|
+
export declare const ChartTableModal: React.FC<ChartTableModalProps>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface ChartTooltipProps {
|
|
3
|
+
visible: boolean;
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
title?: string;
|
|
7
|
+
seriesName?: string;
|
|
8
|
+
value: number | string | null;
|
|
9
|
+
unit?: string;
|
|
10
|
+
color?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const ChartTooltip: React.FC<ChartTooltipProps>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ChartProblemCategory } from '../../types/chart';
|
|
3
|
+
export interface DataPendingCardProps {
|
|
4
|
+
chartId?: string;
|
|
5
|
+
nodeTitle?: string;
|
|
6
|
+
category?: ChartProblemCategory;
|
|
7
|
+
errorMessage?: string;
|
|
8
|
+
hasSheetUrl?: boolean;
|
|
9
|
+
onEdit?: () => void;
|
|
10
|
+
className?: string;
|
|
11
|
+
headline?: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* DataPendingCard Component
|
|
16
|
+
* Folio Engine — Subtask 7.4.5 & Task 8.10
|
|
17
|
+
*
|
|
18
|
+
* Universal dignified chart fallback when an indicator dataset has not yet been linked
|
|
19
|
+
* or is encountering access/format issues.
|
|
20
|
+
*
|
|
21
|
+
* Visual Architecture:
|
|
22
|
+
* - Background: Universal tokenized SVG ChartGhostWireframe skeleton.
|
|
23
|
+
* - Public View: Quiet, dignified notice with brand mark.
|
|
24
|
+
* - Developer Mode: 3-point diagnostic panel with concrete coordinator troubleshooting hints
|
|
25
|
+
* and the uniform administrative '✎ Edit' button wired to ChartConfigDrawer.
|
|
26
|
+
*/
|
|
27
|
+
export declare const DataPendingCard: React.FC<DataPendingCardProps>;
|
|
28
|
+
export default DataPendingCard;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface DonutChartProps {
|
|
3
|
+
categories: string[];
|
|
4
|
+
data: number[];
|
|
5
|
+
unit?: string;
|
|
6
|
+
accentColor?: string;
|
|
7
|
+
donutVariant?: 'donut' | 'pie';
|
|
8
|
+
groupOthers?: boolean;
|
|
9
|
+
showValues?: boolean;
|
|
10
|
+
seriesName?: string;
|
|
11
|
+
onSelectDataPoint?: (point: {
|
|
12
|
+
category: string;
|
|
13
|
+
value: number;
|
|
14
|
+
}) => void;
|
|
15
|
+
}
|
|
16
|
+
export declare const DonutChart: React.FC<DonutChartProps>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ChartSeries, HistogramBin } from '../../types/chart';
|
|
3
|
+
export interface HistogramChartProps {
|
|
4
|
+
rawValues?: number[];
|
|
5
|
+
series?: ChartSeries[];
|
|
6
|
+
unit?: string;
|
|
7
|
+
accentColor?: string;
|
|
8
|
+
binStrategy?: 'auto' | 'custom';
|
|
9
|
+
binCount?: number;
|
|
10
|
+
bucketSize?: number;
|
|
11
|
+
histogramYMode?: 'frequency' | 'relative';
|
|
12
|
+
curveInterpolation?: 'smooth' | 'straight' | 'none';
|
|
13
|
+
showSummaryStats?: boolean;
|
|
14
|
+
showMedianMode?: boolean;
|
|
15
|
+
showReferenceGuide?: boolean;
|
|
16
|
+
sortBy?: string;
|
|
17
|
+
sortField?: string;
|
|
18
|
+
sortDirection?: 'asc' | 'desc';
|
|
19
|
+
xLabel?: string;
|
|
20
|
+
yLabel?: string;
|
|
21
|
+
onSelectBin?: (bin: HistogramBin) => void;
|
|
22
|
+
}
|
|
23
|
+
export declare const HistogramChart: React.FC<HistogramChartProps>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ChartSeries } from '../../types/chart';
|
|
3
|
+
export interface LineChartProps {
|
|
4
|
+
categories: string[];
|
|
5
|
+
series: ChartSeries[];
|
|
6
|
+
unit?: string;
|
|
7
|
+
accentColor?: string;
|
|
8
|
+
curveInterpolation?: 'smooth' | 'straight' | 'none';
|
|
9
|
+
showAreaFill?: boolean;
|
|
10
|
+
markerSize?: 'compact' | 'regular' | 'prominent';
|
|
11
|
+
autoScaleY?: boolean;
|
|
12
|
+
startAtZero?: boolean;
|
|
13
|
+
showValues?: boolean;
|
|
14
|
+
xLabel?: string;
|
|
15
|
+
yLabel?: string;
|
|
16
|
+
onSelectDataPoint?: (point: {
|
|
17
|
+
category: string;
|
|
18
|
+
seriesName: string;
|
|
19
|
+
value: number | null;
|
|
20
|
+
}) => void;
|
|
21
|
+
}
|
|
22
|
+
export declare const LineChart: React.FC<LineChartProps>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface RangePreviewMatrixProps {
|
|
3
|
+
matrix: (string | number | null)[][];
|
|
4
|
+
range?: string;
|
|
5
|
+
isSelecting?: boolean;
|
|
6
|
+
onRangeSelect?: (newRange: string) => void;
|
|
7
|
+
excludeSummaryRows?: boolean;
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* RangePreviewMatrix Component
|
|
12
|
+
* Folio Engine — Task 13.1: Full-Viewport Edge-to-Edge Spreadsheet Grid
|
|
13
|
+
*
|
|
14
|
+
* Renders the entire Google Sheet without artificial card frames or embellishments.
|
|
15
|
+
* Supports interactive click-and-drag and two-click highlighting to define
|
|
16
|
+
* cell bounding box ranges (e.g. A1:D6) in real time.
|
|
17
|
+
*/
|
|
18
|
+
export declare const RangePreviewMatrix: React.FC<RangePreviewMatrixProps>;
|
|
19
|
+
export default RangePreviewMatrix;
|