@sdata/web-vue 3.4.0 → 3.6.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.
package/es/index.js CHANGED
@@ -66,6 +66,10 @@ import descriptions_item_default from "./descriptions/descriptions-item.js";
66
66
  import Descriptions from "./descriptions/index.js";
67
67
  import Divider from "./divider/index.js";
68
68
  import Drawer from "./drawer/index.js";
69
+ import preview_action_default from "./image/preview-action.js";
70
+ import preview_default from "./image/preview.js";
71
+ import preview_group_default from "./image/preview-group.js";
72
+ import Image from "./image/index.js";
69
73
  import FilePreviewer from "./file-previewer/index.js";
70
74
  import grid_col_default from "./grid/grid-col.js";
71
75
  import grid_item_default from "./grid/grid-item.js";
@@ -74,10 +78,6 @@ import Grid from "./grid/index.js";
74
78
  import form_item_default from "./form/form-item.js";
75
79
  import Form from "./form/index.js";
76
80
  import Icon from "./icon-component/index.js";
77
- import preview_action_default from "./image/preview-action.js";
78
- import preview_default from "./image/preview.js";
79
- import preview_group_default from "./image/preview-group.js";
80
- import Image from "./image/index.js";
81
81
  import { A2UI_0_8, defineJsonFormComponents, defineJsonFormSchemas } from "./json-form/types.js";
82
82
  import Textarea from "./textarea/index.js";
83
83
  import Mention from "./mention/index.js";
package/es/sd-vue.js CHANGED
@@ -66,6 +66,10 @@ import descriptions_item_default from "./descriptions/descriptions-item.js";
66
66
  import Descriptions from "./descriptions/index.js";
67
67
  import Divider from "./divider/index.js";
68
68
  import Drawer from "./drawer/index.js";
69
+ import preview_action_default from "./image/preview-action.js";
70
+ import preview_default from "./image/preview.js";
71
+ import preview_group_default from "./image/preview-group.js";
72
+ import Image from "./image/index.js";
69
73
  import FilePreviewer from "./file-previewer/index.js";
70
74
  import grid_col_default from "./grid/grid-col.js";
71
75
  import grid_item_default from "./grid/grid-item.js";
@@ -74,10 +78,6 @@ import Grid from "./grid/index.js";
74
78
  import form_item_default from "./form/form-item.js";
75
79
  import Form from "./form/index.js";
76
80
  import Icon from "./icon-component/index.js";
77
- import preview_action_default from "./image/preview-action.js";
78
- import preview_default from "./image/preview.js";
79
- import preview_group_default from "./image/preview-group.js";
80
- import Image from "./image/index.js";
81
81
  import Textarea from "./textarea/index.js";
82
82
  import Mention from "./mention/index.js";
83
83
  import Rate from "./rate/index.js";
@@ -42,7 +42,6 @@
42
42
  grid-template-columns: repeat(auto-fill, minmax(var(--toolbar-span-width), 1fr));
43
43
  gap: 8px;
44
44
  width: 100%;
45
- background-color: var(--sd-color-bg-2);
46
45
  }
