@nebulars/primary 0.3.105

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 (53) hide show
  1. package/.prettierignore +0 -0
  2. package/.prettierrc.cjs +8 -0
  3. package/components/fqa/index.vue +128 -0
  4. package/components/fqa/markdown-notes.less +34 -0
  5. package/components/fqa-amixer/index.vue +105 -0
  6. package/components/fqa-aovery/index.vue +46 -0
  7. package/components/fqa-aovery/modify.less +3 -0
  8. package/components/fqa-arrow/index.vue +51 -0
  9. package/components/fqa-assist/index.vue +104 -0
  10. package/components/fqa-assist/menus-modify.less +38 -0
  11. package/components/fqa-assist/start-modify.less +3 -0
  12. package/components/fqa-attach/index.vue +51 -0
  13. package/components/fqa-attach/modify.less +3 -0
  14. package/components/fqa-boxer/index.vue +130 -0
  15. package/components/fqa-button/index.vue +105 -0
  16. package/components/fqa-control/index.vue +47 -0
  17. package/components/fqa-debug/index.vue +49 -0
  18. package/components/fqa-download/index.vue +65 -0
  19. package/components/fqa-footer/index.vue +25 -0
  20. package/components/fqa-fullscreen/index.vue +60 -0
  21. package/components/fqa-gap/index.vue +10 -0
  22. package/components/fqa-header/index.vue +105 -0
  23. package/components/fqa-header/poping-modify.less +48 -0
  24. package/components/fqa-icon/index.vue +36 -0
  25. package/components/fqa-input/index.vue +47 -0
  26. package/components/fqa-link/index.vue +184 -0
  27. package/components/fqa-lister/index.vue +61 -0
  28. package/components/fqa-logo/index.vue +34 -0
  29. package/components/fqa-markdown/index.vue +109 -0
  30. package/components/fqa-markdown/katex-modify.less +0 -0
  31. package/components/fqa-markdown/table-modify.less +5 -0
  32. package/components/fqa-markdown/table-ops.less +76 -0
  33. package/components/fqa-mask/index.vue +42 -0
  34. package/components/fqa-pagination/index.vue +44 -0
  35. package/components/fqa-pagination/modify.less +66 -0
  36. package/components/fqa-preloading/index.vue +70 -0
  37. package/components/fqa-profile/index.vue +141 -0
  38. package/components/fqa-reissue/index.vue +19 -0
  39. package/components/fqa-selection/index.vue +95 -0
  40. package/components/fqa-selection/modify.less +10 -0
  41. package/components/fqa-sider/index.vue +16 -0
  42. package/components/fqa-snapshot/index.vue +107 -0
  43. package/components/fqa-start/index.vue +321 -0
  44. package/components/fqa-start/modify.less +11 -0
  45. package/components/fqa-switcher/index.vue +94 -0
  46. package/components/fqa-table/index.vue +42 -0
  47. package/components/fqa-table/modify.less +56 -0
  48. package/components/fqa-text/index.vue +58 -0
  49. package/components/fqa-welcome/index.vue +29 -0
  50. package/components/fqa-worcha/index.vue +107 -0
  51. package/components/fqa-worry/index.vue +148 -0
  52. package/index.js +20 -0
  53. package/package.json +9 -0
