@antdv-vue/pro-utils 0.0.0-stage → 2.1.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 (174) hide show
  1. package/CHANGELOG.md +123 -0
  2. package/README.md +80 -2
  3. package/dist/autoFocusToFirstChild/index.d.ts +9 -0
  4. package/dist/autoFocusToFirstChild/index.js +36 -0
  5. package/dist/childrenToArray/index.d.ts +7 -0
  6. package/dist/childrenToArray/index.js +8 -0
  7. package/dist/components/CopyToClipboard/copy/index.d.ts +10 -0
  8. package/dist/components/CopyToClipboard/copy/index.js +84 -0
  9. package/dist/components/CopyToClipboard/copy/toggle-selection.d.ts +4 -0
  10. package/dist/components/CopyToClipboard/copy/toggle-selection.js +27 -0
  11. package/dist/components/CopyToClipboard/index.d.ts +14 -0
  12. package/dist/components/CopyToClipboard/index.js +13 -0
  13. package/dist/components/Draggable/Draggable.d.ts +62 -0
  14. package/dist/components/Draggable/Draggable.js +162 -0
  15. package/dist/components/Draggable/DraggableCore.d.ts +40 -0
  16. package/dist/components/Draggable/DraggableCore.js +149 -0
  17. package/dist/components/Draggable/index.d.ts +4 -0
  18. package/dist/components/Draggable/index.js +3 -0
  19. package/dist/components/Draggable/types.d.ts +30 -0
  20. package/dist/components/Draggable/types.js +1 -0
  21. package/dist/components/Draggable/utils/domFns.d.ts +36 -0
  22. package/dist/components/Draggable/utils/domFns.js +165 -0
  23. package/dist/components/Draggable/utils/getPrefix.d.ts +6 -0
  24. package/dist/components/Draggable/utils/getPrefix.js +31 -0
  25. package/dist/components/Draggable/utils/positionFns.d.ts +13 -0
  26. package/dist/components/Draggable/utils/positionFns.js +96 -0
  27. package/dist/components/Draggable/utils/shims.d.ts +7 -0
  28. package/dist/components/Draggable/utils/shims.js +19 -0
  29. package/dist/components/DropdownFooter/index.d.ts +20 -0
  30. package/dist/components/DropdownFooter/index.js +80 -0
  31. package/dist/components/DropdownFooter/style/index.d.ts +8 -0
  32. package/dist/components/DropdownFooter/style/index.js +18 -0
  33. package/dist/components/ErrorBoundary/index.d.ts +25 -0
  34. package/dist/components/ErrorBoundary/index.js +65 -0
  35. package/dist/components/FieldLabel/index.d.ts +31 -0
  36. package/dist/components/FieldLabel/index.js +212 -0
  37. package/dist/components/FieldLabel/style/index.d.ts +8 -0
  38. package/dist/components/FieldLabel/style/index.js +146 -0
  39. package/dist/components/FilterDropdown/index.d.ts +38 -0
  40. package/dist/components/FilterDropdown/index.js +91 -0
  41. package/dist/components/FilterDropdown/style/index.d.ts +8 -0
  42. package/dist/components/FilterDropdown/style/index.js +21 -0
  43. package/dist/components/FormItem/FormItemInput.d.ts +34 -0
  44. package/dist/components/FormItem/FormItemInput.js +163 -0
  45. package/dist/components/FormItem/ItemHolder.d.ts +58 -0
  46. package/dist/components/FormItem/ItemHolder.js +289 -0
  47. package/dist/components/FormItem/index.d.ts +64 -0
  48. package/dist/components/FormItem/index.js +591 -0
  49. package/dist/components/FormList/Field.d.ts +29 -0
  50. package/dist/components/FormList/Field.js +106 -0
  51. package/dist/components/FormList/FieldContext.d.ts +15 -0
  52. package/dist/components/FormList/FieldContext.js +11 -0
  53. package/dist/components/FormList/InternalField.d.ts +51 -0
  54. package/dist/components/FormList/InternalField.js +149 -0
  55. package/dist/components/FormList/ListContext.d.ts +12 -0
  56. package/dist/components/FormList/ListContext.js +11 -0
  57. package/dist/components/FormList/index.d.ts +36 -0
  58. package/dist/components/FormList/index.js +145 -0
  59. package/dist/components/FormList/interface.d.ts +9 -0
  60. package/dist/components/FormList/interface.js +1 -0
  61. package/dist/components/FormList/namePathType.d.ts +9 -0
  62. package/dist/components/FormList/namePathType.js +1 -0
  63. package/dist/components/FormList/utils/index.d.ts +15 -0
  64. package/dist/components/FormList/utils/index.js +37 -0
  65. package/dist/components/InlineErrorFormItem/InlineErrorFormItemPopover.d.ts +21 -0
  66. package/dist/components/InlineErrorFormItem/InlineErrorFormItemPopover.js +95 -0
  67. package/dist/components/InlineErrorFormItem/index.d.ts +14 -0
  68. package/dist/components/InlineErrorFormItem/index.js +44 -0
  69. package/dist/components/InlineErrorFormItem/style/index.d.ts +8 -0
  70. package/dist/components/InlineErrorFormItem/style/index.js +46 -0
  71. package/dist/components/LabelIconTip/index.d.ts +16 -0
  72. package/dist/components/LabelIconTip/index.js +79 -0
  73. package/dist/components/LabelIconTip/style/index.d.ts +8 -0
  74. package/dist/components/LabelIconTip/style/index.js +38 -0
  75. package/dist/components/ProFormContext/index.d.ts +51 -0
  76. package/dist/components/ProFormContext/index.js +11 -0
  77. package/dist/conversionMomentValue/index.d.ts +48 -0
  78. package/dist/conversionMomentValue/index.js +103 -0
  79. package/dist/dateArrayFormatter/index.d.ts +14 -0
  80. package/dist/dateArrayFormatter/index.js +38 -0
  81. package/dist/deepMerge/index.d.ts +4 -0
  82. package/dist/deepMerge/index.js +17 -0
  83. package/dist/genCopyable/index.d.ts +27 -0
  84. package/dist/genCopyable/index.js +82 -0
  85. package/dist/getFieldPropsOrFormItemProps/index.d.ts +18 -0
  86. package/dist/getFieldPropsOrFormItemProps/index.js +15 -0
  87. package/dist/getSlot/index.d.ts +8 -0
  88. package/dist/getSlot/index.js +11 -0
  89. package/dist/hooks/index.d.ts +9 -0
  90. package/dist/hooks/index.js +9 -0
  91. package/dist/hooks/useDebounceFn/index.d.ts +12 -0
  92. package/dist/hooks/useDebounceFn/index.js +34 -0
  93. package/dist/hooks/useDebounceValue/index.d.ts +12 -0
  94. package/dist/hooks/useDebounceValue/index.js +21 -0
  95. package/dist/hooks/useDocumentTitle/index.d.ts +10 -0
  96. package/dist/hooks/useDocumentTitle/index.js +12 -0
  97. package/dist/hooks/useEffect/index.d.ts +6 -0
  98. package/dist/hooks/useEffect/index.js +17 -0
  99. package/dist/hooks/useFetchData/index.d.ts +12 -0
  100. package/dist/hooks/useFetchData/index.js +35 -0
  101. package/dist/hooks/useLayoutEffect/index.d.ts +6 -0
  102. package/dist/hooks/useLayoutEffect/index.js +21 -0
  103. package/dist/hooks/useMemo/index.d.ts +6 -0
  104. package/dist/hooks/useMemo/index.js +13 -0
  105. package/dist/hooks/useState/index.d.ts +6 -0
  106. package/dist/hooks/useState/index.js +11 -0
  107. package/dist/index.d.ts +61 -0
  108. package/dist/index.js +58 -0
  109. package/dist/isBrowser/index.d.ts +4 -0
  110. package/dist/isBrowser/index.js +8 -0
  111. package/dist/isDropdownValueType/index.d.ts +4 -0
  112. package/dist/isDropdownValueType/index.js +8 -0
  113. package/dist/isImg/index.d.ts +5 -0
  114. package/dist/isImg/index.js +7 -0
  115. package/dist/isNil/index.d.ts +4 -0
  116. package/dist/isNil/index.js +6 -0
  117. package/dist/isUrl/index.d.ts +9 -0
  118. package/dist/isUrl/index.js +17 -0
  119. package/dist/merge/index.d.ts +9 -0
  120. package/dist/merge/index.js +20 -0
  121. package/dist/nanoid/index.d.ts +9 -0
  122. package/dist/nanoid/index.js +25 -0
  123. package/dist/normalizeProps/index.d.ts +6 -0
  124. package/dist/normalizeProps/index.js +6 -0
  125. package/dist/omitBoolean/index.d.ts +9 -0
  126. package/dist/omitBoolean/index.js +11 -0
  127. package/dist/omitUndefined/index.d.ts +5 -0
  128. package/dist/omitUndefined/index.js +11 -0
  129. package/dist/omitUndefinedAndEmptyArr/index.d.ts +4 -0
  130. package/dist/omitUndefinedAndEmptyArr/index.js +12 -0
  131. package/dist/parseValueToDay/index.d.ts +7 -0
  132. package/dist/parseValueToDay/index.js +21 -0
  133. package/dist/pickProFormItemProps/index.d.ts +34 -0
  134. package/dist/pickProFormItemProps/index.js +42 -0
  135. package/dist/pickProProps/index.d.ts +4 -0
  136. package/dist/pickProProps/index.js +14 -0
  137. package/dist/pro-utils.esm.js +3672 -0
  138. package/dist/proFieldParsingText/index.d.ts +25 -0
  139. package/dist/proFieldParsingText/index.js +100 -0
  140. package/dist/runFunction/index.d.ts +5 -0
  141. package/dist/runFunction/index.js +8 -0
  142. package/dist/stringify/index.d.ts +7 -0
  143. package/dist/stringify/index.js +10 -0
  144. package/dist/transformBooleanProps/index.d.ts +4 -0
  145. package/dist/transformBooleanProps/index.js +9 -0
  146. package/dist/transformKeySubmitValue/index.d.ts +24 -0
  147. package/dist/transformKeySubmitValue/index.js +200 -0
  148. package/dist/transformVueNodeType/index.d.ts +14 -0
  149. package/dist/transformVueNodeType/index.js +14 -0
  150. package/dist/typing.d.ts +562 -0
  151. package/dist/typing.js +1 -0
  152. package/dist/useEditableArray/components/CancelEditableAction.d.ts +47 -0
  153. package/dist/useEditableArray/components/CancelEditableAction.js +90 -0
  154. package/dist/useEditableArray/components/DeleteEditableAction.d.ts +33 -0
  155. package/dist/useEditableArray/components/DeleteEditableAction.js +63 -0
  156. package/dist/useEditableArray/components/SaveEditableAction.d.ts +33 -0
  157. package/dist/useEditableArray/components/SaveEditableAction.js +79 -0
  158. package/dist/useEditableArray/index.d.ts +66 -0
  159. package/dist/useEditableArray/index.js +584 -0
  160. package/dist/useEditableArray/typing.d.ts +130 -0
  161. package/dist/useEditableArray/typing.js +1 -0
  162. package/dist/useEditableMap/index.d.ts +32 -0
  163. package/dist/useEditableMap/index.js +147 -0
  164. package/dist/useMediaQuery/index.d.ts +44 -0
  165. package/dist/useMediaQuery/index.js +99 -0
  166. package/dist/useMediaQuery/query.d.ts +6 -0
  167. package/dist/useMediaQuery/query.js +17 -0
  168. package/dist/useMountMergeState/index.d.ts +11 -0
  169. package/dist/useMountMergeState/index.js +26 -0
  170. package/dist/usePrevious/index.d.ts +6 -0
  171. package/dist/usePrevious/index.js +11 -0
  172. package/dist/useRefFunction/index.d.ts +4 -0
  173. package/dist/useRefFunction/index.js +11 -0
  174. package/package.json +69 -3