47
46
  .sd-toolbar-body--schema .sd-form > * {
48
47
  max-width: var(--toolbar-item-max-width);
@@ -36,7 +36,6 @@ $toolbar-prefix-cls: string.unquote('#{theme.$prefix}-toolbar');
36
36
  grid-template-columns: repeat(auto-fill, minmax(var(--toolbar-span-width), 1fr));
37
37
  gap: $toolbar-body-gap;
38
38
  width: 100%;
39
- background-color: $toolbar-color-bg;
40
39
 
41
40
  > * {
42
41
  max-width: var(--toolbar-item-max-width);
@@ -16,8 +16,6 @@ $toolbar-expand-gap: global.$spacing-2;
16
16
 
17
17
  $toolbar-padding-bottom: global.$spacing-4;
18
18
 
19
- $toolbar-color-bg: var(string.unquote('#{global.$sd-cssvars-prefix}-color-bg-2'));
20
-
21
19
  $toolbar-color-border: var(string.unquote('#{global.$sd-cssvars-prefix}-color-neutral-3'));
22
20
 
23
21
  $toolbar-border-width: global.$border-1;
@@ -2,6 +2,7 @@ import type { ComponentPublicInstance, InjectionKey } from 'vue';
2
2
  export interface TriggerContext {
3
3
  onMouseenter: (ev: MouseEvent) => void;
4
4
  onMouseleave: (ev: MouseEvent) => void;
5
+ onContextmenu: (ev: MouseEvent) => void;
5
6
  addChildRef: (ref: HTMLElement | ComponentPublicInstance) => void;
6
7
  removeChildRef: (ref: HTMLElement | ComponentPublicInstance) => void;
7
8
  }
@@ -10,11 +10,12 @@ import { useFirstElement } from "../_hooks/use-first-element.js";
10
10
  import resize_observer_v2_default from "../_components/resize-observer-v2.js";
11
11
  import usePickSlots from "../_hooks/use-pick-slots.js";
12
12
  import usePopupManager from "../_hooks/use-popup-manager.js";
13
- import { useResizeObserver } from "../_hooks/use-resize-observer.js";
13
+ import { useResizeObserver as useResizeObserver$1 } from "../_hooks/use-resize-observer.js";
14
14
  import { useTeleportContainer } from "../_hooks/use-teleport-container.js";
15
15
  import { triggerInjectionKey } from "./context.js";
16
16
  import { getArrowStyle, getElementScrollRect, getPopupStyle, getScrollElements, getTransformOrigin } from "./utils.js";
17
17
  import { Fragment, Teleport, Transition, computed, createVNode, defineComponent, inject, mergeProps, nextTick, onBeforeUnmount, onDeactivated, onMounted, onUpdated, provide, reactive, ref, vShow, watch, withDirectives } from "vue";
18
+ import { onClickOutside, useEventListener } from "@vueuse/core";
18
19
  //#region components/trigger/trigger.tsx
19
20
  var TRIGGER_EVENTS = [
20
21
  "onClick",
@@ -375,7 +376,6 @@ var trigger_default = /* @__PURE__ */ defineComponent({
375
376
  mergedPopupContainer
376
377
  ], syncThemePopupContainerZIndex, { immediate: true });
377
378
  let delayTimer = 0;
378
- let outsideListener = false;
379
379
  let windowListener = false;
380
380
  const cleanDelayTimer = () => {
381
381
  if (delayTimer) {
@@ -494,6 +494,20 @@ var trigger_default = /* @__PURE__ */ defineComponent({
494
494
  changeVisible(!computedVisible.value);
495
495
  e.preventDefault();
496
496
  };
497
+ const handleChildContextmenu = (e) => {
498
+ var _popupRef$value;
499
+ triggerCtx === null || triggerCtx === void 0 || triggerCtx.onContextmenu(e);
500
+ if (!props.clickOutsideToClose || !computedVisible.value) return;
501
+ if (!triggerMethods.value.includes("contextMenu")) return;
502
+ const target = e.target;
503
+ if ((_popupRef$value = popupRef.value) === null || _popupRef$value === void 0 ? void 0 : _popupRef$value.contains(target)) return;
504
+ if (getChildElements().some((element) => element.contains(target))) return;
505
+ changeVisible(false);
506
+ };
507
+ const handleContextmenuWithContext = (e) => {
508
+ triggerCtx === null || triggerCtx === void 0 || triggerCtx.onContextmenu(e);
509
+ handleContextmenu(e);
510
+ };
497
511
  const addChildRef = (ref) => {
498
512
  childrenRefs.add(ref);
499
513
  triggerCtx === null || triggerCtx === void 0 || triggerCtx.addChildRef(ref);
@@ -505,29 +519,39 @@ var trigger_default = /* @__PURE__ */ defineComponent({
505
519
  provide(triggerInjectionKey, reactive({
506
520
  onMouseenter: handleMouseEnterWithContext,
507
521
  onMouseleave: handleMouseLeaveWithContext,
522
+ onContextmenu: handleChildContextmenu,
508
523
  addChildRef,
509
524
  removeChildRef
510
525
  }));
511
- const removeOutsideListener = () => {
512
- off(document.documentElement, "mousedown", handleOutsideClick);
513
- outsideListener = false;
514
- };
515
526
  const contentSlot = usePickSlots(slots, "content");
516
527
  const hidePopup = computed(() => {
517
528
  var _contentSlot$value;
518
529
  return props.hideEmpty && isEmptyChildren((_contentSlot$value = contentSlot.value) === null || _contentSlot$value === void 0 ? void 0 : _contentSlot$value.call(contentSlot));
519
530
  });
520
- const handleOutsideClick = (e) => {
521
- var _firstElement$value, _popupRef$value;
522
- if (((_firstElement$value = firstElement.value) === null || _firstElement$value === void 0 ? void 0 : _firstElement$value.contains(e.target)) || ((_popupRef$value = popupRef.value) === null || _popupRef$value === void 0 ? void 0 : _popupRef$value.contains(e.target))) return;
531
+ const getChildElements = () => {
532
+ const elements = [];
523
533
  for (const item of childrenRefs) {
524
534
  if (!item) continue;
525
535
  const element = "value" in item ? item.value : item;
526
- if (element === null || element === void 0 ? void 0 : element.contains(e.target)) return;
536
+ if (element) elements.push(element);
527
537
  }
528
- removeOutsideListener();
538
+ return elements;
539
+ };
540
+ const getOutsideIgnoreElements = () => [...triggerMethods.value.includes("contextMenu") || !firstElement.value ? [] : [firstElement.value], ...getChildElements()];
541
+ onClickOutside(popupRef, () => {
542
+ if (!props.clickOutsideToClose || !computedVisible.value) return;
543
+ changeVisible(false);
544
+ }, { ignore: getOutsideIgnoreElements });
545
+ const handleOutsideContextmenu = (e) => {
546
+ var _popupRef$value2;
547
+ if (!props.clickOutsideToClose || !computedVisible.value) return;
548
+ if (!triggerMethods.value.includes("contextMenu")) return;
549
+ const target = e.target;
550
+ if ((_popupRef$value2 = popupRef.value) === null || _popupRef$value2 === void 0 ? void 0 : _popupRef$value2.contains(target)) return;
551
+ if (getChildElements().some((element) => element.contains(target))) return;
529
552
  changeVisible(false);
530
553
  };
554
+ useEventListener(computed(() => typeof document === "undefined" ? void 0 : document), "contextmenu", handleOutsideContextmenu, { capture: true });
531
555
  const isExceedThreshold = (oldPosition, element) => {
532
556
  const [scrollTop, scrollLeft] = oldPosition;
533
557
  const { scrollTop: newScrollTop, scrollLeft: newScrollLeft } = element;
@@ -573,13 +597,6 @@ var trigger_default = /* @__PURE__ */ defineComponent({
573
597
  });
574
598
  let scrollElements;
575
599
  watch(computedVisible, (value) => {
576
- if (props.clickOutsideToClose) {
577
- if (!value && outsideListener) removeOutsideListener();
578
- else if (value && !outsideListener) {
579
- on(document.documentElement, "mousedown", handleOutsideClick);
580
- outsideListener = true;
581
- }
582
- }
583
600
  if (props.scrollToClose || (configCtx === null || configCtx === void 0 ? void 0 : configCtx.scrollToClose)) {
584
601
  on(window, "scroll", onWindowScroll);
585
602
  windowListener = true;
@@ -598,7 +615,7 @@ var trigger_default = /* @__PURE__ */ defineComponent({
598
615
  watch(() => [props.autoFitPopupWidth, props.autoFitPopupMinWidth], () => {
599
616
  if (computedVisible.value) updatePopupStyle();
600
617
  });
601
- const { createResizeObserver, destroyResizeObserver } = useResizeObserver({
618
+ const { createResizeObserver, destroyResizeObserver } = useResizeObserver$1({
602
619
  elementRef: containerRef,
603
620
  onResize: handleResize
604
621
  });
@@ -606,10 +623,6 @@ var trigger_default = /* @__PURE__ */ defineComponent({
606
623
  createResizeObserver();
607
624
  if (computedVisible.value) {
608
625
  updatePopupStyle();
609
- if (props.clickOutsideToClose && !outsideListener) {
610
- on(document.documentElement, "mousedown", handleOutsideClick);
611
- outsideListener = true;
612
- }
613
626
  if (props.updateAtScroll || (configCtx === null || configCtx === void 0 ? void 0 : configCtx.updateAtScroll)) {
614
627
  scrollElements = getScrollElements(firstElement.value);
615
628
  for (const item of scrollElements) item.addEventListener("scroll", handleScroll);
@@ -625,7 +638,6 @@ var trigger_default = /* @__PURE__ */ defineComponent({
625
638
  onBeforeUnmount(() => {
626
639
  triggerCtx === null || triggerCtx === void 0 || triggerCtx.removeChildRef(popupRef.value);
627
640
  destroyResizeObserver();
628
- if (outsideListener) removeOutsideListener();
629
641
  if (windowListener) removeWindowScroll();
630
642
  if (scrollElements) {
631
643
  for (const item of scrollElements) item.removeEventListener("scroll", handleScroll);
@@ -658,7 +670,7 @@ var trigger_default = /* @__PURE__ */ defineComponent({
658
670
  onMouseleave: handleMouseLeave,
659
671
  onFocusin: handleFocusin,
660
672
  onFocusout: handleFocusout,
661
- onContextmenu: handleContextmenu
673
+ onContextmenu: handleContextmenuWithContext
662
674
  });
663
675
  return createVNode(Fragment, null, [props.autoFixPosition ? createVNode(resize_observer_v2_default, { "onResize": onTargetResize }, { default: () => [children.value] }) : children.value, createVNode(client_only_default, null, { default: () => [createVNode(Teleport, {
664
676
  "to": teleportContainer.value,
@@ -1218,6 +1218,15 @@
1218
1218
  "description": "Whether to render to body",
1219
1219
  "type": "boolean"
1220
1220
  },
1221
+ "sd-file-previewer/image-props": {
1222
+ "description": "Image previewer props"
1223
+ },
1224
+ "sd-file-previewer/media-props": {
1225
+ "description": "Video and audio previewer props"
1226
+ },
1227
+ "sd-file-previewer/pdf-props": {
1228
+ "description": "PDF previewer props"
1229
+ },
1221
1230
  "sd-form-item/field": {
1222
1231
  "description": "The path of the form element in the data object (required for the data item)",
1223
1232
  "type": "string"
@@ -519,7 +519,10 @@
519
519
  "closable",
520
520
  "esc-to-close",
521
521
  "popup-container",
522
- "render-to-body"
522
+ "render-to-body",
523
+ "image-props",
524
+ "media-props",
525
+ "pdf-props"
523
526
  ]
524
527
  },
525
528
  "sd-form-item": {
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
3
3
  "framework": "vue",
4
4
  "name": "@sdata/web-vue",
5
- "version": "3.3.1",
5
+ "version": "3.5.0",
6
6
  "contributions": {
7
7
  "html": {
8
8
  "types-syntax": "typescript",
@@ -3013,6 +3013,30 @@
3013
3013
  "type": "boolean",
3014
3014
  "kind": "expression"
3015
3015
  }
3016
+ },
3017
+ {
3018
+ "name": "image-props",
3019
+ "description": "Image previewer props",
3020
+ "value": {
3021
+ "type": "FilePreviewerImageProps",
3022
+ "kind": "expression"
3023
+ }
3024
+ },
3025
+ {
3026
+ "name": "media-props",
3027
+ "description": "Video and audio previewer props",
3028
+ "value": {
3029
+ "type": "FilePreviewerMediaProps",
3030
+ "kind": "expression"
3031
+ }
3032
+ },
3033
+ {
3034
+ "name": "pdf-props",
3035
+ "description": "PDF previewer props",
3036
+ "value": {
3037
+ "type": "FilePreviewerPdfProps",
3038
+ "kind": "expression"
3039
+ }
3016
3040
  }
3017
3041
  ],
3018
3042
  "events": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sdata/web-vue",
3
- "version": "3.4.0",
3
+ "version": "3.6.0",
4
4
  "description": "SD Design Vue: A Vue.js 3 UI Library",
5
5
  "keywords": [
6
6
  "sd",