@@ -0,0 +1,130 @@
1
+ <style lang="less" scoped>
2
+ .fqa-boxer {
3
+ & {
4
+ position: relative;
5
+ }
6
+
7
+ &-container {
8
+ width: 240px;
9
+ padding: @atom;
10
+ position: absolute;
11
+ bottom: 0;
12
+ left: 0;
13
+ right: 0;
14
+ z-index: -1;
15
+ opacity: 0;
16
+ transition: all @fast;
17
+ background-color: @color-app;
18
+ border-radius: @atom;
19
+ overflow: hidden;
20
+
21
+ &.keep {
22
+ bottom: calc(100% + @atom);
23
+ opacity: 1;
24
+ z-index: 1;
25
+ }
26
+ }
27
+
28
+ &-button {
29
+ position: relative;
30
+ z-index: 1;
31
+ }
32
+
33
+ &-item {
34
+ display: flex;
35
+ gap: @atom;
36
+ line-height: @vast;
37
+ padding-inline: @gap;
38
+ transition: all @fast;
39
+ border-radius: @atom;
40
+ cursor: pointer;
41
+ background-color: transparent;
42
+
43
+ &:active,
44
+ &:hover {
45
+ background-color: darken(@color-app, 5%);
46
+ }
47
+ }
48
+ }
49
+ </style>
50
+
51
+ <template>
52
+ <div class="fqa-boxer">
53
+ <!-- Container -->
54
+ <div :class="{ 'fqa-boxer-container': true, keep: visible }">
55
+ <div class="fqa-boxer-item" v-if="false">
56
+ <fqa-icon icon="UserOutlined" />
57
+ <span>{{ $t('account.profile') }}</span>
58
+ </div>
59
+ <div class="fqa-boxer-item" @click.stop="logout">
60
+ <fqa-icon icon="PoweroffOutlined" />
61
+ <span>{{ $t('account.logout') }}</span>
62
+ </div>
63
+ </div>
64
+
65
+ <!-- Button -->
66
+ <!-- <fqa-button class="fqa-boxer-button" justify="flex-start" :keep="visible" :width="240" :height="40" :instance="4" hover="#2a2b2c" @click.stop="visible = !visible" @touchend.prevent="visible = !visible"> -->
67
+ <fqa-button class="fqa-boxer-button" justify="flex-start" :keep="visible" :width="240" :height="40" :instance="4" hover="#2a2b2c" @click.stop="visible = !visible">
68
+ <a-space>
69
+ <a-avatar :size="32" :src="app.user.avatar">{{ app.user.nickname?.charAt(0) }}</a-avatar>
70
+ <a-space>
71
+ <div>{{ app.user.nickname }}</div>
72
+ </a-space>
73
+ </a-space>
74
+ </fqa-button>
75
+ </div>
76
+ </template>
77
+
78
+ <script>
79
+ export default {
80
+ data() {
81
+ return {
82
+ visible: false,
83
+ };
84
+ },
85
+
86
+ methods: {
87
+ handler(e) {
88
+ if (!this.$el.contains(e.target)) {
89
+ this.visible = false;
90
+ }
91
+ },
92
+
93
+ async logout() {
94
+ // Remove Token
95
+ await this.$store.dispatch('app/LOGOUT');
96
+
97
+ // Set Route
98
+ const route = { name: 'login' };
99
+
100
+ // For Web
101
+ this.$util.message.send({ route }, () => {
102
+ // For MNP
103
+ this.$router.push(route);
104
+ });
105
+ },
106
+ },
107
+
108
+ created() {
109
+ // Polling for Sync Info
110
+ this.$util.polling(async () => {
111
+ // Get Token
112
+ const token = localStorage.getItem('token');
113
+
114
+ // No Token No Check
115
+ if (token) {
116
+ // 1. Get User Info
117
+ await this.$store.dispatch('app/TOKEN_CHECK');
118
+ }
119
+ });
120
+ },
121
+
122
+ mounted() {
123
+ document.addEventListener('click', this.handler);
124
+ },
125
+
126
+ beforeUnmount() {
127
+ document.removeEventListener('click', this.handler);
128
+ },
129
+ };
130
+ </script>
@@ -0,0 +1,105 @@
1
+ <style lang="less" scoped>
2
+ .fqa-button {
3
+ & {
4
+ display: flex;
5
+ justify-content: var(--fqa-button-justify);
6
+ align-items: var(--fqa-button-align);
7
+ padding-inline: var(--fqa-button-instance);
8
+ color: var(--fqa-button-color);
9
+
10
+ cursor: pointer;
11
+ transition: all @fast;
12
+ }
13
+
14
+ &.keep {
15
+ color: var(--fqa-button-text);
16
+ background-color: var(--fqa-button-hover);
17
+ }
18
+
19
+ &:hover {
20
+ color: var(--fqa-button-text);
21
+ background-color: var(--fqa-button-hover);
22
+ }
23
+ }
24
+ </style>
25
+
26
+ <template>
27
+ <div
28
+ :class="{ 'fqa-button': true, keep }"
29
+ :style="{
30
+ width: `${size || width}px`,
31
+ height: `${size || height}px`,
32
+ '--fqa-button-color': color,
33
+ 'border-radius': `${radius}px`,
34
+ border: `1px solid ${border}`,
35
+ '--fqa-button-text': text,
36
+ '--fqa-button-hover': hover,
37
+ '--fqa-button-instance': `${instance}px`,
38
+ '--fqa-button-justify': justify,
39
+ '--fqa-button-align': align,
40
+ }"
41
+ >
42
+ <slot />
43
+ </div>
44
+ </template>
45
+
46
+ <script>
47
+ export default {
48
+ props: {
49
+ keep: {
50
+ type: Boolean,
51
+ default: false,
52
+ },
53
+ size: {
54
+ type: [Number, String],
55
+ default: 0,
56
+ },
57
+ width: {
58
+ type: [Number, String],
59
+ default: 40,
60
+ },
61
+ height: {
62
+ type: [Number, String],
63
+ default: 40,
64
+ },
65
+ radius: {
66
+ type: [Number, String],
67
+ default: 6,
68
+ },
69
+ text: {
70
+ type: String,
71
+ default: '#484848',
72
+ },
73
+ color: {
74
+ type: String,
75
+ default: '#484848',
76
+ },
77
+ hover: {
78
+ type: String,
79
+ default: 'transparent',
80
+ },
81
+ border: {
82
+ type: String,
83
+ default: 'transparent',
84
+ },
85
+ instance: {
86
+ type: Number,
87
+ default: 0,
88
+ },
89
+ justify: {
90
+ type: String,
91
+ default: 'center',
92
+ },
93
+ align: {
94
+ type: String,
95
+ default: 'center',
96
+ },
97
+ },
98
+
99
+ methods: {
100
+ onClick() {
101
+ this.$emit('click');
102
+ },
103
+ },
104
+ };
105
+ </script>
@@ -0,0 +1,47 @@
1
+ <style lang="less" scoped>
2
+ /**
3
+ * Assist Control
4
+ * ======== ======== ========
5
+ */
6
+ .FinQA--Assist--Control {
7
+ @distance: calc(@size-menu / 2);
8
+
9
+ & {
10
+ position: fixed;
11
+ top: @distance;
12
+ left: @distance;
13
+ z-index: 9;
14
+ }
15
+
16
+ &.open {
17
+ left: calc(@size-assist - @size-header + @distance);
18
+ }
19
+ }
20
+ </style>
21
+
22
+ <template>
23
+ <fqa-button :class="{ open, 'FinQA--Assist--Control': true }" :width="40" :height="40" text="#ffffff" hover="#a8a8a8" @click="handler">
24
+ <fqa-icon :icon="icon" :size="20" cursor="pointer" />
25
+ </fqa-button>
26
+ </template>
27
+
28
+ <script>
29
+ export default {
30
+ computed: {
31
+ open() {
32
+ return this.adapter.assist.type;
33
+ },
34
+
35
+ icon() {
36
+ return this.open ? 'MenuFoldOutlined' : 'MenuUnfoldOutlined';
37
+ },
38
+ },
39
+
40
+ methods: {
41
+ handler() {
42
+ const { type } = this.adapter.assist;
43
+ this.$store.dispatch('adapter/STATE_UPDATE', { assist: { type: !type } });
44
+ },
45
+ },
46
+ };
47
+ </script>
@@ -0,0 +1,49 @@
1
+ <template>
2
+ <a-modal v-model:open="visual" title="Debugging" :footer="null">
3
+ <a-form autocomplete="off">
4
+ <a-form-item v-for="(item, key) in parts" :label="key">
5
+ {{ item.type }}
6
+ <a-switch v-model:checked="item.type" />
7
+ </a-form-item>
8
+ </a-form>
9
+ </a-modal>
10
+ </template>
11
+
12
+ <script>
13
+ export default {
14
+ data() {
15
+ return {
16
+ visual: false,
17
+
18
+ parts: {},
19
+ };
20
+ },
21
+
22
+ watch: {
23
+ adapter: {
24
+ handler(parts) {
25
+ this.parts = parts;
26
+ },
27
+
28
+ deep: true,
29
+ immediate: true,
30
+ },
31
+ },
32
+
33
+ methods: {
34
+ keyboardHandler(e) {
35
+ if (e.altKey && e.which === 68) {
36
+ this.visual = !this.visual;
37
+ }
38
+ },
39
+ },
40
+
41
+ mounted() {
42
+ window.addEventListener('keydown', this.keyboardHandler);
43
+ },
44
+
45
+ beforeUnmount() {
46
+ window.removeEventListener('keydown', this.keyboardHandler);
47
+ },
48
+ };
49
+ </script>
@@ -0,0 +1,65 @@
1
+ <style lang="less" scoped>
2
+ .fqa-download {
3
+ &-board {
4
+ position: fixed;
5
+ top: 0;
6
+ left: 0;
7
+ right: 0;
8
+ bottom: 0;
9
+ background-repeat: no-repeat;
10
+ background-position: top right;
11
+ background-size: 50% 50%;
12
+ background-color: rgba(0, 0, 0, 0.5);
13
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAMAAADDpiTIAAAAsVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+3mHKcAAAAOnRSTlMA+xTR94XeCxkd7yJD4/PrsQePVcGIcCe7tWdeeASbETrnrGssgltQSzHH1dnOyw+WYn6jp58/NXRI0UcK0wAAF4NJREFUeNrs1MFKQlEYReFjer1FRDVQCiScNJNIceL//g/mHoioeMGhstb3CnuxmyRJkiRJkiRJkiRJugP9cr2Ybea75yaefv01qYPV72sTyufmvU6NtiZAspzWpcmiiWI+qiu++yaErq77e2oC6GrI2AIAsr8FgGV/CwDL/hYAlv0tACz7WwBY9rcAsOxvAWDZ3wLAsr8FgGV/CwDL/hYAlv0tACz7WwBY9rcAsOxvAWDZ3wLAsr8FgGV/CwDL/hYAlv0tACz7WwBY9rcAsOxvAWDZ3wLAsr8FgGV/CwDL/hYAlv0tACz7WwBYV2EBWIf9LQDquL8FIJ3sbwFAZ/tbAM6szlgAzC37/49rwMebBTy2W/7/p61qQPcytYBHtmfnTrTSBqMgAE96wqLBsCayCwIugBZQW5n3f7Au9By63RJuNfon93uFmUxMfkOy/CGmPIM1wGUJ88eYgj6sAQ5Lmj+qFDzDGuCuJPmv8E1IQQxrgLOS5w+fgi6sAa5Kkn8DO5SsYQ1w1DH51ynpwRrgpmPyR4mSJqwBTjoqf3yg5BrWABcdlz/KlNzAGuCgiIdF2Aso2WIvsHMBRxSOzB/nlIwA2wDXRDysgJ9NKbkFbAMck/j63xtREgC2AW5R5I8tJWVYA9yiyR9NSkqwBjhFlT/WFHiANcAlSfLf4A8xBSGsAS6JdPljQ8EYO/Ys4IRYmT8aFCzxN0GRB83rMCmreDyoj78ZUnAHaDdgCJOuQVF5/QOXFLQA9QZ8gklVV50/OhR0oG9ACyZVCx7yDMGcgkcA6rvALUyKAh7S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);
14
+
15
+ transition: opacity @fast;
16
+
17
+ opacity: 0;
18
+ z-index: -10000;
19
+
20
+ &.visible {
21
+ opacity: 1;
22
+ z-index: 10000;
23
+ }
24
+ }
25
+ }
26
+ </style>
27
+
28
+ <template>
29
+ <span class="fqa-download" @click="download">
30
+ <slot />
31
+ <div class="fqa-download-board" :class="{ visible }" ref="board" @click.stop="close"></div>
32
+ </span>
33
+ </template>
34
+
35
+ <script>
36
+ export default {
37
+ props: {
38
+ src: {
39
+ type: [String],
40
+ default: '',
41
+ },
42
+ },
43
+
44
+ data() {
45
+ return {
46
+ visible: false,
47
+ };
48
+ },
49
+
50
+ methods: {
51
+ async download() {
52
+ if (this.app) {
53
+ this.visible = true;
54
+ return await this.$util.copy(this.src);
55
+ }
56
+
57
+ this.$util.download(this.src);
58
+ },
59
+
60
+ close() {
61
+ this.visible = false;
62
+ },
63
+ },
64
+ };
65
+ </script>
@@ -0,0 +1,25 @@
1
+ <style lang="less" scoped>
2
+ .fqa-footer {
3
+ & {
4
+ font-size: 12px;
5
+ flex: 1;
6
+ }
7
+
8
+ .notice {
9
+ color: @color-subtext;
10
+ }
11
+ }
12
+ </style>
13
+
14
+ <template>
15
+ <a-flex class="fqa-footer" justify="center">
16
+ <a-space :size="4" class="notice">
17
+ <fqa-icon icon="ExclamationCircleOutlined" />
18
+ <span>{{ $t('replenish.tip') }}</span>
19
+ </a-space>
20
+ </a-flex>
21
+ </template>
22
+
23
+ <script>
24
+ export default {};
25
+ </script>
@@ -0,0 +1,60 @@
1
+ <style lang="less">
2
+ .fqa-fullscreen {
3
+ .ant-modal {
4
+ max-width: 100%;
5
+ top: 0;
6
+ padding-bottom: 0;
7
+ margin: 0;
8
+ }
9
+ .ant-modal-content {
10
+ display: flex;
11
+ flex-direction: column;
12
+ height: calc(100vh);
13
+ background-color: transparent !important;
14
+ box-shadow: none !important;
15
+ overflow: auto;
16
+ }
17
+ .ant-modal-body {
18
+ flex: 1;
19
+ display: flex;
20
+ justify-content: center;
21
+ align-items: center;
22
+ }
23
+
24
+ .ant-modal-close {
25
+ background-color: white;
26
+ }
27
+ }
28
+ </style>
29
+
30
+ <template>
31
+ <a-modal class="fqa-fullscreen" v-model:open="open" width="100%" :footer="null" :z-index="10" wrap-class-name="fqa-fullscreen">
32
+ <div class="markdown-body">
33
+ <slot />
34
+ </div>
35
+ </a-modal>
36
+ </template>
37
+
38
+ <script>
39
+ export default {
40
+ props: {
41
+ visible: {
42
+ type: Boolean,
43
+ default: false,
44
+ },
45
+ },
46
+
47
+ emits: ['update:visible'],
48
+
49
+ computed: {
50
+ open: {
51
+ get() {
52
+ return this.visible;
53
+ },
54
+ set(value) {
55
+ this.$emit('update:visible', value);
56
+ },
57
+ },
58
+ },
59
+ };
60
+ </script>
@@ -0,0 +1,10 @@
1
+ <style lang="less" scoped>
2
+ .fqa-gap {
3
+ width: @gap;
4
+ height: @gap;
5
+ }
6
+ </style>
7
+
8
+ <template>
9
+ <div class="fqa-gap"></div>
10
+ </template>
@@ -0,0 +1,105 @@
1
+ <style lang="less" scoped>
2
+ .fqa-header {
3
+ & {
4
+ flex: 1;
5
+ display: flex;
6
+
7
+ // transition: all @fast;
8
+ // background: url(@/assets/title.png) center / 36% no-repeat;
9
+ }
10
+
11
+ &.close {
12
+ margin-left: calc(@size-menu + 20px);
13
+ transition-delay: @fast;
14
+ }
15
+
16
+ h1 {
17
+ line-height: 20px;
18
+ font-size: 1.75rem;
19
+ font-weight: normal;
20
+ margin-bottom: 0;
21
+ padding-left: 0;
22
+ transition: all @fast;
23
+ }
24
+
25
+ .fqa-popover-open {
26
+ transform: rotate(-90deg);
27
+ }
28
+
29
+ &-tools {
30
+ & {
31
+ width: 60px;
32
+ justify-content: flex-end;
33
+ }
34
+
35
+ &-icon {
36
+ cursor: pointer !important;
37
+ transition: all @flash;
38
+
39
+ &:hover {
40
+ color: @color-primary !important;
41
+ }
42
+ }
43
+ }
44
+ }
45
+
46
+ .fqa-setting {
47
+ &:hover {
48
+ color: @color-retext;
49
+ }
50
+ }
51
+ </style>
52
+
53
+ <template>
54
+ <a-flex :class="{ 'fqa-header': true, close: !adapter.assist.type }" justify="space-between" align="center">
55
+ <!-- Title -->
56
+ <h1>{{ sseengine.info.title }}</h1>
57
+
58
+ <!-- Poping -->
59
+ <a-popover v-if="pop" class="fqa-setting" overlay-class-name="fqa-popover" dropdown-class-name="fqa-dropdown" v-model:open="visible" placement="bottomRight" trigger="click">
60
+ <!-- Options -->
61
+ <template #content>
62
+ <div class="fqa-popover-container">
63
+ <fqa-selection v-for="(param, index) in sseengine.presets" :key="index" v-bind="param" v-model="sseengine.options[param.field_name]" />
64
+ </div>
65
+ </template>
66
+
67
+ <!-- Setting -->
68
+ <fqa-button :size="40" :radius="40" hover="#a8a8a8" v-if="false">
69
+ <fqa-icon :class="{ 'fqa-popover-open': visible }" icon="SettingOutlined" :size="20" />
70
+ </fqa-button>
71
+ </a-popover>
72
+
73
+ <!-- Tools -->
74
+ <a-space class="fqa-header-tools" :class="{ notouch: sseengine.produce || sseengine.editable }" v-if="sseengine.info.title && !app.mobile && app.online">
75
+ <!-- Share -->
76
+ <fqa-icon class="fqa-header-tools-icon" icon="ShareAltOutlined" :size="20" @click="change" />
77
+ </a-space>
78
+ </a-flex>
79
+ </template>
80
+
81
+ <script>
82
+ export default {
83
+ data() {
84
+ return {
85
+ visible: false,
86
+ };
87
+ },
88
+
89
+ computed: {
90
+ pop() {
91
+ return this.app.admin && this.sseengine.presets?.length;
92
+ },
93
+ },
94
+
95
+ methods: {
96
+ async change() {
97
+ // Mode Change
98
+ await this.$store.dispatch('sseengine/SNAP_MODE');
99
+
100
+ // Choosen All
101
+ await this.$store.dispatch('sseengine/SNAP_ALL');
102
+ },
103
+ },
104
+ };
105
+ </script>
@@ -0,0 +1,48 @@
1
+ .fqa-popover {
2
+ .ant-popover-arrow {
3
+ right: 12px;
4
+ // --antd-arrow-background-color: @color-assist;
5
+ }
6
+
7
+ .ant-popover-inner {
8
+ // background-color: @color-assist;
9
+ }
10
+
11
+ .ant-select-selector {
12
+ // background-color: @color-input;
13
+ }
14
+
15
+ .ant-select-focused {
16
+ .ant-select-selector {
17
+ box-shadow: 0 0 0 2px rgba(167, 168, 169, 0.1) !important;
18
+ }
19
+ }
20
+
21
+ .ant-form-item {
22
+ margin-bottom: @unit;
23
+ }
24
+
25
+ .ant-form-item-row {
26
+ flex-direction: column;
27
+ align-items: flex-start;
28
+ }
29
+
30
+ .ant-form-item-control {
31
+ width: 100%;
32
+ }
33
+
34
+ .ant-form-item-label label,
35
+ .ant-select-open .ant-select-selection-item {
36
+ // color: @color-text;
37
+ }
38
+
39
+ .ant-select-selector {
40
+ // color: @color-text;
41
+ // border-color: darken(@color-input, 2%) !important;
42
+ // background-color: @color-input !important;
43
+ }
44
+
45
+ &-container {
46
+ width: 240px;
47
+ }
48
+ }
@@ -0,0 +1,36 @@
1
+ <style lang="less" scoped>
2
+ .fqa-icon {
3
+ transition: all @effect;
4
+ }
5
+ </style>
6
+
7
+ <template>
8
+ <component class="fqa-icon" :is="icon" :style="{ fontSize: `${size}px`, color, cursor, transitionDuration: `${duration}s` }" />
9
+ </template>
10
+
11
+ <script>
12
+ export default {
13
+ props: {
14
+ icon: {
15
+ type: String,
16
+ default: '',
17
+ },
18
+ size: {
19
+ type: [Number, String],
20
+ default: 14,
21
+ },
22
+ color: {
23
+ type: String,
24
+ default: 'inherit',
25
+ },
26
+ cursor: {
27
+ type: String,
28
+ default: 'default',
29
+ },
30
+ duration: {
31
+ type: [Number, String],
32
+ default: 0.36,
33
+ },
34
+ },
35
+ };
36
+ </script>