From 64bc72864bad75704a63756a80f256ca0c96889e Mon Sep 17 00:00:00 2001 From: mashirozx Date: Wed, 14 Jul 2021 14:55:41 +0800 Subject: [PATCH] Add option class --- app/controllers/base-controller.php | 7 +- app/controllers/configuration-controller.php | 120 ++++++++++++++++ app/functions.php | 2 +- app/helpers/vite-helper.php | 4 +- app/models/option-model.php | 33 +++++ app/routers/admin-router.php | 21 --- app/routers/api-router.php | 2 + app/style.css | 8 +- package.json | 1 + src/App.vue | 3 +- src/admin/App.vue | 3 +- src/admin/Layout.vue | 30 ++-- src/admin/api/index.ts | 11 ++ src/admin/main.ts | 4 + src/admin/styles/index.scss | 13 ++ src/components/tabBar/TabBar.vue | 83 +++++++++++ src/hooks/index.ts | 3 +- src/hooks/mdc.ts | 23 +++ src/main.ts | 4 +- src/styles/index.scss | 17 +-- src/styles/mdc.scss | 10 ++ yarn.lock | 139 +++++++++++++++++++ 22 files changed, 482 insertions(+), 59 deletions(-) create mode 100644 app/controllers/configuration-controller.php create mode 100644 app/models/option-model.php delete mode 100644 app/routers/admin-router.php create mode 100644 src/admin/api/index.ts create mode 100644 src/admin/styles/index.scss create mode 100644 src/components/tabBar/TabBar.vue create mode 100644 src/styles/mdc.scss diff --git a/app/controllers/base-controller.php b/app/controllers/base-controller.php index 1970882..50dbb01 100644 --- a/app/controllers/base-controller.php +++ b/app/controllers/base-controller.php @@ -2,7 +2,7 @@ namespace Sakura\Controllers; -use Sakura\Lib\BaseClass; +use WP_REST_Controller; /** * The controller abstract base @@ -10,8 +10,11 @@ use Sakura\Lib\BaseClass; * @license GPLv3 * @author mashirozx */ -class BaseController extends BaseClass +class BaseController extends WP_REST_Controller { + public static $version = SAKURA_VERSION; + public static $text_domain = SAKURA_TEXT_DOMAIN; + /** * The rest API request parameters * @since 0.0.1 diff --git a/app/controllers/configuration-controller.php b/app/controllers/configuration-controller.php new file mode 100644 index 0000000..821c52c --- /dev/null +++ b/app/controllers/configuration-controller.php @@ -0,0 +1,120 @@ +namespace = 'sakura/v1'; + $this->rest_base = 'config'; + } + + /** + * Registers the routes for comments. + * + * @since 4.7.0 + * + * @see register_rest_route() + */ + public function register_routes() + { + register_rest_route( + $this->namespace, + '/' . $this->rest_base, + array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array($this, 'get_config'), + 'permission_callback' => array($this, 'get_config_permissions_check'), + // 'args' => $this->get_collection_params(), + ), + array( + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => array($this, 'create_config'), + 'permission_callback' => array($this, 'create_config_permissions_check'), + // 'args' => $this->get_endpoint_args_for_item_schema(WP_REST_Server::CREATABLE), + ), + array( + 'methods' => WP_REST_Server::EDITABLE, + 'callback' => array($this, 'update_config'), + 'permission_callback' => array($this, 'update_config_permissions_check'), + // 'args' => $this->get_endpoint_args_for_item_schema(WP_REST_Server::CREATABLE), + ), + // 'schema' => array($this, 'get_public_item_schema'), + ) + ); + } + + public function get_config(WP_REST_Request $request) + { + $config = (array) OptionModel::get($this->rest_base); + if (!$config) { + return new WP_Error( + 'no_such_option', + __('Maybe you should save the configuration bufore using it.', self::$text_domain), + array('status' => 500) + ); + } else { + return $config; + } + } + + public function get_config_permissions_check(WP_REST_Request $request) + { + return true; + } + + public function create_config(WP_REST_Request $request) + { + $original = (array) $this->get_config($request); + $json = (array) self::json_validate($request->get_body()); + if (empty(array_diff($original, $json))) { + return $original; + } + + $config = OptionModel::create($this->rest_base, $json); + $config = $config ? $config : OptionModel::update($this->rest_base, $json); + if (!$config) { + return new WP_Error( + 'save_config_failure', + __('Unable to save configuration.', self::$text_domain), + array('status' => 500) + ); + } else { + return $this->get_config($request); + } + } + + public function create_config_permissions_check(WP_REST_Request $request) + { + return true; + } + + public function update_config(WP_REST_Request $request) + { + return $this->create_config($request); + } + + public function update_config_permissions_check(WP_REST_Request $request) + { + return true; + } + + public static function json_validate(string $string) + { + $json = json_decode($string); + + return $json; + } +} diff --git a/app/functions.php b/app/functions.php index b0c03d1..0c286ce 100644 --- a/app/functions.php +++ b/app/functions.php @@ -5,7 +5,7 @@ define('SAKURA_VERSION', wp_get_theme()->get('Version')); define('SAKURA_TEXT_DOMAIN', wp_get_theme()->get('TextDomain')); -define('SAKURA_DEVEPLOMENT', false); +define('SAKURA_DEVEPLOMENT', true); define('SAKURA_DEVEPLOMENT_HOST', 'http://127.0.0.1:9000'); // PHP loaders diff --git a/app/helpers/vite-helper.php b/app/helpers/vite-helper.php index 6b1441e..418ee62 100644 --- a/app/helpers/vite-helper.php +++ b/app/helpers/vite-helper.php @@ -63,7 +63,9 @@ class ViteHelper extends BaseClass { wp_enqueue_style('style.css', get_template_directory_uri() . '/style.css'); - wp_enqueue_style('fontawesome-free', 'https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.3/css/all.min.css'); + wp_enqueue_style('fontawesome-free.css', 'https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.3/css/all.min.css'); + + wp_enqueue_style('normalize.css', 'https://cdn.jsdelivr.net/npm/normalize.css/normalize.css'); // TODO: don't use vue.js as handler // wp_enqueue_script('vue.js', 'https://unpkg.com/vue@next', array(), false, false); diff --git a/app/models/option-model.php b/app/models/option-model.php new file mode 100644 index 0000000..a4b2971 --- /dev/null +++ b/app/models/option-model.php @@ -0,0 +1,33 @@ +load('admin-rouer.twig')->renderBlock('admin_app', []); - }); - } -} diff --git a/app/routers/api-router.php b/app/routers/api-router.php index 6d588ba..9dc322f 100644 --- a/app/routers/api-router.php +++ b/app/routers/api-router.php @@ -4,6 +4,7 @@ namespace Sakura\Routers; use WP_REST_Controller; use WP_REST_Server; +use Sakura\Controllers\ConfigurationController; use Sakura\Controllers\InitStateController; use Sakura\Controllers\MenuController; use Sakura\Controllers\PostController; @@ -32,6 +33,7 @@ class ApiRouter extends WP_REST_Controller */ public function register_rest_routes() { + add_action('rest_api_init', [new ConfigurationController(), 'register_routes']); add_action('rest_api_init', function () { // theme's initial states register_rest_route( diff --git a/app/style.css b/app/style.css index 772e4a9..fc4a738 100644 --- a/app/style.css +++ b/app/style.css @@ -3,6 +3,10 @@ Theme Name: sakura-next Author: Mashiro Author URI: https://github.com/mashirozx Description: Next generation Sakura theme. -Version: 0.0.1 +Version: 5.0.0 Text Domain: sakura-next -*/ \ No newline at end of file +*/ + +.grecaptcha-badge { + opacity: 0; +} diff --git a/package.json b/package.json index 6f28f0e..8b4a559 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "@material/list": "^12.0.0-canary.068fd5028.0", "@material/menu": "^12.0.0-canary.068fd5028.0", "@material/ripple": "^12.0.0-canary.068fd5028.0", + "@material/tab-bar": "^12.0.0-canary.22d29cbb4.0", "@material/textfield": "^12.0.0-canary.068fd5028.0", "@material/theme": "^12.0.0-canary.068fd5028.0", "@material/typography": "^12.0.0-canary.068fd5028.0", diff --git a/src/App.vue b/src/App.vue index d296443..5b57c08 100644 --- a/src/App.vue +++ b/src/App.vue @@ -21,6 +21,5 @@ export default defineComponent({ diff --git a/src/admin/App.vue b/src/admin/App.vue index 940606b..c69b77d 100644 --- a/src/admin/App.vue +++ b/src/admin/App.vue @@ -14,11 +14,12 @@ export default defineComponent({ diff --git a/src/admin/Layout.vue b/src/admin/Layout.vue index 4b68b59..f250046 100644 --- a/src/admin/Layout.vue +++ b/src/admin/Layout.vue @@ -1,26 +1,36 @@ diff --git a/src/admin/api/index.ts b/src/admin/api/index.ts new file mode 100644 index 0000000..fc3f97e --- /dev/null +++ b/src/admin/api/index.ts @@ -0,0 +1,11 @@ +import request from '@/utils/http' + +export default { + postConfigJson(config: any): Promise { + return request({ + url: '/sakura/v1/config', + method: 'POST', + data: config, + }) + }, +} diff --git a/src/admin/main.ts b/src/admin/main.ts index ef1099f..f3ef10c 100644 --- a/src/admin/main.ts +++ b/src/admin/main.ts @@ -5,9 +5,13 @@ import App from './App.vue' import { storeProviderPlugin } from '@/hooks/store' // import { auth, init, posts, comments } from './store' import { intlPlugin } from '../locales' +import UiIcon from '@/components/icon/UiIcon.vue' +import Image from '@/components/image/Image.vue' const app = createApp(App) // app.use(storeProviderPlugin, [auth, init, posts, comments]) app.use(intlPlugin) app.use(VueSvgIconPlugin, { tagName: 'svg-icon' }) +app.component('UiIcon', UiIcon) +app.component('Image', Image) app.mount('#app') diff --git a/src/admin/styles/index.scss b/src/admin/styles/index.scss new file mode 100644 index 0000000..8621026 --- /dev/null +++ b/src/admin/styles/index.scss @@ -0,0 +1,13 @@ +@use '@material/ripple/mdc-ripple'; +@use '@material/elevation/mdc-elevation'; +@use '@material/button/mdc-button'; +@use "@material/textfield/mdc-text-field"; +@use '@material/chips/deprecated/mdc-chips'; +@use '@material/list/mdc-list'; +@use '@material/card/mdc-card'; + +// local only +@use "@material/tab-bar/mdc-tab-bar"; +@use "@material/tab-scroller/mdc-tab-scroller"; +@use "@material/tab-indicator/mdc-tab-indicator"; +@use "@material/tab/mdc-tab"; diff --git a/src/components/tabBar/TabBar.vue b/src/components/tabBar/TabBar.vue new file mode 100644 index 0000000..b3eb0e0 --- /dev/null +++ b/src/components/tabBar/TabBar.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 97388c3..2f8c1aa 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -4,10 +4,10 @@ import { useProvider, useProviders, useInjector } from './store' import { useIntlProvider, useIntl } from './intl' import useWindowResize from './useWindowResize' import useResizeObserver from './useResizeObserver' -import { useMDCRipple, useMDCDialog, useMDCTextField } from './mdc' import useReachElementSide from './useReachElementSide' import { useElementRef, useElementRefs } from './useElementRef' import useOffsetDistance from './useOffsetDistance' +import { useMDCRipple, useMDCDialog, useMDCTextField, useMDCTabBar } from './mdc' export { useState, @@ -24,6 +24,7 @@ export { useMDCRipple, useMDCDialog, useMDCTextField, + useMDCTabBar, useReachElementSide, useElementRef, useElementRefs, diff --git a/src/hooks/mdc.ts b/src/hooks/mdc.ts index 07264fe..7c20514 100644 --- a/src/hooks/mdc.ts +++ b/src/hooks/mdc.ts @@ -2,6 +2,7 @@ import { ref, Ref, watch, onBeforeUnmount } from 'vue' import { MDCRipple } from '@material/ripple' import { MDCDialog } from '@material/dialog' import { MDCTextField } from '@material/textfield' +import { MDCTabBar } from '@material/tab-bar' export const useMDCRipple = ( elementRef: El extends Element ? Element : Ref, @@ -70,3 +71,25 @@ export const useMDCTextField = ( return textFieldRef } + +export const useMDCTabBar = ( + elementRef: El extends Element ? Element : Ref +) => { + const tabBarRef: Ref = ref(null) + + if (elementRef instanceof Element) { + tabBarRef.value = new MDCTabBar(elementRef) + } else { + watch(elementRef, (element) => { + if (element) { + tabBarRef.value = new MDCTabBar(element) + } + }) + } + + onBeforeUnmount(() => { + tabBarRef.value?.destroy() + }) + + return tabBarRef +} diff --git a/src/main.ts b/src/main.ts index 56f2057..004342c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -6,8 +6,8 @@ import router from './router' import { storeProviderPlugin } from './hooks/store' import { auth, init, posts, comments } from './store' import { intlPlugin } from './locales' -import UiIcon from './components/icon/UiIcon.vue' -import Image from './components/image/Image.vue' +import UiIcon from '@/components/icon/UiIcon.vue' +import Image from '@/components/image/Image.vue' const theWindow = window as any theWindow.router = router diff --git a/src/styles/index.scss b/src/styles/index.scss index 95df47e..bfdcc91 100644 --- a/src/styles/index.scss +++ b/src/styles/index.scss @@ -1,16 +1 @@ -@use "@material/textfield/mdc-text-field"; -@import 'normalize.css/normalize.css'; -@import '@material/elevation/styles'; -@import '@material/button/styles'; -@import '@material/chips/styles'; -@import '@material/chips/deprecated/mdc-chips'; -@import '@material/list/mdc-list'; -@import '@material/card/mdc-card'; -// @import '@material/textfield/mdc-text-field'; -// @import '@material/dialog/mdc-dialog'; -// @import '@material/typography/styles'; -@import '@material/ripple/styles'; - -.grecaptcha-badge { - opacity: 0; -} +@use 'mdc'; diff --git a/src/styles/mdc.scss b/src/styles/mdc.scss new file mode 100644 index 0000000..a104178 --- /dev/null +++ b/src/styles/mdc.scss @@ -0,0 +1,10 @@ +@use '@material/ripple/mdc-ripple'; +@use '@material/elevation/mdc-elevation'; +@use '@material/button/mdc-button'; +@use "@material/textfield/mdc-text-field"; +@use '@material/chips/deprecated/mdc-chips'; +@use '@material/list/mdc-list'; +@use '@material/card/mdc-card'; +// @import '@material/textfield/mdc-text-field'; +// @import '@material/dialog/mdc-dialog'; +// @import '@material/typography/styles'; diff --git a/yarn.lock b/yarn.lock index b80e64d..89d92ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -678,6 +678,13 @@ dependencies: tslib "^2.1.0" +"@material/animation@12.0.0-canary.22d29cbb4.0": + version "12.0.0-canary.22d29cbb4.0" + resolved "https://registry.nlark.com/@material/animation/download/@material/animation-12.0.0-canary.22d29cbb4.0.tgz#662314409f968aa14156a87284d1f49a098880be" + integrity sha1-ZiMUQJ+WiqFBVqhyhNH0mgmIgL4= + dependencies: + tslib "^2.1.0" + "@material/base@12.0.0-canary.068fd5028.0": version "12.0.0-canary.068fd5028.0" resolved "https://registry.nlark.com/@material/base/download/@material/base-12.0.0-canary.068fd5028.0.tgz#ba4403e153550bfd44c6f4d74af27c43be94b23b" @@ -685,6 +692,13 @@ dependencies: tslib "^2.1.0" +"@material/base@12.0.0-canary.22d29cbb4.0": + version "12.0.0-canary.22d29cbb4.0" + resolved "https://registry.nlark.com/@material/base/download/@material/base-12.0.0-canary.22d29cbb4.0.tgz#a1d54c0605278ce68a323e60f097f0a0a66e6a88" + integrity sha1-odVMBgUnjOaKMj5g8JfwoKZuaog= + dependencies: + tslib "^2.1.0" + "@material/button@12.0.0-canary.068fd5028.0", "@material/button@^12.0.0-canary.068fd5028.0": version "12.0.0-canary.068fd5028.0" resolved "https://registry.nlark.com/@material/button/download/@material/button-12.0.0-canary.068fd5028.0.tgz#dea53b2914e4bd48c94fd8d6c3915c377ff6a326" @@ -758,6 +772,13 @@ dependencies: tslib "^2.1.0" +"@material/density@12.0.0-canary.22d29cbb4.0": + version "12.0.0-canary.22d29cbb4.0" + resolved "https://registry.nlark.com/@material/density/download/@material/density-12.0.0-canary.22d29cbb4.0.tgz#2fce30a88ad93ddf4376e7a9bb481119c954965d" + integrity sha1-L84wqIrZPd9Dduepu0gRGclUll0= + dependencies: + tslib "^2.1.0" + "@material/dialog@^12.0.0-canary.068fd5028.0": version "12.0.0-canary.068fd5028.0" resolved "https://registry.nlark.com/@material/dialog/download/@material/dialog-12.0.0-canary.068fd5028.0.tgz#ad0990c32b4c3538ce469297ca2b7f1f71abc84a" @@ -786,6 +807,14 @@ "@material/feature-targeting" "12.0.0-canary.068fd5028.0" tslib "^2.1.0" +"@material/dom@12.0.0-canary.22d29cbb4.0": + version "12.0.0-canary.22d29cbb4.0" + resolved "https://registry.nlark.com/@material/dom/download/@material/dom-12.0.0-canary.22d29cbb4.0.tgz#c9926d9fbeb5c165142dcadee934e228726412b1" + integrity sha1-yZJtn761wWUULcre6TTiKHJkErE= + dependencies: + "@material/feature-targeting" "12.0.0-canary.22d29cbb4.0" + tslib "^2.1.0" + "@material/elevation@12.0.0-canary.068fd5028.0", "@material/elevation@^12.0.0-canary.068fd5028.0": version "12.0.0-canary.068fd5028.0" resolved "https://registry.nlark.com/@material/elevation/download/@material/elevation-12.0.0-canary.068fd5028.0.tgz#0c670ae52c8f83491b06e31c95917c7ea37ca9ea" @@ -797,6 +826,17 @@ "@material/theme" "12.0.0-canary.068fd5028.0" tslib "^2.1.0" +"@material/elevation@12.0.0-canary.22d29cbb4.0": + version "12.0.0-canary.22d29cbb4.0" + resolved "https://registry.nlark.com/@material/elevation/download/@material/elevation-12.0.0-canary.22d29cbb4.0.tgz#40c8757e9c40ae2cb8df227786cc877017ee17a0" + integrity sha1-QMh1fpxAriy43yJ3hsyHcBfuF6A= + dependencies: + "@material/animation" "12.0.0-canary.22d29cbb4.0" + "@material/base" "12.0.0-canary.22d29cbb4.0" + "@material/feature-targeting" "12.0.0-canary.22d29cbb4.0" + "@material/theme" "12.0.0-canary.22d29cbb4.0" + tslib "^2.1.0" + "@material/feature-targeting@12.0.0-canary.068fd5028.0": version "12.0.0-canary.068fd5028.0" resolved "https://registry.nlark.com/@material/feature-targeting/download/@material/feature-targeting-12.0.0-canary.068fd5028.0.tgz#e043d1f549bfd1a6e647486a354dcb7b04c7afb3" @@ -804,6 +844,13 @@ dependencies: tslib "^2.1.0" +"@material/feature-targeting@12.0.0-canary.22d29cbb4.0": + version "12.0.0-canary.22d29cbb4.0" + resolved "https://registry.nlark.com/@material/feature-targeting/download/@material/feature-targeting-12.0.0-canary.22d29cbb4.0.tgz#68db5b8a16b673a1eb0c4c74de4954caab334e2e" + integrity sha1-aNtbiha2c6HrDEx03klUyqszTi4= + dependencies: + tslib "^2.1.0" + "@material/floating-label@12.0.0-canary.068fd5028.0": version "12.0.0-canary.068fd5028.0" resolved "https://registry.nlark.com/@material/floating-label/download/@material/floating-label-12.0.0-canary.068fd5028.0.tgz#db76cda2d1de4482ddca5df854e1c1e5efe73ac5" @@ -914,6 +961,18 @@ "@material/theme" "12.0.0-canary.068fd5028.0" tslib "^2.1.0" +"@material/ripple@12.0.0-canary.22d29cbb4.0": + version "12.0.0-canary.22d29cbb4.0" + resolved "https://registry.nlark.com/@material/ripple/download/@material/ripple-12.0.0-canary.22d29cbb4.0.tgz#9cc50929c66841691e35ac603168a83ef176af6e" + integrity sha1-nMUJKcZoQWkeNaxgMWioPvF2r24= + dependencies: + "@material/animation" "12.0.0-canary.22d29cbb4.0" + "@material/base" "12.0.0-canary.22d29cbb4.0" + "@material/dom" "12.0.0-canary.22d29cbb4.0" + "@material/feature-targeting" "12.0.0-canary.22d29cbb4.0" + "@material/theme" "12.0.0-canary.22d29cbb4.0" + tslib "^2.1.0" + "@material/rtl@12.0.0-canary.068fd5028.0": version "12.0.0-canary.068fd5028.0" resolved "https://registry.nlark.com/@material/rtl/download/@material/rtl-12.0.0-canary.068fd5028.0.tgz#e7a24ffdc7ef2419433a29c9fed4a0bd79e9086b" @@ -922,6 +981,14 @@ "@material/theme" "12.0.0-canary.068fd5028.0" tslib "^2.1.0" +"@material/rtl@12.0.0-canary.22d29cbb4.0": + version "12.0.0-canary.22d29cbb4.0" + resolved "https://registry.nlark.com/@material/rtl/download/@material/rtl-12.0.0-canary.22d29cbb4.0.tgz#589593c59ca384caf2ac16892d55a9e19d7759ea" + integrity sha1-WJWTxZyjhMryrBaJLVWp4Z13Weo= + dependencies: + "@material/theme" "12.0.0-canary.22d29cbb4.0" + tslib "^2.1.0" + "@material/shape@12.0.0-canary.068fd5028.0": version "12.0.0-canary.068fd5028.0" resolved "https://registry.nlark.com/@material/shape/download/@material/shape-12.0.0-canary.068fd5028.0.tgz#e68f58979314a23a3486105a8f91482b8c8e9130" @@ -932,6 +999,61 @@ "@material/theme" "12.0.0-canary.068fd5028.0" tslib "^2.1.0" +"@material/tab-bar@^12.0.0-canary.22d29cbb4.0": + version "12.0.0-canary.22d29cbb4.0" + resolved "https://registry.nlark.com/@material/tab-bar/download/@material/tab-bar-12.0.0-canary.22d29cbb4.0.tgz#294a67f387e80cccade1700ab15ae79d9faee394" + integrity sha1-KUpn84foDMyt4XAKsVrnnZ+u45Q= + dependencies: + "@material/animation" "12.0.0-canary.22d29cbb4.0" + "@material/base" "12.0.0-canary.22d29cbb4.0" + "@material/density" "12.0.0-canary.22d29cbb4.0" + "@material/elevation" "12.0.0-canary.22d29cbb4.0" + "@material/feature-targeting" "12.0.0-canary.22d29cbb4.0" + "@material/tab" "12.0.0-canary.22d29cbb4.0" + "@material/tab-indicator" "12.0.0-canary.22d29cbb4.0" + "@material/tab-scroller" "12.0.0-canary.22d29cbb4.0" + "@material/theme" "12.0.0-canary.22d29cbb4.0" + "@material/typography" "12.0.0-canary.22d29cbb4.0" + tslib "^2.1.0" + +"@material/tab-indicator@12.0.0-canary.22d29cbb4.0": + version "12.0.0-canary.22d29cbb4.0" + resolved "https://registry.nlark.com/@material/tab-indicator/download/@material/tab-indicator-12.0.0-canary.22d29cbb4.0.tgz#a068a64f5ebc4fa7b4fb036aec0a24b47b7c406d" + integrity sha1-oGimT168T6e0+wNq7AoktHt8QG0= + dependencies: + "@material/animation" "12.0.0-canary.22d29cbb4.0" + "@material/base" "12.0.0-canary.22d29cbb4.0" + "@material/feature-targeting" "12.0.0-canary.22d29cbb4.0" + "@material/theme" "12.0.0-canary.22d29cbb4.0" + tslib "^2.1.0" + +"@material/tab-scroller@12.0.0-canary.22d29cbb4.0": + version "12.0.0-canary.22d29cbb4.0" + resolved "https://registry.nlark.com/@material/tab-scroller/download/@material/tab-scroller-12.0.0-canary.22d29cbb4.0.tgz#44d9c07300dc5c7468523d950d45daf2164ff3e5" + integrity sha1-RNnAcwDcXHRoUj2VDUXa8hZP8+U= + dependencies: + "@material/animation" "12.0.0-canary.22d29cbb4.0" + "@material/base" "12.0.0-canary.22d29cbb4.0" + "@material/dom" "12.0.0-canary.22d29cbb4.0" + "@material/feature-targeting" "12.0.0-canary.22d29cbb4.0" + "@material/tab" "12.0.0-canary.22d29cbb4.0" + tslib "^2.1.0" + +"@material/tab@12.0.0-canary.22d29cbb4.0": + version "12.0.0-canary.22d29cbb4.0" + resolved "https://registry.nlark.com/@material/tab/download/@material/tab-12.0.0-canary.22d29cbb4.0.tgz#3eea5275d9b85a1e37e4a25dc159327e45e7af9e" + integrity sha1-PupSddm4Wh435KJdwVkyfkXnr54= + dependencies: + "@material/base" "12.0.0-canary.22d29cbb4.0" + "@material/elevation" "12.0.0-canary.22d29cbb4.0" + "@material/feature-targeting" "12.0.0-canary.22d29cbb4.0" + "@material/ripple" "12.0.0-canary.22d29cbb4.0" + "@material/rtl" "12.0.0-canary.22d29cbb4.0" + "@material/tab-indicator" "12.0.0-canary.22d29cbb4.0" + "@material/theme" "12.0.0-canary.22d29cbb4.0" + "@material/typography" "12.0.0-canary.22d29cbb4.0" + tslib "^2.1.0" + "@material/textfield@^12.0.0-canary.068fd5028.0": version "12.0.0-canary.068fd5028.0" resolved "https://registry.nlark.com/@material/textfield/download/@material/textfield-12.0.0-canary.068fd5028.0.tgz#68ca83ade769f66521c2e5d22d5dfa64f40c5e43" @@ -960,6 +1082,14 @@ "@material/feature-targeting" "12.0.0-canary.068fd5028.0" tslib "^2.1.0" +"@material/theme@12.0.0-canary.22d29cbb4.0": + version "12.0.0-canary.22d29cbb4.0" + resolved "https://registry.nlark.com/@material/theme/download/@material/theme-12.0.0-canary.22d29cbb4.0.tgz#a99ff4e33ffb72ec1ac616de31533da02881d278" + integrity sha1-qZ/04z/7cuwaxhbeMVM9oCiB0ng= + dependencies: + "@material/feature-targeting" "12.0.0-canary.22d29cbb4.0" + tslib "^2.1.0" + "@material/touch-target@12.0.0-canary.068fd5028.0": version "12.0.0-canary.068fd5028.0" resolved "https://registry.nlark.com/@material/touch-target/download/@material/touch-target-12.0.0-canary.068fd5028.0.tgz#542c3fa5e729fe542c21a8668a5fdd820b05e415" @@ -978,6 +1108,15 @@ "@material/theme" "12.0.0-canary.068fd5028.0" tslib "^2.1.0" +"@material/typography@12.0.0-canary.22d29cbb4.0": + version "12.0.0-canary.22d29cbb4.0" + resolved "https://registry.nlark.com/@material/typography/download/@material/typography-12.0.0-canary.22d29cbb4.0.tgz#cb858a4cca6dcb12111f9e77a3f6711b30f3a4d3" + integrity sha1-y4WKTMptyxIRH553o/ZxGzDzpNM= + dependencies: + "@material/feature-targeting" "12.0.0-canary.22d29cbb4.0" + "@material/theme" "12.0.0-canary.22d29cbb4.0" + tslib "^2.1.0" + "@nodelib/fs.scandir@2.1.4": version "2.1.4" resolved "https://registry.npm.taobao.org/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.4.tgz?cache=0&sync_timestamp=1609074618762&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.scandir%2Fdownload%2F%40nodelib%2Ffs.scandir-2.1.4.tgz"