@windwalker-io/core 4.0.7 → 4.0.9
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/.gulp.json +7 -7
- package/LICENSE +19 -19
- package/dist/debugger/114.js.map +1 -0
- package/dist/debugger/338.js.map +1 -0
- package/dist/debugger/358.js.map +1 -0
- package/dist/debugger/500.js.map +1 -0
- package/dist/debugger/548.js.map +1 -0
- package/dist/debugger/694.js.map +1 -0
- package/dist/debugger/798.js.map +1 -0
- package/dist/debugger/851.js.map +1 -0
- package/dist/debugger/864.js.map +1 -0
- package/dist/debugger/chunk-vendor-114.js +3 -0
- package/dist/debugger/chunk-vendor-114.js.LICENSE.txt +8 -0
- package/dist/debugger/chunk-vendor-338.js +3 -0
- package/dist/debugger/chunk-vendor-338.js.LICENSE.txt +15 -0
- package/dist/debugger/chunk-vendor-358.js +2 -0
- package/dist/debugger/chunk-vendor-500.js +3 -0
- package/dist/debugger/chunk-vendor-500.js.LICENSE.txt +8 -0
- package/dist/debugger/chunk-vendor-548.js +3 -0
- package/dist/debugger/chunk-vendor-548.js.LICENSE.txt +15 -0
- package/dist/debugger/chunk-vendor-694.js +3 -0
- package/dist/debugger/chunk-vendor-694.js.LICENSE.txt +1 -0
- package/dist/debugger/chunk-vendor-798.js +3 -0
- package/dist/debugger/chunk-vendor-798.js.LICENSE.txt +1 -0
- package/dist/debugger/chunk-vendor-851.js +3 -0
- package/dist/debugger/chunk-vendor-851.js.LICENSE.txt +8 -0
- package/dist/debugger/chunk-vendor-864.js +3 -0
- package/dist/debugger/chunk-vendor-864.js.LICENSE.txt +1 -0
- package/dist/debugger/debugger.js +1 -1
- package/dist/debugger/debugger.js.LICENSE.txt +11 -2
- package/dist/debugger/debugger.js.map +1 -1
- package/dist/debugger/dev/chunk-vendor-scss_debugger_scss.js +219 -0
- package/dist/debugger/dev/chunk-vendor-src_debugger_layouts_DefaultLayout_vue.js +77 -0
- package/dist/debugger/dev/chunk-vendor-src_debugger_views_Dashboard_vue.js +81 -0
- package/dist/debugger/dev/chunk-vendor-src_debugger_views_Database_vue.js +187 -0
- package/dist/debugger/dev/chunk-vendor-src_debugger_views_Events_vue.js +122 -0
- package/dist/debugger/dev/chunk-vendor-src_debugger_views_Request_vue.js +122 -0
- package/dist/debugger/dev/chunk-vendor-src_debugger_views_Routing_vue.js +122 -0
- package/dist/debugger/dev/chunk-vendor-src_debugger_views_System_vue.js +67 -0
- package/dist/debugger/dev/chunk-vendor-src_debugger_views_Timeline_vue.js +132 -0
- package/dist/debugger/dev/chunk-vendor-vendors-node_modules_bootstrap_js_src_modal_js-node_modules_sql-formatter_lib_index_js.js +923 -0
- package/dist/debugger/dev/chunk-vendor-vendors-node_modules_sql-formatter_lib_index_js-node_modules_bootstrap_js_src_modal_js.js +923 -0
- package/fusionfile.mjs +25 -15
- package/package.json +11 -5
- package/scss/_variables.scss +8 -0
- package/scss/base/_typography.scss +9 -0
- package/scss/debugger.scss +46 -17
- package/scss/layout/_layout.scss +1 -2
- package/scss/layout/_sidebar.scss +7 -2
- package/src/debugger/App.vue +74 -38
- package/src/debugger/Store.vue +1 -1
- package/src/debugger/components/BsModal.vue +128 -0
- package/src/debugger/components/KeyValueTable.vue +51 -0
- package/src/debugger/components/db/{query-info.vue → QueryInfo.vue} +87 -55
- package/src/debugger/components/events/EventListenersTable.vue +75 -0
- package/src/debugger/components/timeline/TimelineTable.vue +107 -0
- package/src/debugger/debugger.js +4 -1
- package/src/debugger/font-awesome.js +23 -0
- package/src/debugger/layouts/DefaultLayout.vue +19 -4
- package/src/debugger/routes.js +9 -6
- package/src/debugger/services/utilities.js +18 -0
- package/src/debugger/views/Dashboard.vue +20 -10
- package/src/debugger/views/Database.vue +113 -26
- package/src/debugger/views/Events.vue +113 -0
- package/src/debugger/views/Request.vue +133 -1
- package/src/debugger/views/Routing.vue +210 -0
- package/src/debugger/views/System.vue +37 -8
- package/src/debugger/views/Timeline.vue +92 -0
- package/src/{webpack.config.js → debugger/webpack.config.js} +1 -1
- package/src/index.mjs +9 -9
- package/src/install-vendors.mjs +10 -3
- package/src/utils.mjs +1 -2
- package/dist/debugger/1.js +0 -2
- package/dist/debugger/1.js.map +0 -1
- package/dist/debugger/144.js +0 -2
- package/dist/debugger/144.js.map +0 -1
- package/dist/debugger/2.js +0 -8
- package/dist/debugger/2.js.map +0 -1
- package/dist/debugger/3.js +0 -2
- package/dist/debugger/3.js.map +0 -1
- package/dist/debugger/4.js +0 -2
- package/dist/debugger/4.js.map +0 -1
- package/dist/debugger/5.js +0 -2
- package/dist/debugger/5.js.map +0 -1
- package/dist/debugger/523.js +0 -2
- package/dist/debugger/523.js.map +0 -1
- package/dist/debugger/689.js +0 -2
- package/dist/debugger/689.js.map +0 -1
- package/dist/debugger/715.js +0 -2
- package/dist/debugger/715.js.map +0 -1
- package/dist/debugger/727.js +0 -3
- package/dist/debugger/727.js.LICENSE.txt +0 -6
- package/dist/debugger/727.js.map +0 -1
- package/tailwind/debugger.tailwind.config.cjs +0 -30
package/fusionfile.mjs
CHANGED
|
@@ -5,33 +5,43 @@
|
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import fusion, { watch, parallel, src, dest } from '@windwalker-io/fusion';
|
|
8
|
+
import fusion, { watch, parallel, src, dest, wait } from '@windwalker-io/fusion';
|
|
9
9
|
import { babelBasicOptions } from '@windwalker-io/fusion/src/utilities/babel.js';
|
|
10
10
|
import postcss from 'gulp-postcss';
|
|
11
|
+
import path from 'path';
|
|
11
12
|
import tailwindcss from 'tailwindcss';
|
|
12
|
-
import
|
|
13
|
+
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
|
|
13
14
|
|
|
14
15
|
export async function debuggers() {
|
|
15
16
|
// Watch start
|
|
16
17
|
watch(['src/debugger/**/*.{js,vue}', 'scss/**/*.scss']);
|
|
17
18
|
// Watch end
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
config
|
|
20
|
+
return wait(
|
|
21
|
+
fusion.vue(
|
|
22
|
+
'src/debugger/debugger.js',
|
|
23
|
+
'dist/debugger/',
|
|
24
|
+
{
|
|
25
|
+
override: (config) => {
|
|
26
|
+
config.resolve.alias = {
|
|
27
|
+
'@': path.resolve(path.resolve(), './src/debugger/') // Will be overwrite when compile
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// @see https://webpack.js.org/guides/public-path/#automatic-publicpath
|
|
31
|
+
config.output.publicPath = "auto";
|
|
25
32
|
|
|
26
|
-
config.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
config.output.chunkFilename = process.env.NODE_ENV === 'production'
|
|
34
|
+
? 'chunk-vendor-[id].js'
|
|
35
|
+
: 'dev/chunk-vendor-[id].js';
|
|
36
|
+
|
|
37
|
+
// config.plugins.push(
|
|
38
|
+
// new BundleAnalyzerPlugin()
|
|
39
|
+
// );
|
|
40
|
+
}
|
|
31
41
|
}
|
|
32
|
-
|
|
42
|
+
),
|
|
43
|
+
fusion.copy('images/**/*', 'dist/images/')
|
|
33
44
|
);
|
|
34
|
-
fusion.copy('images/**/*', 'dist/images/');
|
|
35
45
|
}
|
|
36
46
|
|
|
37
47
|
export async function console() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@windwalker-io/core",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.9",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Windwalker Core JS package",
|
|
6
6
|
"scripts": {
|
|
@@ -15,26 +15,32 @@
|
|
|
15
15
|
"author": "Simon Asika",
|
|
16
16
|
"license": "MIT",
|
|
17
17
|
"dependencies": {
|
|
18
|
+
"@fortawesome/fontawesome-svg-core": "^6.2.0",
|
|
19
|
+
"@fortawesome/free-solid-svg-icons": "^6.2.0",
|
|
20
|
+
"@fortawesome/vue-fontawesome": "^3.0.1",
|
|
18
21
|
"axios": "^0.21.1",
|
|
19
|
-
"
|
|
22
|
+
"dayjs": "^1.11.5"
|
|
20
23
|
},
|
|
21
24
|
"devDependencies": {
|
|
22
|
-
"@windwalker-io/fusion": "^1.0",
|
|
23
25
|
"@tailwindcss/custom-forms": "^0.2.1",
|
|
24
26
|
"@tailwindcss/ui": "^0.7.2",
|
|
27
|
+
"@windwalker-io/fusion": "^1.0",
|
|
25
28
|
"autoprefixer": "^10.2.6",
|
|
26
29
|
"axios": "^0.21.1",
|
|
30
|
+
"bootstrap": "^5.0",
|
|
27
31
|
"gulp": "^4.0.2",
|
|
28
32
|
"gulp-postcss": "^9.0.0",
|
|
29
33
|
"postcss-import": "^14.0.2",
|
|
30
34
|
"postcss-loader": "^4.0.0",
|
|
31
35
|
"postcss-nested": "^5.0.5",
|
|
32
36
|
"regenerator-runtime": "^0.13.7",
|
|
33
|
-
"sql-formatter": "^
|
|
37
|
+
"sql-formatter": "^10.6.0",
|
|
34
38
|
"tailwindcss": "^2.1.4",
|
|
35
39
|
"vue": "^3.0.11",
|
|
40
|
+
"vuedraggable": "^3.0||^4.0.3",
|
|
36
41
|
"vue-router": "^4.0.8",
|
|
37
|
-
"webpack": "^
|
|
42
|
+
"webpack": "^5.0",
|
|
43
|
+
"webpack-bundle-analyzer": "^4.6.1"
|
|
38
44
|
},
|
|
39
45
|
"windwalker": {
|
|
40
46
|
"vendors": [
|
package/scss/debugger.scss
CHANGED
|
@@ -1,24 +1,53 @@
|
|
|
1
1
|
// Part of starter file.
|
|
2
2
|
|
|
3
|
-
@
|
|
3
|
+
@import "variables";
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
h2 {
|
|
10
|
-
@apply text-xl;
|
|
11
|
-
}
|
|
12
|
-
h3 {
|
|
13
|
-
@apply text-lg;
|
|
14
|
-
}
|
|
15
|
-
a {
|
|
16
|
-
@apply text-blue-600 underline;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
5
|
+
// scss-docs-start import-stack
|
|
6
|
+
// Configuration
|
|
7
|
+
@import "bootstrap/scss/mixins";
|
|
8
|
+
@import "bootstrap/scss/utilities";
|
|
19
9
|
|
|
20
|
-
|
|
21
|
-
@
|
|
10
|
+
// Layout & components
|
|
11
|
+
@import "bootstrap/scss/root";
|
|
12
|
+
@import "bootstrap/scss/reboot";
|
|
13
|
+
@import "bootstrap/scss/type";
|
|
14
|
+
@import "bootstrap/scss/images";
|
|
15
|
+
@import "bootstrap/scss/containers";
|
|
16
|
+
@import "bootstrap/scss/grid";
|
|
17
|
+
@import "bootstrap/scss/tables";
|
|
18
|
+
//@import "bootstrap/scss/forms";
|
|
19
|
+
@import "bootstrap/scss/buttons";
|
|
20
|
+
@import "bootstrap/scss/transitions";
|
|
21
|
+
//@import "bootstrap/scss/dropdown";
|
|
22
|
+
@import "bootstrap/scss/button-group";
|
|
23
|
+
@import "bootstrap/scss/nav";
|
|
24
|
+
@import "bootstrap/scss/navbar";
|
|
25
|
+
@import "bootstrap/scss/card";
|
|
26
|
+
//@import "bootstrap/scss/accordion";
|
|
27
|
+
//@import "bootstrap/scss/breadcrumb";
|
|
28
|
+
//@import "bootstrap/scss/pagination";
|
|
29
|
+
@import "bootstrap/scss/badge";
|
|
30
|
+
@import "bootstrap/scss/alert";
|
|
31
|
+
//@import "bootstrap/scss/progress";
|
|
32
|
+
@import "bootstrap/scss/list-group";
|
|
33
|
+
@import "bootstrap/scss/close";
|
|
34
|
+
//@import "bootstrap/scss/toasts";
|
|
35
|
+
@import "bootstrap/scss/modal";
|
|
36
|
+
@import "bootstrap/scss/tooltip";
|
|
37
|
+
//@import "bootstrap/scss/popover";
|
|
38
|
+
//@import "bootstrap/scss/carousel";
|
|
39
|
+
//@import "bootstrap/scss/spinners";
|
|
40
|
+
//@import "bootstrap/scss/offcanvas";
|
|
41
|
+
//@import "bootstrap/scss/placeholders";
|
|
42
|
+
|
|
43
|
+
// Helpers
|
|
44
|
+
@import "bootstrap/scss/helpers";
|
|
45
|
+
|
|
46
|
+
// Utilities
|
|
47
|
+
@import "bootstrap/scss/utilities/api";
|
|
48
|
+
// scss-docs-end import-stack
|
|
49
|
+
|
|
50
|
+
@import "base/typography";
|
|
22
51
|
|
|
23
52
|
@import "layout/layout";
|
|
24
53
|
@import "layout/sidebar";
|
package/scss/layout/_layout.scss
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
// Part of starter file.
|
|
2
2
|
|
|
3
3
|
.c-sidebar-menu-item {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
color: $dark;
|
|
5
|
+
padding-top: .75rem;
|
|
6
|
+
padding-bottom: .75rem;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.c-sidebar-menu-item.active {
|
|
10
|
+
background-color: $gray-300;
|
|
6
11
|
}
|
package/src/debugger/App.vue
CHANGED
|
@@ -1,51 +1,81 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="c-main-wrapper
|
|
3
|
-
<div class="
|
|
2
|
+
<div class="c-main-wrapper">
|
|
3
|
+
<div class="navbar navbar-expand-lg fixed-top navbar-dark bg-dark"
|
|
4
4
|
style="height: 60px">
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
<div class="container-fluid">
|
|
6
|
+
<!-- Logo -->
|
|
7
|
+
<div class="navbar-brand">
|
|
8
|
+
<img src="assets/vendor/@windwalker-io/core/dist/images/windwalker-logo-h-w.svg" alt="logo"
|
|
9
|
+
style="height: 30px">
|
|
10
|
+
</div>
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
<!-- Header -->
|
|
13
|
+
<div class="">
|
|
13
14
|
|
|
15
|
+
</div>
|
|
14
16
|
</div>
|
|
15
17
|
</div>
|
|
16
18
|
|
|
17
19
|
<!-- Body -->
|
|
18
|
-
<div class="flex flex-
|
|
20
|
+
<div class="d-flex flex-column flex-md-row" style="margin-top: 60px;">
|
|
19
21
|
<!-- Sidebar -->
|
|
20
|
-
<div class="h-w-sidebar bg-
|
|
21
|
-
<div class=""
|
|
22
|
-
|
|
23
|
-
class="
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
</
|
|
22
|
+
<div class="h-w-sidebar bg-light">
|
|
23
|
+
<div class="nav flex-column bg-light position-sticky"
|
|
24
|
+
style="min-width: 200px; top: 60px">
|
|
25
|
+
<div class="nav-item nav-item--dashboard">
|
|
26
|
+
<router-link to="/"
|
|
27
|
+
class="c-sidebar-menu-item nav-link"
|
|
28
|
+
:class="{ active: currentRoute === 'dashboard' }">
|
|
29
|
+
Dashboard
|
|
30
|
+
</router-link>
|
|
31
|
+
</div>
|
|
32
|
+
<div class="nav-item nav-item--system">
|
|
33
|
+
<router-link to="/system"
|
|
34
|
+
class="c-sidebar-menu-item nav-link"
|
|
35
|
+
:class="{ active: currentRoute === 'system' }">
|
|
36
|
+
System
|
|
37
|
+
</router-link>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="nav-item nav-item--request">
|
|
40
|
+
<router-link to="/request"
|
|
41
|
+
class="c-sidebar-menu-item nav-link"
|
|
42
|
+
:class="{ active: currentRoute === 'request' }">
|
|
43
|
+
Request
|
|
44
|
+
</router-link>
|
|
45
|
+
</div>
|
|
46
|
+
<div class="nav-item nav-item--routing">
|
|
47
|
+
<router-link to="/routing"
|
|
48
|
+
class="c-sidebar-menu-item nav-link"
|
|
49
|
+
:class="{ active: currentRoute === 'routing' }">
|
|
50
|
+
Routing
|
|
51
|
+
</router-link>
|
|
52
|
+
</div>
|
|
53
|
+
<div class="nav-item nav-item--timeline">
|
|
54
|
+
<router-link to="/timeline"
|
|
55
|
+
class="c-sidebar-menu-item nav-link"
|
|
56
|
+
:class="{ active: currentRoute === 'timeline' }">
|
|
57
|
+
Timeline
|
|
58
|
+
</router-link>
|
|
59
|
+
</div>
|
|
60
|
+
<div class="nav-item nav-item--timeline">
|
|
61
|
+
<router-link to="/events"
|
|
62
|
+
class="c-sidebar-menu-item nav-link"
|
|
63
|
+
:class="{ active: currentRoute === 'events' }">
|
|
64
|
+
Events
|
|
65
|
+
</router-link>
|
|
66
|
+
</div>
|
|
67
|
+
<div class="nav-item nav-item--db">
|
|
68
|
+
<router-link to="/db"
|
|
69
|
+
class="c-sidebar-menu-item nav-link"
|
|
70
|
+
:class="{ active: currentRoute === 'db' }">
|
|
71
|
+
Database
|
|
72
|
+
</router-link>
|
|
73
|
+
</div>
|
|
44
74
|
</div>
|
|
45
75
|
</div>
|
|
46
76
|
|
|
47
77
|
<!-- Content Body -->
|
|
48
|
-
<div class="
|
|
78
|
+
<div class="flex-grow-1">
|
|
49
79
|
<router-view></router-view>
|
|
50
80
|
</div>
|
|
51
81
|
</div>
|
|
@@ -55,7 +85,8 @@
|
|
|
55
85
|
</template>
|
|
56
86
|
|
|
57
87
|
<script>
|
|
58
|
-
import {
|
|
88
|
+
import { computed } from 'vue';
|
|
89
|
+
import { RouterLink, RouterView, useRoute } from 'vue-router';
|
|
59
90
|
import Store from './Store.vue';
|
|
60
91
|
|
|
61
92
|
export default {
|
|
@@ -66,13 +97,18 @@ export default {
|
|
|
66
97
|
RouterView
|
|
67
98
|
},
|
|
68
99
|
setup() {
|
|
100
|
+
const route = useRoute();
|
|
101
|
+
const currentRoute = computed(() => route.name);
|
|
102
|
+
|
|
69
103
|
return {
|
|
70
|
-
|
|
104
|
+
currentRoute
|
|
71
105
|
};
|
|
72
106
|
}
|
|
73
107
|
};
|
|
74
108
|
</script>
|
|
75
109
|
|
|
76
|
-
<style scoped>
|
|
110
|
+
<style scoped lang="scss">
|
|
111
|
+
.c-sidebar-menu-item.active {
|
|
77
112
|
|
|
113
|
+
}
|
|
78
114
|
</style>
|
package/src/debugger/Store.vue
CHANGED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<teleport to="body">
|
|
3
|
+
<div ref="modal" class="modal fade" :id="idName"
|
|
4
|
+
v-bind="$attrs"
|
|
5
|
+
tabindex="-1"
|
|
6
|
+
role="dialog"
|
|
7
|
+
:aria-labelledby="idName + '-label'"
|
|
8
|
+
:aria-hidden="visible ? 'true' : 'false'"
|
|
9
|
+
:data-bs-backdrop="backdrop"
|
|
10
|
+
>
|
|
11
|
+
<div class="modal-dialog"
|
|
12
|
+
role="document"
|
|
13
|
+
:class="size ? 'modal-' + size : null">
|
|
14
|
+
<div class="modal-content">
|
|
15
|
+
<template v-if="visible">
|
|
16
|
+
<template v-if="hasSlots('header-element')">
|
|
17
|
+
<slot name="header-element"></slot>
|
|
18
|
+
</template>
|
|
19
|
+
<div v-else class="modal-header">
|
|
20
|
+
<slot name="header">
|
|
21
|
+
<div class="modal-title" :id="idName + '-label'">
|
|
22
|
+
<h4>{{ title }}</h4>
|
|
23
|
+
</div>
|
|
24
|
+
</slot>
|
|
25
|
+
<button type="button" class="close btn-close" data-bs-dismiss="modal" data-dismiss="modal" aria-label="Close">
|
|
26
|
+
<span aria-hidden="true" class="visually-hidden">×</span>
|
|
27
|
+
</button>
|
|
28
|
+
</div>
|
|
29
|
+
</template>
|
|
30
|
+
<div v-if="visible" class="modal-body">
|
|
31
|
+
<slot></slot>
|
|
32
|
+
</div>
|
|
33
|
+
<div v-if="visible && hasSlots('footer')" class="modal-footer">
|
|
34
|
+
<slot name="footer"></slot>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
</teleport>
|
|
40
|
+
</template>
|
|
41
|
+
|
|
42
|
+
<script>
|
|
43
|
+
import Modal from 'bootstrap/js/src/modal.js';
|
|
44
|
+
import { onMounted, reactive, ref, toRefs, watch } from 'vue';
|
|
45
|
+
|
|
46
|
+
export default {
|
|
47
|
+
name: 'BsModal',
|
|
48
|
+
inheritAttrs: false,
|
|
49
|
+
props: {
|
|
50
|
+
id: String,
|
|
51
|
+
open: {
|
|
52
|
+
type: Boolean,
|
|
53
|
+
default: false
|
|
54
|
+
},
|
|
55
|
+
size: String,
|
|
56
|
+
title: String,
|
|
57
|
+
backdrop: {
|
|
58
|
+
type: [ String, Boolean ],
|
|
59
|
+
default: true
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
emits: [
|
|
63
|
+
'show',
|
|
64
|
+
'shown',
|
|
65
|
+
'hide',
|
|
66
|
+
'hidden'
|
|
67
|
+
],
|
|
68
|
+
setup(props, { emit, slots }) {
|
|
69
|
+
const modal = ref(null);
|
|
70
|
+
const state = reactive({
|
|
71
|
+
idName: props.id || 'modal-' + (Math.random() + 1).toString(36).substring(7),
|
|
72
|
+
visible: props.open,
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
watch(() => state.visible, (v, oldV) => {
|
|
76
|
+
if (!oldV && v) {
|
|
77
|
+
getModalInstance().show();
|
|
78
|
+
}
|
|
79
|
+
if (oldV && !v) {
|
|
80
|
+
getModalInstance().hide();
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
watch(() => props.open, (v) => {
|
|
85
|
+
state.visible = v
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
watch(() => props.id, (idName) => {
|
|
89
|
+
state.idName = idName;
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
onMounted(() => {
|
|
93
|
+
modal.value.addEventListener('show.bs.modal', (e) => {
|
|
94
|
+
emit('show', e);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
modal.value.addEventListener('shown.bs.modal', (e) => {
|
|
98
|
+
emit('shown', e);
|
|
99
|
+
});
|
|
100
|
+
modal.value.addEventListener('hide.bs.modal', (e) => {
|
|
101
|
+
emit('hide', e);
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
modal.value.addEventListener('hidden.bs.modal', (e) => {
|
|
105
|
+
emit('hidden', e);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
function getModalInstance() {
|
|
110
|
+
return Modal.getOrCreateInstance(modal.value);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function hasSlots(name) {
|
|
114
|
+
return slots[name] !== undefined;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return {
|
|
118
|
+
...toRefs(state),
|
|
119
|
+
modal,
|
|
120
|
+
hasSlots
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
</script>
|
|
125
|
+
|
|
126
|
+
<style scoped>
|
|
127
|
+
|
|
128
|
+
</style>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<table class="table table-bordered">
|
|
3
|
+
<thead>
|
|
4
|
+
<tr>
|
|
5
|
+
<th class="" style="width: 20%; min-width: 150px;" >
|
|
6
|
+
Key
|
|
7
|
+
</th>
|
|
8
|
+
<th>
|
|
9
|
+
Value
|
|
10
|
+
</th>
|
|
11
|
+
</tr>
|
|
12
|
+
</thead>
|
|
13
|
+
|
|
14
|
+
<tbody>
|
|
15
|
+
<tr v-for="(value, key) of data" :key="key">
|
|
16
|
+
<td style="width: 20%; word-break: break-all">
|
|
17
|
+
{{ key }}
|
|
18
|
+
</td>
|
|
19
|
+
<td style="width: 80%; max-width: 800px">
|
|
20
|
+
<pre style="word-break: break-all" class="m-0">{{ displayData(value) }}</pre>
|
|
21
|
+
</td>
|
|
22
|
+
</tr>
|
|
23
|
+
</tbody>
|
|
24
|
+
</table>
|
|
25
|
+
</template>
|
|
26
|
+
|
|
27
|
+
<script>
|
|
28
|
+
export default {
|
|
29
|
+
name: 'KeyValueTable',
|
|
30
|
+
props: {
|
|
31
|
+
data: Object
|
|
32
|
+
},
|
|
33
|
+
setup() {
|
|
34
|
+
function displayData(v) {
|
|
35
|
+
if (typeof v === 'object' || Array.isArray(v)) {
|
|
36
|
+
return JSON.stringify(v, null, 2);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return v;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return {
|
|
43
|
+
displayData
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
</script>
|
|
48
|
+
|
|
49
|
+
<style scoped>
|
|
50
|
+
|
|
51
|
+
</style>
|