sumor 1.3.0 → 2.0.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 (179) hide show
  1. package/.eslintignore +6 -0
  2. package/.eslintrc.yml +4 -0
  3. package/.gitattributes +1 -0
  4. package/.github/workflows/audit.yml +22 -0
  5. package/.github/workflows/available.yml +22 -0
  6. package/.github/workflows/ci.yml +45 -0
  7. package/.github/workflows/coverage.yml +23 -0
  8. package/.github/workflows/publish.yml +31 -0
  9. package/.github/workflows/ut.yml +24 -0
  10. package/.husky/pre-commit +10 -0
  11. package/.husky/pre-push +10 -0
  12. package/.prettierrc.yml +7 -0
  13. package/LICENSE +21 -0
  14. package/demo/api/error.js +3 -0
  15. package/demo/api/file.js +4 -0
  16. package/demo/api/file.yaml +11 -0
  17. package/demo/api/hello.js +4 -0
  18. package/demo/api/hello.yaml +13 -0
  19. package/demo/api/login.js +4 -0
  20. package/demo/api/logout.js +4 -0
  21. package/demo/api/long.js +9 -0
  22. package/demo/api/long.yaml +2 -0
  23. package/demo/api/user/admin.js +12 -0
  24. package/demo/api/user/info.js +8 -0
  25. package/demo/config/config.yaml +2 -0
  26. package/demo/i18n/demo.yaml +1 -0
  27. package/demo/package.json +6 -0
  28. package/i18n/README.md +32 -0
  29. package/i18n/sumor_api.yaml +16 -0
  30. package/i18n/sumor_app.yaml +3 -0
  31. package/i18n/sumor_internal.yaml +1 -0
  32. package/i18n/sumor_token.yaml +2 -0
  33. package/i18nExt/sumor_api.de.yaml +3 -0
  34. package/i18nExt/sumor_api.en.yaml +3 -0
  35. package/i18nExt/sumor_api.es.yaml +3 -0
  36. package/i18nExt/sumor_api.fr.yaml +3 -0
  37. package/i18nExt/sumor_api.it.yaml +3 -0
  38. package/i18nExt/sumor_api.ja.yaml +3 -0
  39. package/i18nExt/sumor_api.ko.yaml +3 -0
  40. package/i18nExt/sumor_api.pt.yaml +3 -0
  41. package/i18nExt/sumor_api.zh-TW.yaml +3 -0
  42. package/i18nExt/sumor_api.zh.yaml +3 -0
  43. package/i18nExt/sumor_app.de.yaml +3 -0
  44. package/i18nExt/sumor_app.en.yaml +3 -0
  45. package/i18nExt/sumor_app.es.yaml +3 -0
  46. package/i18nExt/sumor_app.zh-TW.yaml +3 -0
  47. package/i18nExt/sumor_app.zh.yaml +3 -0
  48. package/i18nExt/sumor_internal.de.yaml +1 -0
  49. package/i18nExt/sumor_internal.en.yaml +1 -0
  50. package/i18nExt/sumor_internal.es.yaml +1 -0
  51. package/i18nExt/sumor_internal.zh-TW.yaml +1 -0
  52. package/i18nExt/sumor_internal.zh.yaml +1 -0
  53. package/i18nExt/sumor_token.de.yaml +2 -0
  54. package/i18nExt/sumor_token.es.yaml +2 -0
  55. package/i18nExt/sumor_token.fr.yaml +2 -0
  56. package/i18nExt/sumor_token.it.yaml +2 -0
  57. package/i18nExt/sumor_token.ja.yaml +2 -0
  58. package/i18nExt/sumor_token.ko.yaml +2 -0
  59. package/i18nExt/sumor_token.pt.yaml +2 -0
  60. package/i18nExt/sumor_token.ru.yaml +2 -0
  61. package/i18nExt/sumor_token.tr.yaml +2 -0
  62. package/i18nExt/sumor_token.zh-TW.yaml +2 -0
  63. package/i18nExt/sumor_token.zh.yaml +2 -0
  64. package/jest.config.json +26 -0
  65. package/modules/alertPage/html/template.html +162 -0
  66. package/modules/alertPage/html/undraw_access-denied.svg +52 -0
  67. package/modules/alertPage/html/undraw_alert.svg +1 -0
  68. package/modules/alertPage/html/undraw_celebration.svg +78 -0
  69. package/modules/alertPage/html/undraw_complete-form.svg +1 -0
  70. package/modules/alertPage/html/undraw_login.svg +1 -0
  71. package/modules/alertPage/index.js +46 -0
  72. package/modules/alertPage/index.test.js +12 -0
  73. package/modules/i18n/README.md +90 -0
  74. package/modules/i18n/convertI18nValue/README.md +31 -0
  75. package/modules/i18n/convertI18nValue/getI18nTemplate.js +26 -0
  76. package/modules/i18n/convertI18nValue/getI18nTemplate.test.js +40 -0
  77. package/modules/i18n/convertI18nValue/index.js +14 -0
  78. package/modules/i18n/convertI18nValue/index.test.js +55 -0
  79. package/modules/i18n/convertI18nValue/stringVariableReplace.js +13 -0
  80. package/modules/i18n/convertI18nValue/stringVariableReplace.test.js +39 -0
  81. package/modules/i18n/index.js +26 -0
  82. package/modules/i18n/index.test.js +13 -0
  83. package/modules/i18n/load/README.md +28 -0
  84. package/modules/i18n/load/load.js +31 -0
  85. package/modules/i18n/load/load.test.js +30 -0
  86. package/modules/i18n/registry.js +48 -0
  87. package/modules/i18n/registry.test.js +84 -0
  88. package/modules/logger/convert/parseFile.js +14 -0
  89. package/modules/logger/convert/parseFile.test.js +28 -0
  90. package/modules/logger/convert/stringifyCMD.js +48 -0
  91. package/modules/logger/convert/stringifyCMD.test.js +37 -0
  92. package/modules/logger/convert/stringifyFile.js +24 -0
  93. package/modules/logger/convert/stringifyFile.test.js +79 -0
  94. package/modules/logger/index.js +82 -0
  95. package/modules/logger/index.test.js +124 -0
  96. package/modules/logger/logFileOperator.js +50 -0
  97. package/modules/logger/logFileOperator.test.js +69 -0
  98. package/modules/middlewares/apiMiddleware/errorCatcher.js +9 -0
  99. package/modules/middlewares/apiMiddleware/exposeApis/index.js +82 -0
  100. package/modules/middlewares/apiMiddleware/index.js +111 -0
  101. package/modules/middlewares/apiMiddleware/index.test.js +145 -0
  102. package/modules/middlewares/apiMiddleware/load/index.js +35 -0
  103. package/modules/middlewares/apiMiddleware/load/index.test.js +30 -0
  104. package/modules/middlewares/apiMiddleware/metadataToSwagger.js +139 -0
  105. package/modules/middlewares/apiMiddleware/prepareData/format/caseSensitive.js +26 -0
  106. package/modules/middlewares/apiMiddleware/prepareData/format/caseSensitive.test.js +36 -0
  107. package/modules/middlewares/apiMiddleware/prepareData/format/convertType.js +48 -0
  108. package/modules/middlewares/apiMiddleware/prepareData/format/convertType.test.js +53 -0
  109. package/modules/middlewares/apiMiddleware/prepareData/format/defaultValue.js +31 -0
  110. package/modules/middlewares/apiMiddleware/prepareData/format/defaultValue.test.js +31 -0
  111. package/modules/middlewares/apiMiddleware/prepareData/format/index.js +18 -0
  112. package/modules/middlewares/apiMiddleware/prepareData/format/index.test.js +40 -0
  113. package/modules/middlewares/apiMiddleware/prepareData/format/precision.js +12 -0
  114. package/modules/middlewares/apiMiddleware/prepareData/format/precision.test.js +33 -0
  115. package/modules/middlewares/apiMiddleware/prepareData/format/trim.js +15 -0
  116. package/modules/middlewares/apiMiddleware/prepareData/format/trim.test.js +24 -0
  117. package/modules/middlewares/apiMiddleware/prepareData/index.js +29 -0
  118. package/modules/middlewares/apiMiddleware/prepareData/index.test.js +121 -0
  119. package/modules/middlewares/apiMiddleware/prepareData/validate/checkLength.js +26 -0
  120. package/modules/middlewares/apiMiddleware/prepareData/validate/checkLength.test.js +52 -0
  121. package/modules/middlewares/apiMiddleware/prepareData/validate/index.js +30 -0
  122. package/modules/middlewares/apiMiddleware/public/favicon.ico +0 -0
  123. package/modules/middlewares/apiMiddleware/response/sendError.js +57 -0
  124. package/modules/middlewares/apiMiddleware/response/sendError.test.js +251 -0
  125. package/modules/middlewares/apiMiddleware/response/sendNotFound.js +26 -0
  126. package/modules/middlewares/apiMiddleware/response/sendResponse.js +25 -0
  127. package/modules/middlewares/apiMiddleware/response/sendSuccess.js +30 -0
  128. package/modules/middlewares/bodyMiddleware/cleanupFiles.js +14 -0
  129. package/modules/middlewares/bodyMiddleware/cleanupFiles.test.js +54 -0
  130. package/modules/middlewares/bodyMiddleware/fileParser.js +69 -0
  131. package/modules/middlewares/bodyMiddleware/fileParser.test.js +163 -0
  132. package/modules/middlewares/bodyMiddleware/index.js +12 -0
  133. package/modules/middlewares/bodyMiddleware/index.test.js +64 -0
  134. package/modules/middlewares/bodyMiddleware/mergeData.js +4 -0
  135. package/modules/middlewares/bodyMiddleware/mergeData.test.js +38 -0
  136. package/modules/middlewares/i18nMiddleware/index.js +82 -0
  137. package/modules/middlewares/i18nMiddleware/index.test.js +75 -0
  138. package/modules/middlewares/tokenMiddleware/Token.js +115 -0
  139. package/modules/middlewares/tokenMiddleware/Token.test.js +67 -0
  140. package/modules/middlewares/tokenMiddleware/index.js +32 -0
  141. package/modules/middlewares/tokenMiddleware/index.test.js +115 -0
  142. package/modules/middlewares/tokenMiddleware/parseCookie.js +24 -0
  143. package/modules/middlewares/tokenMiddleware/parseCookie.test.js +49 -0
  144. package/modules/serve/formatConfig.js +7 -0
  145. package/modules/serve/formatConfig.test.js +28 -0
  146. package/modules/serve/index.js +30 -0
  147. package/modules/serve/index.test.js +69 -0
  148. package/modules/serve/listenApp.js +11 -0
  149. package/modules/system/getSystemLanguage.js +9 -0
  150. package/modules/system/getSystemLanguage.test.js +19 -0
  151. package/modules/utils/getError.js +56 -0
  152. package/modules/utils/getError.test.js +97 -0
  153. package/modules/utils/loadConfig.js +73 -0
  154. package/modules/utils/loadConfig.test.js +129 -0
  155. package/modules/utils/pathUtils.js +43 -0
  156. package/modules/utils/pathUtils.test.js +52 -0
  157. package/modules/utils/type.js +14 -0
  158. package/modules/utils/type.test.js +40 -0
  159. package/package.json +61 -1
  160. package/src/app.js +40 -0
  161. package/src/cli.js +28 -0
  162. package/src/index.js +3 -0
  163. package/test-utils/codeTest/README.md +4 -0
  164. package/test-utils/codeTest/custom.css +47 -0
  165. package/test-utils/codeTest/index.js +80 -0
  166. package/test-utils/codeTest/utils/calculateCoverage.js +55 -0
  167. package/test-utils/codeTest/utils/getTestFiles.js +20 -0
  168. package/test-utils/codeTest/utils/runTests.js +38 -0
  169. package/test-utils/codeTest/utils/startServer.js +23 -0
  170. package/test-utils/tmp.js +15 -0
  171. package/cli.js +0 -3
  172. package/index.es.js +0 -578
  173. package/template/web/AppWithFrame.vue +0 -20
  174. package/template/web/index.html +0 -19
  175. package/template/web/src/App.vue +0 -15
  176. package/template/web/src/entry-client.js +0 -9
  177. package/template/web/src/entry-server.js +0 -69
  178. package/template/web/src/main.js +0 -41
  179. package/template/web/src/style.scss +0 -389
