memorio 0.2.19 → 1.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 (107) hide show
  1. package/.editorconfig +31 -0
  2. package/.gitattributes +1 -0
  3. package/.private/npm +1 -0
  4. package/.vscode/extension.json +15 -0
  5. package/.vscode/settings.json +90 -0
  6. package/config/dispatch.ts +49 -0
  7. package/config/global.ts +36 -0
  8. package/coverage/clover.xml +260 -0
  9. package/coverage/coverage-final.json +10 -0
  10. package/coverage/lcov-report/a51.memorio/config/dispatch.ts.html +232 -0
  11. package/coverage/lcov-report/a51.memorio/config/global.ts.html +193 -0
  12. package/coverage/lcov-report/a51.memorio/config/index.html +131 -0
  13. package/coverage/lcov-report/a51.memorio/dist/config/dispatch.js.html +157 -0
  14. package/coverage/lcov-report/a51.memorio/dist/config/global.js.html +142 -0
  15. package/coverage/lcov-report/a51.memorio/dist/config/index.html +131 -0
  16. package/coverage/lcov-report/a51.memorio/dist/functions/cache/index.html +116 -0
  17. package/coverage/lcov-report/a51.memorio/dist/functions/cache/index.js.html +103 -0
  18. package/coverage/lcov-report/a51.memorio/dist/functions/observer/index.html +116 -0
  19. package/coverage/lcov-report/a51.memorio/dist/functions/observer/index.js.html +280 -0
  20. package/coverage/lcov-report/a51.memorio/dist/functions/state/index.html +116 -0
  21. package/coverage/lcov-report/a51.memorio/dist/functions/state/index.js.html +460 -0
  22. package/coverage/lcov-report/a51.memorio/dist/functions/store/index.html +116 -0
  23. package/coverage/lcov-report/a51.memorio/dist/functions/store/index.js.html +367 -0
  24. package/coverage/lcov-report/a51.memorio/dist/index.html +116 -0
  25. package/coverage/lcov-report/a51.memorio/dist/init.js.html +106 -0
  26. package/coverage/lcov-report/a51.memorio/functions/cache/index.html +116 -0
  27. package/coverage/lcov-report/a51.memorio/functions/cache/index.ts.html +142 -0
  28. package/coverage/lcov-report/a51.memorio/functions/observer/index.html +116 -0
  29. package/coverage/lcov-report/a51.memorio/functions/observer/index.ts.html +448 -0
  30. package/coverage/lcov-report/a51.memorio/functions/session/index.html +116 -0
  31. package/coverage/lcov-report/a51.memorio/functions/session/index.ts.html +409 -0
  32. package/coverage/lcov-report/a51.memorio/functions/state/index.html +116 -0
  33. package/coverage/lcov-report/a51.memorio/functions/state/index.ts.html +682 -0
  34. package/coverage/lcov-report/a51.memorio/functions/store/index.html +116 -0
  35. package/coverage/lcov-report/a51.memorio/functions/store/index.ts.html +409 -0
  36. package/coverage/lcov-report/a51.memorio/index.html +131 -0
  37. package/coverage/lcov-report/a51.memorio/index.ts.html +88 -0
  38. package/coverage/lcov-report/a51.memorio/init.ts.html +115 -0
  39. package/coverage/lcov-report/base.css +224 -0
  40. package/coverage/lcov-report/block-navigation.js +87 -0
  41. package/coverage/lcov-report/favicon.png +0 -0
  42. package/coverage/lcov-report/index.html +206 -0
  43. package/coverage/lcov-report/prettify.css +1 -0
  44. package/coverage/lcov-report/prettify.js +2 -0
  45. package/coverage/lcov-report/session/index.html +116 -0
  46. package/coverage/lcov-report/session/index.ts.html +571 -0
  47. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  48. package/coverage/lcov-report/sorter.js +210 -0
  49. package/coverage/lcov-report/state/index.html +116 -0
  50. package/coverage/lcov-report/state/index.ts.html +1090 -0
  51. package/coverage/lcov-report/store/index.html +116 -0
  52. package/coverage/lcov-report/store/index.ts.html +556 -0
  53. package/coverage/lcov.info +518 -0
  54. package/dist/README.md +319 -0
  55. package/dist/index.d.ts +7 -0
  56. package/dist/index.js +1 -0
  57. package/dist/package.json +98 -0
  58. package/dist/types/cache.d.ts +27 -0
  59. package/dist/types/memorio.d.ts +18 -0
  60. package/dist/types/observer.d.ts +47 -0
  61. package/dist/types/session.d.ts +91 -0
  62. package/dist/types/state.d.ts +71 -0
  63. package/dist/types/store.d.ts +91 -0
  64. package/esbuild.config.mjs +54 -0
  65. package/eslint.config.mjs +174 -0
  66. package/examples/bg.jpg +0 -0
  67. package/examples/bootstrap.less +92 -0
  68. package/examples/favicon.ico +0 -0
  69. package/examples/index.htm +65 -0
  70. package/examples/javascript.js +2 -0
  71. package/examples/responsive.less +47 -0
  72. package/examples/styles.less +169 -0
  73. package/functions/cache/index.ts +19 -0
  74. package/functions/observer/index.ts +121 -0
  75. package/functions/session/index.ts +108 -0
  76. package/functions/state/index.ts +199 -0
  77. package/functions/store/index.ts +108 -0
  78. package/index.ts +1 -0
  79. package/init.ts +12 -0
  80. package/jest.config.mjs +33 -0
  81. package/jest.setup.js +2 -0
  82. package/package.json +4 -10
  83. package/tests/basic.test.ts +50 -0
  84. package/tests/cache.test.ts +52 -0
  85. package/tests/observer.test.ts +62 -0
  86. package/tests/setup.ts +48 -0
  87. package/tests/state.test.ts +45 -0
  88. package/tests/store.test.ts +62 -0
  89. package/tsconfig.json +67 -0
  90. package/index.js +0 -1
  91. /package/{CHANGELOG.md → .github/CHANGELOG.md} +0 -0
  92. /package/{CITATION.cff → .github/CITATION.cff} +0 -0
  93. /package/{CODEOWNERS → .github/CODEOWNERS} +0 -0
  94. /package/{CODE_OF_CONDUCT.md → .github/CODE_OF_CONDUCT.md} +0 -0
  95. /package/{CONTRIBUTING.md → .github/CONTRIBUTING.md} +0 -0
  96. /package/{COPYRIGHT.md → .github/COPYRIGHT.md} +0 -0
  97. /package/{FUNDING.yml → .github/FUNDING.yml} +0 -0
  98. /package/{HISTORY.md → .github/HISTORY.md} +0 -0
  99. /package/{LICENSE.md → .github/LICENSE.md} +0 -0
  100. /package/{README.md → .github/README.md} +0 -0
  101. /package/{SECURITY.md → .github/SECURITY.md} +0 -0
  102. /package/{SUMMARY.md → .github/SUMMARY.md} +0 -0
  103. /package/{dependabot.yml → .github/dependabot.yml} +0 -0
  104. /package/{documents → .github/documents}/OBSERVER.md +0 -0
  105. /package/{documents → .github/documents}/STATE.md +0 -0
  106. /package/{documents → .github/documents}/STORE.md +0 -0
  107. /package/{pull_request_template.md → .github/pull_request_template.md} +0 -0
