@jvs-milkdown/components 1.0.0 → 1.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.
@@ -362,9 +362,13 @@ const ImageViewer = defineComponent({
362
362
  setup({ src, caption, ratio, readonly, setAttr, config }) {
363
363
  var _a;
364
364
  const imageRef = ref();
365
- const resizeHandle = ref();
366
365
  const showCaption = ref(Boolean((_a = caption.value) == null ? void 0 : _a.length));
367
366
  const timer = ref(0);
367
+ let resizeDir = "";
368
+ let startY = 0;
369
+ let startX = 0;
370
+ let startHeight = 0;
371
+ let startWidth = 0;
368
372
  const onImageLoad = () => {
369
373
  var _a2;
370
374
  const image = imageRef.value;
@@ -413,9 +417,19 @@ const ImageViewer = defineComponent({
413
417
  e.preventDefault();
414
418
  const image = imageRef.value;
415
419
  if (!image) return;
416
- const top = image.getBoundingClientRect().top;
417
- let height = e.clientY - top;
418
- if (height < 100) height = 100;
420
+ const deltaY = e.clientY - startY;
421
+ const deltaX = e.clientX - startX;
422
+ const aspect = startHeight / (startWidth || 1);
423
+ let dhY = resizeDir.includes("bottom") ? deltaY : -deltaY;
424
+ let dhX = 0;
425
+ if (resizeDir.includes("right")) {
426
+ dhX = deltaX * aspect;
427
+ } else if (resizeDir.includes("left")) {
428
+ dhX = -deltaX * aspect;
429
+ }
430
+ const dh = Math.abs(dhX) > Math.abs(dhY) ? dhX : dhY;
431
+ let height = startHeight + dh;
432
+ if (height < 20) height = 20;
419
433
  if (config.maxHeight && height > config.maxHeight)
420
434
  height = config.maxHeight;
421
435
  const h2 = Number(height).toFixed(2);
@@ -435,10 +449,18 @@ const ImageViewer = defineComponent({
435
449
  if (Number.isNaN(ratio2)) return;
436
450
  setAttr("ratio", ratio2);
437
451
  };
438
- const onResizeHandlePointerDown = (e) => {
452
+ const onResizeHandlePointerDown = (e, dir) => {
439
453
  if (readonly.value) return;
440
454
  e.preventDefault();
441
455
  e.stopPropagation();
456
+ resizeDir = dir;
457
+ startY = e.clientY;
458
+ startX = e.clientX;
459
+ const image = imageRef.value;
460
+ if (image) {
461
+ startHeight = image.getBoundingClientRect().height;
462
+ startWidth = image.getBoundingClientRect().width;
463
+ }
442
464
  window.addEventListener("pointermove", onResizeHandlePointerMove);
443
465
  window.addEventListener("pointerup", onResizeHandlePointerUp);
444
466
  };
@@ -460,9 +482,26 @@ const ImageViewer = defineComponent({
460
482
  ), /* @__PURE__ */ h(
461
483
  "div",
462
484
  {
463
- ref: resizeHandle,
464
- class: "image-resize-handle",
465
- onPointerdown: onResizeHandlePointerDown
485
+ class: "image-resize-handle top-left",
486
+ onPointerdown: (e) => onResizeHandlePointerDown(e, "top-left")
487
+ }
488
+ ), /* @__PURE__ */ h(
489
+ "div",
490
+ {
491
+ class: "image-resize-handle top-right",
492
+ onPointerdown: (e) => onResizeHandlePointerDown(e, "top-right")
493
+ }
494
+ ), /* @__PURE__ */ h(
495
+ "div",
496
+ {
497
+ class: "image-resize-handle bottom-left",
498
+ onPointerdown: (e) => onResizeHandlePointerDown(e, "bottom-left")
499
+ }
500
+ ), /* @__PURE__ */ h(
501
+ "div",
502
+ {
503
+ class: "image-resize-handle bottom-right",
504
+ onPointerdown: (e) => onResizeHandlePointerDown(e, "bottom-right")
466
505
  }
467
506
  )), showCaption.value && /* @__PURE__ */ h(
468
507
  "input",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/__internal__/meta.ts","../../src/image-block/config.ts","../../src/image-block/remark-plugin.ts","../../src/image-block/schema.ts","../../src/__internal__/keep-alive.ts","../../src/__internal__/components/icon.tsx","../../src/__internal__/components/image-input.tsx","../../src/image-block/view/components/image-viewer.tsx","../../src/image-block/view/components/image-block.tsx","../../src/image-block/view/index.ts","../../src/image-block/index.ts"],"sourcesContent":["import type { Meta, MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nexport function withMeta<T extends MilkdownPlugin>(\n plugin: T,\n meta: Partial<Meta> & Pick<Meta, 'displayName'>\n): T {\n Object.assign(plugin, {\n meta: {\n package: '@jvs-milkdown/components',\n ...meta,\n },\n })\n\n return plugin\n}\n","import { $ctx } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\n\nexport interface ImageBlockConfig {\n imageIcon: string | undefined\n captionIcon: string | undefined\n uploadButton: string | undefined\n confirmButton: string | undefined\n uploadPlaceholderText: string\n captionPlaceholderText: string\n onUpload: (file: File) => Promise<string>\n proxyDomURL?: (url: string) => Promise<string> | string\n onImageLoadError?: (event: Event) => void | Promise<void>\n maxWidth?: number\n maxHeight?: number\n}\n\nexport const defaultImageBlockConfig: ImageBlockConfig = {\n imageIcon: '🌌',\n captionIcon: '💬',\n uploadButton: 'Upload file',\n confirmButton: 'Confirm ⏎',\n uploadPlaceholderText: 'or paste the image link ...',\n captionPlaceholderText: 'Image caption',\n onUpload: (file) => Promise.resolve(URL.createObjectURL(file)),\n}\n\nexport const imageBlockConfig = $ctx(\n defaultImageBlockConfig,\n 'imageBlockConfigCtx'\n)\n\nwithMeta(imageBlockConfig, {\n displayName: 'Config<image-block>',\n group: 'ImageBlock',\n})\n","import type { Node } from '@jvs-milkdown/transformer'\n\nimport { $remark } from '@jvs-milkdown/utils'\nimport { visit } from 'unist-util-visit'\n\nimport { withMeta } from '../__internal__/meta'\n\nfunction visitImage(ast: Node) {\n return visit(\n ast,\n 'paragraph',\n (\n node: Node & { children?: Node[] },\n index: number,\n parent: Node & { children: Node[] }\n ) => {\n if (node.children?.length !== 1) return\n const firstChild = node.children?.[0]\n if (!firstChild || firstChild.type !== 'image') return\n\n const { url, alt, title } = firstChild as Node & {\n url: string\n alt: string\n title: string\n }\n const newNode = {\n type: 'image-block',\n url,\n alt,\n title,\n }\n\n parent.children.splice(index, 1, newNode)\n }\n )\n}\n\nexport const remarkImageBlockPlugin = $remark(\n 'remark-image-block',\n () => () => visitImage\n)\n\nwithMeta(remarkImageBlockPlugin.plugin, {\n displayName: 'Remark<remarkImageBlock>',\n group: 'ImageBlock',\n})\n\nwithMeta(remarkImageBlockPlugin.options, {\n displayName: 'RemarkConfig<remarkImageBlock>',\n group: 'ImageBlock',\n})\n","import { expectDomTypeError } from '@jvs-milkdown/exception'\nimport { $nodeSchema } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\n\nexport const IMAGE_DATA_TYPE = 'image-block'\n\nexport const imageBlockSchema = $nodeSchema('image-block', () => {\n return {\n inline: false,\n group: 'block',\n selectable: true,\n draggable: true,\n isolating: true,\n marks: '',\n atom: true,\n priority: 100,\n attrs: {\n src: { default: '', validate: 'string' },\n caption: { default: '', validate: 'string' },\n ratio: { default: 1, validate: 'number' },\n },\n parseDOM: [\n {\n tag: `img[data-type=\"${IMAGE_DATA_TYPE}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n src: dom.getAttribute('src') || '',\n caption: dom.getAttribute('caption') || '',\n ratio: Number(dom.getAttribute('ratio') ?? 1),\n }\n },\n },\n ],\n toDOM: (node) => ['img', { 'data-type': IMAGE_DATA_TYPE, ...node.attrs }],\n parseMarkdown: {\n match: ({ type }) => type === 'image-block',\n runner: (state, node, type) => {\n const src = node.url as string\n const caption = node.title as string\n let ratio = Number((node.alt as string) || 1)\n if (Number.isNaN(ratio) || ratio === 0) ratio = 1\n\n state.addNode(type, {\n src,\n caption,\n ratio,\n })\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'image-block',\n runner: (state, node) => {\n state.openNode('paragraph')\n state.addNode('image', undefined, undefined, {\n title: node.attrs.caption,\n url: node.attrs.src,\n alt: `${Number.parseFloat(node.attrs.ratio).toFixed(2)}`,\n })\n state.closeNode()\n },\n },\n }\n})\n\nwithMeta(imageBlockSchema.node, {\n displayName: 'NodeSchema<image-block>',\n group: 'ImageBlock',\n})\n","// Prevent tree-shaking from removing Vue's `h` and `Fragment`,\n// which are required at runtime for TSX to work.\nexport function keepAlive(..._args: unknown[]) {}\n","import clsx from 'clsx'\nimport DOMPurify from 'dompurify'\nimport { h } from 'vue'\n\nimport { keepAlive } from '../keep-alive'\n\nkeepAlive(h)\n\ntype IconProps = {\n icon?: string | null\n class?: string\n onClick?: (event: PointerEvent) => void\n}\n\nexport function Icon({ icon, class: className, onClick }: IconProps) {\n return (\n <span\n class={clsx('milkdown-icon', className)}\n onPointerdown={onClick}\n innerHTML={icon ? DOMPurify.sanitize(icon.trim()) : undefined}\n />\n )\n}\n\nIcon.props = {\n icon: {\n type: String,\n required: false,\n },\n class: {\n type: String,\n required: false,\n },\n onClick: {\n type: Function,\n required: false,\n },\n}\n","import clsx from 'clsx'\nimport { customAlphabet } from 'nanoid'\nimport { defineComponent, ref, h, type Ref } from 'vue'\n\nimport { keepAlive } from '../keep-alive'\nimport { Icon } from './icon'\n\nkeepAlive(h)\n\nconst nanoid = customAlphabet('abcdefg', 8)\n\ntype ImageInputProps = {\n src: Ref<string | undefined>\n selected: Ref<boolean>\n readonly: Ref<boolean>\n setLink: (link: string) => void\n\n imageIcon?: string\n uploadButton?: string\n confirmButton?: string\n uploadPlaceholderText?: string\n\n className?: string\n\n onUpload: (file: File) => Promise<string>\n onImageLoadError?: (event: Event) => void | Promise<void>\n}\n\nexport const ImageInput = defineComponent<ImageInputProps>({\n props: {\n src: {\n type: Object,\n required: true,\n },\n selected: {\n type: Object,\n required: true,\n },\n readonly: {\n type: Object,\n required: true,\n },\n setLink: {\n type: Function,\n required: true,\n },\n imageIcon: {\n type: String,\n required: false,\n },\n uploadButton: {\n type: String,\n required: false,\n },\n confirmButton: {\n type: String,\n required: false,\n },\n uploadPlaceholderText: {\n type: String,\n required: false,\n },\n onUpload: {\n type: Function,\n required: true,\n },\n onImageLoadError: {\n type: Function,\n required: false,\n },\n },\n setup({\n readonly,\n src,\n setLink,\n onUpload,\n imageIcon,\n uploadButton,\n confirmButton,\n uploadPlaceholderText,\n className,\n onImageLoadError,\n }) {\n const focusLinkInput = ref(false)\n const linkInputRef = ref<HTMLInputElement>()\n const currentLink = ref(src.value ?? '')\n const uuid = ref(nanoid())\n const hidePlaceholder = ref(src.value?.length !== 0)\n const onEditLink = (e: Event) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n hidePlaceholder.value = value.length !== 0\n currentLink.value = value\n }\n\n const onKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n setLink(linkInputRef.value?.value ?? '')\n }\n }\n\n const onConfirmLinkInput = () => {\n setLink(linkInputRef.value?.value ?? '')\n }\n\n const onUploadFile = (e: Event) => {\n const file = (e.target as HTMLInputElement).files?.[0]\n if (!file) return\n\n onUpload(file)\n .then((url) => {\n if (!url) return\n\n setLink(url)\n hidePlaceholder.value = true\n })\n .catch((err) => {\n console.error('An error occurred while uploading image')\n console.error(err)\n })\n }\n\n return () => {\n return (\n <div class={clsx('image-edit', className)}>\n <Icon icon={imageIcon} class=\"image-icon\" />\n <div class={clsx('link-importer', focusLinkInput.value && 'focus')}>\n <input\n ref={linkInputRef}\n draggable=\"true\"\n onDragstart={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n disabled={readonly.value}\n class=\"link-input-area\"\n value={currentLink.value}\n onInput={onEditLink}\n onKeydown={onKeydown}\n onFocus={() => (focusLinkInput.value = true)}\n onBlur={() => (focusLinkInput.value = false)}\n />\n {!hidePlaceholder.value && (\n <div class=\"placeholder\">\n <input\n disabled={readonly.value}\n class=\"hidden\"\n id={uuid.value}\n type=\"file\"\n accept=\"image/*\"\n onChange={onUploadFile}\n />\n <label class=\"uploader\" for={uuid.value}>\n <Icon icon={uploadButton} />\n </label>\n <span class=\"text\" onClick={() => linkInputRef.value?.focus()}>\n {uploadPlaceholderText}\n </span>\n </div>\n )}\n </div>\n {currentLink.value && (\n <>\n <div class=\"image-preview\">\n <img\n src={currentLink.value}\n alt=\"\"\n onError={(e) =>\n Promise.resolve(onImageLoadError?.(e)).catch(() => {})\n }\n />\n </div>\n <div class=\"confirm\" onClick={() => onConfirmLinkInput()}>\n <Icon icon={confirmButton} />\n </div>\n </>\n )}\n </div>\n )\n }\n },\n})\n","import { defineComponent, ref, h, Fragment } from 'vue'\n\nimport type { MilkdownImageBlockProps } from './image-block'\n\nimport { Icon } from '../../../__internal__/components/icon'\nimport { keepAlive } from '../../../__internal__/keep-alive'\nimport { IMAGE_DATA_TYPE } from '../../schema'\n\nkeepAlive(h, Fragment)\n\nexport const ImageViewer = defineComponent<MilkdownImageBlockProps>({\n props: {\n src: {\n type: Object,\n required: true,\n },\n caption: {\n type: Object,\n required: true,\n },\n ratio: {\n type: Object,\n required: true,\n },\n selected: {\n type: Object,\n required: true,\n },\n readonly: {\n type: Object,\n required: true,\n },\n setAttr: {\n type: Function,\n required: true,\n },\n config: {\n type: Object,\n required: true,\n },\n },\n setup({ src, caption, ratio, readonly, setAttr, config }) {\n const imageRef = ref<HTMLImageElement>()\n const resizeHandle = ref<HTMLDivElement>()\n const showCaption = ref(Boolean(caption.value?.length))\n const timer = ref(0)\n\n const onImageLoad = () => {\n const image = imageRef.value\n if (!image) return\n const host = image.closest('.milkdown-image-block')\n if (!host) return\n\n let maxWidth = host.getBoundingClientRect().width\n if (!maxWidth) return\n\n if (config.maxWidth && config.maxWidth < maxWidth)\n maxWidth = config.maxWidth\n\n const height = image.naturalHeight\n const width = image.naturalWidth\n let transformedHeight =\n width < maxWidth ? height : maxWidth * (height / width)\n\n if (config.maxHeight && transformedHeight > config.maxHeight)\n transformedHeight = config.maxHeight\n\n const h = (transformedHeight * (ratio.value ?? 1)).toFixed(2)\n image.dataset.origin = transformedHeight.toFixed(2)\n image.dataset.height = h\n image.style.height = `${h}px`\n\n if (config.maxWidth) image.style.maxWidth = `${config.maxWidth}px`\n }\n\n const onToggleCaption = (e: PointerEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (readonly.value) return\n showCaption.value = !showCaption.value\n }\n\n const onInputCaption = (e: Event) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n if (timer.value) window.clearTimeout(timer.value)\n\n timer.value = window.setTimeout(() => {\n setAttr('caption', value)\n }, 1000)\n }\n\n const onBlurCaption = (e: Event) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n if (timer.value) {\n window.clearTimeout(timer.value)\n timer.value = 0\n }\n\n setAttr('caption', value)\n }\n\n const onResizeHandlePointerMove = (e: PointerEvent) => {\n e.preventDefault()\n const image = imageRef.value\n if (!image) return\n const top = image.getBoundingClientRect().top\n let height = e.clientY - top\n if (height < 100) height = 100\n if (config.maxHeight && height > config.maxHeight)\n height = config.maxHeight\n const h = Number(height).toFixed(2)\n image.dataset.height = h\n image.style.height = `${h}px`\n }\n\n const onResizeHandlePointerUp = () => {\n window.removeEventListener('pointermove', onResizeHandlePointerMove)\n window.removeEventListener('pointerup', onResizeHandlePointerUp)\n\n const image = imageRef.value\n if (!image) return\n\n const originHeight = Number(image.dataset.origin)\n const currentHeight = Number(image.dataset.height)\n const ratio = Number.parseFloat(\n Number(currentHeight / originHeight).toFixed(2)\n )\n if (Number.isNaN(ratio)) return\n\n setAttr('ratio', ratio)\n }\n\n const onResizeHandlePointerDown = (e: PointerEvent) => {\n if (readonly.value) return\n e.preventDefault()\n e.stopPropagation()\n window.addEventListener('pointermove', onResizeHandlePointerMove)\n window.addEventListener('pointerup', onResizeHandlePointerUp)\n }\n\n return () => {\n return (\n <>\n <div class=\"image-wrapper\">\n <div class=\"operation\">\n <div class=\"operation-item\" onPointerdown={onToggleCaption}>\n <Icon icon={config.captionIcon} />\n </div>\n </div>\n <img\n ref={imageRef}\n data-type={IMAGE_DATA_TYPE}\n onLoad={onImageLoad}\n src={src.value}\n alt={caption.value}\n onError={(e) =>\n Promise.resolve(config.onImageLoadError?.(e)).catch(() => {})\n }\n />\n <div\n ref={resizeHandle}\n class=\"image-resize-handle\"\n onPointerdown={onResizeHandlePointerDown}\n />\n </div>\n {showCaption.value && (\n <input\n draggable=\"true\"\n onDragstart={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n class=\"caption-input\"\n placeholder={config?.captionPlaceholderText}\n onInput={onInputCaption}\n onBlur={onBlurCaption}\n value={caption.value}\n />\n )}\n </>\n )\n }\n },\n})\n","import { h, Fragment, type Ref, defineComponent } from 'vue'\n\nimport type { ImageBlockConfig } from '../../config'\n\nimport { ImageInput } from '../../../__internal__/components/image-input'\nimport { keepAlive } from '../../../__internal__/keep-alive'\nimport { ImageViewer } from './image-viewer'\n\nkeepAlive(h, Fragment)\n\ntype Attrs = {\n src: string\n caption: string\n ratio: number\n}\n\nexport type MilkdownImageBlockProps = {\n selected: Ref<boolean>\n readonly: Ref<boolean>\n setAttr: <T extends keyof Attrs>(attr: T, value: Attrs[T]) => void\n config: ImageBlockConfig\n} & {\n [P in keyof Attrs]: Ref<Attrs[P] | undefined>\n}\n\nexport const MilkdownImageBlock = defineComponent<MilkdownImageBlockProps>({\n props: {\n src: {\n type: Object,\n required: true,\n },\n caption: {\n type: Object,\n required: true,\n },\n ratio: {\n type: Object,\n required: true,\n },\n selected: {\n type: Object,\n required: true,\n },\n readonly: {\n type: Object,\n required: true,\n },\n setAttr: {\n type: Function,\n required: true,\n },\n config: {\n type: Object,\n required: true,\n },\n },\n setup(props) {\n const { src } = props\n\n return () => {\n if (!src.value?.length) {\n return (\n <ImageInput\n src={props.src}\n selected={props.selected}\n readonly={props.readonly}\n setLink={(link) => props.setAttr('src', link)}\n imageIcon={props.config.imageIcon}\n uploadButton={props.config.uploadButton}\n confirmButton={props.config.confirmButton}\n uploadPlaceholderText={props.config.uploadPlaceholderText}\n onUpload={props.config.onUpload}\n onImageLoadError={props.config.onImageLoadError}\n />\n )\n }\n return <ImageViewer {...props} />\n }\n },\n})\n","import type { Node } from '@jvs-milkdown/prose/model'\nimport type { NodeViewConstructor } from '@jvs-milkdown/prose/view'\n\nimport { $view } from '@jvs-milkdown/utils'\nimport DOMPurify from 'dompurify'\nimport { createApp, ref, watchEffect } from 'vue'\n\nimport { withMeta } from '../../__internal__/meta'\nimport { imageBlockConfig } from '../config'\nimport { imageBlockSchema } from '../schema'\nimport { MilkdownImageBlock } from './components/image-block'\n\nexport const imageBlockView = $view(\n imageBlockSchema.node,\n (ctx): NodeViewConstructor => {\n return (initialNode, view, getPos) => {\n const src = ref(initialNode.attrs.src)\n const caption = ref(initialNode.attrs.caption)\n const ratio = ref(initialNode.attrs.ratio)\n const selected = ref(false)\n const readonly = ref(!view.editable)\n const setAttr = (attr: string, value: unknown) => {\n if (!view.editable) return\n const pos = getPos()\n if (pos == null) return\n view.dispatch(\n view.state.tr.setNodeAttribute(\n pos,\n attr,\n attr === 'src' ? DOMPurify.sanitize(value as string) : value\n )\n )\n }\n const config = ctx.get(imageBlockConfig.key)\n const app = createApp(MilkdownImageBlock, {\n src,\n caption,\n ratio,\n selected,\n readonly,\n setAttr,\n config,\n })\n const dom = document.createElement('div')\n dom.className = 'milkdown-image-block'\n const disposeSelectedWatcher = watchEffect(() => {\n const isSelected = selected.value\n if (isSelected) {\n dom.classList.add('selected')\n } else {\n dom.classList.remove('selected')\n }\n })\n const proxyDomURL = config.proxyDomURL\n const bindAttrs = (node: Node) => {\n if (!proxyDomURL) {\n src.value = node.attrs.src\n } else {\n const proxiedURL = proxyDomURL(node.attrs.src)\n if (typeof proxiedURL === 'string') {\n src.value = proxiedURL\n } else {\n proxiedURL\n .then((url) => {\n src.value = url\n })\n .catch(console.error)\n }\n }\n ratio.value = node.attrs.ratio\n caption.value = node.attrs.caption\n\n readonly.value = !view.editable\n }\n\n bindAttrs(initialNode)\n app.mount(dom)\n\n return {\n dom,\n update: (updatedNode) => {\n if (updatedNode.type !== initialNode.type) return false\n\n bindAttrs(updatedNode)\n return true\n },\n stopEvent: (e) => {\n if (e.target instanceof HTMLInputElement) return true\n\n return false\n },\n selectNode: () => {\n selected.value = true\n },\n deselectNode: () => {\n selected.value = false\n },\n destroy: () => {\n disposeSelectedWatcher()\n app.unmount()\n dom.remove()\n },\n }\n }\n }\n)\n\nwithMeta(imageBlockView, {\n displayName: 'NodeView<image-block>',\n group: 'ImageBlock',\n})\n","import type { MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nimport { imageBlockConfig } from './config'\nimport { remarkImageBlockPlugin } from './remark-plugin'\nimport { imageBlockSchema } from './schema'\nimport { imageBlockView } from './view'\n\nexport * from './schema'\nexport * from './remark-plugin'\nexport * from './config'\nexport * from './view'\n\nexport const imageBlockComponent: MilkdownPlugin[] = [\n remarkImageBlockPlugin,\n imageBlockSchema,\n imageBlockView,\n imageBlockConfig,\n].flat()\n"],"names":["__spreadValues","_a","_b","Fragment","h","ratio"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/__internal__/meta.ts","../../src/image-block/config.ts","../../src/image-block/remark-plugin.ts","../../src/image-block/schema.ts","../../src/__internal__/keep-alive.ts","../../src/__internal__/components/icon.tsx","../../src/__internal__/components/image-input.tsx","../../src/image-block/view/components/image-viewer.tsx","../../src/image-block/view/components/image-block.tsx","../../src/image-block/view/index.ts","../../src/image-block/index.ts"],"sourcesContent":["import type { Meta, MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nexport function withMeta<T extends MilkdownPlugin>(\n plugin: T,\n meta: Partial<Meta> & Pick<Meta, 'displayName'>\n): T {\n Object.assign(plugin, {\n meta: {\n package: '@jvs-milkdown/components',\n ...meta,\n },\n })\n\n return plugin\n}\n","import { $ctx } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\n\nexport interface ImageBlockConfig {\n imageIcon: string | undefined\n captionIcon: string | undefined\n uploadButton: string | undefined\n confirmButton: string | undefined\n uploadPlaceholderText: string\n captionPlaceholderText: string\n onUpload: (file: File) => Promise<string>\n proxyDomURL?: (url: string) => Promise<string> | string\n onImageLoadError?: (event: Event) => void | Promise<void>\n maxWidth?: number\n maxHeight?: number\n}\n\nexport const defaultImageBlockConfig: ImageBlockConfig = {\n imageIcon: '🌌',\n captionIcon: '💬',\n uploadButton: 'Upload file',\n confirmButton: 'Confirm ⏎',\n uploadPlaceholderText: 'or paste the image link ...',\n captionPlaceholderText: 'Image caption',\n onUpload: (file) => Promise.resolve(URL.createObjectURL(file)),\n}\n\nexport const imageBlockConfig = $ctx(\n defaultImageBlockConfig,\n 'imageBlockConfigCtx'\n)\n\nwithMeta(imageBlockConfig, {\n displayName: 'Config<image-block>',\n group: 'ImageBlock',\n})\n","import type { Node } from '@jvs-milkdown/transformer'\n\nimport { $remark } from '@jvs-milkdown/utils'\nimport { visit } from 'unist-util-visit'\n\nimport { withMeta } from '../__internal__/meta'\n\nfunction visitImage(ast: Node) {\n return visit(\n ast,\n 'paragraph',\n (\n node: Node & { children?: Node[] },\n index: number,\n parent: Node & { children: Node[] }\n ) => {\n if (node.children?.length !== 1) return\n const firstChild = node.children?.[0]\n if (!firstChild || firstChild.type !== 'image') return\n\n const { url, alt, title } = firstChild as Node & {\n url: string\n alt: string\n title: string\n }\n const newNode = {\n type: 'image-block',\n url,\n alt,\n title,\n }\n\n parent.children.splice(index, 1, newNode)\n }\n )\n}\n\nexport const remarkImageBlockPlugin = $remark(\n 'remark-image-block',\n () => () => visitImage\n)\n\nwithMeta(remarkImageBlockPlugin.plugin, {\n displayName: 'Remark<remarkImageBlock>',\n group: 'ImageBlock',\n})\n\nwithMeta(remarkImageBlockPlugin.options, {\n displayName: 'RemarkConfig<remarkImageBlock>',\n group: 'ImageBlock',\n})\n","import { expectDomTypeError } from '@jvs-milkdown/exception'\nimport { $nodeSchema } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\n\nexport const IMAGE_DATA_TYPE = 'image-block'\n\nexport const imageBlockSchema = $nodeSchema('image-block', () => {\n return {\n inline: false,\n group: 'block',\n selectable: true,\n draggable: true,\n isolating: true,\n marks: '',\n atom: true,\n priority: 100,\n attrs: {\n src: { default: '', validate: 'string' },\n caption: { default: '', validate: 'string' },\n ratio: { default: 1, validate: 'number' },\n },\n parseDOM: [\n {\n tag: `img[data-type=\"${IMAGE_DATA_TYPE}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n src: dom.getAttribute('src') || '',\n caption: dom.getAttribute('caption') || '',\n ratio: Number(dom.getAttribute('ratio') ?? 1),\n }\n },\n },\n ],\n toDOM: (node) => ['img', { 'data-type': IMAGE_DATA_TYPE, ...node.attrs }],\n parseMarkdown: {\n match: ({ type }) => type === 'image-block',\n runner: (state, node, type) => {\n const src = node.url as string\n const caption = node.title as string\n let ratio = Number((node.alt as string) || 1)\n if (Number.isNaN(ratio) || ratio === 0) ratio = 1\n\n state.addNode(type, {\n src,\n caption,\n ratio,\n })\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'image-block',\n runner: (state, node) => {\n state.openNode('paragraph')\n state.addNode('image', undefined, undefined, {\n title: node.attrs.caption,\n url: node.attrs.src,\n alt: `${Number.parseFloat(node.attrs.ratio).toFixed(2)}`,\n })\n state.closeNode()\n },\n },\n }\n})\n\nwithMeta(imageBlockSchema.node, {\n displayName: 'NodeSchema<image-block>',\n group: 'ImageBlock',\n})\n","// Prevent tree-shaking from removing Vue's `h` and `Fragment`,\n// which are required at runtime for TSX to work.\nexport function keepAlive(..._args: unknown[]) {}\n","import clsx from 'clsx'\nimport DOMPurify from 'dompurify'\nimport { h } from 'vue'\n\nimport { keepAlive } from '../keep-alive'\n\nkeepAlive(h)\n\ntype IconProps = {\n icon?: string | null\n class?: string\n onClick?: (event: PointerEvent) => void\n}\n\nexport function Icon({ icon, class: className, onClick }: IconProps) {\n return (\n <span\n class={clsx('milkdown-icon', className)}\n onPointerdown={onClick}\n innerHTML={icon ? DOMPurify.sanitize(icon.trim()) : undefined}\n />\n )\n}\n\nIcon.props = {\n icon: {\n type: String,\n required: false,\n },\n class: {\n type: String,\n required: false,\n },\n onClick: {\n type: Function,\n required: false,\n },\n}\n","import clsx from 'clsx'\nimport { customAlphabet } from 'nanoid'\nimport { defineComponent, ref, h, type Ref } from 'vue'\n\nimport { keepAlive } from '../keep-alive'\nimport { Icon } from './icon'\n\nkeepAlive(h)\n\nconst nanoid = customAlphabet('abcdefg', 8)\n\ntype ImageInputProps = {\n src: Ref<string | undefined>\n selected: Ref<boolean>\n readonly: Ref<boolean>\n setLink: (link: string) => void\n\n imageIcon?: string\n uploadButton?: string\n confirmButton?: string\n uploadPlaceholderText?: string\n\n className?: string\n\n onUpload: (file: File) => Promise<string>\n onImageLoadError?: (event: Event) => void | Promise<void>\n}\n\nexport const ImageInput = defineComponent<ImageInputProps>({\n props: {\n src: {\n type: Object,\n required: true,\n },\n selected: {\n type: Object,\n required: true,\n },\n readonly: {\n type: Object,\n required: true,\n },\n setLink: {\n type: Function,\n required: true,\n },\n imageIcon: {\n type: String,\n required: false,\n },\n uploadButton: {\n type: String,\n required: false,\n },\n confirmButton: {\n type: String,\n required: false,\n },\n uploadPlaceholderText: {\n type: String,\n required: false,\n },\n onUpload: {\n type: Function,\n required: true,\n },\n onImageLoadError: {\n type: Function,\n required: false,\n },\n },\n setup({\n readonly,\n src,\n setLink,\n onUpload,\n imageIcon,\n uploadButton,\n confirmButton,\n uploadPlaceholderText,\n className,\n onImageLoadError,\n }) {\n const focusLinkInput = ref(false)\n const linkInputRef = ref<HTMLInputElement>()\n const currentLink = ref(src.value ?? '')\n const uuid = ref(nanoid())\n const hidePlaceholder = ref(src.value?.length !== 0)\n const onEditLink = (e: Event) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n hidePlaceholder.value = value.length !== 0\n currentLink.value = value\n }\n\n const onKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n setLink(linkInputRef.value?.value ?? '')\n }\n }\n\n const onConfirmLinkInput = () => {\n setLink(linkInputRef.value?.value ?? '')\n }\n\n const onUploadFile = (e: Event) => {\n const file = (e.target as HTMLInputElement).files?.[0]\n if (!file) return\n\n onUpload(file)\n .then((url) => {\n if (!url) return\n\n setLink(url)\n hidePlaceholder.value = true\n })\n .catch((err) => {\n console.error('An error occurred while uploading image')\n console.error(err)\n })\n }\n\n return () => {\n return (\n <div class={clsx('image-edit', className)}>\n <Icon icon={imageIcon} class=\"image-icon\" />\n <div class={clsx('link-importer', focusLinkInput.value && 'focus')}>\n <input\n ref={linkInputRef}\n draggable=\"true\"\n onDragstart={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n disabled={readonly.value}\n class=\"link-input-area\"\n value={currentLink.value}\n onInput={onEditLink}\n onKeydown={onKeydown}\n onFocus={() => (focusLinkInput.value = true)}\n onBlur={() => (focusLinkInput.value = false)}\n />\n {!hidePlaceholder.value && (\n <div class=\"placeholder\">\n <input\n disabled={readonly.value}\n class=\"hidden\"\n id={uuid.value}\n type=\"file\"\n accept=\"image/*\"\n onChange={onUploadFile}\n />\n <label class=\"uploader\" for={uuid.value}>\n <Icon icon={uploadButton} />\n </label>\n <span class=\"text\" onClick={() => linkInputRef.value?.focus()}>\n {uploadPlaceholderText}\n </span>\n </div>\n )}\n </div>\n {currentLink.value && (\n <>\n <div class=\"image-preview\">\n <img\n src={currentLink.value}\n alt=\"\"\n onError={(e) =>\n Promise.resolve(onImageLoadError?.(e)).catch(() => {})\n }\n />\n </div>\n <div class=\"confirm\" onClick={() => onConfirmLinkInput()}>\n <Icon icon={confirmButton} />\n </div>\n </>\n )}\n </div>\n )\n }\n },\n})\n","import { defineComponent, ref, h, Fragment } from 'vue'\n\nimport type { MilkdownImageBlockProps } from './image-block'\n\nimport { Icon } from '../../../__internal__/components/icon'\nimport { keepAlive } from '../../../__internal__/keep-alive'\nimport { IMAGE_DATA_TYPE } from '../../schema'\n\nkeepAlive(h, Fragment)\n\nexport const ImageViewer = defineComponent<MilkdownImageBlockProps>({\n props: {\n src: {\n type: Object,\n required: true,\n },\n caption: {\n type: Object,\n required: true,\n },\n ratio: {\n type: Object,\n required: true,\n },\n selected: {\n type: Object,\n required: true,\n },\n readonly: {\n type: Object,\n required: true,\n },\n setAttr: {\n type: Function,\n required: true,\n },\n config: {\n type: Object,\n required: true,\n },\n },\n setup({ src, caption, ratio, readonly, setAttr, config }) {\n const imageRef = ref<HTMLImageElement>()\n const showCaption = ref(Boolean(caption.value?.length))\n const timer = ref(0)\n\n let resizeDir = ''\n let startY = 0\n let startX = 0\n let startHeight = 0\n let startWidth = 0\n\n const onImageLoad = () => {\n const image = imageRef.value\n if (!image) return\n const host = image.closest('.milkdown-image-block')\n if (!host) return\n\n let maxWidth = host.getBoundingClientRect().width\n if (!maxWidth) return\n\n if (config.maxWidth && config.maxWidth < maxWidth)\n maxWidth = config.maxWidth\n\n const height = image.naturalHeight\n const width = image.naturalWidth\n let transformedHeight =\n width < maxWidth ? height : maxWidth * (height / width)\n\n if (config.maxHeight && transformedHeight > config.maxHeight)\n transformedHeight = config.maxHeight\n\n const h = (transformedHeight * (ratio.value ?? 1)).toFixed(2)\n image.dataset.origin = transformedHeight.toFixed(2)\n image.dataset.height = h\n image.style.height = `${h}px`\n\n if (config.maxWidth) image.style.maxWidth = `${config.maxWidth}px`\n }\n\n const onToggleCaption = (e: PointerEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (readonly.value) return\n showCaption.value = !showCaption.value\n }\n\n const onInputCaption = (e: Event) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n if (timer.value) window.clearTimeout(timer.value)\n\n timer.value = window.setTimeout(() => {\n setAttr('caption', value)\n }, 1000)\n }\n\n const onBlurCaption = (e: Event) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n if (timer.value) {\n window.clearTimeout(timer.value)\n timer.value = 0\n }\n\n setAttr('caption', value)\n }\n\n const onResizeHandlePointerMove = (e: PointerEvent) => {\n e.preventDefault()\n const image = imageRef.value\n if (!image) return\n\n const deltaY = e.clientY - startY\n const deltaX = e.clientX - startX\n\n const aspect = startHeight / (startWidth || 1)\n let dhY = resizeDir.includes('bottom') ? deltaY : -deltaY\n let dhX = 0\n if (resizeDir.includes('right')) {\n dhX = deltaX * aspect\n } else if (resizeDir.includes('left')) {\n dhX = -deltaX * aspect\n }\n\n const dh = Math.abs(dhX) > Math.abs(dhY) ? dhX : dhY\n let height = startHeight + dh\n\n if (height < 20) height = 20\n if (config.maxHeight && height > config.maxHeight)\n height = config.maxHeight\n\n const h = Number(height).toFixed(2)\n image.dataset.height = h\n image.style.height = `${h}px`\n }\n\n const onResizeHandlePointerUp = () => {\n window.removeEventListener('pointermove', onResizeHandlePointerMove)\n window.removeEventListener('pointerup', onResizeHandlePointerUp)\n\n const image = imageRef.value\n if (!image) return\n\n const originHeight = Number(image.dataset.origin)\n const currentHeight = Number(image.dataset.height)\n const ratio = Number.parseFloat(\n Number(currentHeight / originHeight).toFixed(2)\n )\n if (Number.isNaN(ratio)) return\n\n setAttr('ratio', ratio)\n }\n\n const onResizeHandlePointerDown = (e: PointerEvent, dir: string) => {\n if (readonly.value) return\n e.preventDefault()\n e.stopPropagation()\n resizeDir = dir\n startY = e.clientY\n startX = e.clientX\n const image = imageRef.value\n if (image) {\n startHeight = image.getBoundingClientRect().height\n startWidth = image.getBoundingClientRect().width\n }\n window.addEventListener('pointermove', onResizeHandlePointerMove)\n window.addEventListener('pointerup', onResizeHandlePointerUp)\n }\n\n return () => {\n return (\n <>\n <div class=\"image-wrapper\">\n <div class=\"operation\">\n <div class=\"operation-item\" onPointerdown={onToggleCaption}>\n <Icon icon={config.captionIcon} />\n </div>\n </div>\n <img\n ref={imageRef}\n data-type={IMAGE_DATA_TYPE}\n onLoad={onImageLoad}\n src={src.value}\n alt={caption.value}\n onError={(e) =>\n Promise.resolve(config.onImageLoadError?.(e)).catch(() => {})\n }\n />\n <div\n class=\"image-resize-handle top-left\"\n onPointerdown={(e) => onResizeHandlePointerDown(e, 'top-left')}\n />\n <div\n class=\"image-resize-handle top-right\"\n onPointerdown={(e) => onResizeHandlePointerDown(e, 'top-right')}\n />\n <div\n class=\"image-resize-handle bottom-left\"\n onPointerdown={(e) => onResizeHandlePointerDown(e, 'bottom-left')}\n />\n <div\n class=\"image-resize-handle bottom-right\"\n onPointerdown={(e) =>\n onResizeHandlePointerDown(e, 'bottom-right')\n }\n />\n </div>\n {showCaption.value && (\n <input\n draggable=\"true\"\n onDragstart={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n class=\"caption-input\"\n placeholder={config?.captionPlaceholderText}\n onInput={onInputCaption}\n onBlur={onBlurCaption}\n value={caption.value}\n />\n )}\n </>\n )\n }\n },\n})\n","import { h, Fragment, type Ref, defineComponent } from 'vue'\n\nimport type { ImageBlockConfig } from '../../config'\n\nimport { ImageInput } from '../../../__internal__/components/image-input'\nimport { keepAlive } from '../../../__internal__/keep-alive'\nimport { ImageViewer } from './image-viewer'\n\nkeepAlive(h, Fragment)\n\ntype Attrs = {\n src: string\n caption: string\n ratio: number\n}\n\nexport type MilkdownImageBlockProps = {\n selected: Ref<boolean>\n readonly: Ref<boolean>\n setAttr: <T extends keyof Attrs>(attr: T, value: Attrs[T]) => void\n config: ImageBlockConfig\n} & {\n [P in keyof Attrs]: Ref<Attrs[P] | undefined>\n}\n\nexport const MilkdownImageBlock = defineComponent<MilkdownImageBlockProps>({\n props: {\n src: {\n type: Object,\n required: true,\n },\n caption: {\n type: Object,\n required: true,\n },\n ratio: {\n type: Object,\n required: true,\n },\n selected: {\n type: Object,\n required: true,\n },\n readonly: {\n type: Object,\n required: true,\n },\n setAttr: {\n type: Function,\n required: true,\n },\n config: {\n type: Object,\n required: true,\n },\n },\n setup(props) {\n const { src } = props\n\n return () => {\n if (!src.value?.length) {\n return (\n <ImageInput\n src={props.src}\n selected={props.selected}\n readonly={props.readonly}\n setLink={(link) => props.setAttr('src', link)}\n imageIcon={props.config.imageIcon}\n uploadButton={props.config.uploadButton}\n confirmButton={props.config.confirmButton}\n uploadPlaceholderText={props.config.uploadPlaceholderText}\n onUpload={props.config.onUpload}\n onImageLoadError={props.config.onImageLoadError}\n />\n )\n }\n return <ImageViewer {...props} />\n }\n },\n})\n","import type { Node } from '@jvs-milkdown/prose/model'\nimport type { NodeViewConstructor } from '@jvs-milkdown/prose/view'\n\nimport { $view } from '@jvs-milkdown/utils'\nimport DOMPurify from 'dompurify'\nimport { createApp, ref, watchEffect } from 'vue'\n\nimport { withMeta } from '../../__internal__/meta'\nimport { imageBlockConfig } from '../config'\nimport { imageBlockSchema } from '../schema'\nimport { MilkdownImageBlock } from './components/image-block'\n\nexport const imageBlockView = $view(\n imageBlockSchema.node,\n (ctx): NodeViewConstructor => {\n return (initialNode, view, getPos) => {\n const src = ref(initialNode.attrs.src)\n const caption = ref(initialNode.attrs.caption)\n const ratio = ref(initialNode.attrs.ratio)\n const selected = ref(false)\n const readonly = ref(!view.editable)\n const setAttr = (attr: string, value: unknown) => {\n if (!view.editable) return\n const pos = getPos()\n if (pos == null) return\n view.dispatch(\n view.state.tr.setNodeAttribute(\n pos,\n attr,\n attr === 'src' ? DOMPurify.sanitize(value as string) : value\n )\n )\n }\n const config = ctx.get(imageBlockConfig.key)\n const app = createApp(MilkdownImageBlock, {\n src,\n caption,\n ratio,\n selected,\n readonly,\n setAttr,\n config,\n })\n const dom = document.createElement('div')\n dom.className = 'milkdown-image-block'\n const disposeSelectedWatcher = watchEffect(() => {\n const isSelected = selected.value\n if (isSelected) {\n dom.classList.add('selected')\n } else {\n dom.classList.remove('selected')\n }\n })\n const proxyDomURL = config.proxyDomURL\n const bindAttrs = (node: Node) => {\n if (!proxyDomURL) {\n src.value = node.attrs.src\n } else {\n const proxiedURL = proxyDomURL(node.attrs.src)\n if (typeof proxiedURL === 'string') {\n src.value = proxiedURL\n } else {\n proxiedURL\n .then((url) => {\n src.value = url\n })\n .catch(console.error)\n }\n }\n ratio.value = node.attrs.ratio\n caption.value = node.attrs.caption\n\n readonly.value = !view.editable\n }\n\n bindAttrs(initialNode)\n app.mount(dom)\n\n return {\n dom,\n update: (updatedNode) => {\n if (updatedNode.type !== initialNode.type) return false\n\n bindAttrs(updatedNode)\n return true\n },\n stopEvent: (e) => {\n if (e.target instanceof HTMLInputElement) return true\n\n return false\n },\n selectNode: () => {\n selected.value = true\n },\n deselectNode: () => {\n selected.value = false\n },\n destroy: () => {\n disposeSelectedWatcher()\n app.unmount()\n dom.remove()\n },\n }\n }\n }\n)\n\nwithMeta(imageBlockView, {\n displayName: 'NodeView<image-block>',\n group: 'ImageBlock',\n})\n","import type { MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nimport { imageBlockConfig } from './config'\nimport { remarkImageBlockPlugin } from './remark-plugin'\nimport { imageBlockSchema } from './schema'\nimport { imageBlockView } from './view'\n\nexport * from './schema'\nexport * from './remark-plugin'\nexport * from './config'\nexport * from './view'\n\nexport const imageBlockComponent: MilkdownPlugin[] = [\n remarkImageBlockPlugin,\n imageBlockSchema,\n imageBlockView,\n imageBlockConfig,\n].flat()\n"],"names":["__spreadValues","_a","_b","Fragment","h","ratio"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"image-viewer.d.ts","sourceRoot":"","sources":["../../../../src/image-block/view/components/image-viewer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAQ5D,eAAO,MAAM,WAAW,0TA+KtB,CAAA"}
1
+ {"version":3,"file":"image-viewer.d.ts","sourceRoot":"","sources":["../../../../src/image-block/view/components/image-viewer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAQ5D,eAAO,MAAM,WAAW,0TAwNtB,CAAA"}
@@ -1,4 +1,4 @@
1
- export type RenderType = 'add_row' | 'add_col' | 'delete_row' | 'delete_col' | 'align_col_left' | 'align_col_center' | 'align_col_right' | 'col_drag_handle' | 'row_drag_handle';
1
+ export type RenderType = 'add_row' | 'add_col' | 'delete_row' | 'delete_col' | 'align_col_left' | 'align_col_center' | 'align_col_right' | 'col_drag_handle' | 'row_drag_handle' | 'merge_cells' | 'split_cell';
2
2
  export interface TableBlockConfig {
3
3
  renderButton: (renderType: RenderType) => string;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/table-block/config.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,CAAA;AAErB,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,MAAM,CAAA;CACjD;AA2BD,eAAO,MAAM,gBAAgB;kBA5Bb,CAAC,UAAU,EAAE,UAAU,KAAK,MAAM;yBA+BjD,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/table-block/config.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,GACjB,aAAa,GACb,YAAY,CAAA;AAEhB,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,MAAM,CAAA;CACjD;AA+BD,eAAO,MAAM,gBAAgB;kBAhCb,CAAC,UAAU,EAAE,UAAU,KAAK,MAAM;yBAmCjD,CAAA"}