@hankchen/canvas-editor-vue 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +22 -2
- package/dist/canvas/AlignFloatBar.d.ts +6 -0
- package/dist/canvas/CanvasSurface.d.ts +131 -0
- package/dist/canvas/ContentTypePill.d.ts +14 -0
- package/dist/canvas/ContextMenu.d.ts +14 -0
- package/dist/canvas/FindBar.d.ts +13 -0
- package/dist/canvas/GuidesOverlay.d.ts +18 -0
- package/dist/canvas/Ruler.d.ts +24 -0
- package/dist/canvas/TextEditingOverlay.d.ts +70 -0
- package/dist/canvas/createBand.d.ts +6 -0
- package/dist/canvas/findHighlight.d.ts +12 -0
- package/dist/canvas/gizmo.d.ts +24 -0
- package/dist/canvas/guideSnap.d.ts +3 -0
- package/dist/canvas/index.d.ts +20 -0
- package/dist/canvas/resizeHandles.d.ts +3 -0
- package/dist/canvas/scheduler.d.ts +2 -0
- package/dist/canvas/useDpr.d.ts +10 -0
- package/dist/canvas/useFindSession.d.ts +13 -0
- package/dist/canvas/useTextEditing.d.ts +53 -0
- package/dist/canvas-CS4SmrIO.js +1649 -0
- package/dist/canvas.js +2 -0
- package/dist/completionAnchor-4lhR2kJz.js +273 -0
- package/dist/createLucideIcon-CMq8ZKo2.js +96 -0
- package/dist/dist-DuXLYZZ9.js +341 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +16 -0
- package/dist/layer-panel/LayerPanel.d.ts +32 -0
- package/dist/layer-panel/addMenu.d.ts +18 -0
- package/dist/layer-panel/index.d.ts +7 -0
- package/dist/layer-panel/useLayerPanel.d.ts +12 -0
- package/dist/layer-panel-ArP66_vZ.js +652 -0
- package/dist/layer-panel.js +2 -0
- package/dist/layerPath-BRZK9ka1.js +2160 -0
- package/dist/panel-theme.css +254 -0
- package/dist/property-panel/PropertyField.d.ts +65 -0
- package/dist/property-panel/PropertyPanel.d.ts +6 -0
- package/dist/property-panel/controlStyles.d.ts +17 -0
- package/dist/property-panel/controls.d.ts +3 -0
- package/dist/property-panel/fieldSchema.d.ts +116 -0
- package/dist/property-panel/fields/AlignField.d.ts +11 -0
- package/dist/property-panel/fields/AnchorDisclosureField.d.ts +16 -0
- package/dist/property-panel/fields/BooleanField.d.ts +13 -0
- package/dist/property-panel/fields/BorderField.d.ts +14 -0
- package/dist/property-panel/fields/BorderWidthInput.d.ts +14 -0
- package/dist/property-panel/fields/ColorField.d.ts +13 -0
- package/dist/property-panel/fields/FontField.d.ts +15 -0
- package/dist/property-panel/fields/ImageSrcField.d.ts +20 -0
- package/dist/property-panel/fields/NumberField.d.ts +13 -0
- package/dist/property-panel/fields/PaddingField.d.ts +14 -0
- package/dist/property-panel/fields/PairField.d.ts +19 -0
- package/dist/property-panel/fields/SelectField.d.ts +11 -0
- package/dist/property-panel/fields/ShorthandModeButton.d.ts +13 -0
- package/dist/property-panel/fields/TextField.d.ts +13 -0
- package/dist/property-panel/fields/TextareaField.d.ts +13 -0
- package/dist/property-panel/fields/ValueTypeSegmented.d.ts +10 -0
- package/dist/property-panel/fields/index.d.ts +16 -0
- package/dist/property-panel/fontPicker.d.ts +13 -0
- package/dist/property-panel/imageUpload.d.ts +11 -0
- package/dist/property-panel/index.d.ts +13 -0
- package/dist/property-panel/shorthand.d.ts +28 -0
- package/dist/property-panel/usePropertyPanel.d.ts +51 -0
- package/dist/property-panel/useShorthandMode.d.ts +18 -0
- package/dist/property-panel-jt_rsTVW.js +1719 -0
- package/dist/property-panel.js +2 -0
- package/dist/shared/DropdownMenu.d.ts +47 -0
- package/dist/shared/ExpressionCompletionPopup.d.ts +14 -0
- package/dist/shared/HelpDialog.d.ts +12 -0
- package/dist/shared/PanelIcon.d.ts +14 -0
- package/dist/shared/completion.d.ts +49 -0
- package/dist/shared/completionAnchor.d.ts +28 -0
- package/dist/shared/editableTarget.d.ts +5 -0
- package/dist/shared/expressionContext.d.ts +22 -0
- package/dist/shared/index.d.ts +37 -0
- package/dist/shared/rowsPathCompletionSource.d.ts +3 -0
- package/dist/shared/shortcutsHelp.d.ts +30 -0
- package/dist/shared/uploadFile.d.ts +2 -0
- package/dist/shared/useDataSourceSchema.d.ts +3 -0
- package/dist/shared/useDropdownMenu.d.ts +51 -0
- package/dist/shared/useExpressionCompletion.d.ts +45 -0
- package/dist/shared/useHistory.d.ts +7 -0
- package/dist/shared/usePathCompletion.d.ts +18 -0
- package/dist/shared/useSelection.d.ts +3 -0
- package/dist/shared/useShortcuts.d.ts +2 -0
- package/dist/shared/useShortcutsHelp.d.ts +9 -0
- package/dist/shared/useTransientFeedback.d.ts +10 -0
- package/dist/shared/useViewport.d.ts +3 -0
- package/dist/shared-D9zYUQaw.js +123 -0
- package/dist/shared.js +9 -0
- package/dist/status-bar/StatusBar.d.ts +17 -0
- package/dist/status-bar/index.d.ts +9 -0
- package/dist/status-bar/layerGeometryLabel.d.ts +13 -0
- package/dist/status-bar/layerPathLabel.d.ts +2 -0
- package/dist/status-bar/useDoc.d.ts +3 -0
- package/dist/status-bar-BhhrVoBZ.js +194 -0
- package/dist/status-bar.js +2 -0
- package/dist/style.css +2 -0
- package/dist/uploadFile-CutE_xI-.js +330 -0
- package/dist/useDataSourceSchema-C924m8fc.js +237 -0
- package/dist/usePathCompletion-DkHoGla4.js +228 -0
- package/dist/useShortcutsHelp-DTC3yRil.js +19 -0
- package/dist/useTransientFeedback-gS9Xa9GY.js +477 -0
- package/dist/useViewport-BLe2ise1.js +18 -0
- package/package.json +76 -3
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ShorthandMode } from '../shorthand';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
/** 当前模式(决定图标与文案) */
|
|
4
|
+
mode: ShorthandMode;
|
|
5
|
+
/** 领域名词,用于悬停文案(如「内边距」「边框」) */
|
|
6
|
+
label: string;
|
|
7
|
+
};
|
|
8
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
9
|
+
cycle: () => any;
|
|
10
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
11
|
+
onCycle?: (() => any) | undefined;
|
|
12
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLButtonElement>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { FieldDef } from '../fieldSchema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
field: FieldDef;
|
|
4
|
+
modelValue: string;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
7
|
+
input: (value: string) => any;
|
|
8
|
+
change: (value: string) => any;
|
|
9
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
10
|
+
onInput?: ((value: string) => any) | undefined;
|
|
11
|
+
onChange?: ((value: string) => any) | undefined;
|
|
12
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLInputElement>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { FieldDef } from '../fieldSchema';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
field: FieldDef;
|
|
4
|
+
modelValue: string;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
7
|
+
input: (value: string) => any;
|
|
8
|
+
change: (value: string) => any;
|
|
9
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
10
|
+
onInput?: ((value: string) => any) | undefined;
|
|
11
|
+
onChange?: ((value: string) => any) | undefined;
|
|
12
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLTextAreaElement>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
/** 当前取值方式(由图层 expression 标记派生:null → static) */
|
|
3
|
+
mode: 'static' | 'expression';
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
6
|
+
change: (value: "expression" | "static") => any;
|
|
7
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
8
|
+
onChange?: ((value: "expression" | "static") => any) | undefined;
|
|
9
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLSpanElement>;
|
|
10
|
+
export default _default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 字段控件域内出口:controls.ts 经此收集 <component :is> 动态分发的控件集。
|
|
3
|
+
* 控件不进包级公共出口——宿主消费面走属性面板域 barrel 或包根。
|
|
4
|
+
*/
|
|
5
|
+
export { default as AlignField } from './AlignField';
|
|
6
|
+
export { default as AnchorDisclosureField } from './AnchorDisclosureField';
|
|
7
|
+
export { default as BooleanField } from './BooleanField';
|
|
8
|
+
export { default as BorderField } from './BorderField';
|
|
9
|
+
export { default as ColorField } from './ColorField';
|
|
10
|
+
export { default as FontField } from './FontField';
|
|
11
|
+
export { default as NumberField } from './NumberField';
|
|
12
|
+
export { default as PaddingField } from './PaddingField';
|
|
13
|
+
export { default as PairField } from './PairField';
|
|
14
|
+
export { default as SelectField } from './SelectField';
|
|
15
|
+
export { default as TextField } from './TextField';
|
|
16
|
+
export { default as TextareaField } from './TextareaField';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { InjectionKey, Ref } from 'vue';
|
|
2
|
+
import { FontCatalogEntry, UploadFile } from '@hankchen/canvas-editor';
|
|
3
|
+
export interface FontPickerContext {
|
|
4
|
+
/** 字体清单(内置 + 自定义,响应式快照——上传追加后下拉实时联动) */
|
|
5
|
+
readonly entries: Ref<readonly FontCatalogEntry[]>;
|
|
6
|
+
/** 上传可用性(内核 canUpload:未注入 uploadHandler 即 false) */
|
|
7
|
+
readonly canUpload: boolean;
|
|
8
|
+
/** 本机字体 → 可物化引用(内核 uploadFont:引用入清单后返回) */
|
|
9
|
+
readonly uploadFont: (file: UploadFile) => Promise<string>;
|
|
10
|
+
}
|
|
11
|
+
export declare const FONT_PICKER_KEY: InjectionKey<FontPickerContext>;
|
|
12
|
+
/** 控件 setup 内取注入缝;未注入返回 null(控件退化) */
|
|
13
|
+
export declare function injectFontPicker(): FontPickerContext | null;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { InjectionKey } from 'vue';
|
|
2
|
+
import { UploadFile } from '@hankchen/canvas-editor';
|
|
3
|
+
export interface ImageUploadContext {
|
|
4
|
+
/** 上传可用性(内核 canUpload:未注入 uploadHandler 即 false) */
|
|
5
|
+
readonly canUpload: boolean;
|
|
6
|
+
/** 本机图片 → 可物化引用(内核 uploadImage 裸上传:不建层不写文档) */
|
|
7
|
+
readonly uploadImage: (file: UploadFile) => Promise<string | null>;
|
|
8
|
+
}
|
|
9
|
+
export declare const IMAGE_UPLOAD_KEY: InjectionKey<ImageUploadContext>;
|
|
10
|
+
/** 控件 setup 内取注入缝;未注入返回 null(控件退化) */
|
|
11
|
+
export declare function injectImageUpload(): ImageUploadContext | null;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 属性面板域出口:schema 驱动面板——字段描述注册表(fieldSchema)与领域类型、
|
|
3
|
+
* 面板组件与动态控件分发器、面板订阅切片桥(usePropertyPanel)、动态控件
|
|
4
|
+
* 注册表(controls)、Tailwind 类名常量(controlStyles,包内私有)、
|
|
5
|
+
* 字体清单注入缝(fontPicker)与图片上传注入缝(imageUpload)。字段控件集见 ./fields。
|
|
6
|
+
*/
|
|
7
|
+
export { CANVAS_FIELD_SECTIONS, FIELD_SECTIONS_BY_TYPE, fieldSectionsForPath, fieldSectionsForType, layerRoleAt, readField, type FieldControl, type FieldDef, type FieldReadResult, type FieldSection, type LayerRole, } from './fieldSchema';
|
|
8
|
+
export { controlRegistry } from './controls';
|
|
9
|
+
export { FONT_PICKER_KEY, injectFontPicker, type FontPickerContext } from './fontPicker';
|
|
10
|
+
export { IMAGE_UPLOAD_KEY, injectImageUpload, type ImageUploadContext } from './imageUpload';
|
|
11
|
+
export { usePropertyPanel, type PropertyPanelBinding } from './usePropertyPanel';
|
|
12
|
+
export { default as PropertyField } from './PropertyField';
|
|
13
|
+
export { default as PropertyPanel } from './PropertyPanel';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Border, Padding } from '@hankchen/canvas-editor';
|
|
2
|
+
/** 简写值模式:1 = 四边一框、2 = 上下|左右两框、4 = 四边各一框 */
|
|
3
|
+
export type ShorthandMode = 1 | 2 | 4;
|
|
4
|
+
/** 边名(Padding/Border 四键同名,两域共用一张框布局表) */
|
|
5
|
+
export type SideName = 'top' | 'bottom' | 'left' | 'right';
|
|
6
|
+
/** 一框 = 代表边(显示与输入取值)+ 收编边清单(提交时同写代表边值) */
|
|
7
|
+
export interface ShorthandBox {
|
|
8
|
+
readonly label: string;
|
|
9
|
+
readonly rep: SideName;
|
|
10
|
+
readonly sides: readonly SideName[];
|
|
11
|
+
}
|
|
12
|
+
/** 各模式的框布局:1 = 四边一框(代表值上);2 = 上下|左右(代表值上|左);4 = 四框 */
|
|
13
|
+
export declare const SHORTHAND_BOXES: Record<ShorthandMode, readonly ShorthandBox[]>;
|
|
14
|
+
/** 循环次序 1→2→4→1(单按钮循环的唯一合法迁移) */
|
|
15
|
+
export declare function nextShorthandMode(mode: ShorthandMode): ShorthandMode;
|
|
16
|
+
/** 四值全等→1;上===下 且 左===右→2;否则→4(严格相等,浮点按原值比较) */
|
|
17
|
+
export declare function derivePaddingMode(padding: Padding): ShorthandMode;
|
|
18
|
+
/** 收缩写回规整:取代表值(上/左)折叠到目标模式的规整形态;4 = 原样 */
|
|
19
|
+
export declare function shrinkPadding(padding: Padding, to: ShorthandMode): Padding;
|
|
20
|
+
export declare function samePadding(a: Padding, b: Padding): boolean;
|
|
21
|
+
/** 四边全 null 或全等→1;上下等且左右等(含 null 相等比较)→2;否则→4 */
|
|
22
|
+
export declare function deriveBorderMode(border: Border): ShorthandMode;
|
|
23
|
+
/**
|
|
24
|
+
* 收缩写回规整:上下取上、左右取左;收缩到 1 全取上——上为 null 即全 null
|
|
25
|
+
* (无边框)。每边发独立对象副本,不共享引用。
|
|
26
|
+
*/
|
|
27
|
+
export declare function shrinkBorder(border: Border, to: ShorthandMode): Border;
|
|
28
|
+
export declare function sameBorder(a: Border, b: Border): boolean;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ComputedRef } from 'vue';
|
|
2
|
+
import { Canvas, EditorSession, Layer, LayerBox, LayerPath, ResourceStatusMap } from '@hankchen/canvas-editor';
|
|
3
|
+
import { FieldDef, FieldSection } from './fieldSchema';
|
|
4
|
+
import { CompletionSource } from '../shared/completion';
|
|
5
|
+
export type { FieldDef, FieldSection } from './fieldSchema';
|
|
6
|
+
export interface PropertyPanelBinding {
|
|
7
|
+
/** 当前选中路径;null = 画布级目标 */
|
|
8
|
+
readonly selection: ComputedRef<LayerPath | null>;
|
|
9
|
+
/** 选中层的领域对象切片;未选中 null */
|
|
10
|
+
readonly layer: ComputedRef<Layer | null>;
|
|
11
|
+
/** 文档画布(画布级字段读值);未打开文档 null */
|
|
12
|
+
readonly canvas: ComputedRef<Canvas | null>;
|
|
13
|
+
/** 当前目标的字段组:选中层按 type/角色过滤,画布级为宽/高,无文档为空 */
|
|
14
|
+
readonly sections: ComputedRef<readonly FieldSection[]>;
|
|
15
|
+
/**
|
|
16
|
+
* 选中层的绝对盒(layer-panel-ux 工票 03):EditorSession.layerBoxAt 的
|
|
17
|
+
* computed 切片,与画布 gizmo 同源——自适应高的禁用态显示值据此计算。
|
|
18
|
+
* 模板子树经 previewCanvas 解析为预览盒(isPreviewBox 驱动区分展示)。
|
|
19
|
+
*/
|
|
20
|
+
readonly layerBox: ComputedRef<LayerBox | null>;
|
|
21
|
+
/** 选中路径是否落在模板子树(layerBoxAt 届时返回预览盒而非文档盒) */
|
|
22
|
+
readonly isPreviewBox: ComputedRef<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* 当前目标的补全候选源(content-completion 工单 05):随选中路径切换上下文
|
|
25
|
+
* (根层 = 根候选集 / 模板格内容层 = 行候选集);未注入声明为 null。
|
|
26
|
+
*/
|
|
27
|
+
readonly completionSource: ComputedRef<CompletionSource | null>;
|
|
28
|
+
/**
|
|
29
|
+
* rowsPath 标记字段的补全候选源(rows-path-completion 工单 03):起点三分流
|
|
30
|
+
* + 枚举器组装,「行数组」文案在此置入;未注入/判别降级为 null(零弹层)。
|
|
31
|
+
*/
|
|
32
|
+
readonly rowsPathSource: ComputedRef<CompletionSource | null>;
|
|
33
|
+
/** 锚点折叠区开合(store ui 分支投影,会话内记忆;工票 03) */
|
|
34
|
+
readonly anchorExpanded: ComputedRef<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* 资源物化状态切片(placeholder-padding-hint 工单 02,store ui 分支投影):
|
|
37
|
+
* 宿主从渲染端物化状态机桥接注入,padding 行占位态动态提示的物化维度事实源。
|
|
38
|
+
*/
|
|
39
|
+
readonly resourceStatuses: ComputedRef<ResourceStatusMap>;
|
|
40
|
+
/** 面板唯一提交口:final = 收口提交(change/blur),否则按 mergeKey 合并累积 */
|
|
41
|
+
commit(field: FieldDef, value: unknown, final: boolean): void;
|
|
42
|
+
/**
|
|
43
|
+
* 数据字段取值方式切换(静态值/表达式,工单 02):静态 → 表达式初值取当前
|
|
44
|
+
* 字面原文(不自动包裹/猜变量);表达式 → 静态字面接管(值保持现镜像)。
|
|
45
|
+
* 各为独立一步历史;仅 data 字段且有选中目标时生效。
|
|
46
|
+
*/
|
|
47
|
+
toggleDataMode(field: FieldDef): void;
|
|
48
|
+
/** 锚点折叠区开合(写 store ui 分支,不进历史) */
|
|
49
|
+
setAnchorExpanded(open: boolean): void;
|
|
50
|
+
}
|
|
51
|
+
export declare function usePropertyPanel(editor: EditorSession): PropertyPanelBinding;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ComputedRef } from 'vue';
|
|
2
|
+
import { ShorthandMode } from './shorthand';
|
|
3
|
+
export declare function useShorthandMode<T>(
|
|
4
|
+
/** 模型值切片的 getter(引用比较决定覆盖是否失效) */
|
|
5
|
+
getValue: () => T,
|
|
6
|
+
/** 初始/回落模式的数据推导(derivePaddingMode / deriveBorderMode) */
|
|
7
|
+
derive: (value: T) => ShorthandMode): {
|
|
8
|
+
/** 当前生效模式:覆盖优先,回落推导 */
|
|
9
|
+
mode: ComputedRef<ShorthandMode>;
|
|
10
|
+
/**
|
|
11
|
+
* 循环 1→2→4→1 并登记覆盖;返回迁移前后模式——收缩(to < from)时的
|
|
12
|
+
* 取代表值写回规整由调用方提交(padding/border 形态不同,各自 emit)
|
|
13
|
+
*/
|
|
14
|
+
cycle: () => {
|
|
15
|
+
from: ShorthandMode;
|
|
16
|
+
to: ShorthandMode;
|
|
17
|
+
};
|
|
18
|
+
};
|