@@ -0,0 +1,91 @@
1
+ /*!
2
+ memorio
3
+ Copyright (c) 2025 Dario Passariello <dariopassariello@gmail.com>
4
+ Licensed under MIT License, see
5
+ https://dario.passariello.ca
6
+ */
7
+
8
+ /**
9
+ * Create states using: store.set("example",{test:"test"})
10
+ */
11
+ interface _store {
12
+
13
+ /**
14
+ * Create a new store
15
+ *
16
+ * @example
17
+ * store.set("test","example") // or Array, Object, Number, Functions...
18
+ *
19
+ * @since memorio 0.0.1
20
+ * @param name The String as name to define the store.
21
+ * @param param The information taht you want to store (Any).
22
+ * @return boolean
23
+ */
24
+ set: (name: string, value: any) => void
25
+
26
+ /**
27
+ * Have back the data from a store.
28
+ *
29
+ * @example
30
+ * store.get("test")
31
+ *
32
+ * @since memorio 0.0.1
33
+ * @param name The String as name to define the store.
34
+ */
35
+ get: (name: string) => any
36
+
37
+ /**
38
+ * Delete an existing store:
39
+ *
40
+ * @example
41
+ * store.delete("test")
42
+ * store.remove("test")
43
+ *
44
+ * @since memorio 0.0.1
45
+ * @param name The String as name to define the store.
46
+ * @return boolean
47
+ */
48
+ delete: (name: string) => boolean | undefined
49
+ remove: (name: string) => boolean | undefined
50
+
51
+ /**
52
+ * Delete all storages
53
+ *
54
+ * @example
55
+ * store.clearAll()
56
+ * store.removeAll()
57
+ *
58
+ * @since memorio 0.0.1
59
+ * @return boolean
60
+ */
61
+ clearAll: () => boolean
62
+ removeAll: () => boolean
63
+
64
+ /**
65
+ * Know how much space you have for total storages
66
+ *
67
+ * @example
68
+ * store.quota()
69
+ *
70
+ * @since memorio 0.0.1
71
+ * @return values
72
+ */
73
+ quota: () => void
74
+
75
+ /**
76
+ * Get the size of stores an the total
77
+ *
78
+ * @example
79
+ * store.size()
80
+ *
81
+ * @since memorio 0.0.1
82
+ * @return dimension in kb
83
+ */
84
+ size: () => number
85
+
86
+ // TODO
87
+ // readonly increaseQuota: (value: number) => void
88
+ }
89
+
90
+ declare var store: _store
91
+ type store = _store
@@ -0,0 +1,54 @@
1
+ import esbuild from 'esbuild'
2
+ import { copy } from 'esbuild-plugin-copy'
3
+ import { clean } from 'esbuild-plugin-clean'
4
+
5
+ esbuild.build(
6
+ {
7
+ entryPoints: ['init.ts'],
8
+ outfile: 'dist/index.js',
9
+ legalComments: 'none',
10
+ color: true,
11
+ bundle: true,
12
+ minify: true,
13
+ sourcemap: false,
14
+ allowOverwrite: true,
15
+ plugins: [
16
+ clean(
17
+ {
18
+ patterns: [
19
+ './dist/*'
20
+ ]
21
+ }
22
+ ),
23
+ copy(
24
+ {
25
+ assets: [
26
+ {
27
+ from: 'types/**/*',
28
+ to: './types'
29
+ },
30
+ // {
31
+ // from: '.github/**/*',
32
+ // to: './'
33
+ // },
34
+ {
35
+ from: '.github/README.md',
36
+ to: './README.md'
37
+ },
38
+ {
39
+ from: './package.json',
40
+ to: './package.json'
41
+ },
42
+ {
43
+ from: './index.d.ts',
44
+ to: './index.d.ts'
45
+ }
46
+ ]
47
+ }
48
+ )
49
+ ]
50
+ }
51
+ )
52
+ .catch(
53
+ () => process.exit(1)
54
+ )
@@ -0,0 +1,174 @@
1
+ import tseslint from '@typescript-eslint/eslint-plugin'
2
+ import tsparser from '@typescript-eslint/parser'
3
+ import { defineConfig } from "eslint/config"
4
+
5
+ export default defineConfig([
6
+ {
7
+ ignores: [
8
+ '**/node_modules/**',
9
+ '**/dist/**',
10
+ '**/build/**',
11
+ '**/coverage/**',
12
+ '**/assets/**',
13
+ '**/types/*.d.ts',
14
+ '**/*.min.js',
15
+ '**/documents/**'
16
+ ]
17
+ },
18
+ // Base configuration for all files
19
+ {
20
+ languageOptions: {
21
+ ecmaVersion: 'latest',
22
+ sourceType: 'module',
23
+ globals: {
24
+ a51dev: 'writable',
25
+ process: 'readonly',
26
+ global: 'writable',
27
+ module: 'writable',
28
+ require: 'readonly',
29
+ console: 'readonly',
30
+ __dirname: 'readonly',
31
+ __filename: 'readonly'
32
+ }
33
+ },
34
+ linterOptions: {
35
+ reportUnusedDisableDirectives: true
36
+ }
37
+ },
38
+ // JavaScript files configuration
39
+ {
40
+ files: ['**/*.js', '**/*.mjs', '**/*.cjs'],
41
+ languageOptions: {
42
+ ecmaVersion: 'latest',
43
+ sourceType: 'module'
44
+ },
45
+ rules: {
46
+ 'no-var': 'off',
47
+ 'no-console': 'off',
48
+ 'no-undef': 'off', // Disable undefined variable checking for JS files
49
+ 'no-unused-vars': 'warn', // Make unused vars warnings instead of errors
50
+ 'semi': ['warn', 'never']
51
+ }
52
+ },
53
+ // TypeScript files configuration
54
+ {
55
+ files: ['**/*.ts', '**/*.tsx'],
56
+ plugins: {
57
+ '@typescript-eslint': tseslint
58
+ },
59
+ languageOptions: {
60
+ parser: tsparser,
61
+ parserOptions: {
62
+ ecmaVersion: 'latest',
63
+ sourceType: 'module'
64
+ }
65
+ },
66
+ rules: {
67
+ 'no-var': 'off',
68
+ 'no-console': 'off',
69
+ 'no-undef': 'off', // TypeScript handles this better
70
+ 'no-unused-vars': 'off', // Use the TypeScript specific version instead
71
+ 'semi': ['warn', 'never'],
72
+ '@typescript-eslint/no-unused-vars': 'warn',
73
+ '@typescript-eslint/no-explicit-any': 'off',
74
+ '@typescript-eslint/no-var-requires': 'off'
75
+ }
76
+ },
77
+ // Jest test files
78
+ {
79
+ files: ['**/*.test.js', '**/*.test.ts', '**/*.spec.js', '**/*.spec.ts'],
80
+ languageOptions: {
81
+ globals: {
82
+ jest: 'readonly',
83
+ describe: 'readonly',
84
+ it: 'readonly',
85
+ expect: 'readonly',
86
+ beforeEach: 'readonly',
87
+ beforeAll: 'readonly',
88
+ afterEach: 'readonly',
89
+ afterAll: 'readonly',
90
+ test: 'readonly',
91
+ spyOn: 'readonly'
92
+ }
93
+ },
94
+ rules: {
95
+ 'no-undef': 'off' // Jest globals are defined above
96
+ }
97
+ },
98
+ {
99
+ rules: {
100
+ "no-var": 0,
101
+ "no-empty": 0,
102
+ "no-console": 0,
103
+ "no-process-exit": 0,
104
+ "no-underscore-dangle": 0,
105
+ "no-param-reassign": 0,
106
+ "no-prototype-builtins": 0,
107
+ "no-unused-vars": 0,
108
+ "no-undef": 0,
109
+ "no-debugger": 0,
110
+ "no-dupe-else-if": 0,
111
+ "no-useless-escape": 0,
112
+ "node/no-extraneous-require": 0,
113
+ "node/no-unpublished-require": 0,
114
+ "node/no-unsupported-features/es-syntax": 0,
115
+ "node/no-missing-import": 0,
116
+ "node/no-unpublished-import": 0,
117
+ "node/no-unsupported-features/node-builtins": 0,
118
+ "node/no-missing-require": 0,
119
+ "react/prop-types": 0,
120
+ "react/no-string-refs": 0,
121
+ "react/no-find-dom-node": 0,
122
+ "react/display-name": 0,
123
+ "react/jsx-no-undef": 0,
124
+ "promise/no-nesting": 0,
125
+ "promise/no-callback-in-promise": 0,
126
+ "promise/always-return": 0,
127
+ "promise/catch-or-return": 0,
128
+ "promise/no-return-wrap": 0,
129
+ "promise/valid-params": 0,
130
+ "import/export": 0,
131
+ "import/namespace": 0,
132
+ "import/default": 0,
133
+ "import/no-named-as-default": 0,
134
+ "import/no-named-as-default-member": 0,
135
+ "import/no-mutable-exports": 0,
136
+ "import/no-extraneous-dependencies": 0,
137
+ "import/no-unresolved": 0,
138
+ "import/no-duplicates": 0,
139
+ "import/named": 0,
140
+ "@typescript-eslint/no-var-requires": 0,
141
+ "@typescript-eslint/no-unused-vars": 0,
142
+ "@typescript-eslint/no-empty-function": 0,
143
+ "@typescript-eslint/no-explicit-any": 0,
144
+ "consistent-return": 0,
145
+ "unicorn/no-process-exit": 0,
146
+ "comma-dangle": [
147
+ "error",
148
+ "never"
149
+ ],
150
+ "prefer-const": [
151
+ "warn"
152
+ ],
153
+ "semi": [
154
+ "warn",
155
+ "never"
156
+ ],
157
+ "max-nested-callbacks": [
158
+ "warn",
159
+ 4
160
+ ],
161
+ "no-plusplus": 0,
162
+ "operator-linebreak": [
163
+ "error",
164
+ "after",
165
+ {
166
+ "overrides": {
167
+ "?": "ignore",
168
+ ":": "ignore"
169
+ }
170
+ }
171
+ ]
172
+ }
173
+ }
174
+ ])
Binary file
@@ -0,0 +1,92 @@
1
+ // Copyright (c) 2024 Dario Passariello
2
+
3
+ * {
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ article,
8
+ aside,
9
+ details,
10
+ figcaption,
11
+ figure,
12
+ footer,
13
+ header,
14
+ hgroup,
15
+ nav,
16
+ section {
17
+ display: block;
18
+ }
19
+
20
+ audio,
21
+ canvas,
22
+ video {
23
+ display: inline-block;
24
+ }
25
+
26
+ audio:not([controls]) {
27
+ display: none;
28
+ }
29
+
30
+ sub,
31
+ sup {
32
+ position: relative;
33
+ font-size: 75%;
34
+ line-height: 0;
35
+ vertical-align: baseline;
36
+ }
37
+
38
+ sup {
39
+ top: -0.1em;
40
+ }
41
+
42
+ sub {
43
+ bottom: -0.1em;
44
+ }
45
+
46
+ img {
47
+ border: 0;
48
+ }
49
+
50
+ ol,
51
+ ul {
52
+ list-style: square;
53
+ }
54
+
55
+ blockquote,
56
+ q,
57
+ blockquote:before,
58
+ blockquote:after,
59
+ q:before,
60
+ q:after {
61
+ quotes: none;
62
+ content: '';
63
+ content: none;
64
+ }
65
+
66
+ b,
67
+ strong {
68
+ font-weight: 600;
69
+ }
70
+
71
+ table {
72
+ border-collapse: collapse;
73
+ border-spacing: 0;
74
+ }
75
+
76
+ input::-moz-focus-inner {
77
+ border: 0;
78
+ }
79
+
80
+ h1,
81
+ h2,
82
+ h3,
83
+ h4,
84
+ h5,
85
+ h6 {
86
+ margin: 0;
87
+ padding: 0;
88
+ font-size: 1.5em;
89
+ letter-spacing: -.05em;
90
+ color: #666;
91
+ line-height: 1em;
92
+ }
Binary file
@@ -0,0 +1,65 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html lang="en" dir="ltr" prefix="og: http://ogp.me/ns#" itemscope itemtype="http://schema.org/WebPage">
4
+
5
+ <head>
6
+ <meta charset="UTF-8" />
7
+
8
+ <meta name="description" content="Example by Dario Passariello, Copyright (c) 2024" />
9
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
10
+ <meta name="mobile-web-app-capable" content="yes" />
11
+ <meta name="apple-mobile-web-app-capable" content="yes" />
12
+ <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
13
+ <meta name="msapplication-starturl" content="index.html" />
14
+ <meta name="msapplication-TileColor" content="#ffffff" />
15
+ <meta name="theme-color" content="#ffffff" />
16
+ <meta name="google" content="nopagereadaloud" />
17
+ <meta name="referrer" content="no-referrer" />
18
+
19
+ <link rel="preconnect" href="https://cdn.jsdelivr.net">
20
+ <link rel="dns-prefetch" href="https://cdn.jsdelivr.net" nonce />
21
+
22
+ <link rel="stylesheet/less" type="text/css" href="bootstrap.less" />
23
+ <link rel="stylesheet/less" type="text/css" href="styles.less" />
24
+ <link rel="stylesheet/less" type="text/css" href="responsive.less" />
25
+
26
+ <link rel="preload stylesheet preconnect"
27
+ href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" as="style"
28
+ onload="this.onload=null;this.rel='stylesheet'" nonce>
29
+
30
+ <link rel="icon" type="image/x-icon" href="favicon.ico">
31
+
32
+ <title>Example Memorio by Dario Passariello</title>
33
+
34
+ </head>
35
+
36
+ <body>
37
+
38
+ <header>
39
+ <nav> </nav>
40
+ </header>
41
+
42
+ <aside>
43
+ <section>
44
+ </section>
45
+ </aside>
46
+
47
+ <main>
48
+
49
+ <br />
50
+ <h1><i class="fa-solid fa-person-through-window"></i> Memorio Example </h1>
51
+
52
+ <hr />
53
+
54
+ </main>
55
+
56
+ <footer>Copyright &copy; <span class="year">2025</span> - Dario Passariello</footer>
57
+
58
+ <!-- Custom NPM -->
59
+ <script src="https://cdn.jsdelivr.net/npm/memorio"></script>
60
+ <script src="https://cdn.jsdelivr.net/npm/less"></script>
61
+ <script src="javascript.js"></script>
62
+
63
+ </body>
64
+
65
+ </html>
@@ -0,0 +1,2 @@
1
+ // DEFINE THE STATE CONTAINER
2
+ state.custom = {}
@@ -0,0 +1,47 @@
1
+ @media screen and (max-width: 699px) {
2
+
3
+ :root {
4
+ --w2: 60px !important;
5
+ }
6
+
7
+ html {
8
+ overflow: auto !important;
9
+ }
10
+
11
+ body {
12
+ display: flex !important;
13
+ position: relative !important;
14
+ flex-direction: column-reverse;
15
+ align-items: center;
16
+ overflow: auto !important;
17
+ padding: 20px 10px !important;
18
+
19
+ &:before {
20
+ all: unset !important;
21
+ }
22
+
23
+ #fs {
24
+ display: none;
25
+ }
26
+
27
+ main,
28
+ aside,
29
+ section,
30
+ footer {
31
+ all: unset !important;
32
+ width: 100%;
33
+ }
34
+
35
+ main {
36
+ display: flex !important;
37
+ flex-direction: column !important;
38
+
39
+ input {
40
+ width: 80% !important;
41
+ }
42
+ }
43
+
44
+ }
45
+
46
+
47
+ }
@@ -0,0 +1,169 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Lato');
2
+
3
+ // Copyright (c) 2024 Dario Passariello
4
+
5
+ :root {
6
+ --header-height: 30px;
7
+ --aside: 300px;
8
+ --w1: 15px;
9
+ --w2: 35px;
10
+ --h1: 20px;
11
+ }
12
+
13
+ // html{
14
+ // display: none;
15
+ // }
16
+
17
+ * {
18
+ font-family: 'Lato', sans-serif;
19
+
20
+ &::backdrop {
21
+ background-color: rgba(255, 255, 255, 0);
22
+ }
23
+ }
24
+
25
+ html,
26
+ body {
27
+ cursor: default;
28
+ margin: 0;
29
+ padding: 0;
30
+ font-size: 1em;
31
+ position: absolute;
32
+ top: 0;
33
+ left: 0;
34
+ right: 0;
35
+ bottom: 0;
36
+ overflow: hidden;
37
+
38
+ &:before {
39
+ content: '';
40
+ position: absolute;
41
+ top: 0;
42
+ left: 0;
43
+ right: 0;
44
+ bottom: 0;
45
+ background-image: url('bg.jpg');
46
+ background-size: cover;
47
+ filter: blur(4px);
48
+ z-index: 0
49
+ }
50
+
51
+ header {
52
+ position: absolute;
53
+ top: 0;
54
+ height: var(--header-height);
55
+ left: 0;
56
+ right: 0;
57
+ background: black;
58
+ color: white;
59
+ }
60
+
61
+ aside {
62
+ padding: 15px 0;
63
+ display: flex;
64
+ flex-direction: column;
65
+ align-items: center;
66
+ position: absolute;
67
+ top: var(--header-height);
68
+ left: 0;
69
+ bottom: 0;
70
+ width: var(--aside);
71
+ border-right: 1px solid #bbb;
72
+ overflow: auto;
73
+ background: #eee;
74
+
75
+ section {
76
+ display: flex
77
+ }
78
+
79
+ hr {
80
+ width: 150px;
81
+ }
82
+
83
+ .table {
84
+ .title {
85
+ display: flex;
86
+ padding-left: var(--w1);
87
+ display: flex;
88
+
89
+ span {
90
+ color: cornflowerblue;
91
+ text-align: center;
92
+ font-size: .65em;
93
+ width: var(--w2);
94
+ }
95
+ }
96
+
97
+ .row {
98
+ display: flex;
99
+
100
+ >span {
101
+ color: cornflowerblue;
102
+ font-size: .65em;
103
+ width: var(--w1);
104
+ text-align: right;
105
+ padding-right: 3px;
106
+ }
107
+
108
+ input {
109
+ width: var(--w2);
110
+ height: var(--h1);
111
+ padding: 1px;
112
+ text-align: center;
113
+ font-size: .65em;
114
+ border: 1px solid #ddd;
115
+ }
116
+ }
117
+ }
118
+ }
119
+
120
+ main {
121
+ display: flex;
122
+ flex-direction: column;
123
+ align-items: center;
124
+ position: absolute;
125
+ top: var(--header-height);
126
+ left: var(--aside);
127
+ right: 0;
128
+ bottom: 0;
129
+ overflow: auto;
130
+
131
+ >span {
132
+ position: absolute;
133
+ top: 10px;
134
+ right: 10px;
135
+ width: unset
136
+ }
137
+
138
+ button {
139
+ font-size: 1em;
140
+ margin: 3px;
141
+ padding: 8px;
142
+ width: 390px;
143
+ border-radius: 10px;
144
+ border: 1px solid #AAA;
145
+ color: #AAA;
146
+ text-shadow: black 0 -1px, white 0 1px;
147
+
148
+ &:hover {
149
+ background: #CCC;
150
+ cursor: pointer;
151
+ }
152
+ }
153
+
154
+ hr {
155
+ background: gray;
156
+ height: 1px;
157
+ width: 350px;
158
+ margin: 10px;
159
+ }
160
+ }
161
+
162
+ footer {
163
+ position: absolute;
164
+ bottom: 10px;
165
+ right: 20px;
166
+ font-size: .8em;
167
+ }
168
+
169
+ }