@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,47 @@
1
+ <style lang="less">
2
+ .fqa-input {
3
+ &.dark {
4
+ color: @color-text;
5
+ border: 1px solid @color-line;
6
+ background-color: darken(@color-app, 5%);
7
+
8
+ &:focus {
9
+ box-shadow: 0 0 0 2px darken(@color-line, 10%);
10
+ }
11
+ }
12
+
13
+ &::placeholder {
14
+ color: darken(@color-text, 30%);
15
+ }
16
+
17
+ &:focus {
18
+ &::placeholder {
19
+ color: darken(@color-text, 50%);
20
+ }
21
+ }
22
+ }
23
+ </style>
24
+
25
+ <template>
26
+ <a-input class="fqa-input" :class="{ [theme]: true }" :value="modelValue" @blur="$emit('blur', $event)" @focus="$emit('focus', $event)" @update:value="value => $emit('update:value', value)" />
27
+ </template>
28
+
29
+ <script>
30
+ export default {
31
+ name: 'fqa-input',
32
+
33
+ props: {
34
+ modelValue: {
35
+ type: [String, Number],
36
+ default: '',
37
+ },
38
+
39
+ theme: {
40
+ type: [String],
41
+ default: 'dark',
42
+ },
43
+ },
44
+
45
+ emits: ['update:value', 'blur', 'focus'],
46
+ };
47
+ </script>
@@ -0,0 +1,184 @@
1
+ <style lang="less" scoped>
2
+ .fqa-link {
3
+ color: @color-text;
4
+
5
+ &[href]:not([href='javascript:void(0)']) {
6
+ color: @color-primary;
7
+
8
+ &:active,
9
+ &:hover {
10
+ color: @color-professor;
11
+ }
12
+ }
13
+ }
14
+ </style>
15
+
16
+ <template>
17
+ <template v-if="clip">
18
+ <a class="fqa-link" href="javascript:void(0)" v-clipboard:copy="link" v-clipboard:success="copyHandler">
19
+ <slot />
20
+ </a>
21
+ </template>
22
+
23
+ <template v-else>
24
+ <template v-if="!isCompliant">
25
+ <a class="fqa-link" :href="link" :target="link === `javascript:void(0)` ? '_self' : '_blank'">
26
+ <slot />
27
+ </a>
28
+ </template>
29
+
30
+ <template v-else-if="mode === 'launch'">
31
+ <a class="fqa-link" href="javascript:void(0);" @click="launcher">
32
+ <slot />
33
+ </a>
34
+ </template>
35
+
36
+ <template v-else-if="mode === 'aovery'">
37
+ <a class="fqa-link" href="javascript:void(0);" @click="aoverier">
38
+ <slot />
39
+ </a>
40
+ </template>
41
+
42
+ <template v-else>
43
+ <a class="fqa-link" :href="link" :target="href ? target : `_self`" @click="handler">
44
+ <slot />
45
+ </a>
46
+ </template>
47
+ </template>
48
+ </template>
49
+
50
+ <script>
51
+ export default {
52
+ props: {
53
+ href: {
54
+ type: [String],
55
+ default: '',
56
+ },
57
+
58
+ target: {
59
+ type: [String],
60
+ default: 'self',
61
+ },
62
+
63
+ clip: {
64
+ type: [Boolean],
65
+ default: false,
66
+ },
67
+
68
+ mode: {
69
+ type: [String],
70
+ default: '',
71
+ },
72
+
73
+ proxy: {
74
+ type: [Object],
75
+ default: {},
76
+ },
77
+ },
78
+
79
+ data() {
80
+ return {
81
+ origin: `omni-data-crafter-s3.cn-sh2.ufileos.com`,
82
+ domain: `s3.billionsintelligence.com`,
83
+ };
84
+ },
85
+
86
+ computed: {
87
+ link() {
88
+ return this.parse(this.href) || 'javascript:void(0)';
89
+ },
90
+
91
+ isCompliant() {
92
+ return new RegExp(`${this.origin}|${this.domain}`).test(this.href);
93
+ },
94
+ },
95
+
96
+ methods: {
97
+ parse(url) {
98
+ url = url.replace(/^http:/, 'https:');
99
+ url = url.replace(this.origin, this.domain);
100
+
101
+ return decodeURIComponent(url);
102
+ },
103
+
104
+ handler(e) {
105
+ if (this.clip) {
106
+ return (e.preventDefault(), false);
107
+ }
108
+ },
109
+
110
+ async launcher(e) {
111
+ // No Href No Link
112
+ if (!this.href) {
113
+ return;
114
+ }
115
+
116
+ // Get Query for PDF
117
+ const mode = /\.pdf/.test(this.href) ? 'pdf' : 'web';
118
+
119
+ // Get Address
120
+ const options = {
121
+ url: this.$util.pro(this.href),
122
+ query: this.proxy,
123
+ mode,
124
+ };
125
+
126
+ const { launch_key } = await this.$store.dispatch('chat/LAUNCH_TOKEN', options);
127
+
128
+ await this.$store.dispatch('chat/LAUNCH_UPDATE', { ...options, launch_key });
129
+ await this.$store.dispatch('adapter/STATE_UPDATE', { sider: { type: true } });
130
+ },
131
+
132
+ async aoverier(e) {
133
+ // No Href No Link
134
+ if (!this.href) {
135
+ return;
136
+ }
137
+
138
+ // Get Query for PDF
139
+ // const mode = /\.pdf/.test(this.href) ? 'pdf' : 'web';
140
+ const ext = this.$util.path.extname(this.href.replace(/\?.*/, ''));
141
+
142
+ // Set Mode
143
+ let mode;
144
+
145
+ switch (ext) {
146
+ case '.pdf':
147
+ mode = 'pdf';
148
+ break;
149
+
150
+ case '.csv':
151
+ mode = 'csv';
152
+ break;
153
+
154
+ case '.md':
155
+ mode = 'md';
156
+ break;
157
+
158
+ default:
159
+ mode = 'web';
160
+ break;
161
+ }
162
+
163
+ // Get Address
164
+ const options = {
165
+ url: this.$util.pro(this.href),
166
+ query: this.proxy,
167
+ mode,
168
+ };
169
+
170
+ const { launch_key } = await this.$store.dispatch('chat/LAUNCH_TOKEN', options);
171
+
172
+ await this.$store.dispatch('chat/LAUNCH_UPDATE', { ...options, launch_key });
173
+ await this.$store.dispatch('adapter/STATE_UPDATE', { aovery: { type: true } });
174
+ },
175
+
176
+ copyHandler(e) {
177
+ this.$util.toast.success('已复制到剪贴板,请至浏览器打开');
178
+
179
+ // In Uni
180
+ // ??
181
+ },
182
+ },
183
+ };
184
+ </script>
@@ -0,0 +1,61 @@
1
+ <style lang="less" scoped>
2
+ .fqa-lister {
3
+ &,
4
+ &-item {
5
+ gap: @gap;
6
+ display: flex;
7
+ }
8
+
9
+ & {
10
+ flex-direction: column;
11
+ }
12
+
13
+ &-item {
14
+ flex-direction: row;
15
+ }
16
+
17
+ &-head {
18
+ width: @size-header / 2;
19
+ }
20
+
21
+ &-content {
22
+ flex: 1;
23
+ }
24
+
25
+ &-think {
26
+ opacity: 0.75;
27
+ }
28
+ }
29
+ </style>
30
+
31
+ <template>
32
+ <div class="fqa-lister">
33
+ <div class="fqa-lister-item" v-for="(item, index) in source" :key="index">
34
+ <div class="fqa-lister-head">
35
+ <slot name="head" :item="item" :index="index" />
36
+ </div>
37
+ <div class="fqa-lister-content">
38
+ <slot name="item" :item="item" :index="index" />
39
+ </div>
40
+ </div>
41
+ <!--
42
+ <div class="fqa-lister-item fqa-lister-think">
43
+ <div class="fqa-lister-head">
44
+ <slot name="think" />
45
+ </div>
46
+ <div class="fqa-lister-content">正在思考 ...</div>
47
+ </div>
48
+ -->
49
+ </div>
50
+ </template>
51
+
52
+ <script>
53
+ export default {
54
+ props: {
55
+ source: {
56
+ type: [Array],
57
+ default: [],
58
+ },
59
+ },
60
+ };
61
+ </script>
@@ -0,0 +1,34 @@
1
+ <style lang="less" scoped>
2
+ .fqa-logo {
3
+ display: inline-block;
4
+ border: 1px solid @color-line;
5
+ background: linear-gradient(315deg, #eeeeee 0%, #ffffff 100%);
6
+ }
7
+ </style>
8
+
9
+ <template>
10
+ <span class="fqa-logo" :style="{ ...css }">
11
+ <a-avatar :size="120" :src="$util.uri(`logo.png`)" />
12
+ </span>
13
+ </template>
14
+
15
+ <script>
16
+ export default {
17
+ props: {
18
+ size: {
19
+ type: [String, Number],
20
+ default: 18,
21
+ },
22
+ },
23
+
24
+ computed: {
25
+ css() {
26
+ return {
27
+ padding: `${this.size * 1}px`,
28
+ borderRadius: `${this.size * 20}px`,
29
+ boxShadow: `0 ${this.size * 2}px ${this.size * 1}px rgba(0, 0, 0, 0.1)`,
30
+ };
31
+ },
32
+ },
33
+ };
34
+ </script>
@@ -0,0 +1,109 @@
1
+ <style lang="less" scoped>
2
+ .markdown-body {
3
+ width: 100%;
4
+ }
5
+ </style>
6
+
7
+ <style lang="less">
8
+ .markdown-body {
9
+ &.mobile {
10
+ .markdown-table-ops {
11
+ display: none;
12
+ }
13
+ }
14
+
15
+ &.noneedtouch {
16
+ .markdown-table-ops {
17
+ display: none;
18
+ }
19
+
20
+ .markdown-notes-sup {
21
+ pointer-events: none;
22
+ }
23
+ }
24
+ }
25
+ </style>
26
+
27
+ <template>
28
+ <div class="markdown-body" :class="{ mobile: app.mobile, noneedtouch: sseengine.mode === 'snap' || sseengine.editable }" ref="markdown" v-html="markdown" :data-html="html" />
29
+ </template>
30
+
31
+ <script>
32
+ export default {
33
+ props: {
34
+ html: {
35
+ type: String,
36
+ default: '',
37
+ },
38
+
39
+ id: {
40
+ type: String,
41
+ default: '',
42
+ },
43
+
44
+ trace: {
45
+ type: String,
46
+ default: '',
47
+ },
48
+
49
+ references: {
50
+ type: Array,
51
+ default: [],
52
+ },
53
+ },
54
+
55
+ computed: {
56
+ markdown() {
57
+ // Make Context
58
+ const context = this.$util.process(this.html, this.id, this.trace, this.references);
59
+
60
+ // Render Context
61
+ const result = this.$util.markdown({}).render(context);
62
+
63
+ // For Table OPS
64
+ this.$nextTick(() => {
65
+ this.opsAffix();
66
+ });
67
+
68
+ // Context
69
+ return result;
70
+ },
71
+ },
72
+
73
+ watch: {
74
+ markdown() {
75
+ this.render();
76
+ },
77
+ },
78
+
79
+ methods: {
80
+ render() {
81
+ // Animation for Markdown
82
+ // this.$util.print(this.$refs.markdown);
83
+ },
84
+
85
+ opsAffix() {
86
+ // Get OPS
87
+ const ops = this.$util.$(this.$refs.markdown).find('.markdown-table-ops');
88
+
89
+ // Looping
90
+ ops.each((index, item) => {
91
+ // Get Container
92
+ const body = Array.from(item.nextSibling.childNodes)
93
+ .filter(n => n.tagName === 'TBODY')
94
+ .shift();
95
+
96
+ // Get Space
97
+ const space = body.clientWidth;
98
+
99
+ // Set Space
100
+ item.style.width = `${space}px`;
101
+ });
102
+ },
103
+ },
104
+
105
+ mounted() {
106
+ this.render();
107
+ },
108
+ };
109
+ </script>
File without changes
@@ -0,0 +1,5 @@
1
+ .markdown-body {
2
+ table {
3
+ scrollbar-color: rgba(0, 0, 0, 0.1) transparent !important;
4
+ }
5
+ }
@@ -0,0 +1,76 @@
1
+ .markdown-table-ops {
2
+ & {
3
+ width: 100%;
4
+ height: 0;
5
+
6
+ display: flex;
7
+ justify-content: flex-end;
8
+
9
+ position: relative;
10
+ }
11
+
12
+ &-wrapper {
13
+ &:after {
14
+ content: ' ';
15
+
16
+ z-index: 10;
17
+ top: 0;
18
+ position: absolute;
19
+
20
+ width: 16px;
21
+ height: 16px;
22
+
23
+ transition: all @flash;
24
+ background-color: transparent;
25
+ }
26
+
27
+ svg {
28
+ font-size: 16px;
29
+ flex: 1;
30
+ cursor: pointer;
31
+ transition: all @flash;
32
+ }
33
+
34
+ & {
35
+ z-index: 9;
36
+ top: 6px;
37
+ left: -35px;
38
+ // right: 6px;
39
+ position: absolute;
40
+ opacity: 0.6;
41
+
42
+ overflow: hidden;
43
+ display: flex;
44
+ flex-direction: column;
45
+ gap: 4px;
46
+
47
+ cursor: pointer;
48
+ transition: all @flash;
49
+
50
+ width: 24px;
51
+ height: 24px;
52
+ border-radius: 24px;
53
+
54
+ padding: 3px;
55
+
56
+ color: @color-app;
57
+ border: 1px solid @color-professor;
58
+ background-color: @color-professor;
59
+ }
60
+
61
+ &:hover {
62
+ height: 108px;
63
+ opacity: 1;
64
+
65
+ &:after {
66
+ top: -100%;
67
+ }
68
+ }
69
+ }
70
+ }
71
+
72
+ .fqa-drawer {
73
+ .markdown-table-ops {
74
+ display: none;
75
+ }
76
+ }
@@ -0,0 +1,42 @@
1
+ <style lang="less">
2
+ .FinQA--Assist--Mask {
3
+ & {
4
+ opacity: 0;
5
+
6
+ position: fixed;
7
+ top: 0;
8
+ left: 0;
9
+ right: 0;
10
+ bottom: 0;
11
+ z-index: -1;
12
+
13
+ transition: all @fast;
14
+ background-color: rgba(0, 0, 0, 0.1);
15
+ }
16
+
17
+ &.open {
18
+ opacity: 1;
19
+ z-index: 99;
20
+ }
21
+ }
22
+ </style>
23
+
24
+ <template>
25
+ <div :class="{ open, 'FinQA--Assist--Mask': true }" @click="handler" />
26
+ </template>
27
+
28
+ <script>
29
+ export default {
30
+ computed: {
31
+ open() {
32
+ return this.app.mobile && this.adapter.assist.type;
33
+ },
34
+ },
35
+
36
+ methods: {
37
+ handler() {
38
+ this.$store.dispatch('adapter/STATE_UPDATE', { assist: { type: false } });
39
+ },
40
+ },
41
+ };
42
+ </script>
@@ -0,0 +1,44 @@
1
+ <style lang="less" scoped>
2
+ .fqa-pagination {
3
+ & {
4
+ display: flex;
5
+ padding: @gap;
6
+ }
7
+
8
+ &.left {
9
+ justify-content: flex-start;
10
+ }
11
+
12
+ &.right {
13
+ justify-content: flex-end;
14
+ }
15
+ }
16
+ </style>
17
+
18
+ <template>
19
+ <div class="fqa-pagination" :class="{ [align]: true }" v-if="total">
20
+ <a-pagination :current="current" :total="total" @change="(page, size) => $emit('change', { page, size })"></a-pagination>
21
+ </div>
22
+ <div v-else></div>
23
+ </template>
24
+
25
+ <script>
26
+ export default {
27
+ props: {
28
+ current: {
29
+ type: [Number],
30
+ default: 1,
31
+ },
32
+
33
+ total: {
34
+ type: [Number],
35
+ default: 0,
36
+ },
37
+
38
+ align: {
39
+ type: [String],
40
+ default: 'right',
41
+ },
42
+ },
43
+ };
44
+ </script>
@@ -0,0 +1,66 @@
1
+ .fqa-pagination {
2
+ .ant-pagination-item {
3
+ a {
4
+ color: @color-text;
5
+ }
6
+
7
+ &-ellipsis {
8
+ color: @color-text !important;
9
+ }
10
+ }
11
+
12
+ .ant-pagination-item-active {
13
+ background-color: @color-app;
14
+
15
+ &:hover {
16
+ a {
17
+ color: lighten(@color-text, 5%);
18
+ }
19
+ }
20
+ }
21
+
22
+ .ant-pagination-item-link {
23
+ color: @color-text !important;
24
+ }
25
+
26
+ .ant-select-selector {
27
+ color: @color-text !important;
28
+ border-color: lighten(@color-line, 5%) !important;
29
+ background-color: @color-app !important;
30
+ box-shadow: none !important;
31
+
32
+ &-search {
33
+ &:hover {
34
+ color: lighten(@color-text, 5%) !important;
35
+ }
36
+ }
37
+ }
38
+
39
+ .ant-select-arrow {
40
+ color: @color-text !important;
41
+ }
42
+
43
+ .ant-select-open {
44
+ .ant-select-selection-item {
45
+ color: @color-text !important;
46
+ }
47
+ }
48
+ }
49
+
50
+ .ant-select-dropdown {
51
+ border-color: lighten(@color-line, 5%);
52
+ background-color: @color-app;
53
+
54
+ .rc-virtual-list-holder-inner {
55
+ gap: @atom;
56
+ }
57
+
58
+ .ant-select-item-option {
59
+ color: darken(@color-text, 5%) !important;
60
+
61
+ &-selected {
62
+ color: @color-text !important;
63
+ background-color: darken(@color-app, 5%) !important;
64
+ }
65
+ }
66
+ }