@jvs-milkdown/components 1.2.0 → 1.2.1

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.
Files changed (139) hide show
  1. package/lib/code-block/index.js +37 -2
  2. package/lib/code-block/index.js.map +1 -1
  3. package/lib/image-block/index.js +628 -107
  4. package/lib/image-block/index.js.map +1 -1
  5. package/lib/table-block/index.js +67 -44
  6. package/lib/table-block/index.js.map +1 -1
  7. package/lib/tsconfig.tsbuildinfo +1 -1
  8. package/package.json +10 -10
  9. package/src/code-block/config.ts +4 -0
  10. package/src/code-block/view/components/code-block.tsx +24 -0
  11. package/src/code-block/view/node-view.ts +15 -0
  12. package/src/image-block/config.ts +10 -0
  13. package/src/image-block/schema.ts +16 -0
  14. package/src/image-block/view/components/__tests__/image-viewer.onImageLoadError.spec.tsx +14 -0
  15. package/src/image-block/view/components/image-block.tsx +40 -0
  16. package/src/image-block/view/components/image-viewer.tsx +548 -65
  17. package/src/image-block/view/index.ts +42 -0
  18. package/src/table-block/view/component.tsx +31 -14
  19. package/src/table-block/view/operation.ts +49 -30
  20. package/lib/__internal__/components/icon.d.ts +0 -24
  21. package/lib/__internal__/components/icon.d.ts.map +0 -1
  22. package/lib/__internal__/components/image-input.d.ts +0 -17
  23. package/lib/__internal__/components/image-input.d.ts.map +0 -1
  24. package/lib/__internal__/keep-alive.d.ts +0 -2
  25. package/lib/__internal__/keep-alive.d.ts.map +0 -1
  26. package/lib/__internal__/meta.d.ts +0 -3
  27. package/lib/__internal__/meta.d.ts.map +0 -1
  28. package/lib/__tests__/setup.d.ts +0 -2
  29. package/lib/__tests__/setup.d.ts.map +0 -1
  30. package/lib/code-block/config.d.ts +0 -23
  31. package/lib/code-block/config.d.ts.map +0 -1
  32. package/lib/code-block/index.d.ts +0 -5
  33. package/lib/code-block/index.d.ts.map +0 -1
  34. package/lib/code-block/view/components/code-block.d.ts +0 -16
  35. package/lib/code-block/view/components/code-block.d.ts.map +0 -1
  36. package/lib/code-block/view/components/copy-button.d.ts +0 -9
  37. package/lib/code-block/view/components/copy-button.d.ts.map +0 -1
  38. package/lib/code-block/view/components/language-picker.d.ts +0 -5
  39. package/lib/code-block/view/components/language-picker.d.ts.map +0 -1
  40. package/lib/code-block/view/components/preview-panel.d.ts +0 -9
  41. package/lib/code-block/view/components/preview-panel.d.ts.map +0 -1
  42. package/lib/code-block/view/index.d.ts +0 -3
  43. package/lib/code-block/view/index.d.ts.map +0 -1
  44. package/lib/code-block/view/loader.d.ts +0 -13
  45. package/lib/code-block/view/loader.d.ts.map +0 -1
  46. package/lib/code-block/view/node-view.d.ts +0 -40
  47. package/lib/code-block/view/node-view.d.ts.map +0 -1
  48. package/lib/image-block/config.d.ts +0 -16
  49. package/lib/image-block/config.d.ts.map +0 -1
  50. package/lib/image-block/convert-plugin.d.ts +0 -2
  51. package/lib/image-block/convert-plugin.d.ts.map +0 -1
  52. package/lib/image-block/index.d.ts +0 -9
  53. package/lib/image-block/index.d.ts.map +0 -1
  54. package/lib/image-block/paste-rule.d.ts +0 -2
  55. package/lib/image-block/paste-rule.d.ts.map +0 -1
  56. package/lib/image-block/remark-plugin.d.ts +0 -2
  57. package/lib/image-block/remark-plugin.d.ts.map +0 -1
  58. package/lib/image-block/schema.d.ts +0 -3
  59. package/lib/image-block/schema.d.ts.map +0 -1
  60. package/lib/image-block/view/components/__tests__/image-viewer.onImageLoadError.spec.d.ts +0 -2
  61. package/lib/image-block/view/components/__tests__/image-viewer.onImageLoadError.spec.d.ts.map +0 -1
  62. package/lib/image-block/view/components/image-block.d.ts +0 -19
  63. package/lib/image-block/view/components/image-block.d.ts.map +0 -1
  64. package/lib/image-block/view/components/image-viewer.d.ts +0 -3
  65. package/lib/image-block/view/components/image-viewer.d.ts.map +0 -1
  66. package/lib/image-block/view/index.d.ts +0 -3
  67. package/lib/image-block/view/index.d.ts.map +0 -1
  68. package/lib/image-inline/components/image-inline.d.ts +0 -18
  69. package/lib/image-inline/components/image-inline.d.ts.map +0 -1
  70. package/lib/image-inline/config.d.ts +0 -11
  71. package/lib/image-inline/config.d.ts.map +0 -1
  72. package/lib/image-inline/index.d.ts +0 -5
  73. package/lib/image-inline/index.d.ts.map +0 -1
  74. package/lib/image-inline/view.d.ts +0 -3
  75. package/lib/image-inline/view.d.ts.map +0 -1
  76. package/lib/index.d.ts +0 -2
  77. package/lib/index.d.ts.map +0 -1
  78. package/lib/link-tooltip/command.d.ts +0 -2
  79. package/lib/link-tooltip/command.d.ts.map +0 -1
  80. package/lib/link-tooltip/configure.d.ts +0 -3
  81. package/lib/link-tooltip/configure.d.ts.map +0 -1
  82. package/lib/link-tooltip/edit/component.d.ts +0 -11
  83. package/lib/link-tooltip/edit/component.d.ts.map +0 -1
  84. package/lib/link-tooltip/edit/edit-configure.d.ts +0 -3
  85. package/lib/link-tooltip/edit/edit-configure.d.ts.map +0 -1
  86. package/lib/link-tooltip/edit/edit-view.d.ts +0 -15
  87. package/lib/link-tooltip/edit/edit-view.d.ts.map +0 -1
  88. package/lib/link-tooltip/index.d.ts +0 -7
  89. package/lib/link-tooltip/index.d.ts.map +0 -1
  90. package/lib/link-tooltip/preview/component.d.ts +0 -11
  91. package/lib/link-tooltip/preview/component.d.ts.map +0 -1
  92. package/lib/link-tooltip/preview/preview-configure.d.ts +0 -3
  93. package/lib/link-tooltip/preview/preview-configure.d.ts.map +0 -1
  94. package/lib/link-tooltip/preview/preview-view.d.ts +0 -14
  95. package/lib/link-tooltip/preview/preview-view.d.ts.map +0 -1
  96. package/lib/link-tooltip/slices.d.ts +0 -34
  97. package/lib/link-tooltip/slices.d.ts.map +0 -1
  98. package/lib/link-tooltip/tooltips.d.ts +0 -3
  99. package/lib/link-tooltip/tooltips.d.ts.map +0 -1
  100. package/lib/link-tooltip/utils.d.ts +0 -14
  101. package/lib/link-tooltip/utils.d.ts.map +0 -1
  102. package/lib/list-item-block/component.d.ts +0 -19
  103. package/lib/list-item-block/component.d.ts.map +0 -1
  104. package/lib/list-item-block/config.d.ts +0 -13
  105. package/lib/list-item-block/config.d.ts.map +0 -1
  106. package/lib/list-item-block/index.d.ts +0 -6
  107. package/lib/list-item-block/index.d.ts.map +0 -1
  108. package/lib/list-item-block/view.d.ts +0 -3
  109. package/lib/list-item-block/view.d.ts.map +0 -1
  110. package/lib/table-block/config.d.ts +0 -8
  111. package/lib/table-block/config.d.ts.map +0 -1
  112. package/lib/table-block/dnd/calc-drag-over.d.ts +0 -3
  113. package/lib/table-block/dnd/calc-drag-over.d.ts.map +0 -1
  114. package/lib/table-block/dnd/create-drag-handler.d.ts +0 -5
  115. package/lib/table-block/dnd/create-drag-handler.d.ts.map +0 -1
  116. package/lib/table-block/dnd/drag-over-handler.d.ts +0 -3
  117. package/lib/table-block/dnd/drag-over-handler.d.ts.map +0 -1
  118. package/lib/table-block/dnd/prepare-dnd-context.d.ts +0 -3
  119. package/lib/table-block/dnd/prepare-dnd-context.d.ts.map +0 -1
  120. package/lib/table-block/dnd/preview.d.ts +0 -3
  121. package/lib/table-block/dnd/preview.d.ts.map +0 -1
  122. package/lib/table-block/index.d.ts +0 -5
  123. package/lib/table-block/index.d.ts.map +0 -1
  124. package/lib/table-block/view/component.d.ts +0 -16
  125. package/lib/table-block/view/component.d.ts.map +0 -1
  126. package/lib/table-block/view/drag.d.ts +0 -10
  127. package/lib/table-block/view/drag.d.ts.map +0 -1
  128. package/lib/table-block/view/index.d.ts +0 -2
  129. package/lib/table-block/view/index.d.ts.map +0 -1
  130. package/lib/table-block/view/operation.d.ts +0 -13
  131. package/lib/table-block/view/operation.d.ts.map +0 -1
  132. package/lib/table-block/view/pointer.d.ts +0 -7
  133. package/lib/table-block/view/pointer.d.ts.map +0 -1
  134. package/lib/table-block/view/types.d.ts +0 -28
  135. package/lib/table-block/view/types.d.ts.map +0 -1
  136. package/lib/table-block/view/utils.d.ts +0 -12
  137. package/lib/table-block/view/utils.d.ts.map +0 -1
  138. package/lib/table-block/view/view.d.ts +0 -22
  139. package/lib/table-block/view/view.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jvs-milkdown/components",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "keywords": [
