@windwalker-io/unicorn-next 0.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.
Files changed (175) hide show
  1. package/.editorconfig +18 -0
  2. package/.gulp.json +7 -0
  3. package/bin/release.mjs +47 -0
  4. package/dist/chunks/_arrayPush.js +168 -0
  5. package/dist/chunks/_arrayPush.js.map +1 -0
  6. package/dist/chunks/_baseRest.js +73 -0
  7. package/dist/chunks/_baseRest.js.map +1 -0
  8. package/dist/chunks/_commonjsHelpers.js +7 -0
  9. package/dist/chunks/_commonjsHelpers.js.map +1 -0
  10. package/dist/chunks/_getPrototype.js +130 -0
  11. package/dist/chunks/_getPrototype.js.map +1 -0
  12. package/dist/chunks/button-radio.js +147 -0
  13. package/dist/chunks/button-radio.js.map +1 -0
  14. package/dist/chunks/checkboxes-multi-select.js +44 -0
  15. package/dist/chunks/checkboxes-multi-select.js.map +1 -0
  16. package/dist/chunks/cloneDeep.js +287 -0
  17. package/dist/chunks/cloneDeep.js.map +1 -0
  18. package/dist/chunks/cropper.min.js +5 -0
  19. package/dist/chunks/cropper.min.js.map +1 -0
  20. package/dist/chunks/field-cascade-select.js +256 -0
  21. package/dist/chunks/field-cascade-select.js.map +1 -0
  22. package/dist/chunks/field-file-drag.js +218 -0
  23. package/dist/chunks/field-file-drag.js.map +1 -0
  24. package/dist/chunks/field-flatpickr.js +893 -0
  25. package/dist/chunks/field-flatpickr.js.map +1 -0
  26. package/dist/chunks/field-modal-select.js +403 -0
  27. package/dist/chunks/field-modal-select.js.map +1 -0
  28. package/dist/chunks/field-modal-tree.js +790 -0
  29. package/dist/chunks/field-modal-tree.js.map +1 -0
  30. package/dist/chunks/field-multi-uploader.js +256 -0
  31. package/dist/chunks/field-multi-uploader.js.map +1 -0
  32. package/dist/chunks/field-repeatable.js +132 -0
  33. package/dist/chunks/field-repeatable.js.map +1 -0
  34. package/dist/chunks/field-single-image-drag.js +338 -0
  35. package/dist/chunks/field-single-image-drag.js.map +1 -0
  36. package/dist/chunks/form.js +154 -0
  37. package/dist/chunks/form.js.map +1 -0
  38. package/dist/chunks/grid.js +345 -0
  39. package/dist/chunks/grid.js.map +1 -0
  40. package/dist/chunks/http-client.js +229 -0
  41. package/dist/chunks/http-client.js.map +1 -0
  42. package/dist/chunks/iframe-modal.js +124 -0
  43. package/dist/chunks/iframe-modal.js.map +1 -0
  44. package/dist/chunks/index.js +309 -0
  45. package/dist/chunks/index.js.map +1 -0
  46. package/dist/chunks/isArguments.js +146 -0
  47. package/dist/chunks/isArguments.js.map +1 -0
  48. package/dist/chunks/keep-tab.js +101 -0
  49. package/dist/chunks/keep-tab.js.map +1 -0
  50. package/dist/chunks/legacy.js +210 -0
  51. package/dist/chunks/legacy.js.map +1 -0
  52. package/dist/chunks/list-dependent.js +231 -0
  53. package/dist/chunks/list-dependent.js.map +1 -0
  54. package/dist/chunks/s3-multipart-uploader.js +172 -0
  55. package/dist/chunks/s3-multipart-uploader.js.map +1 -0
  56. package/dist/chunks/s3-uploader.js +136 -0
  57. package/dist/chunks/s3-uploader.js.map +1 -0
  58. package/dist/chunks/show-on.js +237 -0
  59. package/dist/chunks/show-on.js.map +1 -0
  60. package/dist/chunks/tinymce.js +196 -0
  61. package/dist/chunks/tinymce.js.map +1 -0
  62. package/dist/chunks/ui-bootstrap5.js +71 -0
  63. package/dist/chunks/ui-bootstrap5.js.map +1 -0
  64. package/dist/chunks/unicorn.js +2202 -0
  65. package/dist/chunks/unicorn.js.map +1 -0
  66. package/dist/chunks/validation.js +854 -0
  67. package/dist/chunks/validation.js.map +1 -0
  68. package/dist/editor.css +1 -0
  69. package/dist/index.d.ts +1427 -0
  70. package/dist/multi-level-menu.css +1 -0
  71. package/dist/switcher.css +1 -0
  72. package/dist/unicorn-next.css +12 -0
  73. package/dist/unicorn.js +125 -0
  74. package/dist/unicorn.js.map +1 -0
  75. package/fusionfile.mjs +155 -0
  76. package/images/ajax-loader.gif +0 -0
  77. package/images/placeholder/avatar.png +0 -0
  78. package/images/placeholder/image-16x10.png +0 -0
  79. package/images/placeholder/image-16x9.png +0 -0
  80. package/images/placeholder/image-1x1.png +0 -0
  81. package/images/placeholder/image-4x3.png +0 -0
  82. package/package.json +102 -0
  83. package/scss/bootstrap/multi-level-menu.scss +121 -0
  84. package/scss/editor.scss +116 -0
  85. package/scss/field/file-drag.scss +102 -0
  86. package/scss/field/single-image-drag.scss +88 -0
  87. package/scss/field/vue-drag-uploader.scss +160 -0
  88. package/scss/switcher.scss +156 -0
  89. package/src/app.ts +128 -0
  90. package/src/bootstrap/button-radio.ts +208 -0
  91. package/src/bootstrap/keep-tab.ts +155 -0
  92. package/src/composable/index.ts +21 -0
  93. package/src/composable/useCheckboxesMultiSelect.ts +22 -0
  94. package/src/composable/useFieldCascadeSelect.ts +9 -0
  95. package/src/composable/useFieldFileDrag.ts +9 -0
  96. package/src/composable/useFieldFlatpickr.ts +3 -0
  97. package/src/composable/useFieldModalSelect.ts +6 -0
  98. package/src/composable/useFieldModalTree.ts +3 -0
  99. package/src/composable/useFieldMultiUploader.ts +3 -0
  100. package/src/composable/useFieldRepeatable.ts +9 -0
  101. package/src/composable/useFieldSingleImageDrag.ts +5 -0
  102. package/src/composable/useForm.ts +43 -0
  103. package/src/composable/useGrid.ts +57 -0
  104. package/src/composable/useHttp.ts +8 -0
  105. package/src/composable/useIframeModal.ts +9 -0
  106. package/src/composable/useListDependent.ts +26 -0
  107. package/src/composable/useQueue.ts +13 -0
  108. package/src/composable/useS3Uploader.ts +32 -0
  109. package/src/composable/useShowOn.ts +9 -0
  110. package/src/composable/useStack.ts +13 -0
  111. package/src/composable/useTinymce.ts +29 -0
  112. package/src/composable/useTomSelect.ts +72 -0
  113. package/src/composable/useUIBootstrap5.ts +48 -0
  114. package/src/composable/useUniDirective.ts +32 -0
  115. package/src/composable/useValidation.ts +39 -0
  116. package/src/data.ts +36 -0
  117. package/src/events.ts +73 -0
  118. package/src/legacy/legacy.ts +186 -0
  119. package/src/legacy/loader.ts +125 -0
  120. package/src/module/checkboxes-multi-select.ts +54 -0
  121. package/src/module/field-cascade-select.ts +292 -0
  122. package/src/module/field-file-drag.ts +292 -0
  123. package/src/module/field-flatpickr.ts +127 -0
  124. package/src/module/field-modal-select.ts +174 -0
  125. package/src/module/field-modal-tree.ts +27 -0
  126. package/src/module/field-multi-uploader.ts +361 -0
  127. package/src/module/field-repeatable.ts +202 -0
  128. package/src/module/field-single-image-drag.ts +468 -0
  129. package/src/module/form.ts +223 -0
  130. package/src/module/grid.ts +465 -0
  131. package/src/module/http-client.ts +243 -0
  132. package/src/module/iframe-modal.ts +167 -0
  133. package/src/module/list-dependent.ts +321 -0
  134. package/src/module/s3-multipart-uploader.ts +300 -0
  135. package/src/module/s3-uploader.ts +234 -0
  136. package/src/module/show-on.ts +173 -0
  137. package/src/module/tinymce.ts +263 -0
  138. package/src/module/ui-bootstrap5.ts +107 -0
  139. package/src/module/validation.ts +1019 -0
  140. package/src/plugin/index.ts +1 -0
  141. package/src/plugin/php-adapter.ts +65 -0
  142. package/src/polyfill/form-request-submit.ts +31 -0
  143. package/src/polyfill/index.ts +9 -0
  144. package/src/service/animate.ts +58 -0
  145. package/src/service/crypto.ts +27 -0
  146. package/src/service/dom-watcher.ts +62 -0
  147. package/src/service/dom.ts +265 -0
  148. package/src/service/helper.ts +48 -0
  149. package/src/service/index.ts +10 -0
  150. package/src/service/lang.ts +122 -0
  151. package/src/service/loader.ts +152 -0
  152. package/src/service/router.ts +118 -0
  153. package/src/service/ui.ts +497 -0
  154. package/src/service/uri.ts +106 -0
  155. package/src/types/base.ts +9 -0
  156. package/src/types/index.ts +4 -0
  157. package/src/types/modal-tree.ts +12 -0
  158. package/src/types/plugin.ts +6 -0
  159. package/src/types/shims.d.ts +18 -0
  160. package/src/types/ui.ts +6 -0
  161. package/src/unicorn.ts +63 -0
  162. package/src/utilities/arr.ts +25 -0
  163. package/src/utilities/base.ts +9 -0
  164. package/src/utilities/data.ts +48 -0
  165. package/src/utilities/index.ts +5 -0
  166. package/src/utilities/tree.ts +20 -0
  167. package/src/vue/components/ModalTree/ModalTreeApp.vue +175 -0
  168. package/src/vue/components/ModalTree/TreeItem.vue +262 -0
  169. package/src/vue/components/ModalTree/TreeModal.vue +225 -0
  170. package/tests/test.js +4 -0
  171. package/tsconfig.js.json +25 -0
  172. package/tsconfig.json +17 -0
  173. package/vite.assets.config.ts +61 -0
  174. package/vite.config.test.ts +36 -0
  175. package/vite.config.ts +112 -0
