@devcabs/folio-engine 0.0.0-stage → 0.1.1
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 +22 -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 +162 -0
- package/dist/context/DeveloperModeContext.d.ts +11 -0
- package/dist/context/UndoRedoContext.d.ts +20 -0
- package/dist/diagnostics/verifyEngineSetup.d.ts +30 -0
- package/dist/diagnostics-CpGr1hhi.js +126 -0
- package/dist/diagnostics-Dw5PzR78.cjs +5 -0
- package/dist/diagnostics.cjs +1 -0
- package/dist/diagnostics.d.ts +10 -0
- package/dist/diagnostics.js +14 -0
- package/dist/edge-1WCVZ0J7.cjs +1 -0
- package/dist/edge-CSjifIhA.js +2709 -0
- package/dist/edge-Dr41JdrQ.cjs +34 -0
- package/dist/edge-h_ge9f1E.js +512 -0
- package/dist/edge.cjs +1 -0
- package/dist/edge.d.ts +10 -0
- package/dist/edge.js +26 -0
- package/dist/folio.cjs +9 -0
- package/dist/folio.js +21895 -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 +31 -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 +53 -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 +68 -4
- package/README.md +0 -3
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ScatterPoint } from '../../types/chart';
|
|
3
|
+
export interface ScatterPlotProps {
|
|
4
|
+
points?: ScatterPoint[];
|
|
5
|
+
xLabel?: string;
|
|
6
|
+
yLabel?: string;
|
|
7
|
+
unit?: string;
|
|
8
|
+
accentColor?: string;
|
|
9
|
+
curveInterpolation?: 'none' | 'linear' | 'smooth' | 'polynomial' | 'straight';
|
|
10
|
+
loessBandwidth?: number;
|
|
11
|
+
showAreaFill?: boolean;
|
|
12
|
+
markerSize?: 'compact' | 'regular' | 'prominent';
|
|
13
|
+
autoScaleY?: boolean;
|
|
14
|
+
autoScaleX?: boolean;
|
|
15
|
+
startAtZero?: boolean;
|
|
16
|
+
startAtZeroX?: boolean;
|
|
17
|
+
showCorrelationChip?: boolean;
|
|
18
|
+
showReferenceGuide?: boolean;
|
|
19
|
+
onSelectPoint?: (point: ScatterPoint) => void;
|
|
20
|
+
}
|
|
21
|
+
export declare const ScatterPlot: React.FC<ScatterPlotProps>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface BarVisualControlsProps {
|
|
3
|
+
barOrientation: 'vertical' | 'horizontal';
|
|
4
|
+
setBarOrientation: (val: 'vertical' | 'horizontal') => void;
|
|
5
|
+
stacked: boolean;
|
|
6
|
+
setStacked: (val: boolean) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const BarVisualControls: React.FC<BarVisualControlsProps>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ChartType } from '../../../../types/chart';
|
|
3
|
+
interface ChartTitlesSectionProps {
|
|
4
|
+
titleOverride: string;
|
|
5
|
+
setTitleOverride: (val: string) => void;
|
|
6
|
+
subtitleOverride: string;
|
|
7
|
+
setSubtitleOverride: (val: string) => void;
|
|
8
|
+
xLabel?: string;
|
|
9
|
+
setXLabel?: (val: string) => void;
|
|
10
|
+
yLabel?: string;
|
|
11
|
+
setYLabel?: (val: string) => void;
|
|
12
|
+
chartType?: ChartType;
|
|
13
|
+
}
|
|
14
|
+
export declare const ChartTitlesSection: React.FC<ChartTitlesSectionProps>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface HistogramVisualControlsProps {
|
|
3
|
+
curveInterpolation: 'smooth' | 'straight' | 'linear' | 'none' | 'polynomial';
|
|
4
|
+
setCurveInterpolation: (val: 'smooth' | 'straight' | 'linear' | 'none' | 'polynomial') => void;
|
|
5
|
+
showReferenceGuide: boolean;
|
|
6
|
+
setShowReferenceGuide: (val: boolean) => void;
|
|
7
|
+
showSummaryStats: boolean;
|
|
8
|
+
setShowSummaryStats: (val: boolean) => void;
|
|
9
|
+
showMedianMode: boolean;
|
|
10
|
+
setShowMedianMode: (val: boolean) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare const HistogramVisualControls: React.FC<HistogramVisualControlsProps>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface LineVisualControlsProps {
|
|
3
|
+
curveInterpolation: 'smooth' | 'straight' | 'linear' | 'none' | 'polynomial';
|
|
4
|
+
setCurveInterpolation: (val: 'smooth' | 'straight' | 'linear' | 'none' | 'polynomial') => void;
|
|
5
|
+
markerSize: 'compact' | 'regular' | 'prominent';
|
|
6
|
+
setMarkerSize: (val: 'compact' | 'regular' | 'prominent') => void;
|
|
7
|
+
showAreaFill: boolean;
|
|
8
|
+
setShowAreaFill: (val: boolean) => void;
|
|
9
|
+
startAtZero: boolean;
|
|
10
|
+
setStartAtZero: (val: boolean) => void;
|
|
11
|
+
setAutoScaleY: (val: boolean) => void;
|
|
12
|
+
}
|
|
13
|
+
export declare const LineVisualControls: React.FC<LineVisualControlsProps>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface ScatterDataControlsProps {
|
|
3
|
+
effectiveScatterX: number;
|
|
4
|
+
setScatterXColIndex: (val: number) => void;
|
|
5
|
+
effectiveScatterY: number;
|
|
6
|
+
setScatterYColIndex: (val: number) => void;
|
|
7
|
+
effectiveScatterLabel: number;
|
|
8
|
+
setScatterLabelColIndex: (val: number) => void;
|
|
9
|
+
scatterGroupColIndex?: number;
|
|
10
|
+
setScatterGroupColIndex: (val?: number) => void;
|
|
11
|
+
detectedColumns: Array<{
|
|
12
|
+
index: number;
|
|
13
|
+
label: string;
|
|
14
|
+
}>;
|
|
15
|
+
}
|
|
16
|
+
export declare const ScatterDataControls: React.FC<ScatterDataControlsProps>;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface ScatterVisualControlsProps {
|
|
3
|
+
curveInterpolation: 'smooth' | 'straight' | 'linear' | 'none' | 'polynomial';
|
|
4
|
+
setCurveInterpolation: (val: 'smooth' | 'straight' | 'linear' | 'none' | 'polynomial') => void;
|
|
5
|
+
markerSize: 'compact' | 'regular' | 'prominent';
|
|
6
|
+
setMarkerSize: (val: 'compact' | 'regular' | 'prominent') => void;
|
|
7
|
+
loessBandwidth: number;
|
|
8
|
+
setLoessBandwidth: (val: number) => void;
|
|
9
|
+
showAreaFill: boolean;
|
|
10
|
+
setShowAreaFill: (val: boolean) => void;
|
|
11
|
+
showCorrelationChip: boolean;
|
|
12
|
+
setShowCorrelationChip: (val: boolean) => void;
|
|
13
|
+
showReferenceGuide: boolean;
|
|
14
|
+
setShowReferenceGuide: (val: boolean) => void;
|
|
15
|
+
startAtZero: boolean;
|
|
16
|
+
setStartAtZero: (val: boolean) => void;
|
|
17
|
+
setAutoScaleY: (val: boolean) => void;
|
|
18
|
+
startAtZeroX: boolean;
|
|
19
|
+
setStartAtZeroX: (val: boolean) => void;
|
|
20
|
+
setAutoScaleX: (val: boolean) => void;
|
|
21
|
+
}
|
|
22
|
+
export declare const ScatterVisualControls: React.FC<ScatterVisualControlsProps>;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ChartType } from '../../../../types/chart';
|
|
3
|
+
interface SortingAndOrderControlsProps {
|
|
4
|
+
chartType: ChartType;
|
|
5
|
+
sortBy: 'none' | 'asc' | 'desc' | 'category-asc' | 'category-desc';
|
|
6
|
+
setSortBy: (val: 'none' | 'asc' | 'desc' | 'category-asc' | 'category-desc') => void;
|
|
7
|
+
sortField: string;
|
|
8
|
+
setSortField: (val: string) => void;
|
|
9
|
+
sortDirection: 'asc' | 'desc';
|
|
10
|
+
setSortDirection: (val: 'asc' | 'desc') => void;
|
|
11
|
+
categoryColIndex: number;
|
|
12
|
+
detectedColumns: Array<{
|
|
13
|
+
index: number;
|
|
14
|
+
label: string;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
export declare const SortingAndOrderControls: React.FC<SortingAndOrderControlsProps>;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ChartType } from '../../../../types/chart';
|
|
3
|
+
interface StandardDataControlsProps {
|
|
4
|
+
chartType: ChartType;
|
|
5
|
+
categoryColIndex: number;
|
|
6
|
+
setCategoryColIndex: (val: number) => void;
|
|
7
|
+
detectedColumns: Array<{
|
|
8
|
+
index: number;
|
|
9
|
+
label: string;
|
|
10
|
+
}>;
|
|
11
|
+
includedSeriesIndices: number[] | undefined;
|
|
12
|
+
setIncludedSeriesIndices: (val: number[] | undefined) => void;
|
|
13
|
+
binStrategy: 'auto' | 'custom';
|
|
14
|
+
setBinStrategy: (val: 'auto' | 'custom') => void;
|
|
15
|
+
customBinMode: 'step' | 'count';
|
|
16
|
+
setCustomBinMode: (val: 'step' | 'count') => void;
|
|
17
|
+
bucketSize: number | '';
|
|
18
|
+
setBucketSize: (val: number | '') => void;
|
|
19
|
+
binCount: number | '';
|
|
20
|
+
setBinCount: (val: number | '') => void;
|
|
21
|
+
histogramYMode: 'frequency' | 'relative';
|
|
22
|
+
setHistogramYMode: (val: 'frequency' | 'relative') => void;
|
|
23
|
+
groupOthers: boolean;
|
|
24
|
+
setGroupOthers: (val: boolean) => void;
|
|
25
|
+
sortField: string;
|
|
26
|
+
setSortField: (val: string) => void;
|
|
27
|
+
accentColor: string;
|
|
28
|
+
handleToggleSeries: (colIdx: number) => void;
|
|
29
|
+
}
|
|
30
|
+
export declare const StandardDataControls: React.FC<StandardDataControlsProps>;
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import type { SheetChartConfig, ChartType } from '../../../../types/chart';
|
|
2
|
+
import type { NodeCode } from '../../../../types/node';
|
|
3
|
+
export interface FormSnapshot {
|
|
4
|
+
sheetUrl: string;
|
|
5
|
+
tabName: string;
|
|
6
|
+
sheetGid: string;
|
|
7
|
+
range: string;
|
|
8
|
+
chartType: ChartType;
|
|
9
|
+
unit: string;
|
|
10
|
+
titleOverride: string;
|
|
11
|
+
subtitleOverride: string;
|
|
12
|
+
barVariant: 'standard' | 'progress';
|
|
13
|
+
targetValue: number | undefined;
|
|
14
|
+
targetLabel: string;
|
|
15
|
+
categoryColIndex: number;
|
|
16
|
+
includedSeriesIndices: number[] | undefined;
|
|
17
|
+
sortBy: 'none' | 'asc' | 'desc' | 'category-asc' | 'category-desc';
|
|
18
|
+
sortField: string;
|
|
19
|
+
sortDirection: 'asc' | 'desc';
|
|
20
|
+
orientation: 'vertical' | 'horizontal';
|
|
21
|
+
barOrientation: 'vertical' | 'horizontal';
|
|
22
|
+
stacked: boolean;
|
|
23
|
+
showValues: boolean;
|
|
24
|
+
lastModifiedTime: string | undefined;
|
|
25
|
+
excludeSummaryRows: boolean;
|
|
26
|
+
transpose: boolean;
|
|
27
|
+
curveInterpolation: 'smooth' | 'straight' | 'linear' | 'none' | 'polynomial';
|
|
28
|
+
showAreaFill: boolean;
|
|
29
|
+
markerSize: 'compact' | 'regular' | 'prominent';
|
|
30
|
+
autoScaleY: boolean;
|
|
31
|
+
startAtZero: boolean;
|
|
32
|
+
scatterXColIndex?: number;
|
|
33
|
+
scatterYColIndex?: number;
|
|
34
|
+
scatterLabelColIndex?: number;
|
|
35
|
+
scatterGroupColIndex?: number;
|
|
36
|
+
autoScaleX: boolean;
|
|
37
|
+
startAtZeroX: boolean;
|
|
38
|
+
loessBandwidth: number;
|
|
39
|
+
showCorrelationChip: boolean;
|
|
40
|
+
donutVariant: 'donut' | 'pie';
|
|
41
|
+
groupOthers: boolean;
|
|
42
|
+
binStrategy: 'auto' | 'custom';
|
|
43
|
+
customBinMode: 'step' | 'count';
|
|
44
|
+
binCount: number;
|
|
45
|
+
bucketSize: number;
|
|
46
|
+
histogramYMode: 'frequency' | 'relative';
|
|
47
|
+
showSummaryStats: boolean;
|
|
48
|
+
showMedianMode: boolean;
|
|
49
|
+
showReferenceGuide: boolean;
|
|
50
|
+
xLabel: string;
|
|
51
|
+
yLabel: string;
|
|
52
|
+
}
|
|
53
|
+
export declare function createSnapshotFromConfig(cfg?: SheetChartConfig): FormSnapshot;
|
|
54
|
+
export declare function useChartConfigForm(initialConfig?: SheetChartConfig): {
|
|
55
|
+
sheetUrl: string;
|
|
56
|
+
setSheetUrl: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
57
|
+
tabName: string;
|
|
58
|
+
setTabName: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
59
|
+
sheetGid: string;
|
|
60
|
+
setSheetGid: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
61
|
+
range: string;
|
|
62
|
+
setRange: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
63
|
+
chartType: ChartType;
|
|
64
|
+
setChartType: import("react").Dispatch<import("react").SetStateAction<ChartType>>;
|
|
65
|
+
unit: string;
|
|
66
|
+
setUnit: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
67
|
+
titleOverride: string;
|
|
68
|
+
setTitleOverride: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
69
|
+
subtitleOverride: string;
|
|
70
|
+
setSubtitleOverride: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
71
|
+
xLabel: string;
|
|
72
|
+
setXLabel: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
73
|
+
yLabel: string;
|
|
74
|
+
setYLabel: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
75
|
+
excludeSummaryRows: boolean;
|
|
76
|
+
setExcludeSummaryRows: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
77
|
+
transpose: boolean;
|
|
78
|
+
setTranspose: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
79
|
+
barVariant: "standard" | "progress";
|
|
80
|
+
setBarVariant: import("react").Dispatch<import("react").SetStateAction<"standard" | "progress">>;
|
|
81
|
+
targetValue: number | undefined;
|
|
82
|
+
setTargetValue: import("react").Dispatch<import("react").SetStateAction<number | undefined>>;
|
|
83
|
+
targetLabel: string;
|
|
84
|
+
setTargetLabel: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
85
|
+
categoryColIndex: number;
|
|
86
|
+
setCategoryColIndex: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
87
|
+
includedSeriesIndices: number[] | undefined;
|
|
88
|
+
setIncludedSeriesIndices: import("react").Dispatch<import("react").SetStateAction<number[] | undefined>>;
|
|
89
|
+
sortBy: "none" | "asc" | "desc" | "category-asc" | "category-desc";
|
|
90
|
+
setSortBy: import("react").Dispatch<import("react").SetStateAction<"none" | "asc" | "desc" | "category-asc" | "category-desc">>;
|
|
91
|
+
sortField: string;
|
|
92
|
+
setSortField: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
93
|
+
sortDirection: "asc" | "desc";
|
|
94
|
+
setSortDirection: import("react").Dispatch<import("react").SetStateAction<"asc" | "desc">>;
|
|
95
|
+
barOrientation: "vertical" | "horizontal";
|
|
96
|
+
setBarOrientation: import("react").Dispatch<import("react").SetStateAction<"vertical" | "horizontal">>;
|
|
97
|
+
stacked: boolean;
|
|
98
|
+
setStacked: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
99
|
+
showValues: boolean;
|
|
100
|
+
setShowValues: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
101
|
+
lastModifiedTime: string | undefined;
|
|
102
|
+
setLastModifiedTime: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
|
|
103
|
+
curveInterpolation: "none" | "smooth" | "straight" | "linear" | "polynomial";
|
|
104
|
+
setCurveInterpolation: import("react").Dispatch<import("react").SetStateAction<"none" | "smooth" | "straight" | "linear" | "polynomial">>;
|
|
105
|
+
showAreaFill: boolean;
|
|
106
|
+
setShowAreaFill: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
107
|
+
markerSize: "compact" | "regular" | "prominent";
|
|
108
|
+
setMarkerSize: import("react").Dispatch<import("react").SetStateAction<"compact" | "regular" | "prominent">>;
|
|
109
|
+
autoScaleY: boolean;
|
|
110
|
+
setAutoScaleY: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
111
|
+
startAtZero: boolean;
|
|
112
|
+
setStartAtZero: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
113
|
+
scatterXColIndex: number | undefined;
|
|
114
|
+
setScatterXColIndex: import("react").Dispatch<import("react").SetStateAction<number | undefined>>;
|
|
115
|
+
scatterYColIndex: number | undefined;
|
|
116
|
+
setScatterYColIndex: import("react").Dispatch<import("react").SetStateAction<number | undefined>>;
|
|
117
|
+
scatterLabelColIndex: number | undefined;
|
|
118
|
+
setScatterLabelColIndex: import("react").Dispatch<import("react").SetStateAction<number | undefined>>;
|
|
119
|
+
scatterGroupColIndex: number | undefined;
|
|
120
|
+
setScatterGroupColIndex: import("react").Dispatch<import("react").SetStateAction<number | undefined>>;
|
|
121
|
+
autoScaleX: boolean;
|
|
122
|
+
setAutoScaleX: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
123
|
+
startAtZeroX: boolean;
|
|
124
|
+
setStartAtZeroX: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
125
|
+
loessBandwidth: number;
|
|
126
|
+
setLoessBandwidth: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
127
|
+
showCorrelationChip: boolean;
|
|
128
|
+
setShowCorrelationChip: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
129
|
+
donutVariant: "donut" | "pie";
|
|
130
|
+
setDonutVariant: import("react").Dispatch<import("react").SetStateAction<"donut" | "pie">>;
|
|
131
|
+
groupOthers: boolean;
|
|
132
|
+
setGroupOthers: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
133
|
+
binStrategy: "auto" | "custom";
|
|
134
|
+
setBinStrategy: import("react").Dispatch<import("react").SetStateAction<"auto" | "custom">>;
|
|
135
|
+
customBinMode: "step" | "count";
|
|
136
|
+
setCustomBinMode: import("react").Dispatch<import("react").SetStateAction<"step" | "count">>;
|
|
137
|
+
binCount: number | "";
|
|
138
|
+
setBinCount: import("react").Dispatch<import("react").SetStateAction<number | "">>;
|
|
139
|
+
bucketSize: number | "";
|
|
140
|
+
setBucketSize: import("react").Dispatch<import("react").SetStateAction<number | "">>;
|
|
141
|
+
histogramYMode: "frequency" | "relative";
|
|
142
|
+
setHistogramYMode: import("react").Dispatch<import("react").SetStateAction<"frequency" | "relative">>;
|
|
143
|
+
showSummaryStats: boolean;
|
|
144
|
+
setShowSummaryStats: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
145
|
+
showMedianMode: boolean;
|
|
146
|
+
setShowMedianMode: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
147
|
+
showReferenceGuide: boolean;
|
|
148
|
+
setShowReferenceGuide: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
149
|
+
savedSnapshot: FormSnapshot;
|
|
150
|
+
setSavedSnapshot: import("react").Dispatch<import("react").SetStateAction<FormSnapshot>>;
|
|
151
|
+
hasUnsavedChanges: boolean;
|
|
152
|
+
resetForm: (cfg?: SheetChartConfig) => void;
|
|
153
|
+
markAsSaved: (cfg: SheetChartConfig) => void;
|
|
154
|
+
buildConfigPayload: (chartId: string, nodeId: NodeCode, effectiveScatterX?: number, effectiveScatterY?: number, effectiveScatterLabel?: number) => SheetChartConfig;
|
|
155
|
+
};
|
|
156
|
+
export type ChartConfigFormReturn = ReturnType<typeof useChartConfigForm>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface UseLiveMatrixSyncProps {
|
|
2
|
+
sheetUrl: string;
|
|
3
|
+
tabName: string;
|
|
4
|
+
sheetGid: string;
|
|
5
|
+
range: string;
|
|
6
|
+
previewMatrix?: (string | number | null)[][] | null | undefined;
|
|
7
|
+
}
|
|
8
|
+
export declare function useLiveMatrixSync({ sheetUrl, tabName, sheetGid, range, previewMatrix, }: UseLiveMatrixSyncProps): {
|
|
9
|
+
fetchedMatrix: (string | number | null)[][];
|
|
10
|
+
fullMatrix: (string | number | null)[][];
|
|
11
|
+
isSyncing: boolean;
|
|
12
|
+
liveMatrix: (string | number | null)[][];
|
|
13
|
+
activeMatrix: (string | number | null)[][];
|
|
14
|
+
detectedColumns: {
|
|
15
|
+
index: number;
|
|
16
|
+
label: string;
|
|
17
|
+
}[];
|
|
18
|
+
detectedRange: string | null;
|
|
19
|
+
executeSync: (targetUrl?: string, targetTab?: string, targetGid?: string) => Promise<void>;
|
|
20
|
+
};
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { SheetChartConfig } from '../../../../types/chart';
|
|
2
|
+
import { type SheetMetadataTab } from '../../../../services/sheetsVerificationService';
|
|
3
|
+
export type AccessStatus = 'idle' | 'checking' | 'public' | 'restricted' | 'invalid';
|
|
4
|
+
interface UseSheetVerificationProps {
|
|
5
|
+
sheetUrl: string;
|
|
6
|
+
tabName: string;
|
|
7
|
+
sheetGid: string;
|
|
8
|
+
initialConfig?: SheetChartConfig;
|
|
9
|
+
setTabName: (name: string) => void;
|
|
10
|
+
setSheetGid: (gid: string) => void;
|
|
11
|
+
setLastModifiedTime: (time?: string) => void;
|
|
12
|
+
onAutoSelectTab?: (tabTitle: string, gid: string) => void;
|
|
13
|
+
}
|
|
14
|
+
export declare function useSheetVerification({ sheetUrl, tabName, sheetGid, initialConfig, setTabName, setSheetGid, setLastModifiedTime, onAutoSelectTab, }: UseSheetVerificationProps): {
|
|
15
|
+
accessStatus: AccessStatus;
|
|
16
|
+
setAccessStatus: import("react").Dispatch<import("react").SetStateAction<AccessStatus>>;
|
|
17
|
+
statusMessage: string;
|
|
18
|
+
setStatusMessage: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
19
|
+
discoveredTabs: SheetMetadataTab[];
|
|
20
|
+
setDiscoveredTabs: import("react").Dispatch<import("react").SetStateAction<SheetMetadataTab[]>>;
|
|
21
|
+
isStep1Valid: boolean;
|
|
22
|
+
executeVerification: (urlToVerify: string) => Promise<void>;
|
|
23
|
+
handleTabChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;
|
|
24
|
+
resetVerification: (newUrl?: string, newTabName?: string, newGid?: string) => void;
|
|
25
|
+
};
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { useChartConfigForm, type ChartConfigFormReturn, type FormSnapshot, createSnapshotFromConfig } from './hooks/useChartConfigForm';
|
|
2
|
+
export { useSheetVerification, type AccessStatus } from './hooks/useSheetVerification';
|
|
3
|
+
export { useLiveMatrixSync } from './hooks/useLiveMatrixSync';
|
|
4
|
+
export { Step1SourceRange } from './panels/Step1SourceRange';
|
|
5
|
+
export { Step1Source } from './panels/Step1Source';
|
|
6
|
+
export { Step2DataRange } from './panels/Step2DataRange';
|
|
7
|
+
export { Step3ChartSetup, type ChartSetupSubTab } from './panels/Step3ChartSetup';
|
|
8
|
+
export { Step4Review } from './panels/Step4Review';
|
|
9
|
+
export { BarVisualControls } from './controls/BarVisualControls';
|
|
10
|
+
export { LineVisualControls } from './controls/LineVisualControls';
|
|
11
|
+
export { DonutVisualControls } from './controls/DonutVisualControls';
|
|
12
|
+
export { HistogramVisualControls } from './controls/HistogramVisualControls';
|
|
13
|
+
export { ScatterVisualControls } from './controls/ScatterVisualControls';
|
|
14
|
+
export { ChartTitlesSection } from './controls/ChartTitlesSection';
|
|
15
|
+
export { ScatterDataControls } from './controls/ScatterDataControls';
|
|
16
|
+
export { StandardDataControls } from './controls/StandardDataControls';
|
|
17
|
+
export { SortingAndOrderControls } from './controls/SortingAndOrderControls';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SheetMetadataTab } from '../../../../services/sheetsVerificationService';
|
|
3
|
+
import type { AccessStatus } from '../hooks/useSheetVerification';
|
|
4
|
+
interface Step1SourceProps {
|
|
5
|
+
sheetUrl: string;
|
|
6
|
+
setSheetUrl: (url: string) => void;
|
|
7
|
+
accessStatus: AccessStatus;
|
|
8
|
+
statusMessage: string;
|
|
9
|
+
discoveredTabs: SheetMetadataTab[];
|
|
10
|
+
tabName: string;
|
|
11
|
+
setTabName: (tab: string) => void;
|
|
12
|
+
executeVerification: (url: string) => void;
|
|
13
|
+
handleTabChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;
|
|
14
|
+
onResync?: () => void;
|
|
15
|
+
isSyncing?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare const Step1Source: React.FC<Step1SourceProps>;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type SheetMetadataTab } from '../../../../services/sheetsVerificationService';
|
|
3
|
+
import type { AccessStatus } from '../hooks/useSheetVerification';
|
|
4
|
+
export interface Step1SourceRangeProps {
|
|
5
|
+
sheetUrl: string;
|
|
6
|
+
setSheetUrl: (url: string) => void;
|
|
7
|
+
accessStatus: AccessStatus;
|
|
8
|
+
statusMessage: string;
|
|
9
|
+
discoveredTabs: SheetMetadataTab[];
|
|
10
|
+
tabName: string;
|
|
11
|
+
sheetGid?: string;
|
|
12
|
+
setTabName: (tab: string) => void;
|
|
13
|
+
executeVerification: (url: string) => void;
|
|
14
|
+
handleTabChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;
|
|
15
|
+
onResync?: () => void;
|
|
16
|
+
isSyncing?: boolean;
|
|
17
|
+
range: string;
|
|
18
|
+
isRangeValid: boolean;
|
|
19
|
+
isSelectingRange: boolean;
|
|
20
|
+
setIsSelectingRange: (val: boolean | ((prev: boolean) => boolean)) => void;
|
|
21
|
+
executeSync: (url?: string, tab?: string, gid?: string) => Promise<void> | void;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Step1SourceRange Component
|
|
25
|
+
* Folio Engine — Task 13.1: Full-Viewport Edge-to-Edge Spreadsheet Studio
|
|
26
|
+
*
|
|
27
|
+
* Streamlines Google Sheet connection and cell range selection into
|
|
28
|
+
* a single focused setup panel. Range selection is triggered interactively
|
|
29
|
+
* across the wide edge-to-edge sheet preview on the left.
|
|
30
|
+
*/
|
|
31
|
+
export declare const Step1SourceRange: React.FC<Step1SourceRangeProps>;
|
|
32
|
+
export default Step1SourceRange;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface Step2DataRangeProps {
|
|
3
|
+
range: string;
|
|
4
|
+
setRange: (val: string) => void;
|
|
5
|
+
isRangeValid: boolean;
|
|
6
|
+
executeSync: () => void;
|
|
7
|
+
isSyncing: boolean;
|
|
8
|
+
excludeSummaryRows: boolean;
|
|
9
|
+
setExcludeSummaryRows: (val: boolean) => void;
|
|
10
|
+
transpose: boolean;
|
|
11
|
+
setTranspose: (val: boolean) => void;
|
|
12
|
+
liveMatrix: (string | number | null)[][];
|
|
13
|
+
}
|
|
14
|
+
export declare const Step2DataRange: React.FC<Step2DataRangeProps>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ChartConfigFormReturn } from '../hooks/useChartConfigForm';
|
|
3
|
+
export type ChartSetupSubTab = 'style' | 'data' | 'sorting';
|
|
4
|
+
interface Step3ChartSetupProps {
|
|
5
|
+
form: ChartConfigFormReturn;
|
|
6
|
+
detectedColumns: Array<{
|
|
7
|
+
index: number;
|
|
8
|
+
label: string;
|
|
9
|
+
}>;
|
|
10
|
+
accentColor: string;
|
|
11
|
+
setupSubTab: ChartSetupSubTab;
|
|
12
|
+
setSetupSubTab: (tab: ChartSetupSubTab) => void;
|
|
13
|
+
handleSubTabKeyDown: (e: React.KeyboardEvent) => void;
|
|
14
|
+
handleToggleSeries: (colIdx: number) => void;
|
|
15
|
+
}
|
|
16
|
+
export declare const Step3ChartSetup: React.FC<Step3ChartSetupProps>;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ChartType, ChartDataset } from '../../../../types/chart';
|
|
3
|
+
interface Step4ReviewProps {
|
|
4
|
+
isSyncing: boolean;
|
|
5
|
+
previewDataset: ChartDataset | null;
|
|
6
|
+
chartType: ChartType;
|
|
7
|
+
accentColor: string;
|
|
8
|
+
range: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const Step4Review: React.FC<Step4ReviewProps>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure SVG Chart Presentation Layer & Data Visualizers
|
|
3
|
+
* Folio Engine
|
|
4
|
+
* Document Reference: docs/tasks/task7_3_pure_svg_visualizers_mobile_purge.md &
|
|
5
|
+
* docs/tasks/task7_4_drawer_range_matrix_supabase_deploy.md &
|
|
6
|
+
* docs/tasks/task7_8_5_canonical_chart_drawer_elements.md
|
|
7
|
+
*/
|
|
8
|
+
export { BarChart, type BarChartProps } from './BarChart';
|
|
9
|
+
export { LineChart, type LineChartProps } from './LineChart';
|
|
10
|
+
export { DonutChart, type DonutChartProps } from './DonutChart';
|
|
11
|
+
export { ScatterPlot, type ScatterPlotProps } from './ScatterPlot';
|
|
12
|
+
export { HistogramChart, type HistogramChartProps } from './HistogramChart';
|
|
13
|
+
export { ChartTooltip, type ChartTooltipProps } from './ChartTooltip';
|
|
14
|
+
export { ChartRouter, type ChartRouterProps } from './ChartRouter';
|
|
15
|
+
export { RangePreviewMatrix, type RangePreviewMatrixProps } from './RangePreviewMatrix';
|
|
16
|
+
export { ChartConfigDrawer, type ChartConfigDrawerProps } from './ChartConfigDrawer';
|
|
17
|
+
export { ChartCard, type ChartCardProps } from './ChartCard';
|
|
18
|
+
export { DataPendingCard, type DataPendingCardProps } from './DataPendingCard';
|
|
19
|
+
export { ChartGhostWireframe, type ChartGhostWireframeProps } from './ChartGhostWireframe';
|
|
20
|
+
export { ChartSortingControls, type ChartSortingControlsProps, type ChartSortingSeriesOption } from './ChartSortingControls';
|
|
21
|
+
export { ChartLegend, type ChartLegendProps, type ChartLegendItem } from './ChartLegend';
|
|
22
|
+
export { ChartTableModal, type ChartTableModalProps } from './ChartTableModal';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* DevExitConfirmModal Component
|
|
4
|
+
* Folio Engine — Developer Mode Exit Safeguard
|
|
5
|
+
*
|
|
6
|
+
* Implements:
|
|
7
|
+
* Case A (Clean State): 1-click confirmation "Exit Developer Mode"
|
|
8
|
+
* Case B (Dirty State): "You have unpublished changes. Drafts will not be kept once you exit."
|
|
9
|
+
* - [Publish & Exit]
|
|
10
|
+
* - [Discard Draft & Exit]
|
|
11
|
+
* - [Keep Editing]
|
|
12
|
+
*/
|
|
13
|
+
export declare const DevExitConfirmModal: React.FC;
|
|
14
|
+
export default DevExitConfirmModal;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { PublishedSnapshot } from '../../types/history';
|
|
3
|
+
export interface DevPublishModalProps {
|
|
4
|
+
isOpen: boolean;
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
onPublished?: (snapshot: PublishedSnapshot, cloudSynced?: boolean) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const DevPublishModal: React.FC<DevPublishModalProps>;
|
|
9
|
+
export default DevPublishModal;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { CanvasModalMode, CanvasModalElementType, CanvasElementFormData } from '../../types/canvas';
|
|
3
|
+
import type { DevEditType, DevLinkData, DevImageData, DevFileData } from '../../types/developer';
|
|
4
|
+
export interface UniversalEditModalProps {
|
|
5
|
+
isOpen: boolean;
|
|
6
|
+
onClose: () => void;
|
|
7
|
+
mode?: CanvasModalMode;
|
|
8
|
+
elementType?: CanvasModalElementType | null;
|
|
9
|
+
nodeId?: string;
|
|
10
|
+
itemId?: string;
|
|
11
|
+
initialData?: CanvasElementFormData;
|
|
12
|
+
targetSectionId?: string;
|
|
13
|
+
targetIndex?: number;
|
|
14
|
+
targetSubsectionId?: string;
|
|
15
|
+
onSubmit?: (data: CanvasElementFormData) => void;
|
|
16
|
+
onResetToDefault?: () => void;
|
|
17
|
+
pointId?: string;
|
|
18
|
+
type?: DevEditType;
|
|
19
|
+
currentValue?: string | DevLinkData | DevImageData | DevFileData;
|
|
20
|
+
defaultValue?: string | DevLinkData | DevImageData | DevFileData;
|
|
21
|
+
title?: string;
|
|
22
|
+
isSection?: boolean;
|
|
23
|
+
isNumbered?: boolean;
|
|
24
|
+
defaultNumbered?: boolean;
|
|
25
|
+
onNumberedChange?: (isNumbered: boolean) => void;
|
|
26
|
+
onSave?: (newValue: string, type?: DevEditType, data?: DevLinkData | DevImageData | DevFileData) => void;
|
|
27
|
+
onReset?: () => void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* UniversalEditModal Component
|
|
31
|
+
* Folio Engine — Task 10.6: Universal Edit Modal Unification
|
|
32
|
+
*
|
|
33
|
+
* Unifies all portal and canvas edit affordances into a single canonical modal:
|
|
34
|
+
* - Handles Dynamic Canvas Elements (Section, Subsection, Narrative Text, Photo, Gallery)
|
|
35
|
+
* - Handles Generic Portal Strings (Hero titles, Mission/Vision, Roadmap milestones, Footer, Links, Documents)
|
|
36
|
+
* - Strict Draft-Only persistence: All mutations target the draft sandbox
|
|
37
|
+
* - Universal Zero Outline Policy, 100% Token Purity, Zero Divider Lines
|
|
38
|
+
*/
|
|
39
|
+
export declare const UniversalEditModal: React.FC<UniversalEditModalProps>;
|
|
40
|
+
export default UniversalEditModal;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { DevPinModal } from './DevPinModal';
|
|
2
|
+
export { DevModeBadge } from './DevModeBadge';
|
|
3
|
+
export { DevActionAffordance } from './DevActionAffordance';
|
|
4
|
+
export { UniversalEditModal } from './UniversalEditModal';
|
|
5
|
+
export type { UniversalEditModalProps } from './UniversalEditModal';
|
|
6
|
+
export { DevLockBlockedModal } from './DevLockBlockedModal';
|
|
7
|
+
export { DevExitConfirmModal } from './DevExitConfirmModal';
|
|
8
|
+
export { DevPublishModal } from './DevPublishModal';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface EmptyStateProps {
|
|
3
|
+
title?: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
actionText?: string;
|
|
6
|
+
actionLabel?: string;
|
|
7
|
+
variant?: string;
|
|
8
|
+
onAction?: () => void;
|
|
9
|
+
className?: string;
|
|
10
|
+
[key: string]: any;
|
|
11
|
+
}
|
|
12
|
+
export declare const EmptyState: React.FC<EmptyStateProps>;
|
|
13
|
+
export default EmptyState;
|