5
5
  "milkdown",
6
6
  "milkdown plugin"
@@ -50,15 +50,15 @@
50
50
  },
51
51
  "dependencies": {
52
52
  "@floating-ui/dom": "^1.5.1",
53
- "@jvs-milkdown/core": "^1.2.0",
54
- "@jvs-milkdown/ctx": "^1.2.0",
55
- "@jvs-milkdown/exception": "^1.2.0",
56
- "@jvs-milkdown/plugin-tooltip": "^1.2.0",
57
- "@jvs-milkdown/preset-commonmark": "^1.2.0",
58
- "@jvs-milkdown/preset-gfm": "^1.2.0",
59
- "@jvs-milkdown/prose": "^1.2.0",
60
- "@jvs-milkdown/transformer": "^1.2.0",
61
- "@jvs-milkdown/utils": "^1.2.0",
53
+ "@jvs-milkdown/core": "^1.2.1",
54
+ "@jvs-milkdown/ctx": "^1.2.1",
55
+ "@jvs-milkdown/exception": "^1.2.1",
56
+ "@jvs-milkdown/plugin-tooltip": "^1.2.1",
57
+ "@jvs-milkdown/preset-commonmark": "^1.2.1",
58
+ "@jvs-milkdown/preset-gfm": "^1.2.1",
59
+ "@jvs-milkdown/prose": "^1.2.1",
60
+ "@jvs-milkdown/transformer": "^1.2.1",
61
+ "@jvs-milkdown/utils": "^1.2.1",
62
62
  "@types/lodash-es": "^4.17.12",
63
63
  "clsx": "^2.0.0",
64
64
  "dompurify": "^3.2.5",
@@ -26,6 +26,8 @@ export interface CodeBlockConfig {
26
26
  previewLabel: string
27
27
  previewOnlyByDefault?: boolean
28
28
  previewLoading: string | HTMLElement
29
+ wrapText: string
30
+ wrapIcon: string
29
31
  }
30
32
 
31
33
  export const defaultConfig: CodeBlockConfig = {
@@ -44,6 +46,8 @@ export const defaultConfig: CodeBlockConfig = {
44
46
  previewToggleButton: (previewOnlyMode) => (previewOnlyMode ? 'Edit' : 'Hide'),
45
47
  previewLabel: 'Preview',
46
48
  previewLoading: 'Loading...',
49
+ wrapText: 'Wrap',
50
+ wrapIcon: '',
47
51
  }
48
52
 
49
53
  export const codeBlockConfig = $ctx(defaultConfig, 'codeBlockConfigCtx')
@@ -32,6 +32,8 @@ export type CodeBlockProps = {
32
32
  getAllLanguages: () => Array<LanguageInfo>
33
33
  setLanguage: (language: string) => void
34
34
  config: Omit<CodeBlockConfig, 'languages' | 'extensions'>
35
+ wordWrap: Ref<boolean>
36
+ toggleWordWrap: () => void
35
37
  }
36
38
 
37
39
  export const CodeBlock = defineComponent<CodeBlockProps>({
@@ -68,6 +70,14 @@ export const CodeBlock = defineComponent<CodeBlockProps>({
68
70
  type: Object,
69
71
  required: true,
70
72
  },
73
+ wordWrap: {
74
+ type: Object,
75
+ required: true,
76
+ },
77
+ toggleWordWrap: {
78
+ type: Function,
79
+ required: true,
80
+ },
71
81
  },
72
82
  setup(props) {
73
83
  const previewOnlyByDefault =
@@ -133,6 +143,20 @@ export const CodeBlock = defineComponent<CodeBlockProps>({
133
143
  text={props.text.value}
134
144
  />
135
145
 
146
+ <button
147
+ class={props.wordWrap.value ? 'word-wrap-active' : ''}
148
+ onClick={(e) => {
149
+ e.preventDefault()
150
+ e.stopPropagation()
151
+ props.toggleWordWrap()
152
+ }}
153
+ >
154
+ {props.config.wrapIcon ? (
155
+ <Icon icon={props.config.wrapIcon} />
156
+ ) : null}
157
+ {props.config.wrapText || 'Wrap'}
158
+ </button>
159
+
136
160
  {preview.value ? (
137
161
  <button
138
162
  class="preview-toggle-button"
@@ -28,6 +28,7 @@ export class CodeMirrorBlock implements NodeView {
28
28
  selected = ref(false)
29
29
  language = ref('')
30
30
  text = ref('')
31
+ wordWrap = ref(false)
31
32
 
32
33
  private updating = false
33
34
  private languageName: string = ''
@@ -35,6 +36,7 @@ export class CodeMirrorBlock implements NodeView {
35
36
 
36
37
  private readonly languageConf: Compartment
37
38
  private readonly readOnlyConf: Compartment
39
+ private readonly lineWrappingConf: Compartment
38
40
 
39
41
  constructor(
40
42
  public node: Node,
@@ -45,12 +47,14 @@ export class CodeMirrorBlock implements NodeView {
45
47
  ) {
46
48
  this.languageConf = new Compartment()
47
49
  this.readOnlyConf = new Compartment()
50
+ this.lineWrappingConf = new Compartment()
48
51
 
49
52
  this.cm = new CodeMirror({
50
53
  doc: this.node.textContent,
51
54
  root: this.view.root,
52
55
  extensions: [
53
56
  this.readOnlyConf.of(EditorState.readOnly.of(!this.view.editable)),
57
+ this.lineWrappingConf.of([]),
54
58
  drawSelection(),
55
59
  cmKeymap.of(this.codeMirrorKeymap()),
56
60
  this.languageConf.of([]),
@@ -110,6 +114,8 @@ export class CodeMirrorBlock implements NodeView {
110
114
  getReadOnly: () => !this.view.editable,
111
115
  setLanguage: this.setLanguage,
112
116
  config: this.config,
117
+ wordWrap: this.wordWrap,
118
+ toggleWordWrap: this.toggleWordWrap,
113
119
  })
114
120
  }
115
121
 
@@ -276,6 +282,15 @@ export class CodeMirrorBlock implements NodeView {
276
282
  )
277
283
  }
278
284
 
285
+ toggleWordWrap = () => {
286
+ this.wordWrap.value = !this.wordWrap.value
287
+ this.cm.dispatch({
288
+ effects: this.lineWrappingConf.reconfigure(
289
+ this.wordWrap.value ? [CodeMirror.lineWrapping] : []
290
+ ),
291
+ })
292
+ }
293
+
279
294
  getAllLanguages = () => {
280
295
  return this.loader.getAll()
281
296
  }
@@ -5,6 +5,11 @@ import { withMeta } from '../__internal__/meta'
5
5
  export interface ImageBlockConfig {
6
6
  imageIcon: string | undefined
7
7
  captionIcon: string | undefined
8
+ cropIcon: string | undefined
9
+ borderIcon: string | undefined
10
+ confirmIcon: string | undefined
11
+ cancelIcon: string | undefined
12
+ resetCropIcon: string | undefined
8
13
  uploadButton: string | undefined
9
14
  confirmButton: string | undefined
10
15
  uploadPlaceholderText: string
@@ -19,6 +24,11 @@ export interface ImageBlockConfig {
19
24
  export const defaultImageBlockConfig: ImageBlockConfig = {
20
25
  imageIcon: '🌌',
21
26
  captionIcon: '💬',
27
+ cropIcon: '✂️',
28
+ borderIcon: '🔲',
29
+ confirmIcon: '✓',
30
+ cancelIcon: '✕',
31
+ resetCropIcon: '↩',
22
32
  uploadButton: 'Upload file',
23
33
  confirmButton: 'Confirm ⏎',
24
34
  uploadPlaceholderText: 'or paste the image link ...',
@@ -20,6 +20,14 @@ export const imageBlockSchema = $nodeSchema('image-block', () => {
20
20
  caption: { default: '', validate: 'string' },
21
21
  ratio: { default: 1, validate: 'number' },
22
22
  align: { default: null },
23
+ cropRatio: { default: 'free', validate: 'string' },
24
+ cropTop: { default: 0, validate: 'number' },
25
+ cropLeft: { default: 0, validate: 'number' },
26
+ cropWidth: { default: 1, validate: 'number' },
27
+ cropHeight: { default: 1, validate: 'number' },
28
+ borderWidth: { default: 0, validate: 'number' },
29
+ borderColor: { default: '#000000', validate: 'string' },
30
+ borderStyle: { default: 'none', validate: 'string' },
23
31
  },
24
32
  parseDOM: [
25
33
  {
@@ -32,6 +40,14 @@ export const imageBlockSchema = $nodeSchema('image-block', () => {
32
40
  caption: dom.getAttribute('caption') || '',
33
41
  ratio: Number(dom.getAttribute('ratio') ?? 1),
34
42
  align: dom.getAttribute('align') || null,
43
+ cropRatio: dom.getAttribute('cropRatio') || 'free',
44
+ cropTop: Number(dom.getAttribute('cropTop') ?? 0),
45
+ cropLeft: Number(dom.getAttribute('cropLeft') ?? 0),
46
+ cropWidth: Number(dom.getAttribute('cropWidth') ?? 1),
47
+ cropHeight: Number(dom.getAttribute('cropHeight') ?? 1),
48
+ borderWidth: Number(dom.getAttribute('borderWidth') ?? 0),
49
+ borderColor: dom.getAttribute('borderColor') || '#000000',
50
+ borderStyle: dom.getAttribute('borderStyle') || 'none',
35
51
  }
36
52
  },
37
53
  },
@@ -15,6 +15,11 @@ test('calls onImageLoadError when img fires error', async () => {
15
15
  confirmButton: 'Confirm',
16
16
  uploadPlaceholderText: 'or paste an image URL',
17
17
  onUpload: async () => 'https://example.com/photo.png',
18
+ cropIcon: '✂️',
19
+ borderIcon: '🔲',
20
+ confirmIcon: '✓',
21
+ cancelIcon: '✕',
22
+ resetCropIcon: '↩',
18
23
  }
19
24
 
20
25
  // render the ImageViewer component
@@ -23,6 +28,15 @@ test('calls onImageLoadError when img fires error', async () => {
23
28
  src: ref('https://example.com/photo.png'),
24
29
  caption: ref(''),
25
30
  ratio: ref(1),
31
+ align: ref(null),
32
+ cropRatio: ref('free'),
33
+ cropTop: ref(0),
34
+ cropLeft: ref(0),
35
+ cropWidth: ref(1),
36
+ cropHeight: ref(1),
37
+ borderWidth: ref(0),
38
+ borderColor: ref('#000000'),
39
+ borderStyle: ref('none'),
26
40
  selected: ref(false),
27
41
  readonly: ref(false),
28
42
  setAttr: () => {},
@@ -13,6 +13,14 @@ type Attrs = {
13
13
  caption: string
14
14
  ratio: number
15
15
  align: string | null
16
+ cropRatio: string
17
+ cropTop: number
18
+ cropLeft: number
19
+ cropWidth: number
20
+ cropHeight: number
21
+ borderWidth: number
22
+ borderColor: string
23
+ borderStyle: string
16
24
  }
17
25
 
18
26
  export type MilkdownImageBlockProps = {
@@ -42,6 +50,38 @@ export const MilkdownImageBlock = defineComponent<MilkdownImageBlockProps>({
42
50
  type: Object,
43
51
  required: true,
44
52
  },
53
+ cropRatio: {
54
+ type: Object,
55
+ required: true,
56
+ },
57
+ cropTop: {
58
+ type: Object,
59
+ required: true,
60
+ },
61
+ cropLeft: {
62
+ type: Object,
63
+ required: true,
64
+ },
65
+ cropWidth: {
66
+ type: Object,
67
+ required: true,
68
+ },
69
+ cropHeight: {
70
+ type: Object,
71
+ required: true,
72
+ },
73
+ borderWidth: {
74
+ type: Object,
75
+ required: true,
76
+ },
77
+ borderColor: {
78
+ type: Object,
79
+ required: true,
80
+ },
81
+ borderStyle: {
82
+ type: Object,
83
+ required: true,
84
+ },
45
85
  selected: {
46
86
  type: Object,
47
87
  required: true,