Implement preferences store

This commit is contained in:
Junyoung Choi 2019-11-01 13:30:45 +09:00
parent 166c1323a8
commit 073242c31f
No known key found for this signature in database
GPG Key ID: CE66B3A52D83EBE1
5 changed files with 326 additions and 38 deletions

223
package-lock.json generated
View File

@ -1160,7 +1160,6 @@
"version": "7.6.0",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.0.tgz",
"integrity": "sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==",
"dev": true,
"requires": {
"regenerator-runtime": "^0.13.2"
},
@ -1168,8 +1167,7 @@
"regenerator-runtime": {
"version": "0.13.3",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
"integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==",
"dev": true
"integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
}
}
},
@ -1874,8 +1872,7 @@
"@types/prop-types": {
"version": "15.7.1",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.1.tgz",
"integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==",
"dev": true
"integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg=="
},
"@types/ramda": {
"version": "0.25.51",
@ -1893,7 +1890,6 @@
"version": "16.9.2",
"resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.2.tgz",
"integrity": "sha512-jYP2LWwlh+FTqGd9v7ynUKZzjj98T8x7Yclz479QdRhHfuW9yQ+0jjnD31eXSXutmBpppj5PYNLYLRfnZJvcfg==",
"dev": true,
"requires": {
"@types/prop-types": "*",
"csstype": "^2.2.0"
@ -1937,6 +1933,14 @@
"@types/react": "*"
}
},
"@types/react-wait": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@types/react-wait/-/react-wait-0.3.0.tgz",
"integrity": "sha512-5jIfDcHRjqeE7QfZG7kCqOpfrPSvOM1E3/nlKuJ/NZrG/WrhLo/AFr0i72jhTWzyNRo4ex0pshBaiCHksZXH3A==",
"requires": {
"@types/react": "*"
}
},
"@types/relateurl": {
"version": "0.2.28",
"resolved": "http://registry.npmjs.org/@types/relateurl/-/relateurl-0.2.28.tgz",
@ -3031,6 +3035,11 @@
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
"dev": true
},
"bowser": {
"version": "1.9.4",
"resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz",
"integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ=="
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@ -3808,6 +3817,14 @@
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
"dev": true
},
"copy-to-clipboard": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.2.0.tgz",
"integrity": "sha512-eOZERzvCmxS8HWzugj4Uxl8OJxa7T2k1Gi0X5qavwydHIfuSHq2dTD09LOg/XyGq4Zpb5IsR/2OJ5lbOegz78w==",
"requires": {
"toggle-selection": "^1.0.6"
}
},
"core-js-compat": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz",
@ -3933,6 +3950,15 @@
"resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
"integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU="
},
"css-in-js-utils": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz",
"integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==",
"requires": {
"hyphenate-style-name": "^1.0.2",
"isobject": "^3.0.1"
}
},
"css-loader": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.2.0.tgz",
@ -4043,6 +4069,15 @@
"postcss-value-parser": "^3.3.0"
}
},
"css-tree": {
"version": "1.0.0-alpha.37",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
"integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
"requires": {
"mdn-data": "2.0.4",
"source-map": "^0.6.1"
}
},
"css-what": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
@ -4073,8 +4108,7 @@
"csstype": {
"version": "2.5.7",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.7.tgz",
"integrity": "sha512-Nt5VDyOTIIV4/nRFswoCKps1R5CD1hkiyjBE9/thNaNZILLEviVw9yWQw15+O+CpNjQKB/uvdcxFFOrSflY3Yw==",
"dev": true
"integrity": "sha512-Nt5VDyOTIIV4/nRFswoCKps1R5CD1hkiyjBE9/thNaNZILLEviVw9yWQw15+O+CpNjQKB/uvdcxFFOrSflY3Yw=="
},
"cyclist": {
"version": "1.0.1",
@ -4647,6 +4681,14 @@
"url": "^0.11.0"
}
},
"error-stack-parser": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.4.tgz",
"integrity": "sha512-fZ0KkoxSjLFmhW5lHbUT3tLwy3nX1qEzMYo8koY1vrsAco53CMT1djnBSeC/wUjTEZRhZl9iRw7PaMaxfJ4wzQ==",
"requires": {
"stackframe": "^1.1.0"
}
},
"es-abstract": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
@ -5333,6 +5375,11 @@
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"dev": true
},
"fastest-stable-stringify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-1.0.1.tgz",
"integrity": "sha1-kSLUBtTJ2YvqZEpraFPVh0uHsCg="
},
"fault": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/fault/-/fault-1.0.3.tgz",
@ -6864,6 +6911,11 @@
"integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
"dev": true
},
"hyphenate-style-name": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz",
"integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ=="
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@ -7036,6 +7088,15 @@
"resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
"integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="
},
"inline-style-prefixer": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-4.0.2.tgz",
"integrity": "sha512-N8nVhwfYga9MiV9jWlwfdj1UDIaZlBFu4cJSJkIr7tZX7sHpHhGR5su1qdpW+7KPL8ISTvCIkcaFi/JdBknvPg==",
"requires": {
"bowser": "^1.7.3",
"css-in-js-utils": "^2.0.0"
}
},
"inquirer": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
@ -7446,8 +7507,7 @@
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
"dev": true
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
},
"isstream": {
"version": "0.1.2",
@ -9079,6 +9139,11 @@
"resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.0.6.tgz",
"integrity": "sha512-868pp48gUPmZIhfKrLbaDneuzGiw3OTDjHc5M1kAepR2CWBJ+HpEsm252K4aXdiP5coVZaJPOqGtVU6Po8xnXg=="
},
"mdn-data": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
"integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA=="
},
"mdurl": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
@ -9415,6 +9480,28 @@
"dev": true,
"optional": true
},
"nano-css": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.2.0.tgz",
"integrity": "sha512-DrkBUciWkEvrWZUIyhjQkyqiF1x2bnB4FWZZ9FCYSz1Okcq5fUs6P2e46UaHYcdljaUkQbK0aS0h1I2zObCTBg==",
"requires": {
"css-tree": "^1.0.0-alpha.28",
"csstype": "^2.5.5",
"fastest-stable-stringify": "^1.0.1",
"inline-style-prefixer": "^4.0.0",
"rtl-css-js": "^1.9.0",
"sourcemap-codec": "^1.4.1",
"stacktrace-js": "^2.0.0",
"stylis": "3.5.0"
},
"dependencies": {
"stylis": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.0.tgz",
"integrity": "sha512-pP7yXN6dwMzAR29Q0mBrabPCe0/mNO1MSr93bhay+hcZondvMMTpeGyd8nbhYJdyperNT2DRxONQuUGcJr5iPw=="
}
}
},
"nanoid": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.1.tgz",
@ -11237,6 +11324,11 @@
"integrity": "sha512-bOUvMWFQVk5oz8Ded9Xb7WVdEi3QGLC8tH7HmYP0Fdp4Bn3qw0tRFmr5TW6mvahzvmrK4a6bqWGfCevBflP+Xw==",
"dev": true
},
"react-fast-compare": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
"integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="
},
"react-hot-loader": {
"version": "4.12.13",
"resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.13.tgz",
@ -11324,6 +11416,29 @@
}
}
},
"react-use": {
"version": "12.10.0",
"resolved": "https://registry.npmjs.org/react-use/-/react-use-12.10.0.tgz",
"integrity": "sha512-wADpIjDwJgQDRObXlFhFmn3IcYuQKfbeVWpXwv0e81BgrhymogHKhXRT6jE2OKX7YPTAar9l554Xace1nsITLw==",
"requires": {
"@types/react-wait": "^0.3.0",
"copy-to-clipboard": "^3.1.0",
"nano-css": "^5.1.0",
"react-fast-compare": "^2.0.4",
"react-wait": "^0.3.0",
"resize-observer-polyfill": "^1.5.1",
"screenfull": "^5.0.0",
"set-harmonic-interval": "^1.0.1",
"throttle-debounce": "^2.0.1",
"ts-easing": "^0.2.0",
"tslib": "^1.10.0"
}
},
"react-wait": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/react-wait/-/react-wait-0.3.0.tgz",
"integrity": "sha512-kB5x/kMKWcn0uVr9gBdNz21/oGbQwEQnF3P9p6E9yLfJ9DRcKS0fagbgYMFI0YFOoyKDj+2q6Rwax0kTYJF37g=="
},
"read-pkg": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
@ -11720,6 +11835,11 @@
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
"dev": true
},
"resize-observer-polyfill": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
"integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
},
"resolve": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
@ -11820,6 +11940,14 @@
"integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
"dev": true
},
"rtl-css-js": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.13.1.tgz",
"integrity": "sha512-jgkIDj6Xi25kAEm5oYM3ZMFiOQhpLEcXi2LY/6bVr91cVz73hciHKneL5AMVPxOcks/JuizSaaNsvNRkeAWe3w==",
"requires": {
"@babel/runtime": "^7.1.2"
}
},
"run-async": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
@ -11918,6 +12046,11 @@
"ajv-keywords": "^3.1.0"
}
},
"screenfull": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.0.0.tgz",
"integrity": "sha512-yShzhaIoE9OtOhWVyBBffA6V98CDCoyHTsp8228blmqYy1Z5bddzE/4FPiJKlr8DVR4VBiiUyfPzIQPIYDkeMA=="
},
"select-hose": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
@ -12053,6 +12186,11 @@
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"dev": true
},
"set-harmonic-interval": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz",
"integrity": "sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g=="
},
"set-value": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
@ -12349,8 +12487,7 @@
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
},
"source-map-resolve": {
"version": "0.5.2",
@ -12381,6 +12518,11 @@
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
"dev": true
},
"sourcemap-codec": {
"version": "1.4.6",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz",
"integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg=="
},
"space-separated-tokens": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.4.tgz",
@ -12491,12 +12633,51 @@
"figgy-pudding": "^3.5.1"
}
},
"stack-generator": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.4.tgz",
"integrity": "sha512-ha1gosTNcgxwzo9uKTQ8zZ49aUp5FIUW58YHFxCqaAHtE0XqBg0chGFYA1MfmW//x1KWq3F4G7Ug7bJh4RiRtg==",
"requires": {
"stackframe": "^1.1.0"
}
},
"stack-utils": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
"integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
"dev": true
},
"stackframe": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.0.tgz",
"integrity": "sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg=="
},
"stacktrace-gps": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.3.tgz",
"integrity": "sha512-51Rr7dXkyFUKNmhY/vqZWK+EvdsfFSRiQVtgHTFlAdNIYaDD7bVh21yBHXaNWAvTD+w+QSjxHg7/v6Tz4veExA==",
"requires": {
"source-map": "0.5.6",
"stackframe": "^1.1.0"
},
"dependencies": {
"source-map": {
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
"integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI="
}
}
},
"stacktrace-js": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.1.tgz",
"integrity": "sha512-13oDNgBSeWtdGa4/2BycNyKqe+VktCoJ8VLx4pDoJkwGGJVtiHdfMOAj3aW9xTi8oR2v34z9IcvfCvT6XNdNAw==",
"requires": {
"error-stack-parser": "^2.0.4",
"stack-generator": "^2.0.4",
"stacktrace-gps": "^3.0.3"
}
},
"state-toggle": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.2.tgz",
@ -12951,6 +13132,11 @@
"integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
"dev": true
},
"throttle-debounce": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.1.0.tgz",
"integrity": "sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg=="
},
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@ -13048,6 +13234,11 @@
"repeat-string": "^1.6.1"
}
},
"toggle-selection": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
"integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI="
},
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
@ -13119,6 +13310,11 @@
"resolved": "https://registry.npmjs.org/trough/-/trough-1.0.4.tgz",
"integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q=="
},
"ts-easing": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz",
"integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ=="
},
"ts-loader": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-6.2.0.tgz",
@ -13231,8 +13427,7 @@
"tslib": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
"integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
"dev": true
"integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
},
"tsutils": {
"version": "3.17.1",

View File

@ -112,6 +112,7 @@
"ramda": "^0.26.1",
"react": "^16.9.0",
"react-dom": "^16.9.0",
"react-use": "^12.10.0",
"rehype-raw": "^4.0.1",
"rehype-react": "^4.0.1",
"rehype-sanitize": "^3.0.0",

View File

@ -1,24 +1,2 @@
import { useState, useCallback } from 'react'
import { createStoreContext } from '../utils/context'
function usePreferencesStore() {
const [closed, setClosed] = useState(true)
const toggleClosed = useCallback(() => {
if (closed) {
setClosed(false)
} else {
setClosed(true)
}
}, [closed, setClosed])
return {
closed,
setClosed,
toggleClosed
}
}
export const {
StoreProvider: PreferencesProvider,
useStore: usePreferences
} = createStoreContext(usePreferencesStore, 'preferences')
export * from './types'
export * from './store'

View File

@ -0,0 +1,83 @@
import { useState, useCallback, useMemo, useEffect } from 'react'
import { createStoreContext } from '../utils/context'
import { localLiteStorage } from 'ltstrg'
import { Preferences } from './types'
import { useSetState } from 'react-use'
const preferencesKey = 'PREFERENCES'
function loadPreferences() {
const stringifiedPreferences = localLiteStorage.getItem(preferencesKey)
if (stringifiedPreferences == null) return {}
try {
return JSON.parse(stringifiedPreferences)
} catch (error) {
console.warn(error.message)
return {}
}
}
function savePreferences(preferences: Partial<Preferences>) {
localLiteStorage.setItem(preferencesKey, JSON.stringify(preferences))
}
const initialPreferences = loadPreferences()
const basePreferences: Preferences = {
// General
'general.accounts': [],
'general.language': 'en-US',
'general.theme': 'auto',
'general.noteSorting': 'date-updated',
'general.enableAnalytics': true,
// Editor
'editor.theme': 'default',
'editor.fontSize': 14,
'editor.fontFamily': 'monospace',
'editor.indentType': 'spaces',
'editor.indentSize': 4,
'editor.keymap': 'default',
// Markdown
'markdown.previewStyle': 'default',
'markdown.codeBlockTheme': 'default'
}
function usePreferencesStore() {
const [preferences, setPreferences] = useSetState<Preferences>(
initialPreferences
)
useEffect(() => {
savePreferences(preferences)
}, [preferences])
const mergedPreferences = useMemo(() => {
return {
...basePreferences,
...preferences
}
}, [preferences])
const [closed, setClosed] = useState(true)
const toggleClosed = useCallback(() => {
if (closed) {
setClosed(false)
} else {
setClosed(true)
}
}, [closed, setClosed])
return {
closed,
setClosed,
toggleClosed,
preferences: mergedPreferences,
setPreferences
}
}
export const {
StoreProvider: PreferencesProvider,
useStore: usePreferences
} = createStoreContext(usePreferencesStore, 'preferences')

View File

@ -0,0 +1,31 @@
export type GeneralThemeOptions = 'auto' | 'light' | 'dark' | 'solarized-dark'
export type GeneralLanguageOptions = 'en-US' | 'ja'
export type GeneralNoteSortingOptions =
| 'date-updated'
| 'date-created'
| 'title'
export type EditorIndentTypeOptions = 'tab' | 'spaces'
export type EditorIndentSizeOptions = 2 | 4 | 8
export type EditorKeymapOptions = 'default' | 'vim' | 'emacs'
export interface Preferences {
// General
'general.accounts': []
'general.language': GeneralLanguageOptions
'general.theme': GeneralThemeOptions
'general.noteSorting': GeneralNoteSortingOptions
'general.enableAnalytics': boolean
// Editor
'editor.theme': string
'editor.fontSize': number
'editor.fontFamily': string
'editor.indentType': EditorIndentTypeOptions
'editor.indentSize': EditorIndentSizeOptions
'editor.keymap': EditorKeymapOptions
// Markdown
'markdown.previewStyle': string
'markdown.codeBlockTheme': string
}