package/CHANGELOG.md ADDED
@@ -0,0 +1,123 @@
1
+ # @antdv-vue/pro-utils
2
+
3
+ ## 2.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - ef5cfb6: fix: preserve user-select protection when a new drag starts before deferred cleanup completes.
8
+
9
+ ## 2.1.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 244f208: feat: export Draggable utilities and add draggable and fullscreen ModalForm modes.
14
+
15
+ ### Patch Changes
16
+
17
+ - fix: stop cancelled touch drags and retain user-select protection until every active drag ends.
18
+
19
+ ## 2.0.0
20
+
21
+ ### Major Changes
22
+
23
+ - feat!: remove the UMD bundle target from package builds.
24
+ - docs: sync structured changelog pages for every package.
25
+
26
+ ### Patch Changes
27
+
28
+ - Updated dependencies
29
+ - @antdv-vue/pro-provider@2.0.0
30
+
31
+ ## 1.0.23
32
+
33
+ ### Patch Changes
34
+
35
+ - fix card, form bugs
36
+
37
+ ## 1.0.22
38
+
39
+ ### Patch Changes
40
+
41
+ - Updated dependencies
42
+ - @antdv-vue/pro-provider@1.0.14
43
+
44
+ ## 1.0.21
45
+
46
+ ### Patch Changes
47
+
48
+ - fix layout filed form card bugs
49
+ - Updated dependencies
50
+ - @antdv-vue/pro-provider@1.0.13
51
+
52
+ ## 1.0.20
53
+
54
+ ### Patch Changes
55
+
56
+ - Updated dependencies
57
+ - @antdv-vue/pro-provider@1.0.12
58
+
59
+ ## 1.0.19
60
+
61
+ ### Patch Changes
62
+
63
+ - Updated dependencies
64
+ - @antdv-vue/pro-provider@1.0.11
65
+
66
+ ## 1.0.18
67
+
68
+ ### Patch Changes
69
+
70
+ - fix shared utility component styles
71
+ - Updated dependencies
72
+ - @antdv-vue/pro-provider@1.0.10
73
+
74
+ ## 1.0.16
75
+
76
+ ### Patch Changes
77
+
78
+ - fix bugs
79
+
80
+ ## 1.0.16
81
+
82
+ ### Patch Changes
83
+
84
+ - fix css-in-js style Transition bugs
85
+
86
+ ## 1.0.15
87
+
88
+ ### Patch Changes
89
+
90
+ - fix bugs
91
+ - Updated dependencies
92
+ - @antdv-vue/pro-provider@1.0.9
93
+
94
+ ## 1.0.14
95
+
96
+ ### Patch Changes
97
+
98
+ - create listy card mode
99
+ - Updated dependencies
100
+ - @antdv-vue/pro-provider@1.0.8
101
+
102
+ ## 1.0.13
103
+
104
+ ### Patch Changes
105
+
106
+ - change version
107
+ - Updated dependencies
108
+ - @antdv-vue/pro-provider@1.0.7
109
+
110
+ ## 1.0.12
111
+
112
+ ### Patch Changes
113
+
114
+ - Updated dependencies
115
+ - @antdv-vue/pro-provider@1.0.6
116
+
117
+ ## 1.0.11
118
+
119
+ ### Patch Changes
120
+
121
+ - fix ProForm bugs
122
+ - Updated dependencies
123
+ - @antdv-vue/pro-provider@1.0.5
package/README.md CHANGED
@@ -1,3 +1,81 @@
1
- # Temporary Holding Version
1
+ # @antdv-vue/pro-utils
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Shared utility functions, composables, and common components for the Pro Components ecosystem.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @antdv-vue/pro-utils
9
+ # or
10
+ pnpm add @antdv-vue/pro-utils
11
+ ```
12
+
13
+ ## Peer Dependencies
14
+
15
+ - `vue` >= 3.5.30
16
+ - `antdv-next` >= 1.3.6
17
+
18
+ ## What's Included
19
+
20
+ ### Utility Functions
21
+
22
+ | Function | Description |
23
+ |----------|-------------|
24
+ | `isBrowser` | Check if running in browser environment |
25
+ | `isImg` | Check if a value is an image URL |
26
+ | `isNil` | Check if value is `null` or `undefined` |
27
+ | `isUrl` | Check if a value is a valid URL |
28
+ | `isDropdownValueType` | Check if value type is dropdown |
29
+ | `omitUndefined` | Remove `undefined` values from object |
30
+ | `omitBoolean` | Remove boolean values from object |
31
+ | `omitUndefinedAndEmptyArr` | Remove `undefined` and empty array values |
32
+ | `deepMerge` | Deep merge objects |
33
+ | `merge` | Merge objects |
34
+ | `nanoid` | Generate unique ID |
35
+ | `stringify` | Safe JSON stringify |
36
+ | `transformKeySubmitValue` | Transform form key submit values |
37
+ | `transformBooleanProps` | Transform boolean props |
38
+ | `runFunction` | Safely run a function |
39
+ | `normalizeProps` | Normalize component props |
40
+ | `pickProProps` | Pick pro-specific props |
41
+ | `pickProFormItemProps` | Pick pro form item props |
42
+ | `getFieldPropsOrFormItemProps` | Get field or form item props |
43
+ | `proFieldParsingText` | Parse pro field text values |
44
+
45
+ ### Composables (Hooks)
46
+
47
+ | Hook | Description |
48
+ |------|-------------|
49
+ | `useMountMergeState` | State that merges on mount |
50
+ | `useEditableArray` | Manage editable array data |
51
+ | `usePrevious` | Track previous value |
52
+ | `useRefFunction` | Ref-based callback function |
53
+ | `useBreakpoint` | Responsive breakpoint detection (via `useMedia`) |
54
+ | `useFormFieldContextInject` / `useFormFieldContextProvider` | Form field context utilities |
55
+ | `useProFormContextInject` / `useProFormContextProvider` | Pro form context utilities |
56
+
57
+ ### Components
58
+
59
+ | Component | Description |
60
+ |-----------|-------------|
61
+ | `ErrorBoundary` | Error boundary wrapper component |
62
+ | `CopyToClipboard` | Copy content to clipboard |
63
+ | `FieldLabel` | Field label component |
64
+ | `LabelIconTip` | Label with icon tooltip |
65
+ | `FormList` | Dynamic form list component |
66
+ | `FormItem` | Enhanced form item component |
67
+ | `FilterDropdown` | Filter dropdown component |
68
+ | `DropdownFooter` | Dropdown footer component |
69
+ | `InlineErrorFormItem` | Inline error form item |
70
+
71
+ ### Date Utilities
72
+
73
+ | Function | Description |
74
+ |----------|-------------|
75
+ | `parseValueToDay` | Parse value to Day.js object |
76
+ | `conversionMomentValue` | Convert moment-compatible values |
77
+ | `dateArrayFormatter` | Format date arrays |
78
+
79
+ ## License
80
+
81
+ [MIT](../../LICENSE)
@@ -0,0 +1,9 @@
1
+ import { VNode } from "vue";
2
+
3
+ //#region src/autoFocusToFirstChild/index.d.ts
4
+ /**
5
+ * 将 autoFocus 应用到第一个子节点
6
+ */
7
+ declare function autoFocusToFirstChild(nodes?: VNode[], autoFocus?: boolean): VNode[];
8
+ //#endregion
9
+ export { autoFocusToFirstChild };
@@ -0,0 +1,36 @@
1
+ import { Fragment, Text, cloneVNode, isVNode } from "vue";
2
+ //#region src/autoFocusToFirstChild/index.ts
3
+ function supportsAutoFocus(node) {
4
+ if (typeof node.type !== "object" || node.type === null) return false;
5
+ const props = "props" in node.type ? node.type.props : void 0;
6
+ if (!props) return false;
7
+ if (Array.isArray(props)) return props.includes("autoFocus");
8
+ return "autoFocus" in props;
9
+ }
10
+ function walk(nodes, autoFocus, found) {
11
+ return nodes.map((node) => {
12
+ if (!isVNode(node)) return node;
13
+ if (node.type === Fragment || node.type === Comment || node.type === Text) {
14
+ if (Array.isArray(node.children)) return cloneVNode(node, { children: walk(node.children, autoFocus, found) });
15
+ return node;
16
+ }
17
+ if (found.value) return node;
18
+ if (supportsAutoFocus(node)) {
19
+ found.value = true;
20
+ return cloneVNode(node, {
21
+ ...node.props,
22
+ autoFocus
23
+ });
24
+ }
25
+ return node;
26
+ });
27
+ }
28
+ /**
29
+ * 将 autoFocus 应用到第一个子节点
30
+ */
31
+ function autoFocusToFirstChild(nodes, autoFocus) {
32
+ if (!autoFocus || !nodes?.length) return nodes ?? [];
33
+ return walk(nodes, autoFocus, { value: false });
34
+ }
35
+ //#endregion
36
+ export { autoFocusToFirstChild };
@@ -0,0 +1,7 @@
1
+ import { VNode } from "vue";
2
+ import { flattenChildren as childrenToArray } from "@v-c/util/dist/props-util";
3
+
4
+ //#region src/childrenToArray/index.d.ts
5
+ declare function isSpecialNode(node: VNode): boolean;
6
+ //#endregion
7
+ export { childrenToArray, isSpecialNode };
@@ -0,0 +1,8 @@
1
+ import { Comment, Fragment, Text } from "vue";
2
+ import { flattenChildren as childrenToArray } from "@v-c/util/dist/props-util";
3
+ //#region src/childrenToArray/index.ts
4
+ function isSpecialNode(node) {
5
+ return node.type === Fragment || node.type === Comment || node.type === Text;
6
+ }
7
+ //#endregion
8
+ export { childrenToArray, isSpecialNode };
@@ -0,0 +1,10 @@
1
+ //#region src/components/CopyToClipboard/copy/index.d.ts
2
+ interface Options {
3
+ debug?: boolean;
4
+ message?: string;
5
+ format?: string;
6
+ onCopy?: (clipboardData: object) => void;
7
+ }
8
+ declare function copy(text: string, options?: Options): boolean;
9
+ //#endregion
10
+ export { copy as default };
@@ -0,0 +1,84 @@
1
+ import deselectCurrent from "./toggle-selection.js";
2
+ //#region src/components/CopyToClipboard/copy/index.ts
3
+ const clipboardToIE11Formatting = {
4
+ "text/plain": "Text",
5
+ "text/html": "Url",
6
+ default: "Text"
7
+ };
8
+ const defaultMessage = "Copy to clipboard: #{key}, Enter";
9
+ function format(message) {
10
+ const copyKey = `${/mac os x/i.test(navigator.userAgent) ? "⌘" : "Ctrl"}+C`;
11
+ return message.replace(/#\{\s*key\s*\}/g, copyKey);
12
+ }
13
+ function copy(text, options) {
14
+ let message;
15
+ let reselectPrevious;
16
+ let range;
17
+ let selection;
18
+ let mark;
19
+ let success = false;
20
+ if (!options) options = {};
21
+ const debug = options.debug || false;
22
+ try {
23
+ reselectPrevious = deselectCurrent();
24
+ range = document.createRange();
25
+ selection = document.getSelection();
26
+ mark = document.createElement("span");
27
+ mark.textContent = text;
28
+ mark.style.all = "unset";
29
+ mark.style.position = "fixed";
30
+ mark.style.top = "0";
31
+ mark.style.clip = "rect(0, 0, 0, 0)";
32
+ mark.style.whiteSpace = "pre";
33
+ mark.style.webkitUserSelect = "text";
34
+ mark.style.setProperty("MozUserSelect", "text");
35
+ mark.style.setProperty("msUserSelect", "text");
36
+ mark.style.userSelect = "text";
37
+ mark.addEventListener("copy", (e) => {
38
+ e.stopPropagation();
39
+ if (options.format) {
40
+ e.preventDefault();
41
+ if (typeof e.clipboardData === "undefined") {
42
+ debug && console.warn("unable to use e.clipboardData");
43
+ debug && console.warn("trying IE specific stuff");
44
+ window.clipboardData.clearData();
45
+ const format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting.default;
46
+ window.clipboardData.setData(format, text);
47
+ } else {
48
+ e.clipboardData?.clearData();
49
+ e.clipboardData?.setData(options.format, text);
50
+ }
51
+ }
52
+ if (options.onCopy) {
53
+ e.preventDefault();
54
+ options.onCopy(e.clipboardData);
55
+ }
56
+ });
57
+ document.body.appendChild(mark);
58
+ range.selectNodeContents(mark);
59
+ selection?.addRange(range);
60
+ if (!document.execCommand("copy")) throw new Error("copy command was unsuccessful");
61
+ success = true;
62
+ } catch (err) {
63
+ debug && console.error("unable to copy using execCommand: ", err);
64
+ debug && console.warn("trying IE specific stuff");
65
+ try {
66
+ window.clipboardData.setData(options.format || "text", text);
67
+ options.onCopy && options.onCopy(window.clipboardData);
68
+ success = true;
69
+ } catch (err) {
70
+ debug && console.error("unable to copy using clipboardData: ", err);
71
+ debug && console.error("falling back to prompt");
72
+ message = format("message" in options ? options.message : defaultMessage);
73
+ window.prompt(message, text);
74
+ }
75
+ } finally {
76
+ if (selection) if (typeof selection.removeRange == "function") selection.removeRange(range);
77
+ else selection.removeAllRanges();
78
+ if (mark) document.body.removeChild(mark);
79
+ reselectPrevious?.();
80
+ }
81
+ return success;
82
+ }
83
+ //#endregion
84
+ export { copy as default };
@@ -0,0 +1,4 @@
1
+ //#region src/components/CopyToClipboard/copy/toggle-selection.d.ts
2
+ declare function deselectCurrent(): (() => void);
3
+ //#endregion
4
+ export { deselectCurrent as default };
@@ -0,0 +1,27 @@
1
+ //#region src/components/CopyToClipboard/copy/toggle-selection.ts
2
+ function deselectCurrent() {
3
+ const selection = document.getSelection();
4
+ if (!selection?.rangeCount) return function() {};
5
+ let active = document.activeElement;
6
+ const ranges = [];
7
+ for (let i = 0; i < selection.rangeCount; i++) ranges.push(selection.getRangeAt(i));
8
+ switch (active.tagName.toUpperCase()) {
9
+ case "INPUT":
10
+ case "TEXTAREA":
11
+ active.blur();
12
+ break;
13
+ default:
14
+ active = null;
15
+ break;
16
+ }
17
+ selection.removeAllRanges();
18
+ return function() {
19
+ selection.type === "Caret" && selection.removeAllRanges();
20
+ if (!selection.rangeCount) ranges.forEach((range) => {
21
+ selection.addRange(range);
22
+ });
23
+ active && active.focus();
24
+ };
25
+ }
26
+ //#endregion
27
+ export { deselectCurrent as default };
@@ -0,0 +1,14 @@
1
+ import { FunctionalComponent } from "vue";
2
+
3
+ //#region src/components/CopyToClipboard/index.d.ts
4
+ declare const CopyToClipboard: FunctionalComponent<{
5
+ text?: string;
6
+ onCopy?: (text?: string, copied?: boolean) => void;
7
+ options?: {
8
+ debug?: boolean;
9
+ format?: 'text/plain' | 'text/html' | 'default';
10
+ message?: string;
11
+ };
12
+ }>;
13
+ //#endregion
14
+ export { CopyToClipboard as default };
@@ -0,0 +1,13 @@
1
+ import copy from "./copy/index.js";
2
+ import { createVNode } from "vue";
3
+ //#region src/components/CopyToClipboard/index.tsx
4
+ const CopyToClipboard = ({ text, onCopy, options }, { slots }) => createVNode("span", { "onClick": (e) => {
5
+ e.preventDefault();
6
+ e.stopPropagation();
7
+ const copied = copy(text, options);
8
+ if (onCopy) onCopy(text, copied);
9
+ } }, [slots.default?.()]);
10
+ CopyToClipboard.inheritAttrs = false;
11
+ CopyToClipboard.displayName = "CopyToClipboard";
12
+ //#endregion
13
+ export { CopyToClipboard as default };
@@ -0,0 +1,62 @@
1
+ import { Bounds, ControlPosition, DraggableEventHandler, PositionOffsetControlPosition } from "./types.js";
2
+ import { DraggableCoreDefaultProps, DraggableCoreProps } from "./DraggableCore.js";
3
+ import * as _$vue from "vue";
4
+ import { Plugin } from "vue";
5
+ import { CustomSlotsType, VueNode } from "@v-c/util/dist/type";
6
+
7
+ //#region src/components/Draggable/Draggable.d.ts
8
+ interface DraggableState {
9
+ dragging: boolean;
10
+ dragged: boolean;
11
+ x: number;
12
+ y: number;
13
+ slackX: number;
14
+ slackY: number;
15
+ isElementSVG: boolean;
16
+ prevPropsPosition: ControlPosition | null;
17
+ }
18
+ type DraggableDefaultProps = DraggableCoreDefaultProps & {
19
+ axis?: 'both' | 'x' | 'y' | 'none';
20
+ bounds?: Bounds | string | false;
21
+ defaultClass?: string;
22
+ defaultClassDragging?: string;
23
+ defaultClassDragged?: string;
24
+ defaultPosition?: ControlPosition;
25
+ scale?: number;
26
+ };
27
+ type DraggableProps = DraggableCoreProps & DraggableDefaultProps & {
28
+ positionOffset?: PositionOffsetControlPosition;
29
+ position?: ControlPosition;
30
+ };
31
+ interface DraggableEmits {
32
+ drag: DraggableEventHandler;
33
+ mousedown: (e: MouseEvent) => void;
34
+ start: DraggableEventHandler;
35
+ stop: DraggableEventHandler;
36
+ [key: string]: (...args: any[]) => void;
37
+ }
38
+ declare const _Draggable: _$vue.DefineSetupFnComponent<DraggableProps, DraggableEmits, CustomSlotsType<{
39
+ default?: () => VueNode[];
40
+ }>, DraggableCoreDefaultProps & {
41
+ cancel?: string;
42
+ offsetParent?: HTMLElement;
43
+ grid?: [number, number];
44
+ nodeRef?: _$vue.ShallowRef<HTMLElement | null> | null;
45
+ handle?: string;
46
+ } & {
47
+ axis?: "both" | "x" | "y" | "none";
48
+ bounds?: Bounds | string | false;
49
+ defaultClass?: string;
50
+ defaultClassDragging?: string;
51
+ defaultClassDragged?: string;
52
+ defaultPosition?: ControlPosition;
53
+ scale?: number;
54
+ } & {
55
+ positionOffset?: PositionOffsetControlPosition;
56
+ position?: ControlPosition;
57
+ } & {
58
+ [x: `on${Capitalize<string>}`]: ((...args: any[]) => any) | undefined;
59
+ }, _$vue.PublicProps>;
60
+ declare const Draggable: typeof _Draggable & Plugin;
61
+ //#endregion
62
+ export { DraggableDefaultProps, DraggableEmits, DraggableProps, DraggableState, Draggable as default };
@@ -0,0 +1,162 @@
1
+ import { useState } from "../../hooks/useState/index.js";
2
+ import { createCSSTransform, createSVGTransform } from "./utils/domFns.js";
3
+ import { canDragX, canDragY, createDraggableData, getBoundPosition } from "./utils/positionFns.js";
4
+ import DraggableCore from "./DraggableCore.js";
5
+ import { cloneVNode, createVNode, defineComponent, getCurrentInstance, isVNode, mergeProps, onMounted, onUnmounted, watch } from "vue";
6
+ import { classNames } from "@v-c/util";
7
+ //#region src/components/Draggable/Draggable.tsx
8
+ function _isSlot(s) {
9
+ return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
10
+ }
11
+ const Draggable = /* @__PURE__ */ defineComponent((props, { slots, expose, emit }) => {
12
+ const [dragging, setDragging] = useState(false);
13
+ const [dragged, setDragged] = useState(false);
14
+ const [isElementSVG, setIsElementSVG] = useState(false);
15
+ const ctx = getCurrentInstance();
16
+ const [slackX, setSlackX] = useState(0);
17
+ const [slackY, setSlackY] = useState(0);
18
+ const [x, setX] = useState(() => {
19
+ return props.position?.x ?? props.defaultPosition?.x ?? 0;
20
+ });
21
+ const [y, setY] = useState(() => {
22
+ return props.position?.y ?? props.defaultPosition?.y ?? 0;
23
+ });
24
+ watch(() => props.position, (position) => {
25
+ if (position) {
26
+ setX(position.x);
27
+ setY(position.y);
28
+ }
29
+ }, { deep: true });
30
+ onMounted(() => {
31
+ if (typeof window.SVGElement !== "undefined" && props.nodeRef?.value instanceof window.SVGElement) setIsElementSVG(true);
32
+ });
33
+ onUnmounted(() => {
34
+ if (dragging.value) setDragging(false);
35
+ });
36
+ expose({
37
+ x,
38
+ y
39
+ });
40
+ return () => {
41
+ let _slot;
42
+ const [children] = slots.default?.();
43
+ const { axis = "both", bounds = false, defaultClass = "vue-draggable", defaultClassDragging = "vue-draggable-dragging", defaultClassDragged = "vue-draggable-dragged", defaultPosition = {
44
+ x: 0,
45
+ y: 0
46
+ }, scale = 1, position, positionOffset, ...draggableCoreProps } = props;
47
+ let style = {};
48
+ let svgTransform = null;
49
+ const draggable = !Boolean(position) || dragging.value;
50
+ const validPosition = position || defaultPosition;
51
+ const transformOpts = {
52
+ x: canDragX(axis) && draggable ? x.value : validPosition.x,
53
+ y: canDragY(axis) && draggable ? y.value : validPosition.y
54
+ };
55
+ if (isElementSVG.value) svgTransform = createSVGTransform(transformOpts, positionOffset);
56
+ else style = createCSSTransform(transformOpts, positionOffset);
57
+ return createVNode(DraggableCore, mergeProps(draggableCoreProps, {
58
+ "scale": scale,
59
+ "onStart": (e, coreData) => {
60
+ emit("start", e, createDraggableData(ctx, coreData));
61
+ setDragging(true);
62
+ setDragged(true);
63
+ },
64
+ "onDrag": (e, coreData) => {
65
+ if (!dragging.value) return false;
66
+ const uiData = createDraggableData(ctx, coreData);
67
+ const newState = {
68
+ x: uiData.x,
69
+ y: uiData.y,
70
+ slackX: 0,
71
+ slackY: 0
72
+ };
73
+ if (props.bounds) {
74
+ const { x: prevX, y: prevY } = newState;
75
+ newState.x += slackX.value;
76
+ newState.y += slackY.value;
77
+ const [newStateX, newStateY] = getBoundPosition(ctx, newState.x, newState.y);
78
+ newState.x = newStateX;
79
+ newState.y = newStateY;
80
+ newState.slackX = slackX.value + (prevX - newState.x);
81
+ newState.slackY = slackY.value + (prevY - newState.y);
82
+ uiData.x = newState.x;
83
+ uiData.y = newState.y;
84
+ uiData.deltaX = newState.x - x.value;
85
+ uiData.deltaY = newState.y - y.value;
86
+ }
87
+ emit("drag", e, uiData);
88
+ setX(newState.x);
89
+ setY(newState.y);
90
+ setSlackX(newState.slackX);
91
+ setSlackY(newState.slackY);
92
+ },
93
+ "onStop": (e, coreData) => {
94
+ if (!dragging.value) return false;
95
+ emit("stop", e, createDraggableData(ctx, coreData));
96
+ const newState = {
97
+ dragging: false,
98
+ slackX: 0,
99
+ slackY: 0
100
+ };
101
+ const controlled = Boolean(props.position);
102
+ if (controlled) {
103
+ const { x, y } = props.position;
104
+ newState.x = x;
105
+ newState.y = y;
106
+ }
107
+ setDragging(newState.dragging);
108
+ setSlackX(newState.slackX);
109
+ setSlackY(newState.slackY);
110
+ if (controlled) {
111
+ setX(newState.x);
112
+ setY(newState.y);
113
+ }
114
+ },
115
+ "onMousedown": (e) => emit("mousedown", e)
116
+ }), _isSlot(_slot = cloneVNode(children, {
117
+ class: classNames(children.props?.class, defaultClass, {
118
+ [defaultClassDragging]: dragging.value,
119
+ [defaultClassDragged]: dragged.value
120
+ }),
121
+ style: {
122
+ ...children.props?.style,
123
+ ...style
124
+ },
125
+ transform: svgTransform
126
+ })) ? _slot : { default: () => [_slot] });
127
+ };
128
+ }, {
129
+ name: "Draggable",
130
+ inheritAttrs: false,
131
+ props: [
132
+ "allowAnyClick",
133
+ "allowMobileScroll",
134
+ "axis",
135
+ "bounds",
136
+ "cancel",
137
+ "defaultClass",
138
+ "defaultClassDragged",
139
+ "defaultClassDragging",
140
+ "defaultPosition",
141
+ "disabled",
142
+ "enableUserSelectHack",
143
+ "grid",
144
+ "handle",
145
+ "nodeRef",
146
+ "offsetParent",
147
+ "position",
148
+ "positionOffset",
149
+ "scale"
150
+ ],
151
+ emits: [
152
+ "drag",
153
+ "mousedown",
154
+ "start",
155
+ "stop"
156
+ ]
157
+ });
158
+ Draggable.install = (app) => {
159
+ app.component(Draggable.name, Draggable);
160
+ };
161
+ //#endregion
162
+ export { Draggable as default };