diff --git a/packages/vue/src/PageList/PageListRoot.vue b/packages/vue/src/PageList/PageListRoot.vue new file mode 100644 index 000000000..29f78f781 --- /dev/null +++ b/packages/vue/src/PageList/PageListRoot.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/packages/vue/src/PageList/index.ts b/packages/vue/src/PageList/index.ts new file mode 100644 index 000000000..abb1df0a1 --- /dev/null +++ b/packages/vue/src/PageList/index.ts @@ -0,0 +1 @@ +export { default as PageListRoot } from './PageListRoot.vue' diff --git a/packages/vue/src/ScrubInput/ScrubInputDisplay.vue b/packages/vue/src/ScrubInput/ScrubInputDisplay.vue new file mode 100644 index 000000000..94e63082c --- /dev/null +++ b/packages/vue/src/ScrubInput/ScrubInputDisplay.vue @@ -0,0 +1,21 @@ + + + + + + {{ ctx.isMixed.value ? '' : ctx.displayValue.value }} + + + + + diff --git a/packages/vue/src/ScrubInput/ScrubInputField.vue b/packages/vue/src/ScrubInput/ScrubInputField.vue new file mode 100644 index 000000000..1bea1bf64 --- /dev/null +++ b/packages/vue/src/ScrubInput/ScrubInputField.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/packages/vue/src/ScrubInput/ScrubInputRoot.vue b/packages/vue/src/ScrubInput/ScrubInputRoot.vue new file mode 100644 index 000000000..e0c9d99ce --- /dev/null +++ b/packages/vue/src/ScrubInput/ScrubInputRoot.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/packages/vue/src/ScrubInput/context.ts b/packages/vue/src/ScrubInput/context.ts new file mode 100644 index 000000000..1fbe2fca4 --- /dev/null +++ b/packages/vue/src/ScrubInput/context.ts @@ -0,0 +1,27 @@ +import { type InjectionKey, inject, provide } from 'vue' +import type { Ref } from 'vue' + +export interface ScrubInputContext { + modelValue: Ref + displayValue: Ref + isMixed: Ref + editing: Ref + scrubbing: Ref + inputRef: Ref + startScrub: (e: PointerEvent) => void + startEdit: () => void + commitEdit: (e: Event) => void + onKeydown: (e: KeyboardEvent) => void +} + +export const SCRUB_INPUT_KEY: InjectionKey = Symbol('scrub-input') + +export function provideScrubInput(ctx: ScrubInputContext) { + provide(SCRUB_INPUT_KEY, ctx) +} + +export function useScrubInput(): ScrubInputContext { + const ctx = inject(SCRUB_INPUT_KEY) + if (!ctx) throw new Error('[open-pencil] useScrubInput() called outside ') + return ctx +} diff --git a/packages/vue/src/ScrubInput/index.ts b/packages/vue/src/ScrubInput/index.ts new file mode 100644 index 000000000..0ab973311 --- /dev/null +++ b/packages/vue/src/ScrubInput/index.ts @@ -0,0 +1,5 @@ +export { default as ScrubInputRoot } from './ScrubInputRoot.vue' +export { default as ScrubInputField } from './ScrubInputField.vue' +export { default as ScrubInputDisplay } from './ScrubInputDisplay.vue' +export { useScrubInput } from './context' +export type { ScrubInputContext } from './context' diff --git a/packages/vue/src/Toolbar/ToolbarItem.vue b/packages/vue/src/Toolbar/ToolbarItem.vue new file mode 100644 index 000000000..21879f916 --- /dev/null +++ b/packages/vue/src/Toolbar/ToolbarItem.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/packages/vue/src/Toolbar/ToolbarRoot.vue b/packages/vue/src/Toolbar/ToolbarRoot.vue new file mode 100644 index 000000000..29f0729c0 --- /dev/null +++ b/packages/vue/src/Toolbar/ToolbarRoot.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/packages/vue/src/Toolbar/context.ts b/packages/vue/src/Toolbar/context.ts new file mode 100644 index 000000000..4a30bc25f --- /dev/null +++ b/packages/vue/src/Toolbar/context.ts @@ -0,0 +1,26 @@ +import { type InjectionKey, inject, provide } from 'vue' + +import type { Editor, EditorToolDef, Tool } from '@open-pencil/core/editor' +import type { ComputedRef, Ref } from 'vue' + +export interface ToolbarContext { + editor: Editor + tools: EditorToolDef[] + activeTool: ComputedRef + expandedFlyout: Ref + setTool: (tool: Tool) => void + toggleFlyout: (tool: Tool) => void + closeFlyout: () => void +} + +export const TOOLBAR_KEY: InjectionKey = Symbol('toolbar') + +export function provideToolbar(ctx: ToolbarContext) { + provide(TOOLBAR_KEY, ctx) +} + +export function useToolbar(): ToolbarContext { + const ctx = inject(TOOLBAR_KEY) + if (!ctx) throw new Error('[open-pencil] useToolbar() called outside ') + return ctx +} diff --git a/packages/vue/src/Toolbar/index.ts b/packages/vue/src/Toolbar/index.ts new file mode 100644 index 000000000..c73aae9da --- /dev/null +++ b/packages/vue/src/Toolbar/index.ts @@ -0,0 +1,4 @@ +export { default as ToolbarRoot } from './ToolbarRoot.vue' +export { default as ToolbarItem } from './ToolbarItem.vue' +export { useToolbar } from './context' +export type { ToolbarContext } from './context' diff --git a/packages/vue/src/components/ToolSelector.vue b/packages/vue/src/components/ToolSelector.vue index 5537941a0..fc1bc8aeb 100644 --- a/packages/vue/src/components/ToolSelector.vue +++ b/packages/vue/src/components/ToolSelector.vue @@ -4,7 +4,6 @@ import { computed } from 'vue' import { useEditor } from '../context' const editor = useEditor() - const activeTool = computed(() => editor.state.activeTool) diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts index e08781ab3..a4cdf985c 100644 --- a/packages/vue/src/index.ts +++ b/packages/vue/src/index.ts @@ -18,8 +18,20 @@ export { useNodeFontStatus } from './composables/use-font-status' export { toast } from './toast' export type { Toast, ToastVariant } from './toast' +export { + ScrubInputRoot, + ScrubInputField, + ScrubInputDisplay, + useScrubInput +} from './ScrubInput' +export type { ScrubInputContext } from './ScrubInput' + +export { ToolbarRoot, ToolbarItem, useToolbar } from './Toolbar' +export type { ToolbarContext } from './Toolbar' + export { default as OpenPencilProvider } from './components/OpenPencilProvider.vue' export { default as OpenPencilCanvas } from './components/OpenPencilCanvas.vue' +export { PageListRoot } from './PageList' export { default as PageList } from './components/PageList.vue' export { default as LayerTree } from './components/LayerTree.vue' export { default as ToolSelector } from './components/ToolSelector.vue' diff --git a/src/components/ScrubInput.vue b/src/components/ScrubInput.vue index 001d3f3ff..6a1a40806 100644 --- a/src/components/ScrubInput.vue +++ b/src/components/ScrubInput.vue @@ -1,18 +1,7 @@ - emit('commit', val, prev)" > - - - {{ icon }} - - {{ label }} - - - - {{ placeholder }} - - {{ displayValue }} - {{ suffix }} - - - + + + {{ icon }} + + {{ label }} + + + + + {{ ph }} + + {{ value }} + {{ suffix }} + + + + +