@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.
Files changed (193) hide show
  1. package/dist/App.d.ts +7 -0
  2. package/dist/components/canvas/CanvasAddBar.d.ts +28 -0
  3. package/dist/components/canvas/CanvasAddModal.d.ts +38 -0
  4. package/dist/components/canvas/CanvasChart.d.ts +23 -0
  5. package/dist/components/canvas/CanvasDeleteConfirmModal.d.ts +21 -0
  6. package/dist/components/canvas/CanvasGallery.d.ts +20 -0
  7. package/dist/components/canvas/CanvasItemControls.d.ts +33 -0
  8. package/dist/components/canvas/CanvasPhoto.d.ts +28 -0
  9. package/dist/components/canvas/CanvasSection.d.ts +27 -0
  10. package/dist/components/canvas/CanvasSubsection.d.ts +23 -0
  11. package/dist/components/canvas/CanvasText.d.ts +23 -0
  12. package/dist/components/canvas/DocumentCanvas.d.ts +20 -0
  13. package/dist/components/canvas/HeroPhoto.d.ts +17 -0
  14. package/dist/components/canvas/NodeCanvas.d.ts +2 -0
  15. package/dist/components/canvas/index.d.ts +17 -0
  16. package/dist/components/chart/BarChart.d.ts +23 -0
  17. package/dist/components/chart/ChartCard.d.ts +33 -0
  18. package/dist/components/chart/ChartConfigDrawer.d.ts +16 -0
  19. package/dist/components/chart/ChartGhostWireframe.d.ts +16 -0
  20. package/dist/components/chart/ChartLegend.d.ts +14 -0
  21. package/dist/components/chart/ChartRouter.d.ts +8 -0
  22. package/dist/components/chart/ChartSortingControls.d.ts +15 -0
  23. package/dist/components/chart/ChartTableModal.d.ts +26 -0
  24. package/dist/components/chart/ChartTooltip.d.ts +12 -0
  25. package/dist/components/chart/DataPendingCard.d.ts +28 -0
  26. package/dist/components/chart/DonutChart.d.ts +16 -0
  27. package/dist/components/chart/HistogramChart.d.ts +23 -0
  28. package/dist/components/chart/LineChart.d.ts +22 -0
  29. package/dist/components/chart/RangePreviewMatrix.d.ts +19 -0
  30. package/dist/components/chart/ScatterPlot.d.ts +21 -0
  31. package/dist/components/chart/drawer/controls/BarVisualControls.d.ts +9 -0
  32. package/dist/components/chart/drawer/controls/ChartTitlesSection.d.ts +15 -0
  33. package/dist/components/chart/drawer/controls/DonutVisualControls.d.ts +7 -0
  34. package/dist/components/chart/drawer/controls/HistogramVisualControls.d.ts +13 -0
  35. package/dist/components/chart/drawer/controls/LineVisualControls.d.ts +14 -0
  36. package/dist/components/chart/drawer/controls/ScatterDataControls.d.ts +17 -0
  37. package/dist/components/chart/drawer/controls/ScatterVisualControls.d.ts +23 -0
  38. package/dist/components/chart/drawer/controls/SortingAndOrderControls.d.ts +18 -0
  39. package/dist/components/chart/drawer/controls/StandardDataControls.d.ts +31 -0
  40. package/dist/components/chart/drawer/hooks/useChartConfigForm.d.ts +156 -0
  41. package/dist/components/chart/drawer/hooks/useLiveMatrixSync.d.ts +21 -0
  42. package/dist/components/chart/drawer/hooks/useSheetVerification.d.ts +26 -0
  43. package/dist/components/chart/drawer/index.d.ts +17 -0
  44. package/dist/components/chart/drawer/panels/Step1Source.d.ts +18 -0
  45. package/dist/components/chart/drawer/panels/Step1SourceRange.d.ts +32 -0
  46. package/dist/components/chart/drawer/panels/Step2DataRange.d.ts +15 -0
  47. package/dist/components/chart/drawer/panels/Step3ChartSetup.d.ts +17 -0
  48. package/dist/components/chart/drawer/panels/Step4Review.d.ts +11 -0
  49. package/dist/components/chart/index.d.ts +22 -0
  50. package/dist/components/dev/DevActionAffordance.d.ts +4 -0
  51. package/dist/components/dev/DevExitConfirmModal.d.ts +14 -0
  52. package/dist/components/dev/DevLockBlockedModal.d.ts +3 -0
  53. package/dist/components/dev/DevModeBadge.d.ts +3 -0
  54. package/dist/components/dev/DevPinModal.d.ts +3 -0
  55. package/dist/components/dev/DevPublishModal.d.ts +9 -0
  56. package/dist/components/dev/UniversalEditModal.d.ts +40 -0
  57. package/dist/components/dev/index.d.ts +8 -0
  58. package/dist/components/feedback/EmptyState.d.ts +13 -0
  59. package/dist/components/feedback/PageNotFound.d.ts +15 -0
  60. package/dist/components/feedback/Toast.d.ts +25 -0
  61. package/dist/components/feedback/index.d.ts +2 -0
  62. package/dist/components/history/HistoryHubModal.d.ts +44 -0
  63. package/dist/components/history/index.d.ts +1 -0
  64. package/dist/components/layout/AppFooter.d.ts +10 -0
  65. package/dist/components/layout/AppHeader.d.ts +22 -0
  66. package/dist/components/layout/EditorialSection.d.ts +27 -0
  67. package/dist/components/layout/EditorialSidebar.d.ts +34 -0
  68. package/dist/components/layout/HeroSection.d.ts +2 -0
  69. package/dist/components/layout/HeroWelcome.d.ts +11 -0
  70. package/dist/components/layout/SearchField.d.ts +9 -0
  71. package/dist/components/layout/StatusPill.d.ts +2 -0
  72. package/dist/components/layout/index.d.ts +8 -0
  73. package/dist/components/roadmap/RoadmapNode.d.ts +30 -0
  74. package/dist/components/roadmap/RoadmapSection.d.ts +27 -0
  75. package/dist/components/roadmap/RoadmapTrack.d.ts +25 -0
  76. package/dist/components/roadmap/serpentine-generator.d.ts +60 -0
  77. package/dist/components/roadmap/use-roadmap-scroll.d.ts +19 -0
  78. package/dist/components/source/EditPhotoModal.d.ts +22 -0
  79. package/dist/components/source/LightboxPhotoStrip.d.ts +23 -0
  80. package/dist/components/source/LinkFolderModal.d.ts +24 -0
  81. package/dist/components/source/SourceCard.d.ts +31 -0
  82. package/dist/components/source/SourceFolderAttachment.d.ts +25 -0
  83. package/dist/components/source/SourceGallery.d.ts +26 -0
  84. package/dist/components/source/SourceImage.d.ts +26 -0
  85. package/dist/components/source/SourceLightbox.d.ts +28 -0
  86. package/dist/components/source/index.d.ts +9 -0
  87. package/dist/components/ui/AccordionSection.d.ts +21 -0
  88. package/dist/components/ui/Breadcrumb.d.ts +29 -0
  89. package/dist/components/ui/Button.d.ts +31 -0
  90. package/dist/components/ui/ColumnSelect.d.ts +17 -0
  91. package/dist/components/ui/ColumnTypeBadge.d.ts +6 -0
  92. package/dist/components/ui/DevHelpTooltip.d.ts +11 -0
  93. package/dist/components/ui/DraggableRows.d.ts +21 -0
  94. package/dist/components/ui/Drawer.d.ts +50 -0
  95. package/dist/components/ui/DrawerTier.d.ts +8 -0
  96. package/dist/components/ui/EditableText.d.ts +48 -0
  97. package/dist/components/ui/FAB.d.ts +24 -0
  98. package/dist/components/ui/Modal.d.ts +24 -0
  99. package/dist/components/ui/PageTitle.d.ts +33 -0
  100. package/dist/components/ui/ParametricShape.d.ts +57 -0
  101. package/dist/components/ui/RevolvingButton.d.ts +5 -0
  102. package/dist/components/ui/SectionTitle.d.ts +42 -0
  103. package/dist/components/ui/SeriesSelectToolbar.d.ts +10 -0
  104. package/dist/components/ui/StatusPill.d.ts +21 -0
  105. package/dist/components/ui/TieredSlider.d.ts +19 -0
  106. package/dist/components/ui/Toast.d.ts +1 -0
  107. package/dist/components/ui/ValueLabelToggle.d.ts +10 -0
  108. package/dist/components/ui/index.d.ts +21 -0
  109. package/dist/config/engine.config.d.ts +162 -0
  110. package/dist/context/DeveloperModeContext.d.ts +11 -0
  111. package/dist/context/UndoRedoContext.d.ts +20 -0
  112. package/dist/diagnostics/verifyEngineSetup.d.ts +30 -0
  113. package/dist/diagnostics-CpGr1hhi.js +126 -0
  114. package/dist/diagnostics-Dw5PzR78.cjs +5 -0
  115. package/dist/diagnostics.cjs +1 -0
  116. package/dist/diagnostics.d.ts +10 -0
  117. package/dist/diagnostics.js +14 -0
  118. package/dist/edge-1WCVZ0J7.cjs +1 -0
  119. package/dist/edge-CSjifIhA.js +2709 -0
  120. package/dist/edge-Dr41JdrQ.cjs +34 -0
  121. package/dist/edge-h_ge9f1E.js +512 -0
  122. package/dist/edge.cjs +1 -0
  123. package/dist/edge.d.ts +10 -0
  124. package/dist/edge.js +26 -0
  125. package/dist/folio.cjs +9 -0
  126. package/dist/folio.js +21895 -0
  127. package/dist/hooks/use-auto-toc.d.ts +31 -0
  128. package/dist/hooks/use-discrete-step-navigation.d.ts +26 -0
  129. package/dist/hooks/use-dynamic-section-numbers.d.ts +30 -0
  130. package/dist/hooks/use-hash-route.d.ts +36 -0
  131. package/dist/hooks/use-scroll.d.ts +22 -0
  132. package/dist/hooks/use-scrollspy.d.ts +19 -0
  133. package/dist/hooks/useChartTooltip.d.ts +25 -0
  134. package/dist/hooks/useContent.d.ts +36 -0
  135. package/dist/hooks/useDeveloperMode.d.ts +1 -0
  136. package/dist/hooks/useDocumentCanvas.d.ts +53 -0
  137. package/dist/hooks/useDrivePhotoSync.d.ts +15 -0
  138. package/dist/hooks/useImageLoader.d.ts +12 -0
  139. package/dist/hooks/useLightboxHistory.d.ts +14 -0
  140. package/dist/hooks/useNodeCanvas.d.ts +2 -0
  141. package/dist/hooks/useSheetChartData.d.ts +31 -0
  142. package/dist/hooks/useSourcePoint.d.ts +35 -0
  143. package/dist/hooks/useSwipeGesture.d.ts +30 -0
  144. package/dist/hooks/useUndoRedo.d.ts +9 -0
  145. package/dist/hooks/useUnsavedChangesPrompt.d.ts +18 -0
  146. package/dist/index.d.ts +53 -0
  147. package/dist/main.d.ts +1 -0
  148. package/dist/services/canvasLayoutService.d.ts +158 -0
  149. package/dist/services/chartSourceService.d.ts +128 -0
  150. package/dist/services/devLockService.d.ts +76 -0
  151. package/dist/services/draftService.d.ts +129 -0
  152. package/dist/services/drivePhotoSyncService.d.ts +60 -0
  153. package/dist/services/driveVerificationService.d.ts +41 -0
  154. package/dist/services/edgePreBakeService.d.ts +81 -0
  155. package/dist/services/historyService.d.ts +215 -0
  156. package/dist/services/historyStorage.d.ts +17 -0
  157. package/dist/services/mediaService.d.ts +25 -0
  158. package/dist/services/sheetsDataService.d.ts +59 -0
  159. package/dist/services/sheetsVerificationService.d.ts +87 -0
  160. package/dist/services/sourceService.d.ts +43 -0
  161. package/dist/services/undoRedoService.d.ts +63 -0
  162. package/dist/services/unsavedChangesService.d.ts +32 -0
  163. package/dist/style.css +1 -0
  164. package/dist/types/canvas.d.ts +115 -0
  165. package/dist/types/chart.d.ts +117 -0
  166. package/dist/types/developer.d.ts +144 -0
  167. package/dist/types/draft.d.ts +21 -0
  168. package/dist/types/edge.d.ts +232 -0
  169. package/dist/types/history.d.ts +81 -0
  170. package/dist/types/media.d.ts +16 -0
  171. package/dist/types/navigation.d.ts +19 -0
  172. package/dist/types/node.d.ts +51 -0
  173. package/dist/types/source.d.ts +88 -0
  174. package/dist/utils/canvasDefaults.d.ts +43 -0
  175. package/dist/utils/chartColors.d.ts +48 -0
  176. package/dist/utils/chartDimensions.d.ts +50 -0
  177. package/dist/utils/chartMath.d.ts +142 -0
  178. package/dist/utils/chartSanitizer.d.ts +84 -0
  179. package/dist/utils/contentDb.d.ts +86 -0
  180. package/dist/utils/devSecurity.d.ts +84 -0
  181. package/dist/utils/mediaUrl.d.ts +32 -0
  182. package/dist/utils/modalActions.d.ts +32 -0
  183. package/dist/utils/node-sections.d.ts +15 -0
  184. package/dist/utils/page-sections.d.ts +1 -0
  185. package/dist/utils/runtime-env.d.ts +21 -0
  186. package/dist/utils/scrollLock.d.ts +10 -0
  187. package/dist/utils/smooth-scroll.d.ts +24 -0
  188. package/dist/utils/source.d.ts +25 -0
  189. package/dist/utils/storage.d.ts +13 -0
  190. package/dist/utils/supabase-config.d.ts +29 -0
  191. package/dist/utils/supabase-write-guard.d.ts +15 -0
  192. package/package.json +68 -4
  193. package/README.md +0 -3
package/dist/App.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ import { type EngineConfig } from "./config/engine.config";
2
+ import React from 'react';
3
+ export interface AppProps {
4
+ config?: Partial<EngineConfig>;
5
+ }
6
+ export declare const App: React.FC<AppProps>;
7
+ export default App;
@@ -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,2 @@
1
+ export { DocumentCanvas as NodeCanvas, type NodeCanvasProps } from "./DocumentCanvas";
2
+ export { DocumentCanvas as default } from "./DocumentCanvas";
@@ -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;