@bagelink/vue 1.16.0 → 1.17.6
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/assetTransport.d.ts +28 -0
- package/dist/assetTransport.d.ts.map +1 -0
- package/dist/assetTransport.test.d.ts +2 -0
- package/dist/assetTransport.test.d.ts.map +1 -0
- package/dist/assets.d.ts +65 -0
- package/dist/assets.d.ts.map +1 -0
- package/dist/assets.test.d.ts +2 -0
- package/dist/assets.test.d.ts.map +1 -0
- package/dist/components/AddressSearch.vue.d.ts +40 -36
- package/dist/components/AddressSearch.vue.d.ts.map +1 -1
- package/dist/components/ContextMenu.vue.d.ts +518 -0
- package/dist/components/ContextMenu.vue.d.ts.map +1 -0
- package/dist/components/Dropdown.types.d.ts +25 -0
- package/dist/components/Dropdown.types.d.ts.map +1 -0
- package/dist/components/Dropdown.vue.d.ts +20 -15
- package/dist/components/Dropdown.vue.d.ts.map +1 -1
- package/dist/components/FilterQuery.vue.d.ts +1 -1
- package/dist/components/FilterQuery.vue.d.ts.map +1 -1
- package/dist/components/Icon/Icon.vue.d.ts +0 -1
- package/dist/components/Icon/Icon.vue.d.ts.map +1 -1
- package/dist/components/Icon/constants.d.ts +0 -1
- package/dist/components/Icon/constants.d.ts.map +1 -1
- package/dist/components/Icon/types.d.ts +2 -3
- package/dist/components/Icon/types.d.ts.map +1 -1
- package/dist/components/Image.vue.d.ts +7 -1
- package/dist/components/Image.vue.d.ts.map +1 -1
- package/dist/components/Swiper.vue.d.ts +1 -1
- package/dist/components/draggable/useDraggable.d.ts.map +1 -1
- package/dist/components/form/inputs/IconPickerInput.vue.d.ts +48 -37
- package/dist/components/form/inputs/IconPickerInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/RichText/components/EditorToolbar.vue.d.ts.map +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 +3 -0
- package/dist/components/form/inputs/RichText/composables/useEditor.d.ts.map +1 -1
- package/dist/components/form/inputs/RichText/composables/useEditorKeyboard.d.ts +1 -1
- package/dist/components/form/inputs/RichText/composables/useEditorKeyboard.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.map +1 -1
- package/dist/components/form/inputs/RichText/utils/selection.d.ts +2 -0
- package/dist/components/form/inputs/RichText/utils/selection.d.ts.map +1 -1
- package/dist/components/form/inputs/RichText/utils/table.d.ts +34 -8
- package/dist/components/form/inputs/RichText/utils/table.d.ts.map +1 -1
- package/dist/components/form/inputs/SelectInput.vue.d.ts +71 -63
- package/dist/components/form/inputs/SelectInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/TelInput.vue.d.ts +2 -2
- package/dist/components/form/inputs/Upload/AssetUploadInput.vue.d.ts +11 -0
- package/dist/components/form/inputs/Upload/AssetUploadInput.vue.d.ts.map +1 -0
- package/dist/components/form/inputs/Upload/UploadInput.vue.d.ts +2 -2
- package/dist/components/form/inputs/Upload/UploadInput.vue.d.ts.map +1 -1
- package/dist/components/index.d.ts +3 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/lightbox/AssetPreview.vue.d.ts +9 -0
- package/dist/components/lightbox/AssetPreview.vue.d.ts.map +1 -0
- package/dist/components/lightbox/Lightbox.vue.d.ts.map +1 -1
- package/dist/components/lightbox/LightboxImage.vue.d.ts +2 -1
- package/dist/components/lightbox/LightboxImage.vue.d.ts.map +1 -1
- package/dist/components/lightbox/index.d.ts.map +1 -1
- package/dist/components/lightbox/lightbox.types.d.ts +7 -0
- package/dist/components/lightbox/lightbox.types.d.ts.map +1 -1
- package/dist/composables/index.d.ts +1 -1
- package/dist/composables/index.d.ts.map +1 -1
- package/dist/composables/useBoundedRectDrag.d.ts.map +1 -1
- package/dist/composables/useImageSrc.d.ts +8 -4
- package/dist/composables/useImageSrc.d.ts.map +1 -1
- package/dist/composables/usePointerSession.d.ts +14 -3
- package/dist/composables/usePointerSession.d.ts.map +1 -1
- package/dist/core.css +3 -3
- package/dist/directives/vResize.d.ts.map +1 -1
- package/dist/form-flow/FormFlowPlayer.vue.d.ts +3 -3
- package/dist/form-flow/FormFlowPlayer.vue.d.ts.map +1 -1
- package/dist/form-flow/form-flow.d.ts +13 -6
- package/dist/form-flow/form-flow.d.ts.map +1 -1
- package/dist/form-flow/schema-fields.d.ts +6 -0
- package/dist/form-flow/schema-fields.d.ts.map +1 -1
- package/dist/index.cjs +240 -153
- package/dist/index.css +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +24167 -23417
- package/dist/style.css +3 -3
- package/dist/types/BagelForm.d.ts +5 -1
- package/dist/types/BagelForm.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/assetTransport.test.ts +75 -0
- package/src/assetTransport.ts +98 -0
- package/src/assets.test.ts +82 -0
- package/src/assets.ts +162 -0
- package/src/components/ContextMenu.vue +113 -0
- package/src/components/Dropdown.types.ts +27 -0
- package/src/components/Dropdown.vue +129 -64
- package/src/components/FilterQuery.vue +1 -1
- package/src/components/Icon/Icon.vue +8 -30
- package/src/components/Icon/constants.ts +0 -166
- package/src/components/Icon/types.ts +2 -3
- package/src/components/Image.vue +19 -3
- package/src/components/draggable/useDraggable.ts +67 -100
- package/src/components/form/inputs/IconPickerInput.vue +14 -9
- package/src/components/form/inputs/RichText/components/EditorToolbar.vue +43 -111
- package/src/components/form/inputs/RichText/composables/useCommands.ts +32 -54
- package/src/components/form/inputs/RichText/composables/useEditor.ts +45 -171
- package/src/components/form/inputs/RichText/composables/useEditorKeyboard.ts +90 -14
- package/src/components/form/inputs/RichText/index.vue +1195 -1210
- package/src/components/form/inputs/RichText/utils/commands.ts +689 -1028
- package/src/components/form/inputs/RichText/utils/selection.ts +66 -41
- package/src/components/form/inputs/RichText/utils/table.ts +798 -136
- package/src/components/form/inputs/SelectInput.vue +1 -1
- package/src/components/form/inputs/Upload/AssetUploadInput.vue +67 -0
- package/src/components/form/inputs/Upload/UploadInput.vue +5 -1
- package/src/components/index.ts +3 -1
- package/src/components/lightbox/AssetPreview.vue +16 -0
- package/src/components/lightbox/Lightbox.vue +8 -3
- package/src/components/lightbox/LightboxImage.vue +4 -3
- package/src/components/lightbox/index.ts +29 -4
- package/src/components/lightbox/lightbox.types.ts +5 -1
- package/src/composables/index.ts +1 -1
- package/src/composables/useBoundedRectDrag.ts +9 -12
- package/src/composables/useImageSrc.ts +47 -37
- package/src/composables/usePointerSession.ts +57 -12
- package/src/directives/vResize.ts +6 -7
- package/src/form-flow/form-flow.ts +31 -7
- package/src/form-flow/schema-fields.ts +28 -1
- package/src/index.ts +3 -0
- package/src/styles/core.css +1 -18
- package/src/types/BagelForm.ts +5 -1
- package/dist/components/form/inputs/RichText/utils/formatting.d.ts +0 -10
- package/dist/components/form/inputs/RichText/utils/formatting.d.ts.map +0 -1
- package/src/components/form/inputs/RichText/components/gridBox.vue +0 -58
- package/src/components/form/inputs/RichText/utils/formatting.ts +0 -331
|
@@ -1,3 +1,29 @@
|
|
|
1
|
+
const ALIGN_BLOCK_SELECTOR = 'p, h1, h2, h3, h4, h5, h6, blockquote, li, td, th'
|
|
2
|
+
|
|
3
|
+
export const ACTIVE_STYLE_KEYS = [
|
|
4
|
+
'bold',
|
|
5
|
+
'italic',
|
|
6
|
+
'underline',
|
|
7
|
+
'link',
|
|
8
|
+
'h1',
|
|
9
|
+
'h2',
|
|
10
|
+
'h3',
|
|
11
|
+
'h4',
|
|
12
|
+
'h5',
|
|
13
|
+
'h6',
|
|
14
|
+
'blockquote',
|
|
15
|
+
'p',
|
|
16
|
+
'orderedList',
|
|
17
|
+
'unorderedList',
|
|
18
|
+
'alignLeft',
|
|
19
|
+
'alignCenter',
|
|
20
|
+
'alignRight',
|
|
21
|
+
'alignJustify',
|
|
22
|
+
'textDirection',
|
|
23
|
+
'ltrDirection',
|
|
24
|
+
'rtlDirection'
|
|
25
|
+
] as const
|
|
26
|
+
|
|
1
27
|
export function getSelection(state: any) {
|
|
2
28
|
return state.selection
|
|
3
29
|
}
|
|
@@ -6,43 +32,40 @@ export function getSelectionRange(state: any) {
|
|
|
6
32
|
return state.range
|
|
7
33
|
}
|
|
8
34
|
|
|
9
|
-
export function isStyleActive(style: string, doc: Document) {
|
|
35
|
+
export function isStyleActive(style: string, doc: Document): boolean {
|
|
10
36
|
const selection = doc.getSelection()
|
|
11
37
|
if (!selection || !selection.rangeCount) { return false }
|
|
12
38
|
|
|
13
39
|
const range = selection.getRangeAt(0)
|
|
14
40
|
const container = range.commonAncestorContainer
|
|
15
|
-
const parent = container.nodeType === Node.TEXT_NODE
|
|
41
|
+
const parent = container.nodeType === Node.TEXT_NODE
|
|
42
|
+
? container.parentElement
|
|
43
|
+
: container as Element
|
|
16
44
|
|
|
17
45
|
if (!parent) { return false }
|
|
18
46
|
|
|
19
|
-
// Check if the current node or any parent has the style
|
|
20
47
|
const checkParent = (element: Element | null, checker: (el: Element) => boolean): boolean => {
|
|
21
|
-
if (!element) { return false }
|
|
48
|
+
if (!element || element === doc.body || element === doc.documentElement) { return false }
|
|
22
49
|
if (checker(element)) { return true }
|
|
23
50
|
return checkParent(element.parentElement, checker)
|
|
24
51
|
}
|
|
25
52
|
|
|
26
|
-
// Define style checkers for different formatting types
|
|
27
53
|
const styleCheckers: { [key: string]: (el: Element) => boolean } = {
|
|
28
|
-
// Text formatting - check for elements only, not CSS styles
|
|
29
54
|
bold: (el) => {
|
|
30
55
|
const tagName = el.tagName?.toLowerCase()
|
|
31
|
-
// Only consider <b> and <strong> tags, not CSS bold styling
|
|
32
56
|
return tagName === 'strong' || tagName === 'b'
|
|
33
57
|
},
|
|
34
|
-
|
|
35
58
|
italic: (el) => {
|
|
36
59
|
const tagName = el.tagName?.toLowerCase()
|
|
37
|
-
// Only consider <i> and <em> tags, not CSS italic styling
|
|
38
60
|
return tagName === 'em' || tagName === 'i'
|
|
39
61
|
},
|
|
40
|
-
|
|
41
62
|
underline: (el) => {
|
|
42
63
|
const tagName = el.tagName?.toLowerCase()
|
|
43
|
-
// Only consider <u> tag, not CSS underline styling
|
|
44
64
|
return tagName === 'u'
|
|
45
65
|
},
|
|
66
|
+
link: (el) => {
|
|
67
|
+
return el.tagName?.toLowerCase() === 'a'
|
|
68
|
+
},
|
|
46
69
|
|
|
47
70
|
// Block elements
|
|
48
71
|
h1: el => el.tagName?.toLowerCase() === 'h1',
|
|
@@ -54,65 +77,68 @@ export function isStyleActive(style: string, doc: Document) {
|
|
|
54
77
|
p: el => el.tagName?.toLowerCase() === 'p',
|
|
55
78
|
blockquote: el => el.tagName?.toLowerCase() === 'blockquote',
|
|
56
79
|
|
|
57
|
-
// List elements
|
|
58
|
-
orderedList:
|
|
59
|
-
|
|
60
|
-
return !!el.closest('ol')
|
|
61
|
-
},
|
|
62
|
-
|
|
63
|
-
unorderedList: (el) => {
|
|
64
|
-
// Check if we're inside an unordered list
|
|
65
|
-
return !!el.closest('ul')
|
|
66
|
-
},
|
|
80
|
+
// List elements
|
|
81
|
+
orderedList: el => !!el.closest('ol'),
|
|
82
|
+
unorderedList: el => !!el.closest('ul'),
|
|
67
83
|
|
|
68
|
-
// Text alignment
|
|
84
|
+
// Text alignment (supports both physical left/right and logical start/end)
|
|
69
85
|
alignLeft: (el) => {
|
|
70
|
-
const
|
|
71
|
-
|
|
86
|
+
const block = el.closest(ALIGN_BLOCK_SELECTOR) as HTMLElement | null
|
|
87
|
+
const align = block?.style.textAlign
|
|
88
|
+
return align === 'left' || align === 'start'
|
|
72
89
|
},
|
|
73
90
|
alignCenter: (el) => {
|
|
74
|
-
const
|
|
75
|
-
return
|
|
91
|
+
const block = el.closest(ALIGN_BLOCK_SELECTOR) as HTMLElement | null
|
|
92
|
+
return block?.style.textAlign === 'center'
|
|
76
93
|
},
|
|
77
94
|
alignRight: (el) => {
|
|
78
|
-
const
|
|
79
|
-
|
|
95
|
+
const block = el.closest(ALIGN_BLOCK_SELECTOR) as HTMLElement | null
|
|
96
|
+
const align = block?.style.textAlign
|
|
97
|
+
return align === 'right' || align === 'end'
|
|
80
98
|
},
|
|
81
99
|
alignJustify: (el) => {
|
|
82
|
-
const
|
|
83
|
-
return
|
|
100
|
+
const block = el.closest(ALIGN_BLOCK_SELECTOR) as HTMLElement | null
|
|
101
|
+
return block?.style.textAlign === 'justify'
|
|
84
102
|
},
|
|
85
103
|
|
|
86
104
|
// Text direction
|
|
87
105
|
textDirection: (el) => {
|
|
88
|
-
const
|
|
89
|
-
return (
|
|
106
|
+
const block = el.closest(ALIGN_BLOCK_SELECTOR) as HTMLElement | null
|
|
107
|
+
return (block?.dir || el.closest('table')?.dir) === 'rtl'
|
|
90
108
|
},
|
|
91
109
|
ltrDirection: (el) => {
|
|
92
|
-
const
|
|
93
|
-
return (
|
|
110
|
+
const block = el.closest(ALIGN_BLOCK_SELECTOR) as HTMLElement | null
|
|
111
|
+
return (block?.dir || el.closest('table')?.dir) === 'ltr'
|
|
94
112
|
},
|
|
95
113
|
rtlDirection: (el) => {
|
|
96
|
-
const
|
|
97
|
-
return (
|
|
114
|
+
const block = el.closest(ALIGN_BLOCK_SELECTOR) as HTMLElement | null
|
|
115
|
+
return (block?.dir || el.closest('table')?.dir) === 'rtl'
|
|
98
116
|
}
|
|
99
117
|
}
|
|
100
118
|
|
|
101
|
-
// Special handling for view state commands
|
|
102
119
|
if (['splitView', 'codeView', 'fullScreen'].includes(style)) {
|
|
103
|
-
return false
|
|
120
|
+
return false
|
|
104
121
|
}
|
|
105
122
|
|
|
106
|
-
// Use the appropriate checker
|
|
107
123
|
const checker = styleCheckers[style]
|
|
108
124
|
if (checker) {
|
|
109
125
|
return checkParent(parent, checker)
|
|
110
126
|
}
|
|
111
127
|
|
|
112
|
-
// Fallback: check if element matches the style tag name
|
|
113
128
|
return checkParent(parent, el => el.tagName?.toLowerCase() === style.toLowerCase())
|
|
114
129
|
}
|
|
115
130
|
|
|
131
|
+
export function computeActiveStyles(doc: Document | undefined): Set<string> {
|
|
132
|
+
const styles = new Set<string>()
|
|
133
|
+
if (!doc) { return styles }
|
|
134
|
+
for (const style of ACTIVE_STYLE_KEYS) {
|
|
135
|
+
if (isStyleActive(style, doc)) {
|
|
136
|
+
styles.add(style)
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return styles
|
|
140
|
+
}
|
|
141
|
+
|
|
116
142
|
export interface SelectionInfo {
|
|
117
143
|
startBlock: Element
|
|
118
144
|
endBlock: Element
|
|
@@ -131,7 +157,6 @@ export function analyzeSelection(doc: Document, range: Range): SelectionInfo | n
|
|
|
131
157
|
|
|
132
158
|
const startBlock = parent.closest('p,h1,h2,h3,h4,h5,h6,blockquote,li') || parent
|
|
133
159
|
|
|
134
|
-
// Analyze if selection spans multiple blocks
|
|
135
160
|
const isMultiBlock = (() => {
|
|
136
161
|
if (!range.collapsed) {
|
|
137
162
|
const { endContainer } = range
|