@@ -0,0 +1,225 @@
1
+ <script lang="ts" setup>
2
+ import { Modal } from 'bootstrap';
3
+ import { computed, getCurrentInstance, inject, onMounted, onUnmounted, provide, ref, useTemplateRef, watch } from 'vue';
4
+ import { useHttpClient } from '../../../composable';
5
+ import { forceArray } from '../../../service';
6
+ import { MaybeArray, ModalTreeSource, SearchMatcher, TitleGetter, TreeNode, ValueGetter } from '../../../types';
7
+ import { flattenChildren } from '../../../utilities';
8
+ import TreeItem from './TreeItem.vue';
9
+
10
+ const props = withDefaults(
11
+ defineProps<{
12
+ open?: boolean;
13
+ id?: string;
14
+ name?: string;
15
+ types?: string[];
16
+ title?: string;
17
+ disabled?: boolean;
18
+ readonly?: boolean;
19
+ value?: MaybeArray<string | number>;
20
+ branchSelectable?: boolean;
21
+ source?: ModalTreeSource;
22
+ searchText?: string;
23
+ }>(),
24
+ {
25
+ branchSelectable: false,
26
+ }
27
+ );
28
+
29
+ const emits = defineEmits<{
30
+ change: [value: any];
31
+ input: [value: any];
32
+ selected: [items: any[]];
33
+ hide: [];
34
+ }>();
35
+
36
+ // provide('selectNode', selectNode);
37
+
38
+ const valueGetter = inject<ValueGetter>('valueGetter');
39
+ const titleGetter = inject<TitleGetter>('titleGetter');
40
+ const searchMatcher = inject<SearchMatcher>('searchMatcher');
41
+
42
+ const loading = ref(false);
43
+ const multiple = inject<boolean>('multiple', false);
44
+ const modalElement = useTemplateRef<HTMLDivElement>('modal')
45
+
46
+ let $modal: Modal;
47
+
48
+ onMounted(() => {
49
+ $modal = Modal.getOrCreateInstance(modalElement.value!);
50
+ modalElement.value!.addEventListener('show.bs.modal', onShow);
51
+ modalElement.value!.addEventListener('hide.bs.modal', onHide);
52
+ });
53
+
54
+ onUnmounted(() => {
55
+ modalElement.value!.removeEventListener('show.bs.modal', onShow);
56
+ modalElement.value!.removeEventListener('hide.bs.modal', onHide);
57
+ });
58
+
59
+ // Items
60
+ const nodes = ref<TreeNode[]>([]);
61
+ const selectedNodes = ref<TreeNode[]>([]);
62
+
63
+ const displayNodes = computed(() => {
64
+ if (searchEnabled.value) {
65
+ return searchedItems.value;
66
+ }
67
+ return nodes.value;
68
+ });
69
+
70
+ const flatNodes = computed(() => flattenChildren(nodes.value));
71
+
72
+ const selectedValues = computed(() => {
73
+ return flatNodes.value.filter((node) => node.selected).map((node) => valueGetter(node.value));
74
+ });
75
+
76
+ provide('selectedValues', selectedValues);
77
+
78
+ watch(() => selectedValues, () => {
79
+ emits('change', selectedValues.value);
80
+ emits('input', selectedValues.value);
81
+ emits('selected', selectedNodes.value);
82
+ });
83
+
84
+ // function selectNode(node: TreeNode, select: boolean) {
85
+ // node.selected = select;
86
+ //
87
+ // // if (select) {
88
+ // // if (!multiple) {
89
+ // // selectedNodes.value = [];
90
+ // // }
91
+ // // if (!selectedValues.value.includes(valueGetter(node.value))) {
92
+ // // selectedNodes.value.push(node);
93
+ // // }
94
+ // // } else {
95
+ // // selectedNodes.value = selectedNodes.value.filter(
96
+ // // (selectedNode: TreeNode) => valueGetter(selectedNode.value) !== valueGetter(node.value)
97
+ // // );
98
+ // // }
99
+ // emits('change', selectedValues.value);
100
+ // emits('input', selectedValues.value);
101
+ // emits('selected', selectedNodes.value);
102
+ // }
103
+
104
+ const canModify = computed(() => {
105
+ return !props.readonly && !props.disabled;
106
+ });
107
+
108
+ // Search
109
+ const q = ref('');
110
+ const searchEnabled = computed(() => q.value !== '');
111
+
112
+ const searchedItems = computed(() => {
113
+ if (q.value === '') {
114
+ return [];
115
+ }
116
+
117
+ return flatNodes.value.filter((item: TreeNode) => {
118
+ return searchMatcher(item.value, q.value);
119
+ });
120
+ });
121
+
122
+ async function loadItems() {
123
+ loading.value = true;
124
+ const http = await useHttpClient();
125
+ try {
126
+ let src = props.source;
127
+
128
+ if (typeof src === 'string') {
129
+ const res = await http.get(src);
130
+ nodes.value = res.data.data;
131
+ } else if (typeof src === 'function') {
132
+ nodes.value = await src();
133
+ } else {
134
+ if (!Array.isArray(src)) {
135
+ src = src.children;
136
+ }
137
+
138
+ nodes.value = src;
139
+ }
140
+ } finally {
141
+ loading.value = false;
142
+ }
143
+ }
144
+
145
+ // Modal Control
146
+ watch(() => props.open, (v) => {
147
+ if (v) {
148
+ $modal.show();
149
+ } else {
150
+ $modal.hide();
151
+ }
152
+ });
153
+
154
+ async function onShow() {
155
+ await loadItems();
156
+ updateSelectedItemsByValue();
157
+ }
158
+
159
+ function onHide() {
160
+ nodes.value = [];
161
+ q.value = '';
162
+ emits('hide');
163
+ }
164
+
165
+ function updateSelectedItemsByValue() {
166
+ const values = forceArray(props.value);
167
+
168
+ selectedNodes.value = flatNodes.value
169
+ .filter((item: TreeNode) => {
170
+ return values.includes(valueGetter(item.value));
171
+ });
172
+ }
173
+
174
+ watch(
175
+ () => props.value,
176
+ () => updateSelectedItemsByValue(),
177
+ { immediate: true, deep: true }
178
+ );
179
+
180
+ </script>
181
+
182
+ <template>
183
+ <div ref="modal" class="modal fade" :id="`${id}__modal`" tabindex="-1" role="dialog" aria-labelledby="-modal-label"
184
+ aria-hidden="true">
185
+ <div class="modal-dialog" role="document">
186
+ <div class="modal-content">
187
+ <div class="modal-header">
188
+ <h4 class="modal-title" :id="`${id}__modal-label`">
189
+ {{ title }}
190
+ </h4>
191
+ <button type="button" class="close btn-close" data-bs-dismiss="modal" data-dismiss="modal" aria-label="Close">
192
+ <span aria-hidden="true" class="visually-hidden">&times;</span>
193
+ </button>
194
+ </div>
195
+
196
+ <div class="modal-body p-0">
197
+ <div class="std-form box-list m-3">
198
+ <div class="form-group">
199
+ <input type="search" class="form-control" :placeholder="searchText"
200
+ v-model="q" />
201
+ </div>
202
+ </div>
203
+
204
+ <div v-if="!loading" class="box-list__items">
205
+ <TreeItem v-for="node of displayNodes"
206
+ :node
207
+ :key="valueGetter(node.value)"
208
+ :level="1"
209
+ :branchSelectable
210
+ />
211
+ </div>
212
+ <div v-else>
213
+ <div class="d-flex justify-content-center">
214
+ <div class="spinner-border spinner-border-sm my-3"></div>
215
+ </div>
216
+ </div>
217
+ </div>
218
+ </div>
219
+ </div>
220
+ </div>
221
+ </template>
222
+
223
+ <style scoped>
224
+
225
+ </style>
package/tests/test.js ADDED
@@ -0,0 +1,4 @@
1
+ import { tid } from '../dist/unicorn.js';
2
+ import { randomBytes } from '../dist/unicorn.js';
3
+
4
+ console.log(randomBytes());
@@ -0,0 +1,25 @@
1
+ {
2
+ "include": [
3
+ "./src/types/index.d.ts"
4
+ ],
5
+ "exclude": [
6
+ "node_modules/**/*"
7
+ ],
8
+ "compilerOptions": {
9
+ "allowJs": true,
10
+ "module": "esnext",
11
+ "target": "esnext",
12
+ "moduleResolution": "bundler",
13
+ "skipLibCheck": true,
14
+ "jsx": "preserve",
15
+ "jsxImportSource": "vue",
16
+ "noImplicitThis": true,
17
+ "strict": true,
18
+ "useDefineForClassFields": true,
19
+ "esModuleInterop": true,
20
+ "forceConsistentCasingInFileNames": true,
21
+ "emitDecoratorMetadata": true,
22
+ "experimentalDecorators": true,
23
+ "noEmit": true,
24
+ }
25
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "extends": [
3
+ "./tsconfig.js.json"
4
+ ],
5
+ "include": [
6
+ "./src/**/*.ts",
7
+ ],
8
+ "exclude": [
9
+ "node_modules/**/*"
10
+ ],
11
+ "types": [
12
+ "reflect-metadata"
13
+ ],
14
+ "compilerOptions": {
15
+ //
16
+ }
17
+ }
@@ -0,0 +1,61 @@
1
+ import { resolve, basename } from 'node:path';
2
+ import { rimraf } from 'rimraf';
3
+ import { defineConfig } from 'vite';
4
+
5
+ export default defineConfig(({ mode }) => {
6
+ const src = resolve('./src').replace(/\\/g, '/');
7
+
8
+ return {
9
+ resolve: {
10
+ alias: {
11
+ // '@': resolve('./src'),
12
+ }
13
+ },
14
+ build: {
15
+ rollupOptions: {
16
+ // preserveEntrySignatures: 'strict',
17
+ input: {
18
+ switcher: 'scss/switcher.scss',
19
+ editor: 'scss/editor.scss',
20
+ menu: 'scss/bootstrap/multi-level-menu.scss'
21
+ },
22
+ output: {
23
+ format: 'es',
24
+ entryFileNames: '[name].js',
25
+ chunkFileNames(chunkInfo) {
26
+ return '[name].js';
27
+ },
28
+ assetFileNames: (assetInfo) => {
29
+ if (assetInfo.originalFileName) {
30
+ return basename(assetInfo.originalFileName, '.scss') + '[extname]';
31
+ }
32
+
33
+ return 'assets/[name][extname]';
34
+ },
35
+ // preserveModules: true, // 保留模組結構
36
+ // preserveModulesRoot: 'src/unicorn',
37
+ },
38
+ },
39
+ outDir: 'dist',
40
+ emptyOutDir: false,
41
+ minify: mode === 'production',
42
+ },
43
+ css: {
44
+ preprocessorOptions: {
45
+ scss: {
46
+ silenceDeprecations: ['mixed-decls', 'color-functions', 'global-builtin', 'import']
47
+ },
48
+ }
49
+ },
50
+ plugins: [
51
+ {
52
+ name: 'clear-files',
53
+ generateBundle() {
54
+ rimraf.sync('./dist/**/*.css', { glob: true });
55
+ rimraf.sync('./dist/**/*.scss', { glob: true });
56
+ }
57
+ }
58
+ ]
59
+ };
60
+ });
61
+
@@ -0,0 +1,36 @@
1
+ import { defineConfig } from 'vite';
2
+
3
+ export default defineConfig(({ mode }) => {
4
+ return {
5
+ resolve: {
6
+ alias: {
7
+ '@': 'src',
8
+ }
9
+ },
10
+ build: {
11
+ // lib: {
12
+ // entry: 'src/test.ts',
13
+ // name: 'test',
14
+ // formats: ['es'],
15
+ // // fileName: (format) => `test.es.js`
16
+ // },
17
+ rollupOptions: {
18
+ input: {
19
+ test: 'src/test.ts',
20
+ },
21
+ preserveEntrySignatures: 'strict',
22
+ output: {
23
+ format: 'es',
24
+ entryFileNames: '[name].js',
25
+ // chunkFileNames: 'chunks/[name]-[hash].js',
26
+ // assetFileNames: 'assets/[name]-[hash][extname]',
27
+ },
28
+ treeshake: true,
29
+ },
30
+ outDir: 'dist',
31
+ emptyOutDir: false,
32
+ minify: false,
33
+ },
34
+ };
35
+ });
36
+
package/vite.config.ts ADDED
@@ -0,0 +1,112 @@
1
+ import vuePlugin from '@vitejs/plugin-vue';
2
+ import { resolve, basename, relative } from 'node:path';
3
+ import { rimraf } from 'rimraf';
4
+ import treeShakeable from 'rollup-plugin-tree-shakeable';
5
+ import { defineConfig } from 'vite';
6
+ import dts from 'unplugin-dts/vite';
7
+
8
+ export default defineConfig(({ mode }) => {
9
+ const src = resolve('./src').replace(/\\/g, '/');
10
+
11
+ return {
12
+ resolve: {
13
+ alias: {
14
+ // '@': resolve('./src'),
15
+ }
16
+ },
17
+ build: {
18
+ lib: {
19
+ entry: 'src/unicorn.ts',
20
+ name: 'unicorn',
21
+ formats: ['es'],
22
+ },
23
+ rollupOptions: {
24
+ // preserveEntrySignatures: 'strict',
25
+ // input: {
26
+ // unicorn: 'src/unicorn/unicorn.ts',
27
+ // },
28
+ output: {
29
+ format: 'es',
30
+ entryFileNames: 'unicorn.js',
31
+ chunkFileNames(chunkInfo) {
32
+ // if (chunkInfo.facadeModuleId && chunkInfo.facadeModuleId.includes('/module/')) {
33
+ // const relPath = chunkInfo.facadeModuleId.replace(src + '/', '');
34
+ // const dir = relPath.split('/').slice(0, -1).join('/');
35
+ // const filename = basename(relPath, '.ts');
36
+ //
37
+ // return `${dir}/${filename}.js`;
38
+ // }
39
+
40
+ return 'chunks/[name].js';
41
+ },
42
+ // assetFileNames: 'assets/[name][extname]',
43
+ // preserveModules: true,
44
+ // preserveModulesRoot: 'src/unicorn',
45
+ // manualChunks(id) {
46
+ // if (!/node_modules/.test(id)) {
47
+ // const chunk = relative(process.cwd() + '/src/', id).replace(/\\/g, '/');
48
+ // if (chunk.startsWith('.')) {
49
+ // return undefined;
50
+ // }
51
+ //
52
+ // if (chunk.includes('ts-mixer')) {
53
+ // return 'ts-mixer';
54
+ // }
55
+ //
56
+ // // Remove any extension
57
+ // return chunk.replace(/\.[^/.]+$/, '');
58
+ // }
59
+ // }
60
+ },
61
+ external: [
62
+ 'node:crypto',
63
+ '@unicorn/*',
64
+ 'dayjs',
65
+ 'flatpickr',
66
+ 'bootstrap',
67
+ 'sortablejs',
68
+ '@asika32764/vue-animate',
69
+ 'alpinejs',
70
+ 'cropperjs',
71
+ 'cropperjs/*',
72
+ 'tinymce',
73
+ 'bootstrap',
74
+ 'vue',
75
+ 'vue-draggable-plus',
76
+ 'vue-multi-uploader',
77
+ 'web-directive',
78
+ 'bigint-toolkit',
79
+ 'axios',
80
+ ]
81
+ },
82
+ outDir: 'dist',
83
+ emptyOutDir: false,
84
+ sourcemap: 'external',
85
+ minify: false,
86
+ },
87
+ plugins: [
88
+ treeShakeable(),
89
+ vuePlugin({
90
+ features: {
91
+ prodDevtools: true,
92
+ }
93
+ }),
94
+ dts({
95
+ // entryRoot: './src/unicorn/unicorn.ts',
96
+ insertTypesEntry: true,
97
+ outDir: 'dist',
98
+ tsconfigPath: resolve('./tsconfig.json'),
99
+ bundleTypes: true,
100
+ // rollupTypes: true
101
+ }),
102
+ {
103
+ name: 'clear-files',
104
+ generateBundle() {
105
+ rimraf.sync('./dist/**/*.js', { glob: true });
106
+ rimraf.sync('./dist/**/*.ts', { glob: true });
107
+ }
108
+ }
109
+ ]
110
+ };
111
+ });
112
+