@bagelink/vue 0.0.1262 → 0.0.1268
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/components/AddressSearch.vue.d.ts +6 -0
- package/dist/components/AddressSearch.vue.d.ts.map +1 -1
- package/dist/components/DropDown.vue.d.ts +51 -48
- package/dist/components/DropDown.vue.d.ts.map +1 -1
- package/dist/components/form/FieldArray.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/DateInput.vue.d.ts +4 -1
- package/dist/components/form/inputs/DateInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/PasswordInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/RadioGroup.vue.d.ts +1 -1
- package/dist/components/form/inputs/RichText/composables/useCommands.d.ts.map +1 -1
- package/dist/components/form/inputs/RichText/composables/useEditor.d.ts +31 -23
- package/dist/components/form/inputs/RichText/composables/useEditor.d.ts.map +1 -1
- package/dist/components/form/inputs/RichText/composables/useEditorKeyboard.d.ts +2 -1
- package/dist/components/form/inputs/RichText/composables/useEditorKeyboard.d.ts.map +1 -1
- package/dist/components/form/inputs/RichText/config.d.ts +2 -1
- package/dist/components/form/inputs/RichText/config.d.ts.map +1 -1
- package/dist/components/form/inputs/RichText/index.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/RichText/utils/commands.d.ts +1 -0
- package/dist/components/form/inputs/RichText/utils/commands.d.ts.map +1 -1
- package/dist/components/form/inputs/RichText/utils/media.d.ts +5 -3
- package/dist/components/form/inputs/RichText/utils/media.d.ts.map +1 -1
- package/dist/components/form/inputs/RichText/utils/selection.d.ts.map +1 -1
- package/dist/components/form/inputs/SelectInput.vue.d.ts +12 -0
- package/dist/components/form/inputs/SelectInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/TelInput.vue.d.ts +8 -2
- package/dist/components/form/inputs/TelInput.vue.d.ts.map +1 -1
- package/dist/editor-7QC0nG_c.js +4 -0
- package/dist/editor-CpMNx6Eo.cjs +4 -0
- package/dist/index.cjs +1327 -756
- package/dist/index.mjs +1327 -756
- package/dist/style.css +90 -83
- package/package.json +1 -1
- package/src/components/DataTable/DataTable.vue +1 -1
- package/src/components/Dropdown.vue +5 -2
- package/src/components/form/FieldArray.vue +3 -0
- package/src/components/form/inputs/DateInput.vue +341 -162
- package/src/components/form/inputs/PasswordInput.vue +5 -1
- package/src/components/form/inputs/RichText/components/EditorToolbar.vue +2 -2
- package/src/components/form/inputs/RichText/composables/useCommands.ts +53 -97
- package/src/components/form/inputs/RichText/composables/useEditor.ts +377 -270
- package/src/components/form/inputs/RichText/composables/useEditorKeyboard.ts +124 -58
- package/src/components/form/inputs/RichText/config.ts +27 -3
- package/src/components/form/inputs/RichText/editor.css +29 -0
- package/src/components/form/inputs/RichText/index.vue +129 -55
- package/src/components/form/inputs/RichText/richTextTypes.d.ts +35 -49
- package/src/components/form/inputs/RichText/utils/commands.ts +181 -0
- package/src/components/form/inputs/RichText/utils/media.ts +64 -3
- package/src/components/form/inputs/RichText/utils/selection.ts +40 -5
|
@@ -1,113 +1,69 @@
|
|
|
1
1
|
import type { EditorState } from '../richTextTypes'
|
|
2
|
-
import
|
|
3
|
-
import { createCommandExecutor } from '../utils/commands'
|
|
4
|
-
import { formatting } from '../utils/formatting'
|
|
5
|
-
import { insertImage, insertLink } from '../utils/media'
|
|
6
|
-
import { addRow, deleteRow, mergeCells, splitCell, insertTable, deleteTable, insertColumn, deleteColumn, alignColumn } from '../utils/table'
|
|
2
|
+
import { createCommandExecutor, createCommandRegistry } from '../utils/commands'
|
|
7
3
|
|
|
8
4
|
export function useCommands(state: EditorState, debug?: { logCommand: (command: string, value?: string) => void }) {
|
|
9
|
-
const
|
|
5
|
+
const commands = createCommandRegistry(state)
|
|
6
|
+
const executor = createCommandExecutor(state, commands)
|
|
10
7
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
name: 'Bold',
|
|
15
|
-
execute: (state: EditorState) => { format().text('bold') },
|
|
16
|
-
isActive: (state: EditorState) => state.selectedStyles.has('bold')
|
|
17
|
-
},
|
|
18
|
-
italic: {
|
|
19
|
-
name: 'Italic',
|
|
20
|
-
execute: (state: EditorState) => { format().text('italic') },
|
|
21
|
-
isActive: (state: EditorState) => state.selectedStyles.has('italic')
|
|
22
|
-
},
|
|
23
|
-
underline: {
|
|
24
|
-
name: 'Underline',
|
|
25
|
-
execute: (state: EditorState) => { format().text('underline') },
|
|
26
|
-
isActive: (state: EditorState) => state.selectedStyles.has('underline')
|
|
27
|
-
},
|
|
8
|
+
return {
|
|
9
|
+
execute: (command: string, value?: string) => {
|
|
10
|
+
if (!state.doc) return
|
|
28
11
|
|
|
29
|
-
|
|
30
|
-
h1: { name: 'Heading 1', execute: (state: EditorState) => { format().block('h1', 'h1') }, isActive: (state: EditorState) => state.selectedStyles.has('h1') },
|
|
31
|
-
h2: { name: 'Heading 2', execute: (state: EditorState) => { format().block('h2', 'h2') }, isActive: (state: EditorState) => state.selectedStyles.has('h2') },
|
|
32
|
-
h3: { name: 'Heading 3', execute: (state: EditorState) => { format().block('h3', 'h3') }, isActive: (state: EditorState) => state.selectedStyles.has('h3') },
|
|
33
|
-
h4: { name: 'Heading 4', execute: (state: EditorState) => { format().block('h4', 'h4') }, isActive: (state: EditorState) => state.selectedStyles.has('h4') },
|
|
34
|
-
h5: { name: 'Heading 5', execute: (state: EditorState) => { format().block('h5', 'h5') }, isActive: (state: EditorState) => state.selectedStyles.has('h5') },
|
|
35
|
-
h6: { name: 'Heading 6', execute: (state: EditorState) => { format().block('h6', 'h6') }, isActive: (state: EditorState) => state.selectedStyles.has('h6') },
|
|
36
|
-
p: { name: 'Paragraph', execute: (state: EditorState) => { format().block('p', 'p') }, isActive: (state: EditorState) => state.selectedStyles.has('p') },
|
|
37
|
-
blockquote: {
|
|
38
|
-
name: 'Blockquote',
|
|
39
|
-
execute: (state: EditorState) => { format().block('blockquote', 'blockquote') },
|
|
40
|
-
isActive: (state: EditorState) => state.selectedStyles.has('blockquote')
|
|
41
|
-
},
|
|
12
|
+
console.log('[useCommands.execute] Starting command execution:', command, value)
|
|
42
13
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
name: 'Ordered List',
|
|
46
|
-
execute: (state: EditorState) => { format().list('orderedList') },
|
|
47
|
-
isActive: (state: EditorState) => state.selectedStyles.has('orderedList')
|
|
48
|
-
},
|
|
49
|
-
unorderedList: {
|
|
50
|
-
name: 'Unordered List',
|
|
51
|
-
execute: (state: EditorState) => { format().list('unorderedList') },
|
|
52
|
-
isActive: (state: EditorState) => state.selectedStyles.has('unorderedList')
|
|
53
|
-
},
|
|
14
|
+
// Log command if debug is enabled
|
|
15
|
+
debug?.logCommand(command, value)
|
|
54
16
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
17
|
+
// Handle view state commands directly
|
|
18
|
+
if (['splitView', 'codeView', 'fullScreen'].includes(command)) {
|
|
19
|
+
console.log('[useCommands.execute] Handling view state command:', command)
|
|
20
|
+
switch (command) {
|
|
21
|
+
case 'splitView':
|
|
22
|
+
state.isSplitView = !state.isSplitView
|
|
23
|
+
return
|
|
24
|
+
case 'codeView':
|
|
25
|
+
state.isCodeView = !state.isCodeView
|
|
26
|
+
return
|
|
27
|
+
case 'fullScreen':
|
|
28
|
+
state.isFullscreen = !state.isFullscreen
|
|
29
|
+
return
|
|
30
|
+
}
|
|
61
31
|
}
|
|
62
|
-
},
|
|
63
|
-
deleteTable: { name: 'Delete Table', execute: (state: EditorState) => state.range && deleteTable(state.range) },
|
|
64
|
-
mergeCells: { name: 'Merge Cells', execute: (state: EditorState) => state.range && state.doc && mergeCells(state.range, state.doc) },
|
|
65
|
-
splitCells: { name: 'Split Cells', execute: (state: EditorState) => state.range && state.doc && splitCell(state.range, state.doc) },
|
|
66
|
-
addRowBefore: { name: 'Add Row Before', execute: (state: EditorState) => state.range && state.doc && addRow('before', state.range, state.doc) },
|
|
67
|
-
addRowAfter: { name: 'Add Row After', execute: (state: EditorState) => state.range && state.doc && addRow('after', state.range, state.doc) },
|
|
68
|
-
deleteRow: { name: 'Delete Row', execute: (state: EditorState) => state.range && deleteRow(state.range) },
|
|
69
|
-
insertColumnLeft: { name: 'Insert Column Left', execute: (state: EditorState) => state.range && insertColumn('before', state.range) },
|
|
70
|
-
insertColumnRight: { name: 'Insert Column Right', execute: (state: EditorState) => state.range && insertColumn('after', state.range) },
|
|
71
|
-
deleteColumn: { name: 'Delete Column', execute: (state: EditorState) => state.range && deleteColumn(state.range) },
|
|
72
32
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
alignRight: { name: 'Align Right', execute: (state: EditorState) => state.range && alignColumn(state.range, 'right') },
|
|
77
|
-
alignJustify: { name: 'Align Justify', execute: (state: EditorState) => state.range && alignColumn(state.range, 'justify') },
|
|
33
|
+
// Focus the editor before executing command
|
|
34
|
+
console.log('[useCommands.execute] Focusing editor')
|
|
35
|
+
state.doc.body.focus()
|
|
78
36
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
37
|
+
// Execute the command
|
|
38
|
+
console.log('[useCommands.execute] Executing command')
|
|
39
|
+
executor.execute(command, value)
|
|
82
40
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
splitView: {
|
|
93
|
-
name: 'Split View',
|
|
94
|
-
execute: (state: EditorState) => { state.isSplitView = !state.isSplitView },
|
|
95
|
-
isActive: (state: EditorState) => state.isSplitView
|
|
96
|
-
},
|
|
97
|
-
codeView: {
|
|
98
|
-
name: 'Code View',
|
|
99
|
-
execute: (state: EditorState) => { state.isCodeView = !state.isCodeView },
|
|
100
|
-
isActive: (state: EditorState) => state.isCodeView
|
|
101
|
-
}
|
|
102
|
-
}
|
|
41
|
+
// Update content state only if it has changed
|
|
42
|
+
const newContent = state.doc.body.innerHTML
|
|
43
|
+
console.log('[useCommands.execute] Checking content changes')
|
|
44
|
+
console.log('[useCommands.execute] Old content length:', state.content.length)
|
|
45
|
+
console.log('[useCommands.execute] New content length:', newContent.length)
|
|
46
|
+
if (newContent !== state.content) {
|
|
47
|
+
console.log('[useCommands.execute] Content changed, updating state')
|
|
48
|
+
state.content = newContent
|
|
49
|
+
}
|
|
103
50
|
|
|
104
|
-
|
|
51
|
+
// Update selection state if needed
|
|
52
|
+
console.log('[useCommands.execute] Checking selection changes')
|
|
53
|
+
const selection = state.doc.getSelection()
|
|
54
|
+
if (selection?.rangeCount) {
|
|
55
|
+
const hasSelectionChanged = !state.selection
|
|
56
|
+
|| state.selection !== selection
|
|
57
|
+
|| state.rangeCount !== selection.rangeCount
|
|
105
58
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
59
|
+
console.log('[useCommands.execute] Selection changed:', hasSelectionChanged)
|
|
60
|
+
if (hasSelectionChanged) {
|
|
61
|
+
console.log('[useCommands.execute] Updating selection state')
|
|
62
|
+
state.selection = selection
|
|
63
|
+
state.range = selection.getRangeAt(0).cloneRange()
|
|
64
|
+
state.rangeCount = selection.rangeCount
|
|
65
|
+
}
|
|
66
|
+
}
|
|
111
67
|
},
|
|
112
68
|
isActive: executor.isActive,
|
|
113
69
|
getValue: executor.getValue
|