From 641e44d3185e3f4af3be164cf7ee303c1ee25cdb Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 2 Nov 2026 12:20:32 +0000 Subject: [PATCH] refactor(ui)!: retire zero-consumer exports from plugin-gantt and plugin-designer plugin-gantt's entry stops publishing nineteen names nothing outside the package reads (the quick-filter bar, the resource-workload grid, the workload math, the shift-band helpers and normalizeDependencies, with their types); plugin-designer's stops publishing six (CollaborationProvider, ConnectionStatusIndicator, useClipboard, useMultiSelect, useCanvasPanZoom, PropertyEditor). Every module stays; the READMEs stop teaching the names. Types a kept export's signature needs stay public. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_01QsR2jTqpZ1sWR3BcpiFGa3 --- ...gin-designer-internal-helpers-off-entry.md | 18 ++++++ ...plugin-gantt-internal-helpers-off-entry.md | 19 ++++++ ui/packages/plugin-designer/README.md | 64 ++++--------------- ui/packages/plugin-designer/src/index.tsx | 12 ++-- ui/packages/plugin-gantt/README.md | 27 ++------ ui/packages/plugin-gantt/src/index.tsx | 38 ++++------- 6 files changed, 71 insertions(+), 107 deletions(-) create mode 100644 .changeset/25921-plugin-designer-internal-helpers-off-entry.md create mode 100644 .changeset/25921-plugin-gantt-internal-helpers-off-entry.md diff --git a/.changeset/25921-plugin-designer-internal-helpers-off-entry.md b/.changeset/25921-plugin-designer-internal-helpers-off-entry.md new file mode 100644 index 00000000000..3174a211876 --- /dev/null +++ b/.changeset/25921-plugin-designer-internal-helpers-off-entry.md @@ -0,0 +1,18 @@ +--- +'@object-ui/plugin-designer': patch +--- + +refactor(plugin-designer)!: retire six zero-consumer exports (the collaboration provider and its status indicator, three canvas hooks and the property editor) + +Clause-②: yes (narrowing) +Metadata-protocol: none + + + +**BREAKING** for a host that imports any of these six names from `@object-ui/plugin-designer`. None had an importer anywhere in the workspace or in hotcrm, so the Console and every `@object-ui/*` package are unaffected. Every module stays in the package (the four designers keep using the hooks and the property panel internally); only the entry stops publishing them. The designers, their `…Props` types, `useUndoRedo`, `useDesignerHistory`, `useConfirmDialog`, `ConfirmDialog`, `Minimap`, `VersionHistory`, the app pages and the metadata pages stay exported unchanged. + +What leaves, and what to write instead (none has a replacement export): + +- FROM `CollaborationProvider`, `ConnectionStatusIndicator` TO no replacement: render the designers without the wrapper; real-time co-editing is no longer offered from outside the package. +- FROM `useClipboard`, `useMultiSelect`, `useCanvasPanZoom` TO no replacement: the designer canvases already copy/paste, multi-select and pan/zoom on their own; keep a local copy of the hook if you used it in your own canvas. +- FROM `PropertyEditor` TO no replacement: the designers render their own property panel; for a form of your own, use `SchemaRenderer` with a form schema. diff --git a/.changeset/25921-plugin-gantt-internal-helpers-off-entry.md b/.changeset/25921-plugin-gantt-internal-helpers-off-entry.md new file mode 100644 index 00000000000..e0fcb2f5202 --- /dev/null +++ b/.changeset/25921-plugin-gantt-internal-helpers-off-entry.md @@ -0,0 +1,19 @@ +--- +'@object-ui/plugin-gantt': patch +--- + +refactor(plugin-gantt)!: retire nineteen zero-consumer exports (the quick-filter bar, the resource-workload grid, the workload math and the shift-band helpers) + +Clause-②: yes (narrowing) +Metadata-protocol: none + + + +**BREAKING** for a host that imports any of these nineteen names from `@object-ui/plugin-gantt`. None had an importer anywhere in the workspace or in hotcrm, so the Console and every `@object-ui/*` package are unaffected. Every module stays in the package (`ObjectGantt` still renders the quick-filter bar, the resource view and the shift bands from them); only the entry stops publishing them. `ObjectGantt`, `ObjectGanttRenderer`, `GanttView`, the task, dependency, link and marker types, `normalizeTaskType`, `parseHHMM` and the `NormShiftSegments` / `NormShiftBand` types that `GanttViewProps.shiftSegments` takes stay exported unchanged. + +What leaves, and what to write instead (none has a replacement export): + +- FROM `QuickFilterBar`, `QuickFilterBarProps`, `QuickFilterField`, `QuickFilterOption`, `QuickFilterLabels`, `QuickFilterDef` TO no replacement: declare `gantt.quickFilters` on the `object-gantt` node and let `ObjectGantt` draw the bar. +- FROM `ResourceWorkload`, `ResourceWorkloadProps`, `computeWorkload`, `WorkloadColumn`, `WorkloadOptions`, `ResourceCell`, `ResourceLoad` TO no replacement: set `gantt.resourceView: true` with `assigneeField` (and optionally `effortField` / `capacity`) and let `ObjectGantt` render the workload grid. +- FROM `normalizeShiftSegments`, `shiftDayStart`, `bandAt`, `ShiftSegmentsConfig`, `ShiftBandConfig` TO no replacement: declare `gantt.timeSegments`; to drive `GanttView` directly, pass `shiftSegments` already in the `NormShiftSegments` shape. +- FROM `normalizeDependencies` TO no replacement: give each `GanttTask` you pass to `GanttView` a `dependencies` array of ids or `{ id, type }` objects (`GanttDependency[]`). diff --git a/ui/packages/plugin-designer/README.md b/ui/packages/plugin-designer/README.md index 476ffc16987..271a747d84f 100644 --- a/ui/packages/plugin-designer/README.md +++ b/ui/packages/plugin-designer/README.md @@ -1,6 +1,6 @@ # @object-ui/plugin-designer -Visual designers for Object UI — page, data model, process, and report designers with collaboration support. +Visual designers for Object UI — page, data model, process, and report designers. ## Features @@ -8,11 +8,10 @@ Visual designers for Object UI — page, data model, process, and report designe - 🗄️ **Data Model Designer** - Entity-relationship diagram editor with auto-layout - ⚙️ **Process Designer** - BPMN-style process flow editor with minimap - 📝 **Report Designer** - Visual report layout builder with sections -- 🤝 **Collaboration Provider** - Real-time multi-user editing with connection status - ↩️ **Undo/Redo** - Full undo/redo history via `useUndoRedo` -- 📋 **Clipboard** - Copy/paste support via `useClipboard` -- 🔲 **Multi-Select** - Bulk selection via `useMultiSelect` -- 🔍 **Canvas Pan/Zoom** - Smooth pan and zoom via `useCanvasPanZoom` +- 📋 **Clipboard** - Copy/paste inside the designer canvases +- 🔲 **Multi-Select** - Bulk selection inside the designer canvases +- 🔍 **Canvas Pan/Zoom** - Smooth pan and zoom on the page, data model and process canvases - 🗺️ **Minimap** - Overview minimap for large canvases - 📦 **Auto-registered** - Components register with `ComponentRegistry` on import @@ -30,14 +29,8 @@ npm install @object-ui/plugin-designer ## Quick Start ```tsx -import { CollaborationProvider, PageDesigner } from '@object-ui/plugin-designer'; -import type { CollaborationConfig, DesignerComponent } from '@object-ui/types'; - -const collaboration: CollaborationConfig = { - enabled: true, - roomId: 'landing-page', - showCursors: true, -}; +import { PageDesigner } from '@object-ui/plugin-designer'; +import type { DesignerComponent } from '@object-ui/types'; const componentList: DesignerComponent[] = [ { @@ -51,13 +44,11 @@ const componentList: DesignerComponent[] = [ function DesignerApp() { return ( - - - + ); } ``` @@ -131,50 +122,21 @@ declare const sections: ReportDesignerSection[]; ; ``` -### CollaborationProvider / ConnectionStatusIndicator - -Multi-user real-time editing support: - -```tsx -import { - CollaborationProvider, - ConnectionStatusIndicator, - PageDesigner, -} from '@object-ui/plugin-designer'; -import type { CollaborationConfig } from '@object-ui/types'; - -declare const collaboration: CollaborationConfig; - - - - -; -``` - ### Shared Hooks ```tsx -import { - useUndoRedo, - useClipboard, - useMultiSelect, - useCanvasPanZoom, - useConfirmDialog, -} from '@object-ui/plugin-designer'; +import { useUndoRedo, useConfirmDialog } from '@object-ui/plugin-designer'; import type { DesignerComponent } from '@object-ui/types'; const { undo, redo, canUndo, canRedo } = useUndoRedo([]); -const { clipboard, copy, paste, hasContent } = useClipboard(); -const { selectedIds, selectOne, selectMany, clearSelection } = useMultiSelect(); -const { zoom, panOffset, zoomIn, zoomOut, resetZoom } = useCanvasPanZoom(); const { confirm, isOpen } = useConfirmDialog(); ``` ### Shared Components ```tsx -import { ConfirmDialog, Minimap, PropertyEditor, VersionHistory } from '@object-ui/plugin-designer'; +import { ConfirmDialog, Minimap, VersionHistory } from '@object-ui/plugin-designer'; ``` ## Links diff --git a/ui/packages/plugin-designer/src/index.tsx b/ui/packages/plugin-designer/src/index.tsx index 8eb8198cdd9..d5b79bfd613 100644 --- a/ui/packages/plugin-designer/src/index.tsx +++ b/ui/packages/plugin-designer/src/index.tsx @@ -11,7 +11,6 @@ import { PageDesigner } from './PageDesigner'; import { DataModelDesigner } from './DataModelDesigner'; import { ProcessDesigner } from './ProcessDesigner'; import { ReportDesigner } from './ReportDesigner'; -import { CollaborationProvider, ConnectionStatusIndicator } from './CollaborationProvider'; import { AppCreationWizard } from './AppCreationWizard'; import { NavigationDesigner } from './NavigationDesigner'; import { EditorModeToggle } from './EditorModeToggle'; @@ -25,8 +24,6 @@ export { DataModelDesigner, ProcessDesigner, ReportDesigner, - CollaborationProvider, - ConnectionStatusIndicator, AppCreationWizard, NavigationDesigner, EditorModeToggle, @@ -44,13 +41,13 @@ export type { BrandingEditorProps } from './BrandingEditor'; export type { ObjectManagerProps } from './ObjectManager'; export type { FieldDesignerProps } from './FieldDesigner'; -// Shared hooks +// Shared hooks. The clipboard, multi-select and pan/zoom hooks, the +// `PropertyEditor` panel and the collaboration provider with its status +// indicator are the designers' internals: nothing outside this package read +// them, so they stay module-local. export { useUndoRedo } from './hooks/useUndoRedo'; export { useDesignerHistory } from './hooks/useDesignerHistory'; export { useConfirmDialog } from './hooks/useConfirmDialog'; -export { useClipboard } from './hooks/useClipboard'; -export { useMultiSelect } from './hooks/useMultiSelect'; -export { useCanvasPanZoom } from './hooks/useCanvasPanZoom'; // The provider-less fallback table, exported so objectui#4401's mirror gate can // compare it against the `en` pack from a package that depends on both. export { DESIGNER_DEFAULT_TRANSLATIONS } from './hooks/useDesignerTranslation'; @@ -58,7 +55,6 @@ export { DESIGNER_DEFAULT_TRANSLATIONS } from './hooks/useDesignerTranslation'; // Shared components export { ConfirmDialog } from './components/ConfirmDialog'; export { Minimap } from './components/Minimap'; -export { PropertyEditor } from './components/PropertyEditor'; export { VersionHistory } from './components/VersionHistory'; // Route-ready app authoring pages — host apps mount these at their diff --git a/ui/packages/plugin-gantt/README.md b/ui/packages/plugin-gantt/README.md index 417bd167227..922459baf59 100644 --- a/ui/packages/plugin-gantt/README.md +++ b/ui/packages/plugin-gantt/README.md @@ -196,15 +196,8 @@ import { ObjectGantt, // ObjectQL-integrated gantt: loads records, writes back edits ObjectGanttRenderer, // the registered renderer for `object-gantt` GanttView, // the standalone timeline component - QuickFilterBar, // the toolbar's quick-filter dropdowns - ResourceWorkload, // resource × period workload grid - normalizeDependencies, // raw dependency-field value -> GanttDependency[] normalizeTaskType, // raw type-field value -> GanttTaskType - normalizeShiftSegments, // raw timeSegments config -> NormShiftSegments - parseHHMM, - shiftDayStart, - bandAt, - computeWorkload, + parseHHMM, // 'HH:MM' -> minutes after midnight } from '@object-ui/plugin-gantt'; import type { @@ -217,23 +210,15 @@ import type { GanttDependencyObject, GanttLinkType, GanttMarker, - QuickFilterDef, - QuickFilterBarProps, - QuickFilterField, - QuickFilterOption, - QuickFilterLabels, - ShiftSegmentsConfig, - ShiftBandConfig, - NormShiftSegments, + NormShiftSegments, // the shape GanttViewProps.shiftSegments takes NormShiftBand, - ResourceWorkloadProps, - WorkloadColumn, - WorkloadOptions, - ResourceCell, - ResourceLoad, } from '@object-ui/plugin-gantt'; ``` +The quick-filter bar, the resource-workload grid and the shift-band helpers +are `ObjectGantt` internals and are not exported; configure them through the +`gantt` block (`quickFilters`, `resourceView`, `timeSegments`) instead. + To serve the gantt under a registry key of your own, register the exported renderer under that key: diff --git a/ui/packages/plugin-gantt/src/index.tsx b/ui/packages/plugin-gantt/src/index.tsx index 84a1f0ef01f..3886808c5d4 100644 --- a/ui/packages/plugin-gantt/src/index.tsx +++ b/ui/packages/plugin-gantt/src/index.tsx @@ -16,16 +16,13 @@ import { import { useObjectTranslation } from '@object-ui/i18n'; import { ObjectGantt, type ObjectGanttProps } from './ObjectGantt'; +// The entry publishes what a host composes with: the two gantt components, the +// renderer, the timeline's task/marker vocabulary and the two helpers read +// outside this package. The quick-filter bar, the resource-workload grid, the +// workload math and the shift-band helpers are ObjectGantt's internals, read by +// nothing outside it, so they stay module-local (each module keeps its tests). export { ObjectGantt }; -export type { ObjectGanttProps, QuickFilterDef } from './ObjectGantt'; - -export { QuickFilterBar } from './QuickFilterBar'; -export type { - QuickFilterBarProps, - QuickFilterField, - QuickFilterOption, - QuickFilterLabels, -} from './QuickFilterBar'; +export type { ObjectGanttProps } from './ObjectGantt'; export { GanttView } from './GanttView'; export type { @@ -38,25 +35,12 @@ export type { GanttLinkType, GanttMarker, } from './GanttView'; -export { normalizeDependencies, normalizeTaskType } from './ObjectGantt'; +export { normalizeTaskType } from './ObjectGantt'; -export { normalizeShiftSegments, parseHHMM, shiftDayStart, bandAt } from './shifts'; -export type { - ShiftSegmentsConfig, - ShiftBandConfig, - NormShiftSegments, - NormShiftBand, -} from './shifts'; - -export { ResourceWorkload } from './ResourceWorkload'; -export type { ResourceWorkloadProps } from './ResourceWorkload'; -export { computeWorkload } from './workload'; -export type { - WorkloadColumn, - WorkloadOptions, - ResourceCell, - ResourceLoad, -} from './workload'; +export { parseHHMM } from './shifts'; +// `GanttViewProps.shiftSegments` is typed by these two, so they stay public +// with `GanttView`. +export type { NormShiftSegments, NormShiftBand } from './shifts'; /** * What `ObjectGantt` reads for its own query: `objectName` (via `getDataConfig`,