@@ -1,20 +0,0 @@
1
- <template>
2
- <Frame>
3
- <router-view v-slot="{ Component }">
4
- <Suspense>
5
- <component :is="Component" />
6
- </Suspense>
7
- </router-view>
8
- </Frame>
9
- </template>
10
- <script>
11
- import Frame from "../../../web/Frame.vue";
12
- export default {
13
- components: {
14
- Frame
15
- }
16
- };
17
- </script>
18
- <style lang="scss">
19
- @import "style";
20
- </style>
@@ -1,19 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <!--app-page-info-->
7
-
8
- <!--轻呈云图标-->
9
- <link rel="shortcut icon" href="https://s.sumor.com/icons/favicon.ico">
10
- <link rel="icon" type="image/png" sizes="16x16" href="https://s.sumor.com/icons/favicon-16x16.png">
11
- <link rel="icon" type="image/png" sizes="32x32" href="https://s.sumor.com/icons/favicon-32x32.png">
12
- <link rel="icon" type="image/png" sizes="48x48" href="https://s.sumor.com/icons/favicon-48x48.png">
13
- <!--preload-links-->
14
- </head>
15
- <body>
16
- <div id="app"><!--app-html--></div>
17
- <script type="module" src="/src/entry-client.js"></script>
18
- </body>
19
- </html>
@@ -1,15 +0,0 @@
1
- <template>
2
- <router-view v-slot="{ Component }">
3
- <Suspense>
4
- <component :is="Component" />
5
- </Suspense>
6
- </router-view>
7
- </template>
8
- <script>
9
- export default {
10
- components:{}
11
- }
12
- </script>
13
- <style lang="scss">
14
- @import "style";
15
- </style>
@@ -1,9 +0,0 @@
1
- import { createApp } from './main'
2
-
3
- createApp().then(({ app, router }) => {
4
- // wait until router is ready before mounting to ensure hydration match
5
- router.isReady().then(() => {
6
- app.mount('#app')
7
- })
8
- });
9
-
@@ -1,69 +0,0 @@
1
- import { basename } from 'node:path'
2
- import { renderToString } from 'vue/server-renderer'
3
- import { createApp } from './main'
4
-
5
- export async function render(url, manifest, ctx) {
6
- const { app, router } = await createApp()
7
-
8
- // set the router to the desired URL before rendering
9
- await router.push(url)
10
- await router.isReady()
11
-
12
- // passing SSR context object which will be available via useSSRContext()
13
- // @vitejs/plugin-vue injects code into a component's setup() that registers
14
- // itself on ctx.modules. After the render, ctx.modules would contain all the
15
- // components that have been instantiated during this render call.
16
- ctx = ctx || {};
17
- const html = await renderToString(app, ctx)
18
-
19
- // the SSR manifest generated by Vite contains module -> chunk/asset mapping
20
- // which we can then use to determine what files need to be preloaded for this
21
- // request.
22
- const preloadLinks = renderPreloadLinks(ctx.modules, manifest)
23
- return [html, preloadLinks]
24
- }
25
-
26
- function renderPreloadLinks(modules, manifest) {
27
- let links = ''
28
- const seen = new Set()
29
- modules.forEach((id) => {
30
- const files = manifest[id]
31
- if (files) {
32
- files.forEach((file) => {
33
- if (!seen.has(file)) {
34
- seen.add(file)
35
- const filename = basename(file)
36
- if (manifest[filename]) {
37
- for (const depFile of manifest[filename]) {
38
- links += renderPreloadLink(depFile)
39
- seen.add(depFile)
40
- }
41
- }
42
- links += renderPreloadLink(file)
43
- }
44
- })
45
- }
46
- })
47
- return links
48
- }
49
-
50
- function renderPreloadLink(file) {
51
- if (file.endsWith('.js')) {
52
- return `<link rel="modulepreload" crossorigin href="${file}">`
53
- } else if (file.endsWith('.css')) {
54
- return `<link rel="stylesheet" href="${file}">`
55
- } else if (file.endsWith('.woff')) {
56
- return ` <link rel="preload" href="${file}" as="font" type="font/woff" crossorigin>`
57
- } else if (file.endsWith('.woff2')) {
58
- return ` <link rel="preload" href="${file}" as="font" type="font/woff2" crossorigin>`
59
- } else if (file.endsWith('.gif')) {
60
- return ` <link rel="preload" href="${file}" as="image" type="image/gif">`
61
- } else if (file.endsWith('.jpg') || file.endsWith('.jpeg')) {
62
- return ` <link rel="preload" href="${file}" as="image" type="image/jpeg">`
63
- } else if (file.endsWith('.png')) {
64
- return ` <link rel="preload" href="${file}" as="image" type="image/png">`
65
- } else {
66
- // TODO
67
- return ''
68
- }
69
- }
@@ -1,41 +0,0 @@
1
- import { createPinia } from 'pinia'
2
- import { createSSRApp } from 'vue'
3
- import VueLazyload from 'vue-lazyload'
4
- import App from './App.vue'
5
- import {init} from "@sumor/ux";
6
- import {
7
- createRouter,
8
- createMemoryHistory,
9
- createWebHistory,
10
- } from 'vue-router'
11
- import routes from "../routes.js";
12
- import stores from "../stores.js";
13
- import env from "./env.js";
14
- // import sumor from "./sumor/index.js";
15
-
16
- // SSR requires a fresh app instance per request, therefore we export a function
17
- // that creates a fresh app instance. If using Vuex, we'd also be creating a
18
- // fresh store here.
19
- export async function createApp() {
20
- init();
21
- const app = createSSRApp(App)
22
- // sumor.init({reactive});
23
- // app.config.globalProperties.$sumor = sumor;
24
- const pinia = createPinia()
25
- app.use(pinia)
26
- const router = createRouter({
27
- // use appropriate history implementation for server/client
28
- // import.meta.env.SSR is injected by Vite.
29
- history: import.meta.env.SSR
30
- ? createMemoryHistory('/')
31
- : createWebHistory('/'),
32
- routes,
33
- });
34
- app.use(router);
35
- app.use(VueLazyload);
36
- app.config.globalProperties.$store = (name)=>{
37
- return stores[name]();
38
- };
39
- app.config.globalProperties.$env = env;
40
- return { app, router }
41
- }
@@ -1,389 +0,0 @@
1
- html{
2
- //--color-blue: #50a1ff;
3
- //--color-indigo: #6610f2;
4
- //--color-purple: #926dde;
5
- //--color-pink: #e83e8c;
6
- //--color-red: #ff4954;
7
- //--color-orange: #ffbe00;
8
- //--color-yellow: #ffba00;
9
- //--color-green: #3cd458;
10
- //--color-teal: #20c997;
11
- //--color-cyan: #17a2b8;
12
- //--color-white: #fff;
13
- //--color-gray: #868e96;
14
- //--color-gray-dark: #343a40;
15
- //--color-primary: #3f51b5;
16
- //--color-secondary: #e9ecf0;
17
- //--color-success: #3cd458;
18
- //--color-info: #926dde;
19
- //--color-warning: #ffba00;
20
- //--color-danger: #ff4954;
21
- //--color-light: #f8f9fa;
22
- //--color-dark: #273343;
23
- //--color-background: #f8f8f8;
24
- //--font-size: 14px;
25
- //--font-size-small: 12px;
26
- //--font-size-large: 16px;
27
- //--border-radius: 2px;
28
- }
29
- *{
30
- box-sizing: border-box;
31
- outline: none;
32
- }
33
- html,body {
34
- width: 100%;
35
- height: 100%
36
- }
37
-
38
- input::-ms-clear,input::-ms-reveal {
39
- display: none
40
- }
41
-
42
- *,*:before,*:after {
43
- box-sizing: border-box
44
- }
45
-
46
- html {
47
- font-family: sans-serif;
48
- line-height: 1.15;
49
- -webkit-text-size-adjust: 100%;
50
- -ms-text-size-adjust: 100%;
51
- -ms-overflow-style: scrollbar;
52
- -webkit-tap-highlight-color: rgba(0,0,0,0)
53
- }
54
-
55
- body {
56
- margin: 0;
57
- font-size: 14px;
58
- font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";
59
- font-variant: tabular-nums;
60
- line-height: 1.5715;
61
- font-feature-settings: "tnum";
62
- transition: background 1s cubic-bezier(.075,.82,.165,1);
63
- overflow-x: hidden;
64
- font-weight: 400;
65
- }
66
-
67
- body { /*IOS禁止微信调整字体大小 */
68
- -webkit-text-size-adjust:100% !important;
69
- text-size-adjust:100% !important;
70
- -moz-text-size-adjust:100% !important;
71
- }
72
-
73
- [tabindex="-1"]:focus {
74
- outline: none!important
75
- }
76
-
77
- hr {
78
- box-sizing: content-box;
79
- height: 0;
80
- overflow: visible
81
- }
82
-
83
- h1,h2,h3,h4,h5,h6 {
84
- margin-top: 0;
85
- margin-bottom: .5em;
86
- color: $color-dark;
87
- font-weight: 500;
88
- transition: color 0.3s ease;
89
- }
90
- //html.dark{
91
- // h1, h2, h3, h4, h5, h6 {
92
- // color: $color-light;
93
- // }
94
- //}
95
-
96
- p {
97
- margin-top: 0;
98
- margin-bottom: 1em
99
- }
100
-
101
- abbr[title],abbr[data-original-title] {
102
- text-decoration: underline;
103
- -webkit-text-decoration: underline dotted;
104
- text-decoration: underline dotted;
105
- border-bottom: 0;
106
- cursor: help
107
- }
108
-
109
- address {
110
- margin-bottom: 1em;
111
- font-style: normal;
112
- line-height: inherit
113
- }
114
-
115
- input[type=text],input[type=password],input[type=number],textarea {
116
- -webkit-appearance: none
117
- }
118
-
119
- ol,ul,dl {
120
- margin-top: 0;
121
- margin-bottom: 1em
122
- }
123
-
124
- ol ol,ul ul,ol ul,ul ol {
125
- margin-bottom: 0
126
- }
127
-
128
- dt {
129
- font-weight: 500
130
- }
131
-
132
- dd {
133
- margin-bottom: .5em;
134
- margin-left: 0
135
- }
136
-
137
- blockquote {
138
- margin: 0 0 1em
139
- }
140
-
141
- dfn {
142
- font-style: italic
143
- }
144
-
145
- b,strong {
146
- font-weight: bolder
147
- }
148
-
149
- small {
150
- font-size: 80%
151
- }
152
-
153
- sub,sup {
154
- position: relative;
155
- font-size: 75%;
156
- line-height: 0;
157
- vertical-align: baseline
158
- }
159
-
160
- sub {
161
- bottom: -.25em
162
- }
163
-
164
- sup {
165
- top: -.5em
166
- }
167
-
168
- a {
169
- color: inherit;
170
- text-decoration: none;
171
- outline: none;
172
- cursor: pointer;
173
- transition: color .3s;
174
- -webkit-text-decoration-skip: objects;
175
- }
176
-
177
- a:active,a:hover {
178
- text-decoration: none;
179
- outline: 0
180
- }
181
-
182
- a:focus {
183
- text-decoration: none;
184
- outline: 0
185
- }
186
-
187
- a[disabled] {
188
- color: $color-dark;
189
- cursor: not-allowed
190
- }
191
-
192
- pre,code,kbd,samp {
193
- font-size: 1em;
194
- font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace
195
- }
196
-
197
- pre {
198
- margin-top: 0;
199
- margin-bottom: 1em;
200
- overflow: auto
201
- }
202
-
203
- figure {
204
- margin: 0 0 1em
205
- }
206
-
207
- img {
208
- vertical-align: middle;
209
- border-style: none
210
- }
211
-
212
- a,area,button,[role=button],input:not([type="range"]),label,select,summary,textarea {
213
- touch-action: manipulation
214
- }
215
-
216
- table {
217
- border-collapse: collapse
218
- }
219
-
220
- caption {
221
- padding-top: .75em;
222
- padding-bottom: .3em;
223
- color: $color-dark;
224
- text-align: left;
225
- caption-side: bottom
226
- }
227
-
228
- input,button,select,optgroup,textarea {
229
- margin: 0;
230
- color: inherit;
231
- font-size: inherit;
232
- font-family: inherit;
233
- line-height: inherit
234
- }
235
-
236
- button,input {
237
- overflow: visible
238
- }
239
-
240
- button,select {
241
- text-transform: none
242
- }
243
-
244
- button,html [type=button],[type=reset],[type=submit] {
245
- -webkit-appearance: button
246
- }
247
-
248
- button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner {
249
- padding: 0;
250
- border-style: none
251
- }
252
-
253
- input[type=radio],input[type=checkbox] {
254
- box-sizing: border-box;
255
- /* padding:0; */
256
- }
257
-
258
- input[type=date],input[type=time],input[type=datetime-local],input[type=month] {
259
- -webkit-appearance: listbox
260
- }
261
-
262
- textarea {
263
- overflow: auto;
264
- resize: vertical
265
- }
266
-
267
- fieldset {
268
- min-width: 0;
269
- margin: 0;
270
- padding: 0;
271
- border: 0
272
- }
273
-
274
- legend {
275
- display: block;
276
- width: 100%;
277
- max-width: 100%;
278
- margin-bottom: .5em;
279
- padding: 0;
280
- color: inherit;
281
- font-size: 1.5em;
282
- line-height: inherit;
283
- white-space: normal
284
- }
285
-
286
- progress {
287
- vertical-align: baseline
288
- }
289
-
290
- [type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button {
291
- height: auto
292
- }
293
-
294
- [type=search] {
295
- outline-offset: -2px;
296
- -webkit-appearance: none
297
- }
298
-
299
- [type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration {
300
- -webkit-appearance: none
301
- }
302
-
303
- ::-webkit-file-upload-button {
304
- font: inherit;
305
- -webkit-appearance: button
306
- }
307
-
308
- output {
309
- display: inline-block
310
- }
311
-
312
- summary {
313
- display: list-item
314
- }
315
-
316
- template {
317
- display: none
318
- }
319
-
320
- [hidden] {
321
- display: none!important
322
- }
323
-
324
- mark {
325
- padding: .2em;
326
- background-color: $color-light;
327
- }
328
-
329
- html{
330
- -ms-text-size-adjust: 100%;
331
- -webkit-font-smoothing: antialiased;
332
- -moz-osx-font-smoothing: grayscale;
333
- line-height: 1.5;
334
- text-align: left;
335
- }
336
- a{
337
- transition: color .3s ease;
338
- }
339
-
340
- body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td,hr,button,article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section {
341
- margin: 0;
342
- padding: 0
343
- }
344
-
345
- ul,ol {
346
- list-style: none
347
- }
348
-
349
-
350
-
351
- html.rtl {
352
- direction: rtl
353
- }
354
-
355
- html{
356
- font-size: $font-size;
357
- color: $color-dark;
358
- background-color: $color-light;
359
- //a{
360
- // color:$color-dark;
361
- // background-color: transparent;
362
- //
363
- // &:hover {
364
- // color:rgba($color-dark, .9);
365
- // }
366
- // &:active {
367
- // color:rgba($color-dark, .8);
368
- // }
369
- //}
370
- }
371
- html.dark{
372
- color: $color-light;
373
- background-color: $color-dark;
374
- //a{
375
- // color:$color-light;
376
- //
377
- // &:hover {
378
- // color:rgba($color-light, .9);
379
- // }
380
- // &:active {
381
- // color:rgba($color-light, .8);
382
- // }
383
- //}
384
- }
385
-
386
- #app{
387
- width: 100%;
388
- height: 100%;
389
- }