diff --git a/examples/mini-program-example/src/app.config.ts b/examples/mini-program-example/src/app.config.ts index 15c683b2964d..16b6158d4393 100644 --- a/examples/mini-program-example/src/app.config.ts +++ b/examples/mini-program-example/src/app.config.ts @@ -1,6 +1,14 @@ export default defineAppConfig({ pages: [ - 'pages/index/index' + 'pages/index/index', + 'pages/grid-view/index', + 'pages/list-view/index', + 'pages/page-container/index', + 'pages/match-media/index', + 'pages/sticky-header/index', + 'pages/root-portal/index', + 'pages/radio-group/index', + 'pages/check-box-group/index', ], window: { backgroundTextStyle: 'light', diff --git a/examples/mini-program-example/src/pages/check-box-group/index.config.ts b/examples/mini-program-example/src/pages/check-box-group/index.config.ts new file mode 100644 index 000000000000..fe7e87d120ab --- /dev/null +++ b/examples/mini-program-example/src/pages/check-box-group/index.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '第二个页面' +}) diff --git a/examples/mini-program-example/src/pages/check-box-group/index.scss b/examples/mini-program-example/src/pages/check-box-group/index.scss new file mode 100644 index 000000000000..198f1bcdd141 --- /dev/null +++ b/examples/mini-program-example/src/pages/check-box-group/index.scss @@ -0,0 +1,46 @@ + +.furit-multiple-selected { + left: 3px; + top: 3px; + width: 14px; + height: 14px; + background: #1aad19; +} + +.furit-multiple-normal { + left: 3px; + top: 3px; + width: 12px; + height: 12px; + stroke-width: 2; + border-color:#1aad19; + fill: #fcfff4; + border-style: solid; +} + +.furit-selected { + left: 3px; + top: 3px; + width: 14px; + height: 14px; + background: #1aad19; + border-radius: 50%; +} + +.furit-normal { + left: 3px; + top: 3px; + width: 12px; + height: 12px; + stroke-width: 2; + border-color:#1aad19; + fill: #fcfff4; + border-radius: 50%; + border-style:solid; +} + +.furit-item { + display: flex; + flex-direction: row; + align-content: center; +} diff --git a/examples/mini-program-example/src/pages/check-box-group/index.tsx b/examples/mini-program-example/src/pages/check-box-group/index.tsx new file mode 100644 index 000000000000..f0112d50b6f8 --- /dev/null +++ b/examples/mini-program-example/src/pages/check-box-group/index.tsx @@ -0,0 +1,44 @@ +import {View, Image, Text, ListView, Label, Checkbox, CheckboxGroup} from '@tarojs/components' +import {useLoad} from '@tarojs/taro' +import './index.scss' +import React, {useState} from "react"; + +const furits = [ + { + key: "apple", + name: "苹果" + }, { + key: "banana", + name: "香蕉" + }, { + key: "peach", + name: "桃子" + } +] + +export default function Index() { + useLoad(() => { + console.log('Page loaded.') + }) + let [multipleSelectedFurits, setMultipleSelectedFurits] = useState([] as string[]) + + return ( + + { + setMultipleSelectedFurits(event.detail.value) + }}> +

多选:

+ { + furits.map(item => { + let checked = multipleSelectedFurits.indexOf(item.name) != -1; + return + }) + } +
+
+ ) +} diff --git a/examples/mini-program-example/src/pages/grid-view/index.config.ts b/examples/mini-program-example/src/pages/grid-view/index.config.ts new file mode 100644 index 000000000000..fe7e87d120ab --- /dev/null +++ b/examples/mini-program-example/src/pages/grid-view/index.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '第二个页面' +}) diff --git a/examples/mini-program-example/src/pages/grid-view/index.scss b/examples/mini-program-example/src/pages/grid-view/index.scss new file mode 100644 index 000000000000..46d2686d13f4 --- /dev/null +++ b/examples/mini-program-example/src/pages/grid-view/index.scss @@ -0,0 +1,22 @@ +@import '@tarojs/components-mpharmony/dist/style/components/page-container'; + + +.overlay_black { + background: #0d0d0d; +} + +.overlay_white { + background: #f4f4f4; +} +.customStyle { + background: #8065df; +} + + + +.gridStyle { + width: 1000px; +} + + + diff --git a/examples/mini-program-example/src/pages/grid-view/index.tsx b/examples/mini-program-example/src/pages/grid-view/index.tsx new file mode 100644 index 000000000000..65c1571d6e3f --- /dev/null +++ b/examples/mini-program-example/src/pages/grid-view/index.tsx @@ -0,0 +1,73 @@ +import {View, Image, MatchMedia, GridView, Text} from '@tarojs/components' +import {useLoad} from '@tarojs/taro' +import './index.scss' +import React from "react"; + +const grid_data = [ + { + image: 'https://img12.360buyimg.com/jdphoto/s72x72_jfs/t6160/14/2008729947/2754/7d512a86/595c3aeeNa89ddf71.png', + value: '领取中心', + w: 1, + h: 1 + }, + { + image: 'https://img20.360buyimg.com/jdphoto/s72x72_jfs/t15151/308/1012305375/2300/536ee6ef/5a411466N040a074b.png', + value: '找折扣', + w: 1, + h: 1 + }, + { + image: 'https://img10.360buyimg.com/jdphoto/s72x72_jfs/t5872/209/5240187906/2872/8fa98cd/595c3b2aN4155b931.png', + value: '领会员', + w: 1, + h: 1 + }, + { + image: 'https://img12.360buyimg.com/jdphoto/s72x72_jfs/t10660/330/203667368/1672/801735d7/59c85643N31e68303.png', + value: '新品首发', + w: 2, + h: 2 + }, + { + image: 'https://img14.360buyimg.com/jdphoto/s72x72_jfs/t17251/336/1311038817/3177/72595a07/5ac44618Na1db7b09.png', + value: '领京豆', + w: 1, + h: 1 + }, + { + image: 'https://img30.360buyimg.com/jdphoto/s72x72_jfs/t5770/97/5184449507/2423/294d5f95/595c3b4dNbc6bc95d.png', + value: '手机馆', + w: 1, + h: 1 + } +] + +export default function Index() { + useLoad(() => { + console.log('Page loaded.') + }) + + const gridView = grid_data.map((childItem, index) => ( + { + console.log('w ' + index + ' w ' + childItem.w + ' h ' + childItem.h) + }}> + {childItem.image && ( + + )} + + {childItem.value} + + + )); + + return ( + + + {gridView} + + + ) +} diff --git a/examples/mini-program-example/src/pages/index/index.scss b/examples/mini-program-example/src/pages/index/index.scss index 6d402f52449d..f2bbb9c13a1b 100644 --- a/examples/mini-program-example/src/pages/index/index.scss +++ b/examples/mini-program-example/src/pages/index/index.scss @@ -1,46 +1,25 @@ -.furit-multiple-selected { - left: 3px; - top: 3px; - width: 14px; - height: 14px; - background: #1aad19; -} +@import '@tarojs/components-mpharmony/dist/style/components/page-container'; -.furit-multiple-normal { - left: 3px; - top: 3px; - width: 12px; - height: 12px; - stroke-width: 2; - border-color:#1aad19; - fill: #fcfff4; - border-style: solid; -} -.furit-selected { - left: 3px; - top: 3px; - width: 14px; - height: 14px; - background: #1aad19; - border-radius: 50%; +.overlay_black { + background: #0d0d0d; } -.furit-normal { - left: 3px; - top: 3px; - width: 12px; - height: 12px; - stroke-width: 2; - border-color:#1aad19; - fill: #fcfff4; - border-radius: 50%; - border-style:solid; +.overlay_white { + background: #f4f4f4; } +.customStyle { + background: #8065df; +} + -.furit-item { - display: flex; - flex-direction: row; - align-content: center; + +.gridStyle { + width: 1000px; } + + +.buttonStyle { + width: 200px; +} diff --git a/examples/mini-program-example/src/pages/index/index.tsx b/examples/mini-program-example/src/pages/index/index.tsx index def1d1545ac4..3a428ab248f6 100644 --- a/examples/mini-program-example/src/pages/index/index.tsx +++ b/examples/mini-program-example/src/pages/index/index.tsx @@ -1,47 +1,7 @@ -import { View, Text, Image, GridView, ListView, RootPortal, StickyHeader, StickySection, CheckboxGroup, Checkbox, Label, RadioGroup, Radio } from '@tarojs/components' -import { useLoad } from '@tarojs/taro' +import {View, Text, Button,RootPortal, StickyHeader, StickySection, CheckboxGroup, Checkbox, Label, } from '@tarojs/components' +import Taro, {useLoad} from '@tarojs/taro' import './index.scss' -import { useState } from 'react' - -const grid_data = [ - { - image: 'https://img12.360buyimg.com/jdphoto/s72x72_jfs/t6160/14/2008729947/2754/7d512a86/595c3aeeNa89ddf71.png', - value: '领取中心' - }, - { - image: 'https://img20.360buyimg.com/jdphoto/s72x72_jfs/t15151/308/1012305375/2300/536ee6ef/5a411466N040a074b.png', - value: '找折扣' - }, - { - image: 'https://img10.360buyimg.com/jdphoto/s72x72_jfs/t5872/209/5240187906/2872/8fa98cd/595c3b2aN4155b931.png', - value: '领会员' - }, - { - image: 'https://img12.360buyimg.com/jdphoto/s72x72_jfs/t10660/330/203667368/1672/801735d7/59c85643N31e68303.png', - value: '新品首发' - }, - { - image: 'https://img14.360buyimg.com/jdphoto/s72x72_jfs/t17251/336/1311038817/3177/72595a07/5ac44618Na1db7b09.png', - value: '领京豆' - }, - { - image: 'https://img30.360buyimg.com/jdphoto/s72x72_jfs/t5770/97/5184449507/2423/294d5f95/595c3b4dNbc6bc95d.png', - value: '手机馆' - } -] - -const furits = [ - { - key: "apple", - name: "苹果" - },{ - key: "banana", - name: "香蕉" - }, { - key: "peach", - name: "桃子" - } -] +import React, {useState} from "react"; export default function Index() { @@ -49,101 +9,59 @@ export default function Index() { console.log('Page loaded.') }) - let [multipleSelectedFurits, setMultipleSelectedFurits] = useState([] as string[]) - - let [singleSelectedFurits, setSingleSelectedFurits] = useState(null) return ( Hello world! + + + + + + + + + + + + + + + + -
- { - setMultipleSelectedFurits(event.detail.value) - }}> -

多选:

- { - furits.map(item => { - let checked = multipleSelectedFurits.indexOf(item.name) != -1; - return - }) - } -
-
- -
- { - setSingleSelectedFurits(event.detail.value) - }}> -

单选:

- { - furits.map(item => { - let checked = (singleSelectedFurits == item.key); - return
- -
- -
- }) - } -
-
- - - Hello RootPortal! - Hello RootPortal! - - - - 吸顶布局容器测试 - - - - ( - - (console.log('childItem ' + childItem.value + ' i ' + i + ' index ' + index))}> - {childItem.image && ( - - )} - - {childItem.value} - - - - )} /> - - ( - - (console.log('childItem ' + childItem.value + ' i ' + i))}> - {childItem.image && ( - - )} - - {childItem.value} - - - - )} />
) diff --git a/examples/mini-program-example/src/pages/list-view/index.config.ts b/examples/mini-program-example/src/pages/list-view/index.config.ts new file mode 100644 index 000000000000..fe7e87d120ab --- /dev/null +++ b/examples/mini-program-example/src/pages/list-view/index.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '第二个页面' +}) diff --git a/examples/mini-program-example/src/pages/list-view/index.scss b/examples/mini-program-example/src/pages/list-view/index.scss new file mode 100644 index 000000000000..46d2686d13f4 --- /dev/null +++ b/examples/mini-program-example/src/pages/list-view/index.scss @@ -0,0 +1,22 @@ +@import '@tarojs/components-mpharmony/dist/style/components/page-container'; + + +.overlay_black { + background: #0d0d0d; +} + +.overlay_white { + background: #f4f4f4; +} +.customStyle { + background: #8065df; +} + + + +.gridStyle { + width: 1000px; +} + + + diff --git a/examples/mini-program-example/src/pages/list-view/index.tsx b/examples/mini-program-example/src/pages/list-view/index.tsx new file mode 100644 index 000000000000..16534e26ab2b --- /dev/null +++ b/examples/mini-program-example/src/pages/list-view/index.tsx @@ -0,0 +1,68 @@ +import {View, Image, Text, ListView} from '@tarojs/components' +import {useLoad} from '@tarojs/taro' +import './index.scss' +import React from "react"; + +const list_data = [ + { + image: 'https://img12.360buyimg.com/jdphoto/s72x72_jfs/t6160/14/2008729947/2754/7d512a86/595c3aeeNa89ddf71.png', + value: '领取中心', + w: 1, + h: 1 + }, + { + image: 'https://img20.360buyimg.com/jdphoto/s72x72_jfs/t15151/308/1012305375/2300/536ee6ef/5a411466N040a074b.png', + value: '找折扣', + w: 1, + h: 1 + }, + { + image: 'https://img10.360buyimg.com/jdphoto/s72x72_jfs/t5872/209/5240187906/2872/8fa98cd/595c3b2aN4155b931.png', + value: '领会员', + w: 1, + h: 1 + }, + { + image: 'https://img12.360buyimg.com/jdphoto/s72x72_jfs/t10660/330/203667368/1672/801735d7/59c85643N31e68303.png', + value: '新品首发', + w: 2, + h: 2 + }, + { + image: 'https://img14.360buyimg.com/jdphoto/s72x72_jfs/t17251/336/1311038817/3177/72595a07/5ac44618Na1db7b09.png', + value: '领京豆', + w: 1, + h: 1 + }, + { + image: 'https://img30.360buyimg.com/jdphoto/s72x72_jfs/t5770/97/5184449507/2423/294d5f95/595c3b4dNbc6bc95d.png', + value: '手机馆', + w: 1, + h: 1 + } +] + +export default function Index() { + useLoad(() => { + console.log('Page loaded.') + }) + + return ( + + ( + + (console.log("childItem " + childItem.value + " i " + i))}> + {childItem.image && ( + + )} + + {childItem.value} + + + )}/> + + ) +} diff --git a/examples/mini-program-example/src/pages/match-media/index.config.ts b/examples/mini-program-example/src/pages/match-media/index.config.ts new file mode 100644 index 000000000000..fe7e87d120ab --- /dev/null +++ b/examples/mini-program-example/src/pages/match-media/index.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '第二个页面' +}) diff --git a/examples/mini-program-example/src/pages/match-media/index.scss b/examples/mini-program-example/src/pages/match-media/index.scss new file mode 100644 index 000000000000..46d2686d13f4 --- /dev/null +++ b/examples/mini-program-example/src/pages/match-media/index.scss @@ -0,0 +1,22 @@ +@import '@tarojs/components-mpharmony/dist/style/components/page-container'; + + +.overlay_black { + background: #0d0d0d; +} + +.overlay_white { + background: #f4f4f4; +} +.customStyle { + background: #8065df; +} + + + +.gridStyle { + width: 1000px; +} + + + diff --git a/examples/mini-program-example/src/pages/match-media/index.tsx b/examples/mini-program-example/src/pages/match-media/index.tsx new file mode 100644 index 000000000000..062dbf51f1b8 --- /dev/null +++ b/examples/mini-program-example/src/pages/match-media/index.tsx @@ -0,0 +1,19 @@ +import {View, Image, MatchMedia} from '@tarojs/components' +import {useLoad} from '@tarojs/taro' +import './index.scss' +import React from "react"; + +export default function Index() { + useLoad(() => { + console.log('Page loaded.') + }) + + + return ( + + + + + + ) +} diff --git a/examples/mini-program-example/src/pages/page-container/index.config.ts b/examples/mini-program-example/src/pages/page-container/index.config.ts new file mode 100644 index 000000000000..fe7e87d120ab --- /dev/null +++ b/examples/mini-program-example/src/pages/page-container/index.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '第二个页面' +}) diff --git a/examples/mini-program-example/src/pages/page-container/index.scss b/examples/mini-program-example/src/pages/page-container/index.scss new file mode 100644 index 000000000000..46d2686d13f4 --- /dev/null +++ b/examples/mini-program-example/src/pages/page-container/index.scss @@ -0,0 +1,22 @@ +@import '@tarojs/components-mpharmony/dist/style/components/page-container'; + + +.overlay_black { + background: #0d0d0d; +} + +.overlay_white { + background: #f4f4f4; +} +.customStyle { + background: #8065df; +} + + + +.gridStyle { + width: 1000px; +} + + + diff --git a/examples/mini-program-example/src/pages/page-container/index.tsx b/examples/mini-program-example/src/pages/page-container/index.tsx new file mode 100644 index 000000000000..3051e3b7f92f --- /dev/null +++ b/examples/mini-program-example/src/pages/page-container/index.tsx @@ -0,0 +1,114 @@ +import {View, Text, Button, PageContainer} from '@tarojs/components' +import {useLoad} from '@tarojs/taro' +import './index.scss' +import React, {useState} from "react"; + + +export default function Index() { + + const [container_show, setContainerShow] = useState(false); + const [position, setTransitionPosition] = useState('bottom'); + const [round, setRound] = useState(false); + const [overlay, setOverlay] = useState(false); + const [overlayStyle, setOverlayStyle] = useState('overlay_black'); + + useLoad(() => { + console.log('Page loaded.') + }) + + + return ( + + (setContainerShow(false))} + bindbeforeenter={() => { + console.log("==bindbeforeenter==") + }} + bindenter={() => { + console.log("==bindenter==") + }} + bindafterenter={() => { + console.log("==bindafterenter==") + }} + bindbeforeleave={() => { + console.log("==bindbeforeleave==") + }} + bindleave={() => { + console.log("==bindleave==") + }} + bindafterleave={() => { + console.log("==bindafterleave==") + }} + duration={2000} + zIndex={20} + customStyle={'customStyle'} + > + Hello world! + Hello world! + Hello world! + Hello world! + + + + + + 弹出位置 + + + + + + + + + + 弹出圆角 + + + + 遮罩层 + + + + + + + + + + ) +} diff --git a/examples/mini-program-example/src/pages/radio-group/index.config.ts b/examples/mini-program-example/src/pages/radio-group/index.config.ts new file mode 100644 index 000000000000..fe7e87d120ab --- /dev/null +++ b/examples/mini-program-example/src/pages/radio-group/index.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '第二个页面' +}) diff --git a/examples/mini-program-example/src/pages/radio-group/index.scss b/examples/mini-program-example/src/pages/radio-group/index.scss new file mode 100644 index 000000000000..198f1bcdd141 --- /dev/null +++ b/examples/mini-program-example/src/pages/radio-group/index.scss @@ -0,0 +1,46 @@ + +.furit-multiple-selected { + left: 3px; + top: 3px; + width: 14px; + height: 14px; + background: #1aad19; +} + +.furit-multiple-normal { + left: 3px; + top: 3px; + width: 12px; + height: 12px; + stroke-width: 2; + border-color:#1aad19; + fill: #fcfff4; + border-style: solid; +} + +.furit-selected { + left: 3px; + top: 3px; + width: 14px; + height: 14px; + background: #1aad19; + border-radius: 50%; +} + +.furit-normal { + left: 3px; + top: 3px; + width: 12px; + height: 12px; + stroke-width: 2; + border-color:#1aad19; + fill: #fcfff4; + border-radius: 50%; + border-style:solid; +} + +.furit-item { + display: flex; + flex-direction: row; + align-content: center; +} diff --git a/examples/mini-program-example/src/pages/radio-group/index.tsx b/examples/mini-program-example/src/pages/radio-group/index.tsx new file mode 100644 index 000000000000..8e30bb4dddc8 --- /dev/null +++ b/examples/mini-program-example/src/pages/radio-group/index.tsx @@ -0,0 +1,44 @@ +import {View, Image, Text, RadioGroup, Radio,Label} from '@tarojs/components' +import {useLoad} from '@tarojs/taro' +import './index.scss' +import React, {useState} from "react"; + +const furits = [ + { + key: "apple", + name: "苹果" + },{ + key: "banana", + name: "香蕉" + }, { + key: "peach", + name: "桃子" + } +] +export default function Index() { + useLoad(() => { + console.log('Page loaded.') + }) + + let [singleSelectedFurits, setSingleSelectedFurits] = useState(null) + + return ( + + { + setSingleSelectedFurits(event.detail.value) + }}> +

单选:

+ { + furits.map(item => { + let checked = (singleSelectedFurits == item.key); + return
+ +
+ +
+ }) + } +
+
+ ) +} diff --git a/examples/mini-program-example/src/pages/root-portal/index.config.ts b/examples/mini-program-example/src/pages/root-portal/index.config.ts new file mode 100644 index 000000000000..fe7e87d120ab --- /dev/null +++ b/examples/mini-program-example/src/pages/root-portal/index.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '第二个页面' +}) diff --git a/examples/mini-program-example/src/pages/root-portal/index.scss b/examples/mini-program-example/src/pages/root-portal/index.scss new file mode 100644 index 000000000000..46d2686d13f4 --- /dev/null +++ b/examples/mini-program-example/src/pages/root-portal/index.scss @@ -0,0 +1,22 @@ +@import '@tarojs/components-mpharmony/dist/style/components/page-container'; + + +.overlay_black { + background: #0d0d0d; +} + +.overlay_white { + background: #f4f4f4; +} +.customStyle { + background: #8065df; +} + + + +.gridStyle { + width: 1000px; +} + + + diff --git a/examples/mini-program-example/src/pages/root-portal/index.tsx b/examples/mini-program-example/src/pages/root-portal/index.tsx new file mode 100644 index 000000000000..dca01c1db2de --- /dev/null +++ b/examples/mini-program-example/src/pages/root-portal/index.tsx @@ -0,0 +1,28 @@ +import {View, Text, RootPortal} from '@tarojs/components' +import {useLoad} from '@tarojs/taro' +import './index.scss' +import React from "react"; + +export default function Index() { + useLoad(() => { + console.log('Page loaded.') + }) + + return ( + + + Hello RootPortal! + Hello RootPortal! + + + ) +} diff --git a/examples/mini-program-example/src/pages/sticky-header/index.config.ts b/examples/mini-program-example/src/pages/sticky-header/index.config.ts new file mode 100644 index 000000000000..fe7e87d120ab --- /dev/null +++ b/examples/mini-program-example/src/pages/sticky-header/index.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '第二个页面' +}) diff --git a/examples/mini-program-example/src/pages/sticky-header/index.scss b/examples/mini-program-example/src/pages/sticky-header/index.scss new file mode 100644 index 000000000000..46d2686d13f4 --- /dev/null +++ b/examples/mini-program-example/src/pages/sticky-header/index.scss @@ -0,0 +1,22 @@ +@import '@tarojs/components-mpharmony/dist/style/components/page-container'; + + +.overlay_black { + background: #0d0d0d; +} + +.overlay_white { + background: #f4f4f4; +} +.customStyle { + background: #8065df; +} + + + +.gridStyle { + width: 1000px; +} + + + diff --git a/examples/mini-program-example/src/pages/sticky-header/index.tsx b/examples/mini-program-example/src/pages/sticky-header/index.tsx new file mode 100644 index 000000000000..7251b42590a8 --- /dev/null +++ b/examples/mini-program-example/src/pages/sticky-header/index.tsx @@ -0,0 +1,20 @@ +import {View, StickyHeader, StickySection} from '@tarojs/components' +import {useLoad} from '@tarojs/taro' +import './index.scss' +import React from "react"; + +export default function Index() { + useLoad(() => { + console.log('Page loaded.') + }) + + return ( + + + + 吸顶布局容器测试 + + + + ) +} diff --git a/examples/mini-program-example/src/pages/transition/base-styles.css b/examples/mini-program-example/src/pages/transition/base-styles.css new file mode 100644 index 000000000000..f3ca7a39425a --- /dev/null +++ b/examples/mini-program-example/src/pages/transition/base-styles.css @@ -0,0 +1,159 @@ +:root { + --white: #fff; + --primary-text: #212121; + --secondary-text: #757575; + --divider: #bdbdbd; + --primary-color: #673ab7; + --primary-dark: #512da8; + --primary-light: #d1c4e9; + --accent-color: #ff9800; + --content-padding: 1.2rem; + + color: var(--primary-text); + font-family: system-ui, sans-serif; + font-size: 16px; + line-height: 1.5; +} + +body { + margin: 0; +} + +* { + -webkit-tap-highlight-color: transparent; +} + +.main-header { + align-items: center; + background: var(--primary-color); + color: var(--white); + contain: paint; + display: grid; + height: 54px; + padding: 0 var(--content-padding); +} + +.back-and-title { + align-items: center; + display: grid; + gap: 0.3rem; + grid-template-columns: 31px 1fr; + color: inherit; + text-decoration: none; +} + +.content { + padding: var(--content-padding); +} + +.content-title { + font-size: 1.6rem; + font-weight: 600; + margin: 0; + max-width: 43ch; +} + +.back-icon { + display: block; + fill: var(--white); +} + +.gallery { + display: grid; + gap: var(--content-padding); + grid-template-columns: repeat(auto-fill,minmax(300px,1fr)); + margin: 1rem 0; + padding: 0; +} + +.gallery > li { + display: block; + box-shadow: 0 5px 12px rgb(0 0 0 / 34%); +} + +.gallery a { + color: inherit; + text-decoration: none; +} + +.gallery img { + display: block; + width: 100%; + height: auto; + aspect-ratio: 16/9; +} + +.square-gallery { + grid-template-columns: repeat(auto-fill,minmax(230px,1fr)); +} + +.square-gallery img { + aspect-ratio: 1/1; + object-fit: cover; +} + +.gallery-item-title { + padding: 1rem; + display: block; + text-align: center; +} + +.banner-img img { + display: block; + width: 100%; + height: auto; + max-width: 1170px; +} + +.banner-img { + display: block; + background: var(--divider); +} + +.content-alt { + background: #d4bbff; +} + +.body-grid { + height: -webkit-fill-available; +} + +.body-grid body { + height: 100vh; + height: -webkit-fill-available; + display: grid; + grid-template-rows: max-content 1fr; +} + +@media (min-width: 530px) { + .content-and-nav { + display: grid; + grid-template-columns: 1fr 180px; + } +} + +.main-nav { + background: #d4bbff; +} + +.main-nav ul { + margin: 0; + padding: 0; +} + +.main-nav li { + display: block; +} + +.main-nav li a { + display: grid; + grid-template-columns: max-content 1fr; + gap: 0.7rem; + padding: 1rem; + color: #000; + text-decoration: none; +} + +.main-nav li a::before { + content: '➡️'; +} diff --git a/examples/mini-program-example/src/pages/transition/index.html b/examples/mini-program-example/src/pages/transition/index.html new file mode 100644 index 000000000000..60dcc8a639db --- /dev/null +++ b/examples/mini-program-example/src/pages/transition/index.html @@ -0,0 +1,22 @@ + + + + + + + Cross fade demo + + + + + +
+ Demo site +
+
+

Page 1

+

This is the content for page 1.

+

Why not check out page 2?

+
+ + diff --git a/examples/mini-program-example/src/pages/transition/page-2.html b/examples/mini-program-example/src/pages/transition/page-2.html new file mode 100644 index 000000000000..30dfa0add0d6 --- /dev/null +++ b/examples/mini-program-example/src/pages/transition/page-2.html @@ -0,0 +1,32 @@ + + + + + Title + + + + + +
+ + + + + Demo site + +
+
+

Page 2

+

This is the content for page 2.

+
    +
  1. It
  2. +
  3. also
  4. +
  5. has
  6. +
  7. a
  8. +
  9. list!
  10. +
+

Ok, that's enough fun, you can go back to page 1.

+
+ + diff --git a/examples/mini-program-example/src/pages/transition/script.js b/examples/mini-program-example/src/pages/transition/script.js new file mode 100644 index 000000000000..11dc97c9ebb1 --- /dev/null +++ b/examples/mini-program-example/src/pages/transition/script.js @@ -0,0 +1,25 @@ +import { getPageContent, onLinkNavigate } from './utils.js'; + +onLinkNavigate(async ({ toPath }) => { + const content = await getPageContent(toPath); + + startViewTransition(() => { + // This is a pretty heavy-handed way to update page content. + // In production, you'd likely be modifying DOM elements directly, + // or using a framework. + // innerHTML is used here just to keep the DOM update super simple. + document.body.innerHTML = content; + }); +}); + + +// A little helper function like this is really handy +// to handle progressive enhancement. +function startViewTransition(callback) { + if (!document.startViewTransition) { + callback(); + return; + } + + document.startViewTransition(callback); +} diff --git a/examples/mini-program-example/src/pages/transition/styles.css b/examples/mini-program-example/src/pages/transition/styles.css new file mode 100644 index 000000000000..9b7834881ee7 --- /dev/null +++ b/examples/mini-program-example/src/pages/transition/styles.css @@ -0,0 +1,25 @@ +@keyframes fade-in { + from { opacity: 0; } +} + +@keyframes fade-out { + to { opacity: 0; } +} + +@keyframes slide-from-right { + from { transform: translateX(30px); } +} + +@keyframes slide-to-left { + to { transform: translateX(-30px); } +} + +::view-transition-old(root) { + animation: 900ms cubic-bezier(0.4, 0, 1, 1) both fade-out, + 3000ms cubic-bezier(0.4, 0, 0.2, 1) both slide-to-left; +} + +::view-transition-new(root) { + animation: 2100ms cubic-bezier(0, 0, 0.2, 1) 90ms both fade-in, + 3000ms cubic-bezier(0.4, 0, 0.2, 1) both slide-from-right; +} diff --git a/examples/mini-program-example/src/pages/transition/utils.js b/examples/mini-program-example/src/pages/transition/utils.js new file mode 100644 index 000000000000..ff26046f1030 --- /dev/null +++ b/examples/mini-program-example/src/pages/transition/utils.js @@ -0,0 +1,87 @@ +export async function getPageContent(url) { + // This is a really scrappy way to do this. + // Don't do this in production! + const response = await fetch(url); + const text = await response.text(); + // Particularly as it uses regexp + return /]*>([\w\W]*)<\/body>/.exec(text)[1]; +} + +function isBackNavigation(navigateEvent) { + if (navigateEvent.navigationType === 'push' || navigateEvent.navigationType === 'replace') { + return false; + } + if ( + navigateEvent.destination.index !== -1 && + navigateEvent.destination.index < navigation.currentEntry.index + ) { + return true; + } + return false; +} + +// Intercept navigations +// https://developer.chrome.com/docs/web-platform/navigation-api/ +// This is a naive usage of the navigation API, to keep things simple. +export async function onLinkNavigate(callback) { + navigation.addEventListener('navigate', (event) => { + const toUrl = new URL(event.destination.url); + + if (location.origin !== toUrl.origin) return; + + const fromPath = location.pathname; + const isBack = isBackNavigation(event); + + event.intercept({ + async handler() { + if (event.info === 'ignore') return; + + await callback({ + toPath: toUrl.pathname, + fromPath, + isBack, + }); + }, + }); + }); +} + +export function getLink(href) { + const fullLink = new URL(href, location.href).href; + + return [...document.querySelectorAll('a')].find((link) => + link.href === fullLink + ); +} + +// This helper function returns a View-Transition-like object, even for browsers that don't support view transitions. +// It won't do the transition in unsupported browsers, it'll act as if the transition is skipped. +// It also makes it easier to add class names to the document element. +export function transitionHelper({ + skipTransition = false, + classNames = '', + updateDOM, + }) { + if (skipTransition || !document.startViewTransition) { + const updateCallbackDone = Promise.resolve(updateDOM()).then(() => undefined); + + return { + ready: Promise.reject(Error('View transitions unsupported')), + domUpdated: updateCallbackDone, + updateCallbackDone, + finished: updateCallbackDone, + }; + } + + const classNamesArray = classNames.split(/\s+/g).filter(Boolean); + + document.documentElement.classList.add(...classNamesArray); + + const transition = document.startViewTransition(updateDOM); + + transition.finished.finally(() => + document.documentElement.classList.remove(...classNamesArray) + ); + + return transition; +} diff --git a/packages/taro-components-mpharmony/package.json b/packages/taro-components-mpharmony/package.json index aa9f3dbc1eac..0af208f7c930 100644 --- a/packages/taro-components-mpharmony/package.json +++ b/packages/taro-components-mpharmony/package.json @@ -13,31 +13,30 @@ "license": "ISC", "dependencies": { "@babel/runtime": "^7.7.7", + "@tarojs/components": "~3.3.20", + "@tarojs/components-react": "3.6.8", + "@tarojs/plugin-framework-react": "3.6.8", + "@tarojs/react": "3.6.8", + "@tarojs/taro": "~3.3.20", "@types/node": "^18.15.3", "classnames": "2.3.2", "history": "^5.3.0", "intersection-observer": "^0.12.2", "loader-utils": "^3.2.1", "memoize-one": "^6.0.0", - "@tarojs/components": "~3.3.20", - "@tarojs/components-react": "3.6.8", - "@tarojs/taro": "~3.3.20", - "@tarojs/plugin-framework-react": "3.6.8", - "@tarojs/react": "3.6.8", "react": "^18.0.0", "react-dom": "^18.0.0", + "react-draggable": "^4.4.5", + "react-grid-layout": "^1.3.4", + "react-resizable": "^3.0.4", + "react-responsive": "^9.0.2", "swiper": "6.8.0", "universal-router": "^9.1.0" }, "devDependencies": { - "@tarojs/cli": "3.6.8", "@babel/cli": "^7.21.0", "@babel/core": "^7.21.0", "@babel/parser": "^7.14.5", - "@tarojs/components": "~3.3.20", - "@tarojs/components-react": "3.6.8", - "@tarojs/react": "~3.3.20", - "@tarojs/taro": "~3.3.20", "@babel/plugin-proposal-decorators": "^7.14.5", "@babel/plugin-proposal-object-rest-spread": "^7.14.5", "@babel/plugin-transform-react-jsx": "^7.21.0", @@ -54,6 +53,11 @@ "@rollup/plugin-node-resolve": "^8.0.0", "@swc/core": "1.3.42", "@swc/register": "^0.1.10", + "@tarojs/cli": "3.6.8", + "@tarojs/components": "~3.3.20", + "@tarojs/components-react": "3.6.8", + "@tarojs/react": "~3.3.20", + "@tarojs/taro": "~3.3.20", "@types/react": "^18.0.0", "@types/webpack-env": "^1.13.6", "babel-loader": "^9.1.2", @@ -67,15 +71,17 @@ "html-webpack-plugin": "^5.5.0", "lodash": "^4.17.21", "postcss": "^8.4.18", + "react-draggable": "^4.4.5", "react-refresh": "^0.11.0", + "react-resizable": "^3.0.4", "rimraf": "^4.4.0", "rollup": "^2.79.0", "rollup-plugin-clear": "^2.0.7", "rollup-plugin-copy": "^3.4.0", "rollup-plugin-node-externals": "^4.0.0", + "rollup-plugin-postcss": "^3.1.8", "rollup-plugin-scss": "^4.0.0", "rollup-plugin-ts": "^3.0.2", - "rollup-plugin-postcss": "^3.1.8", "style-loader": "^3.3.2", "stylelint": "^14.4.0", "ts-loader": "^9.4.2", @@ -83,6 +89,7 @@ "typescript": "^5.0.4", "webpack": "^5.76.0", "webpack-cli": "^5.0.1", - "webpack-dev-server": "^4.13.1" + "webpack-dev-server": "^4.13.1", + "react-grid-layout": "^1.3.4" } } diff --git a/packages/taro-components-mpharmony/rollup.config.mjs b/packages/taro-components-mpharmony/rollup.config.mjs index 2732471caf32..88419708741e 100644 --- a/packages/taro-components-mpharmony/rollup.config.mjs +++ b/packages/taro-components-mpharmony/rollup.config.mjs @@ -6,9 +6,11 @@ import ts from 'rollup-plugin-ts' import babel from '@rollup/plugin-babel' import scss from 'rollup-plugin-scss'; import copy from 'rollup-plugin-copy'; +import RollupCopy from 'rollup-plugin-copy' const cwd = path.dirname(new URL(import.meta.url).pathname); import { mkdirSync } from 'fs'; +import NodePath from "path"; const base = { external: ['@types/node'], @@ -23,6 +25,14 @@ const base = { babel({ babelHelpers: 'bundled', presets: [['@babel/preset-env', { targets: { ie: '11' } }]] + }), + RollupCopy({ + targets: [ + { + src: 'src/style', + dest: 'dist' + } + ] }) ] } @@ -61,5 +71,4 @@ const commonConfig = { ...base } - export default [compileConfig, componentsConfig,commonConfig] diff --git a/packages/taro-components-mpharmony/src/components/grid/grid.tsx b/packages/taro-components-mpharmony/src/components/grid/grid.tsx index bbbcd2b35bb2..cadeba9284b5 100644 --- a/packages/taro-components-mpharmony/src/components/grid/grid.tsx +++ b/packages/taro-components-mpharmony/src/components/grid/grid.tsx @@ -1,32 +1,17 @@ -import './style/index.css' +import '../../style/components/grid.scss' -import React, { PureComponent } from 'react' +import React, { PureComponent, ReactElement, ReactNode } from 'react' +import GridLayout from 'react-grid-layout' interface Props { - columnItem: (childItem: any, i: number, index: number) => React.ReactNode + children: ReactNode + width: number className?: string - data: [] - columnNum: number -} - -function _chunk (data: [], columnNum: number): any[][] { - - const result: any[][] = [] - const length = data.length - let i = 0 - - while (i < length) { - let chunk = [] - if (i + columnNum < length) { - chunk = data.slice(i, i + columnNum) - } else { - chunk = data.slice(i, length) - } - result.push(chunk) - i += columnNum - } - - return result + type: 'aligned' | 'masonry' + crossAxisCount: number + maxCrossAxisExtent: number + mainAxisGap?: number + crossAxisGap?: number } export class GridView extends PureComponent { @@ -35,18 +20,59 @@ export class GridView extends PureComponent { refs: { [p: string]: React.ReactInstance } render (): React.ReactNode { - const gridGroup = _chunk(this.props.data, this.props.columnNum) + let mainAxisGap = 0 + if (this.props.mainAxisGap !== undefined) { + mainAxisGap = this.props.mainAxisGap + } - return ( -
- {gridGroup.map((item, i) => ( -
- {item.map((childItem, index) => ( - this.props.columnItem(childItem, i, index) - ))} + let crossAxisGap = 0 + if (this.props.crossAxisGap !== undefined) { + crossAxisGap = this.props.crossAxisGap + } + const childs: ReactElement[] = [] + + const layout: { i: string | number | null, x: number, y: number, w: number, h: number, static: boolean }[] = [] + let column = 3 + if (this.props.crossAxisCount !== undefined) { + column = this.props.crossAxisCount + } + + let count = 0 + React.Children.map(this.props.children, (child) => { + // 在这里对每个子元素进行操作 + // 例如,可以给每个子元素添加一些属性或包装组件等 + if (React.isValidElement(child)) { + const i = child.key + const y = Math.floor(count / column) + const x = count % column + const w = child.props.w + const h = child.props.h + + layout.push({ i: i, x: x, y: y, w, h, static: true }) + childs.push( +
+ {child}
- ))} -
+ ) + + count++ + // console.log('count ' + count + ' column ' + column + ' x: ' + x + ' y: ' + y + ' w: ' + w + ' h: ' + h + ' child ' + typeof child + ' i: ' + child.key) + } + }) + // console.log(' layout ' + layout) + + return ( + + {childs} + + ) } } diff --git a/packages/taro-components-mpharmony/src/components/index.ts b/packages/taro-components-mpharmony/src/components/index.ts index c2802317e215..fdf44efd8510 100644 --- a/packages/taro-components-mpharmony/src/components/index.ts +++ b/packages/taro-components-mpharmony/src/components/index.ts @@ -2,4 +2,8 @@ export * from './block/block' export * from './grid/grid' export * from './label/label' export * from './list/list' +export * from './page-container/page-container' export * from './root-portal/root-portal' +export * from './sticky-header/sticky-header' +export * from './sticky-section/sticky-section' + diff --git a/packages/taro-components-mpharmony/src/components/match-media/match-media.tsx b/packages/taro-components-mpharmony/src/components/match-media/match-media.tsx new file mode 100644 index 000000000000..938eed513326 --- /dev/null +++ b/packages/taro-components-mpharmony/src/components/match-media/match-media.tsx @@ -0,0 +1,92 @@ +import React, { PureComponent, ReactNode } from 'react' + +interface Props { + children: ReactNode + minWidth?: number + maxWidth?: number + width?: number + minHeight?: number + maxHeight?: number + height?: number + orientation: string // 屏幕方向(landscape 或 portrait) + +} + +interface State { + isAllSuit: boolean +} + +export class MatchMedia extends PureComponent { + context: unknown + readonly props: Readonly + refs: { [p: string]: React.ReactInstance } + + constructor (props) { + super(props) + this.state = { + isAllSuit: true + } + this.handleResize = this.handleResize.bind(this) + } + + componentDidMount () { + window.addEventListener('resize', this.handleResize) + } + + componentWillUnmount () { + window.removeEventListener('resize', this.handleResize) + } + + handleResize () { + + + let isSuitMinWidth = true + let isSuitMaxWidth = true + + let isSuitMinHeight = true + let isSuitMaxHeight = true + + let isSuitWidth = true + let isSuitHeight = true + + const screenWidth = window.innerWidth + const screenHeight = window.innerHeight + + // console.log('screenWidth '+screenWidth+' screenHeight '+screenHeight) + if (this.props.minWidth !== null && this.props.minWidth !== undefined) { + isSuitMinWidth = screenWidth > this.props.minWidth + } + + if (this.props.maxWidth !== null && this.props.maxWidth !== undefined) { + isSuitMaxWidth = screenWidth < this.props.maxWidth + } + + if (this.props.minHeight !== null && this.props.minHeight !== undefined) { + isSuitMinHeight = screenHeight > this.props.minHeight + } + + if (this.props.maxHeight !== null && this.props.maxHeight !== undefined) { + isSuitMaxHeight = screenHeight < this.props.maxHeight + } + + if (this.props.width !== null&& this.props.width !== undefined) { + isSuitWidth = screenWidth === this.props.width + } + + if (this.props.height !== null&& this.props.height !== undefined) { + isSuitHeight = screenHeight === this.props.height + } + + const isAllSuit = isSuitMinWidth && isSuitMaxWidth && isSuitMinHeight && isSuitMaxHeight && isSuitWidth && isSuitHeight + + // console.log('isSuitMinWidth ' + isSuitMinWidth + ' isSuitMaxWidth ' + isSuitMaxWidth + ' isSuitMinHeight ' + isSuitMinHeight + ' isSuitMaxHeight ' + isSuitMaxHeight + ' isSuitWidth ' + isSuitWidth + ' isSuitHeight ' + isSuitHeight) + + this.setState({ isAllSuit: isAllSuit }) + } + + render (): React.ReactNode { + const { isAllSuit } = this.state + return (isAllSuit ? this.props.children : null) + } + +} diff --git a/packages/taro-components-mpharmony/src/components/page-container/page-container.tsx b/packages/taro-components-mpharmony/src/components/page-container/page-container.tsx new file mode 100644 index 000000000000..985ec411d8c5 --- /dev/null +++ b/packages/taro-components-mpharmony/src/components/page-container/page-container.tsx @@ -0,0 +1,112 @@ +import '../../style/components/page-container.scss' + +import classNames from 'classnames' +import React, { PureComponent, ReactNode } from 'react' + +interface Props { + className?: string + children: ReactNode + show: boolean + duration?: number + zIndex?: number + overlay: boolean + position: 'top' | 'bottom' | 'right' | 'center' + round?: boolean + closeOnSlideDown?: boolean + overlayStyle?: string + customStyle?: string + bindbeforeenter?: (res) => void + bindenter?: (res) => void + bindafterenter?: (res) => void + bindbeforeleave?: (res) => void + bindleave?: (res) => void + bindafterleave?: (res) => void + bindclickoverlay?: (res) => void +} + +export default class PageContainer extends PureComponent { + context: unknown + readonly props: Readonly + refs: { [p: string]: React.ReactInstance } + + render (): React.ReactNode { + const rootClass = classNames( + 'at-float-layout', + { + 'at-float-layout--active': this.props.show, + }, + this.props.className + ) + + let position_css = 'no_active_bottom' + if (this.props.show) { + if (this.props.position === 'bottom') { + position_css = 'active_bottom' + } else if (this.props.position === 'top') { + position_css = 'active_top' + } else if (this.props.position === 'right') { + position_css = 'active_right' + } + } else { + if (this.props.position === 'bottom') { + position_css = 'no_active_bottom' + } else if (this.props.position === 'top') { + position_css = 'no_active_top' + } else if (this.props.position === 'right') { + position_css = 'no_active_right' + } + } + + const container = classNames( + 'at-float-layout__container', + 'layout', + { + 'container_has_corner': this.props.round, + [position_css]: false, + }, + this.props.customStyle + ) + + let overlay_color = 'overlay_none' + + if (this.props.overlay) { + overlay_color = 'overlay_none' + } else { + if (this.props.overlayStyle !== undefined) { + overlay_color = this.props.overlayStyle + } else { + overlay_color = 'overlay_black' + } + } + + const overlay = classNames( + 'at-float-layout__overlay', + { + [overlay_color]: true, + }, + ) + + let zIndex = 810 + if (this.props.zIndex !== undefined) { + zIndex = this.props.zIndex + } + + let transitionDuration = '500ms' + if (this.props.duration !== undefined) { + transitionDuration = this.props.duration + 'ms' + } + + return ( +
+
+
+
+ {this.props.children} +
+
+
+ ) + } + + +} diff --git a/packages/taro-components-mpharmony/src/components/share-element/share-element.tsx b/packages/taro-components-mpharmony/src/components/share-element/share-element.tsx new file mode 100644 index 000000000000..f5b4ba41b1c4 --- /dev/null +++ b/packages/taro-components-mpharmony/src/components/share-element/share-element.tsx @@ -0,0 +1,16 @@ +import React, { PureComponent, ReactNode } from 'react' + +interface Props { + children: ReactNode +} + +export class ShareElement extends PureComponent { + context: unknown + readonly props: Readonly + refs: { [p: string]: React.ReactInstance } + + render (): React.ReactNode { + return this.props.children + } + +} diff --git a/packages/taro-components-mpharmony/src/index.ts b/packages/taro-components-mpharmony/src/index.ts index 36be6f523240..aa18b611a92f 100644 --- a/packages/taro-components-mpharmony/src/index.ts +++ b/packages/taro-components-mpharmony/src/index.ts @@ -35,13 +35,11 @@ export { LivePusher } from '@tarojs/components/lib/react' export { Login } from '@tarojs/components/lib/react' export { Lottie } from '@tarojs/components/lib/react' export { Map } from '@tarojs/components/lib/react' -export { MatchMedia } from '@tarojs/components/lib/react' export { MovableArea, MovableView } from '@tarojs/components/lib/react' export { NavigationBar } from '@tarojs/components/lib/react' export { Navigator } from '@tarojs/components/lib/react' export { OfficialAccount } from '@tarojs/components/lib/react' export { OpenData } from '@tarojs/components/lib/react' -export { PageContainer } from '@tarojs/components/lib/react' export { PageMeta } from '@tarojs/components/lib/react' export { Picker, PickerGroup } from '@tarojs/components/lib/react' export { PickerView, PickerViewColumn } from '@tarojs/components/lib/react' @@ -71,3 +69,5 @@ export * from './components/list/list' export * from './components/root-portal/root-portal' export * from './components/sticky-header/sticky-header' export * from './components/sticky-section/sticky-section' +export { MatchMedia } from './components/match-media/match-media' +export { default as PageContainer } from './components/page-container/page-container' diff --git a/packages/taro-components-mpharmony/src/style/components/grid.scss b/packages/taro-components-mpharmony/src/style/components/grid.scss new file mode 100644 index 000000000000..c16c9001b201 --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/components/grid.scss @@ -0,0 +1,182 @@ +.react-resizable { + position: relative; +} +.react-resizable-handle { + position: absolute; + width: 20px; + height: 20px; + background-repeat: no-repeat; + background-origin: content-box; + box-sizing: border-box; + background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2IDYiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwMCIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iNnB4Ij48ZyBvcGFjaXR5PSIwLjMwMiI+PHBhdGggZD0iTSA2IDYgTCAwIDYgTCAwIDQuMiBMIDQgNC4yIEwgNC4yIDQuMiBMIDQuMiAwIEwgNiAwIEwgNiA2IEwgNiA2IFoiIGZpbGw9IiMwMDAwMDAiLz48L2c+PC9zdmc+'); + background-position: bottom right; + padding: 0 3px 3px 0; +} +.react-resizable-handle-sw { + bottom: 0; + left: 0; + cursor: sw-resize; + transform: rotate(90deg); +} +.react-resizable-handle-se { + bottom: 0; + right: 0; + cursor: se-resize; +} +.react-resizable-handle-nw { + top: 0; + left: 0; + cursor: nw-resize; + transform: rotate(180deg); +} +.react-resizable-handle-ne { + top: 0; + right: 0; + cursor: ne-resize; + transform: rotate(270deg); +} +.react-resizable-handle-w, +.react-resizable-handle-e { + top: 50%; + margin-top: -10px; + cursor: ew-resize; +} +.react-resizable-handle-w { + left: 0; + transform: rotate(135deg); +} +.react-resizable-handle-e { + right: 0; + transform: rotate(315deg); +} +.react-resizable-handle-n, +.react-resizable-handle-s { + left: 50%; + margin-left: -10px; + cursor: ns-resize; +} +.react-resizable-handle-n { + top: 0; + transform: rotate(225deg); +} +.react-resizable-handle-s { + bottom: 0; + transform: rotate(45deg); +} + + +.react-grid-layout { + position: relative; + transition: height 200ms ease; +} +.react-grid-item { + transition: all 200ms ease; + transition-property: left, top; +} +.react-grid-item img { + pointer-events: none; + user-select: none; +} +.react-grid-item.cssTransforms { + transition-property: transform; +} +.react-grid-item.resizing { + z-index: 1; + will-change: width, height; +} + +.react-grid-item.react-draggable-dragging { + transition: none; + z-index: 3; + will-change: transform; +} + +.react-grid-item.dropping { + visibility: hidden; +} + +.react-grid-item.react-grid-placeholder { + background: red; + opacity: 0.2; + transition-duration: 100ms; + z-index: 2; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.react-grid-item > .react-resizable-handle { + position: absolute; + width: 20px; + height: 20px; +} + +.react-grid-item > .react-resizable-handle::after { + content: ""; + position: absolute; + right: 3px; + bottom: 3px; + width: 5px; + height: 5px; + border-right: 2px solid rgba(0, 0, 0, 0.4); + border-bottom: 2px solid rgba(0, 0, 0, 0.4); +} + +.react-resizable-hide > .react-resizable-handle { + display: none; +} + +.react-grid-item > .react-resizable-handle.react-resizable-handle-sw { + bottom: 0; + left: 0; + cursor: sw-resize; + transform: rotate(90deg); +} +.react-grid-item > .react-resizable-handle.react-resizable-handle-se { + bottom: 0; + right: 0; + cursor: se-resize; +} +.react-grid-item > .react-resizable-handle.react-resizable-handle-nw { + top: 0; + left: 0; + cursor: nw-resize; + transform: rotate(180deg); +} +.react-grid-item > .react-resizable-handle.react-resizable-handle-ne { + top: 0; + right: 0; + cursor: ne-resize; + transform: rotate(270deg); +} +.react-grid-item > .react-resizable-handle.react-resizable-handle-w, +.react-grid-item > .react-resizable-handle.react-resizable-handle-e { + top: 50%; + margin-top: -10px; + cursor: ew-resize; +} +.react-grid-item > .react-resizable-handle.react-resizable-handle-w { + left: 0; + transform: rotate(135deg); +} +.react-grid-item > .react-resizable-handle.react-resizable-handle-e { + right: 0; + transform: rotate(315deg); +} +.react-grid-item > .react-resizable-handle.react-resizable-handle-n, +.react-grid-item > .react-resizable-handle.react-resizable-handle-s { + left: 50%; + margin-left: -10px; + cursor: ns-resize; +} +.react-grid-item > .react-resizable-handle.react-resizable-handle-n { + top: 0; + transform: rotate(225deg); +} +.react-grid-item > .react-resizable-handle.react-resizable-handle-s { + bottom: 0; + transform: rotate(45deg); +} + diff --git a/packages/taro-components-mpharmony/src/style/components/page-container.scss b/packages/taro-components-mpharmony/src/style/components/page-container.scss new file mode 100644 index 000000000000..c38cd0d1ee92 --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/components/page-container.scss @@ -0,0 +1,126 @@ +$float-layout-timer: 300ms; +$zindex-flot-layout: 810 !default; +@import "../variables/default"; + +.at-float-layout { + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + visibility: hidden; + z-index: $zindex-flot-layout; + transition: visibility $float-layout-timer cubic-bezier(0.36, 0.66, 0.04, 1); + + .container_has_corner { + border-top-left-radius: 20px; + border-top-right-radius: 20px; + } + + /* elements */ + &__overlay { + opacity: 0; + width: 100%; + height: 100%; + + transition: opacity 150ms ease-in; + } + + .overlay_none { + + } + + .overlay_black { + background: #0d0d0d; + } + + .overlay_white { + background: #f4f4f4; + } + + &__container { + position: absolute; + bottom: 0; + width: 100%; + min-height: $float-layout-height-min; + max-height: $float-layout-height-max; + background-color: $color-bg; + transform: translate3d(0, 100%, 0); + transition: transform $float-layout-timer cubic-bezier(0.36, 0.66, 0.04, 1); + } + + .layout { + &-header { + position: relative; + padding: $spacing-v-md; + line-height: $line-height-zh; + background-color: $float-layout-header-bg-color; + + &__title { + color: $float-layout-title-color; + font-size: $float-layout-title-font-size; + display: block; + padding-right: 80px; + } + + &__btn-close { + position: absolute; + padding: $spacing-h-sm; + top: 50%; + right: $spacing-v-md; + width: 40px; + height: 100%; + line-height: 1; + transform: translate(0, -50%); + + &::before, + &::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + display: inline-block; + width: 36px; + height: 2PX; + border-radius: 1PX; + background: $float-layout-btn-color; + } + + &::before { + transform: translate3d(-50%, -50%, 0) rotate(45deg); + } + + &::after { + transform: translate3d(-50%, -50%, 0) rotate(-45deg); + } + } + } + + &-body { + font-size: $font-size-base; + padding: $spacing-v-md; + max-height: 828px; + min-height: 514px; + + &__content { + max-height: 798px; + min-height: 484px; + } + } + } + + /* modifiers */ + &--active { + visibility: visible; + + .at-float-layout__overlay { + opacity: 0.8; + } + + .at-float-layout__container { + transform: translate3d(0, 0, 0); + } + } +} + + diff --git a/packages/taro-components-mpharmony/src/style/mixins/index.scss b/packages/taro-components-mpharmony/src/style/mixins/index.scss new file mode 100644 index 000000000000..a68b7f60a339 --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/mixins/index.scss @@ -0,0 +1,18 @@ +/** + * Mixins + */ + +/* library */ +@import './libs/absolute-center'; +@import './libs/clearfix'; +@import './libs/line'; +@import './libs/overlay'; +@import './libs/shade'; +@import './libs/tint'; +@import './libs/flex'; +@import './libs/border'; +@import './libs/active'; +@import './libs/disabled'; +@import './libs/placeholder'; +@import './libs/alignhack'; +@import './libs/hairline'; diff --git a/packages/taro-components-mpharmony/src/style/mixins/libs/absolute-center.scss b/packages/taro-components-mpharmony/src/style/mixins/libs/absolute-center.scss new file mode 100644 index 000000000000..1efdc156c764 --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/mixins/libs/absolute-center.scss @@ -0,0 +1,9 @@ +/** + * 元素居中定位 + */ +@mixin absolute-center($pos: absolute) { + position: $pos; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} diff --git a/packages/taro-components-mpharmony/src/style/mixins/libs/active.scss b/packages/taro-components-mpharmony/src/style/mixins/libs/active.scss new file mode 100644 index 000000000000..c3222bfd6179 --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/mixins/libs/active.scss @@ -0,0 +1,10 @@ +/** + * 点击态 + */ +@mixin active { + transition: background-color 0.3s; + + &:active { + background-color: $color-grey-5; + } +} diff --git a/packages/taro-components-mpharmony/src/style/mixins/libs/alignhack.scss b/packages/taro-components-mpharmony/src/style/mixins/libs/alignhack.scss new file mode 100644 index 000000000000..c557f2617bdb --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/mixins/libs/alignhack.scss @@ -0,0 +1,11 @@ +// 修复小元素文本垂直居中 +@mixin alignhack($position: before, $margintop: 1px) { + &::#{$position} { + content: ''; + display: inline-block; + vertical-align: middle; + width: 0; + height: 100%; + margin-top: $margintop; + } +} diff --git a/packages/taro-components-mpharmony/src/style/mixins/libs/border.scss b/packages/taro-components-mpharmony/src/style/mixins/libs/border.scss new file mode 100644 index 000000000000..976b472bd984 --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/mixins/libs/border.scss @@ -0,0 +1,46 @@ +/** + * 默认主题下 $color-border-light + */ + +@mixin border-thin( + $color: $color-border-light, + $style: solid, + $directions: top bottom right left, + $width: 1px +) { + @each $value in $directions { + border-#{$value}: $width $color $style; + } +} + +@mixin border-thin-top( + $color: $color-border-light, + $style: solid, + $width: 1px +) { + @include border-thin($color, $style, top, $width); +} + +@mixin border-thin-left( + $color: $color-border-light, + $style: solid, + $width: 1px +) { + @include border-thin($color, $style, left, $width); +} + +@mixin border-thin-right( + $color: $color-border-light, + $style: solid, + $width: 1px +) { + @include border-thin($color, $style, right, $width); +} + +@mixin border-thin-bottom( + $color: $color-border-light, + $style: solid, + $width: 1px +) { + @include border-thin($color, $style, bottom, $width); +} diff --git a/packages/taro-components-mpharmony/src/style/mixins/libs/clearfix.scss b/packages/taro-components-mpharmony/src/style/mixins/libs/clearfix.scss new file mode 100644 index 000000000000..cc099a5b2cd6 --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/mixins/libs/clearfix.scss @@ -0,0 +1,21 @@ +/** + * @example scss + * + * .element { + * @include clearfix; + * } + * + * // CSS Output + * .element::after { + * clear: both; + * content: ''; + * display: block; + * } + */ +@mixin clearfix { + &::after { + clear: both; + content: ''; + display: block; + } +} diff --git a/packages/taro-components-mpharmony/src/style/mixins/libs/disabled.scss b/packages/taro-components-mpharmony/src/style/mixins/libs/disabled.scss new file mode 100644 index 000000000000..9c4c123ac433 --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/mixins/libs/disabled.scss @@ -0,0 +1,6 @@ +/** + * 禁止态 + */ +@mixin disabled { + color: #bbb; +} diff --git a/packages/taro-components-mpharmony/src/style/mixins/libs/flex.scss b/packages/taro-components-mpharmony/src/style/mixins/libs/flex.scss new file mode 100644 index 000000000000..576204a12b87 --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/mixins/libs/flex.scss @@ -0,0 +1,50 @@ +@mixin display-flex { + display: flex; +} + +@mixin flex-wrap($value: nowrap) { + flex-wrap: $value; +} + +@mixin align-items($value: stretch) { + align-items: $value; + @if $value == flex-start { + -webkit-box-align: start; + } @else if $value == flex-end { + -webkit-box-align: end; + } @else { + -webkit-box-align: $value; + } +} + +@mixin align-content($value: flex-start) { + align-content: $value; +} + +@mixin justify-content($value: flex-start) { + justify-content: $value; + @if $value == flex-start { + -webkit-box-pack: start; + } @else if $value == flex-end { + -webkit-box-pack: end; + } @else if $value == space-between { + -webkit-box-pack: justify; + } @else { + -webkit-box-pack: $value; + } +} + +/* Flex Item */ +@mixin flex($fg: 1, $fs: null, $fb: null) { + flex: $fg $fs $fb; + -webkit-box-flex: $fg; +} + +@mixin flex-order($n) { + order: $n; + -webkit-box-ordinal-group: $n; +} + +@mixin align-self($value: auto) { + align-self: $value; +} diff --git a/packages/taro-components-mpharmony/src/style/mixins/libs/hairline.scss b/packages/taro-components-mpharmony/src/style/mixins/libs/hairline.scss new file mode 100644 index 000000000000..84f269fe655f --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/mixins/libs/hairline.scss @@ -0,0 +1,190 @@ +/** + * 默认主题下 $color-border-light + */ + +@mixin hairline-common() { + content: ''; + position: absolute; + transform-origin: center; + box-sizing: border-box; + pointer-events: none; +} + +@mixin hairline-base( + $color: $color-border-light, + $style: solid +) { + @include hairline-common(); + + top: -50%; + left: -50%; + right: -50%; + bottom: -50%; + border: 0 $style $color; + transform: scale(0.5); +} + +@mixin hairline-surround( + $color: $color-border-light, + $style: solid, + $width: 1PX +) { + position: relative; + + &::after { + @include hairline-base($color, $style); + + border-width: $width; + } +} + +@mixin hairline-top( + $color: $color-border-light, + $style: solid, + $width: 1PX +) { + position: relative; + + &::after { + @include hairline-base($color, $style); + + border-top-width: $width; + } +} + +@mixin hairline-bottom( + $color: $color-border-light, + $style: solid, + $width: 1PX +) { + position: relative; + + &::after { + @include hairline-base($color, $style); + + border-bottom-width: $width; + } +} + +@mixin hairline-left( + $color: $color-border-light, + $style: solid, + $width: 1PX +) { + position: relative; + + &::after { + @include hairline-base($color, $style); + + border-left-width: $width; + } +} + +@mixin hairline-right( + $color: $color-border-light, + $style: solid, + $width: 1PX +) { + position: relative; + + &::after { + @include hairline-base($color, $style); + + border-right-width: $width; + } +} + +@mixin hairline-top-bottom( + $color: $color-border-light, + $style: solid, + $width: 1PX +) { + position: relative; + + &::after { + @include hairline-base($color, $style); + + border-top-width: $width; + border-bottom-width: $width; + } +} + +@mixin hairline-bottom-relative( + $color: $color-border-light, + $style: solid, + $width: 1PX, + $left: 0 +) { + position: relative; + + &::after { + @include hairline-common(); + + top: auto; + left: $left; + right: 0; + bottom: 0; + transform: scaleY(0.5); + border-bottom: $width $style $color; + } +} + +@mixin hairline-top-relative( + $color: $color-border-light, + $style: solid, + $width: 1PX, + $left: 0 +) { + position: relative; + + &::before { + @include hairline-common(); + + top: 0; + left: $left; + right: 0; + bottom: auto; + transform: scaleY(0.5); + border-top: $width $style $color; + } +} + +@mixin hairline-left-relative( + $color: $color-border-light, + $style: solid, + $width: 1PX, + $top: 0 +) { + position: relative; + + &::after { + @include hairline-common(); + + top: $top; + left: 0; + right: auto; + bottom: 0; + transform: scaleX(0.5); + border-left: $width $style $color; + } +} + +@mixin hairline-right-relative( + $color: $color-border-light, + $style: solid, + $width: 1PX, + $top: 0 +) { + position: relative; + + &::after { + @include hairline-common(); + + top: $top; + left: auto; + right: 0; + bottom: 0; + transform: scaleX(0.5); + border-right: $width $style $color; + } +} diff --git a/packages/taro-components-mpharmony/src/style/mixins/libs/line.scss b/packages/taro-components-mpharmony/src/style/mixins/libs/line.scss new file mode 100644 index 000000000000..1bd982420ead --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/mixins/libs/line.scss @@ -0,0 +1,14 @@ +@mixin line($num: 1) { + overflow: hidden; + text-overflow: ellipsis; + + @if ($num == 1) { + white-space: nowrap; + } @else { + display: -webkit-box; + -webkit-line-clamp: $num; + + /* autoprefixer: off */ + -webkit-box-orient: vertical; + } +} diff --git a/packages/taro-components-mpharmony/src/style/mixins/libs/overlay.scss b/packages/taro-components-mpharmony/src/style/mixins/libs/overlay.scss new file mode 100644 index 000000000000..2cdbbbc91ee6 --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/mixins/libs/overlay.scss @@ -0,0 +1,11 @@ +/** + * 通用的遮罩 + */ +@mixin overlay { + top: 0; + left: 0; + width: 100%; + height: 100%; + position: absolute; + background-color: rgba($color: #000, $alpha: 0.3); +} diff --git a/packages/taro-components-mpharmony/src/style/mixins/libs/placeholder.scss b/packages/taro-components-mpharmony/src/style/mixins/libs/placeholder.scss new file mode 100644 index 000000000000..6f6f5bd865a6 --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/mixins/libs/placeholder.scss @@ -0,0 +1,12 @@ +/** + * 设置placeholder 颜色 + */ +@mixin placeholder($color: $color-grey-3) { + @at-root .placeholder { + color: $color; + } + + &::placeholder { + color: $color; + } +} diff --git a/packages/taro-components-mpharmony/src/style/mixins/libs/shade.scss b/packages/taro-components-mpharmony/src/style/mixins/libs/shade.scss new file mode 100644 index 000000000000..b9bc71bb5873 --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/mixins/libs/shade.scss @@ -0,0 +1,23 @@ +/** + * Mixes a color with black. It's different from darken() + * + * @param {color} $color + * @param {number (percentage)} $percent [The amount of black to be mixed in] + * @return {color} + * + * @example + * .element { + * background-color: shade(#ffbb52, 60%); + * } + * + * // CSS Output + * .element { + * background-color: #664a20; + * } + */ +@function shade( + $color, + $percent +) { + @return mix(#000, $color, $percent); +} diff --git a/packages/taro-components-mpharmony/src/style/mixins/libs/tint.scss b/packages/taro-components-mpharmony/src/style/mixins/libs/tint.scss new file mode 100644 index 000000000000..ca201ea94706 --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/mixins/libs/tint.scss @@ -0,0 +1,23 @@ +/** + * Mixes a color with white. It's different from lighten() + * + * @param {color} $color + * @param {number (percentage)} $percent [The amout of white to be mixed in] + * @return {color} + * + * @example + * .element { + * background-color: tint(#6ecaa6 , 40%); + * } + * + * // CSS Output + * .element { + * background-color: #a8dfc9; + * } + */ +@function tint( + $color, + $percent +) { + @return mix(#FFF, $color, $percent); +} diff --git a/packages/taro-components-mpharmony/src/style/variables/default.scss b/packages/taro-components-mpharmony/src/style/variables/default.scss new file mode 100644 index 000000000000..091bbe8bcdc0 --- /dev/null +++ b/packages/taro-components-mpharmony/src/style/variables/default.scss @@ -0,0 +1,457 @@ +/** + * Default variables + */ + +@import '../mixins/libs/tint'; + +$hd: 2 !default; // 基本单位 + +/* The Color of O2Team Brand */ +$color-brand: #6190E8 !default; +$color-brand-light: #78A4F4 !default; +$color-brand-dark: #346FC2 !default; + +/* Color */ +$color-success: #13CE66 !default; +$color-error: #FF4949 !default; +$color-warning: #FFC82C !default; +$color-info: #78A4FA !default; + +/* Color Palette */ +$color-black-0: #000 !default; +$color-black-1: #333 !default; +$color-black-2: #7F7F7F !default; +$color-black-3: #B2B2B2 !default; + +$color-grey-0: #333 !default; +$color-grey-1: #666 !default; +$color-grey-2: #999 !default; +$color-grey-3: #CCC !default; +$color-grey-4: #E5E5E5 !default; +$color-grey-5: #F0F0F0 !default; +$color-grey-6: #F7F7F7 !default; + +$color-white: #FFF !default; + +/* Text Color */ +$color-text-base: #333 !default; // 文字的基本色 +$color-text-base-inverse: #FFF !default; // 反色 +$color-text-secondary: #36D57D !default; // 辅助色 +$color-text-placeholder: #C9C9C9 !default; +$color-text-disabled: #CCC !default; +$color-text-title: #2C405A !default; // 文章标题 +$color-text-paragraph: #3F536E !default; // 文章段落 + +/* Link */ +$color-link: #6190E8 !default; +$color-link-hover: #79A1EB !default; +$color-link-active: #4F7DE2 !default; +$color-link-disabled: #BFBFBF !default; + +/* 背景色 */ +$color-bg: #FFF !default; +$color-bg-base: #FAFBFC !default; +$color-bg-light: #ECF5FD !default; +$color-bg-lighter: tint($color-bg-light, 50%) !default; +$color-bg-grey: #F7F7F7 !default; + +/* 边框颜色 */ +$color-border-base: #C5D9E8 !default; +$color-border-split: tint($color-border-base, 20%) !default; // 分割线 +$color-border-light: tint($color-border-base, 30%) !default; +$color-border-lighter: tint($color-border-base, 50%) !default; +$color-border-lightest: tint($color-border-base, 80%) !default; +$color-border-grey: #CCC !default; + +/* 图标颜色 */ +$color-icon-base: #CCC !default; + +/* Border Radius */ +$border-radius-sm: 2px * $hd !default; +$border-radius-md: 4px * $hd !default; +$border-radius-lg: 6px * $hd !default; +$border-radius-circle: 50% !default; + +/* 透明度 */ +$opacity-active: 0.6 !default; // Button 等组件点击态额透明度 +$opacity-disabled: 0.3 !default; // Button 等组件禁用态的透明度 + +/* Font */ +$font-size-xs: 10px * $hd !default; // 非常用字号,用于标签 +$font-size-sm: 12px * $hd !default; // 用于辅助信息 +$font-size-base: 14px * $hd !default; // 常用字号 +$font-size-lg: 16px * $hd !default; // 常规标题 +$font-size-xl: 18px * $hd !default; // 大标题 +$font-size-xxl: 20px * $hd !default; // 用于大号的数字 + +/* Line Height */ +$line-height-base: 1 !default; // 单行 +$line-height-en: 1.3 !default; // 英文多行 +$line-height-zh: 1.5 !default; // 中文多行 + +/* 水平间距 */ +$spacing-h-sm: 5px * $hd !default; +$spacing-h-md: 8px * $hd !default; +$spacing-h-lg: 12px * $hd !default; +$spacing-h-xl: 16px * $hd !default; + +/* 垂直间距 */ +$spacing-v-xs: 3px * $hd !default; +$spacing-v-sm: 6px * $hd !default; +$spacing-v-md: 9px * $hd !default; +$spacing-v-lg: 12px * $hd !default; +$spacing-v-xl: 15px * $hd !default; + +/* 图标尺寸 */ +$icon-size-sm: 18px * $hd !default; +$icon-size-md: 22px * $hd !default; +$icon-size-lg: 36px * $hd !default; + +/* z-index */ +$zindex-divider: 100 !default; +$zindex-steps: 500 !default; +$zindex-tab: 600 !default; +$zindex-form: 700 !default; +$zindex-nav: 800 !default; +$zindex-search-bar: 800 !default; +$zindex-indexes: 805 !default; +$zindex-flot-layout: 810 !default; +$zindex-drawer: 900 !default; +$zindex-modal: 1000 !default; +$zindex-action-sheet: 1010 !default; +$zindex-picker: 1010 !default; +$zindex-curtain: 1080 !default; +$zindex-message: 1090 !default; +$zindex-toast: 1090 !default; + +/* timing function */ +$timing-func: cubic-bezier(0.36, 0.66, 0.04, 1) !default; + +/** +* CSS cubic-bezier timing functions +* http://bourbon.io/docs/#timing-functions +*/ +$ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530) !default; +$ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190) !default; +$ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220) !default; +$ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060) !default; +$ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715) !default; +$ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035) !default; +$ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335) !default; +$ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045) !default; + +$ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940) !default; +$ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000) !default; +$ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000) !default; +$ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000) !default; +$ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000) !default; +$ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000) !default; +$ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000) !default; +$ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275) !default; + +$ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955) !default; +$ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000) !default; +$ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000) !default; +$ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000) !default; +$ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950) !default; +$ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000) !default; +$ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860) !default; +$ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550) !default; + +/** + * 组件变量 + */ + +/* Accordion */ +$at-accordion-color-arrow: $color-grey-3 !default; + +/* Activity Indicator */ +$at-activity-indicator-font-size: 28px !default; +$at-activity-indicator-font-color: $color-grey-2 !default; + +/* Avatar */ +$at-avatar-color: $color-white !default; +$at-avatar-bg-color: $color-grey-4 !default; +$at-avatar-size-sm: 80px !default; +$at-avatar-size-md: 100px !default; +$at-avatar-size-lg: 120px !default; + +/* Badge */ +$at-badge-color: $color-white !default; +$at-badge-bg-color: $color-error !default; +$at-badge-bg: $at-badge-bg-color !default; +$at-badge-font-size: $font-size-xs !default; +$at-badge-dot-size: 20px !default; + +/* Button */ +$at-button-height: 92px !default; +$at-button-height-sm: 60px !default; +$at-button-color: $color-brand !default; +$at-button-border-color-primary: $color-brand !default; +$at-button-border-color-secondary: $color-brand !default; +$at-button-bg: $at-button-color !default; + +/* Float Button */ +$at-fab-size: 56px * $hd !default; +$at-fab-size-sm: 40px * $hd !default; +$at-fab-icon-size: 24px * $hd !default; +$at-fab-bg-color: $color-brand; +$at-fab-bg-color-active: $color-brand-dark; +$at-fab-box-shadow: + 0 6px 10px -2px rgba(0, 0, 0, 0.2), + 0 12px 20px 0 rgba(0, 0, 0, 0.14), + 0 2px 36px 0 rgba(0, 0, 0, 0.12) !default; +$at-fab-box-shadow-active: + 0 14px 16px -8px rgba(0, 0, 0, 0.2), + 0 24px 34px 4px rgba(0, 0, 0, 0.14), + 0 10px 44px 8px rgba(0, 0, 0, 0.12) !default; + +/* Calendar */ +$at-calendar-day-size: 72px !default; +$at-calendar-mark-size: 8px !default; +$at-calendar-header-color: #B8BFC6 !default; +$at-calendar-main-color: $color-brand !default; +$at-calendar-day-color: #7C86A2 !default; + +/* Card */ +$at-card-thumb-size: 32px !default; +$at-card-icon-size: 32px !default; +$at-card-title-color: $color-text-title !default; +$at-card-extra-color: $color-text-title !default; +$at-card-info-color: $color-text-base !default; +$at-card-note-color: $color-grey-2 !default; + +/* Checkbox */ +$at-checkbox-circle-size: 40px !default; +$at-checkbox-icon-size: $font-size-sm !default; +$at-checkbox-icon-color: $color-brand !default; +$at-checkbox-icon-color-checked: $color-white !default; +$at-checkbox-title-color: $color-text-base !default; +$at-checkbox-title-font-size: $font-size-lg !default; +$at-checkbox-desc-font-size: $font-size-sm !default; +$at-checkbox-desc-color: $color-grey-2 !default; + +/* Countdown */ +$at-countdown-font-size: $font-size-lg !default; +$at-countdown-num-color: $color-text-base !default; +$at-countdown-card-num-color: #FF4949 !default; +$at-countdown-card-num-bg-color: $color-white !default; + +/* Curtain */ +$at-curtain-btn-color: $color-white !default; + +/* Divider */ +$at-divider-height: 112px; +$at-divider-content-color: $color-brand !default; +$at-divider-font-size: $font-size-lg !default; +$at-divider-line-color: $color-grey-3 !default; + +/* Drawer */ +$at-drawer-content-width: 460px !default; + +/* FloatLayout */ +$float-layout-height-min: 600px !default; +$float-layout-height-max: 950px !default; +$float-layout-header-bg-color: $color-bg-grey !default; +$float-layout-title-color: $color-text-base !default; +$float-layout-title-font-size: $font-size-lg !default; +$float-layout-btn-color: $color-grey-3 !default; + +/* Grid */ +$at-grid-text-color: $color-text-base !default; +$at-grid-font-size: $font-size-lg !default; +$at-grid-img-size: 80px !default; +$at-gird-img-size-sm: 50px !default; + +/* ImagePicker */ +$at-image-picker-btn-add-color: $color-grey-3 !default; +$at-image-picker-btn-remove-color: $color-white !default; +$at-image-picker-btn-remove-bg-color: $color-grey-2 !default; + +/* Indexes */ +$at-indexes-nav-color: $color-link !default; +$at-indexes-nav-font-size: $font-size-sm !default; +$at-indexes-title-color: $color-black-2 !default; +$at-indexes-title-font-size: $font-size-sm !default; +$at-indexes-title-bg-color: $color-grey-6 !default; + +/* InputNumber */ +$at-input-number-text-color: $color-text-base !default; +$at-input-number-font-size: $font-size-base !default; +$at-input-number-font-size-lg: $font-size-xl !default; +$at-input-number-btn-color: $color-brand !default; +$at-input-number-btn-size: 30px !default; +$at-input-number-btn-size-lg: 36px !default; +$at-input-number-width-min: 80px !default; +$at-input-number-width-min-lg: 120px !default; + +/* Input */ +$at-input-label-color: $color-text-base !default; +$at-input-text-color: $color-text-base !default; +$at-input-font-size: $font-size-lg !default; +$at-input-placeholder-color: $color-grey-3 !default; + +/* List */ +$at-list-thumb-size: 56px !default; +$at-list-arrow-color: $color-grey-3 !default; +$at-list-text-color: $color-text-base !default; +$at-list-content-color: $color-grey-2 !default; +$at-list-extra-color: $color-grey-2 !default; +$at-list-extra-width: 235px !default; + +/* LoadMore */ +$at-load-more-height: 80PX !default; +$at-load-more-tips-color: $color-grey-1 !default; +$at-load-more-tips-size: $font-size-lg !default; + +/* Loading */ +$at-loading-size: 36px !default; +$at-loading-color: $color-brand !default; + +/* Message */ +$at-message-color: $color-white !default; +$at-message-font-size: $font-size-base !default; +$at-message-bg-color: $color-info !default; + +/* Modal */ +$at-modal-width: 540px !default; +$at-modal-header-text-color: $color-text-base !default; +$at-modal-content-text-color: $color-text-base !default; +$at-modal-btn-default-color: $color-text-base !default; +$at-modal-btn-confirm-color: $color-brand !default; +$at-modal-bg-color: $color-white !default; + +/* NavBar */ +$at-nav-bar-title-color: $color-text-base !default; +$at-nav-bar-link-color: $color-brand !default; + +/* NoticeBar */ +$at-noticebar-text-color: #DE8C17 !default; +$at-noticebar-bg-color: #FCF6ED !default; +$at-noticebar-font-size: $font-size-sm !default; +$at-noticebar-icon-size: 30px !default; +$at-noticebar-btn-close-size: 32px !default; +$at-noticebar-btn-close-color: $color-grey-3 !default; + +/* Pagination */ +$at-pagination-margin: 40px !default; +$at-pagination-num-color: $color-text-base !default; +$at-pagination-num-font-size: $font-size-base !default; +$at-pagination-current-num-color: $color-brand !default; +$at-pagination-icon-color: $color-text-base !default; +$at-pagination-icon-font-size: 32px !default; + +/* Progress */ +$at-progress-height: 16px !default; +$at-progress-text-size: $font-size-sm !default; +$at-progress-icon-size: $font-size-xl !default; +$at-progress-inner-bg-color: $color-grey-6 !default; +$at-progress-bar-bg-color: $color-brand-light !default; +$at-progress-bar-bg-color-active: $color-white !default; + +/* Radio */ +$at-radio-title-color: $color-text-base !default; +$at-radio-title-size: $font-size-lg !default; +$at-radio-desc-color: $color-grey-2 !default; +$at-radio-desc-size: $font-size-sm !default; +$at-radio-check-color: $color-brand !default; + +/* Range */ +$at-range-slider-size: 28PX !default; +$at-range-rail-height: 2PX !default; +$at-range-rail-bg-color: #E9E9E9 !default; +$at-range-track-bg-color: $color-brand !default; +$at-range-slider-color: $color-white !default; +$at-range-slider-shadow: 0 0 4PX 0 rgba(0, 0, 0, 0.2) !default; + +/* Rate */ +$at-rate-icon-size: 20PX !default; +$at-rate-star-color: #ECECEC !default; +$at-rate-star-color-on: #FFCA3E !default; + +/* SearchBar */ +$at-search-bar-btn-color: $color-white !default; +$at-search-bar-btn-bg-color: $color-brand !default; + +/* SegmentedControl */ +$at-segmented-control-color: $color-brand !default; +$at-segmented-control-color-active: $color-white !default; +$at-segmented-control-bg-color: transparent !default; +$at-segmented-control-font-size: $font-size-base !default; + +/* Slider */ +$at-slider-text-color: $color-grey-2 !default; +$at-slider-text-size: $font-size-base !default; + +/* Steps */ +$at-steps-circle-size: 56px !default; +$at-steps-icon-size: $font-size-sm !default; +$at-steps-color: $color-white !default; +$at-steps-color-active: $color-grey-2 !default; +$at-steps-bg-color: $color-grey-4 !default; +$at-steps-bg-color-active: $color-brand !default; +$at-steps-line-color: $color-grey-3 !default; +$at-steps-title-color: $color-black-0 !default; +$at-steps-title-size: $font-size-lg !default; +$at-steps-desc-color: $color-grey-3 !default; +$at-steps-desc-size: $font-size-sm !default; + +/* SwipeAction */ +$at-swipe-action-color: $color-white !default; +$at-swipe-action-font-size: $font-size-base !default; +$at-swipe-action-bg-color: $color-white !default; +$at-swipe-action-option-bg-color: $color-grey-2 !default; + +/* Switch */ +$at-switch-title-color: $color-text-base !default; +$at-switch-title-size: $font-size-base !default; + +/* TabBar */ +$at-tab-bar-bg-color: $color-white !default; +$at-tab-bar-color: $color-text-base !default; +$at-tab-bar-color-active: $color-brand !default; +$at-tab-bar-font-size: $font-size-base !default; +$at-tab-bar-icon-color: $color-grey-0 !default; +$at-tab-bar-icon-font-size: 48px !default; +$at-tab-bar-icon-image-size: 50px !default; + +/* Tabs */ +$at-tabs-color: $color-text-base !default; +$at-tabs-color-active: $color-brand !default; +$at-tabs-font-size: $font-size-base !default; +$at-tabs-line-height: 1PX !default; +$at-tabs-underline-color: $color-grey-5 !default; +$at-tabs-bg-color: $color-bg !default; + +/* Tag */ +$at-tag-height: 60px !default; +$at-tag-height-sm: 40px !default; +$at-tag-color: $color-grey-1 !default; +$at-tag-color-primary: $color-grey-1 !default; +$at-tag-color-active: $color-brand-light !default; +$at-tag-color-primary-active: $color-text-base-inverse !default; +$at-tag-font-size: $font-size-base !default; +$at-tag-font-size-sm: $font-size-xs !default; +$at-tag-bg-color: $color-bg-grey !default; +$at-tag-bg-color-primary: $color-bg-grey !default; +$at-tag-bg-color-active: $color-white !default; +$at-tag-bg-color-primary-active: $at-tag-color-active !default; +$at-tag-border-color: $at-tag-bg-color !default; +$at-tag-border-color-primary: $at-tag-bg-color !default; +$at-tag-border-color-active: $at-tag-color-active !default; + +/* Textarea */ +$at-textarea-font-size: $font-size-lg !default; +$at-textarea-tips-color: $color-text-placeholder !default; +$at-textarea-tips-size: $font-size-base !default; + +/* Timeline */ +$at-timeline-offset-left: 40px !default; +$at-timeline-title-color: $color-grey-0 !default; +$at-timeline-title-font-size: $font-size-base !default; +$at-timeline-desc-color: $color-grey-1 !default; +$at-timeline-desc-font-size: $font-size-sm !default; +$at-timeline-dot-size: 24px !default; +$at-timeline-dot-color: $color-bg !default; +$at-timeline-dot-border-color: $color-brand-light !default; +$at-timeline-line-color: $color-border-lighter !default; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dbb6621ca21f..c1730fa3ed99 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2240,6 +2240,18 @@ importers: react-dom: specifier: ^18.0.0 version: registry.npmjs.org/react-dom@18.2.0(react@18.2.0) + react-draggable: + specifier: ^4.4.5 + version: registry.npmjs.org/react-draggable@4.4.5(react-dom@18.2.0)(react@18.2.0) + react-grid-layout: + specifier: ^1.3.4 + version: registry.npmjs.org/react-grid-layout@1.3.4(react-dom@18.2.0)(react@18.2.0) + react-resizable: + specifier: ^3.0.4 + version: registry.npmjs.org/react-resizable@3.0.5(react-dom@18.2.0)(react@18.2.0) + react-responsive: + specifier: ^9.0.2 + version: registry.npmjs.org/react-responsive@9.0.2(react@18.2.0) swiper: specifier: 6.8.0 version: registry.npmjs.org/swiper@6.8.0 @@ -23021,6 +23033,13 @@ packages: process-nextick-args: registry.npmjs.org/process-nextick-args@2.0.1 readable-stream: registry.npmjs.org/readable-stream@2.3.8 + registry.npmjs.org/clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz} + name: clsx + version: 1.2.1 + engines: {node: '>=6'} + dev: false + registry.npmjs.org/co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/co/-/co-4.6.0.tgz} name: co @@ -31273,6 +31292,12 @@ packages: hasBin: true dev: true + registry.npmjs.org/hyphenate-style-name@1.0.4: + resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz} + name: hyphenate-style-name + version: 1.0.4 + dev: false + registry.npmjs.org/iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz} name: iconv-lite @@ -35697,6 +35722,12 @@ packages: name: lodash.debounce version: 4.0.8 + registry.npmjs.org/lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz} + name: lodash.isequal + version: 4.5.0 + dev: false + registry.npmjs.org/lodash.ismatch@4.4.0: resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz} name: lodash.ismatch @@ -36025,6 +36056,14 @@ packages: dev: false optional: true + registry.npmjs.org/matchmediaquery@0.3.1: + resolution: {integrity: sha512-Hlk20WQHRIm9EE9luN1kjRjYXAQToHOIAHPJn9buxBwuhfTHoKUcX+lXBbxc85DVQfXYbEQ4HcwQdd128E3qHQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.3.1.tgz} + name: matchmediaquery + version: 0.3.1 + dependencies: + css-mediaquery: registry.npmjs.org/css-mediaquery@0.1.2 + dev: false + registry.npmjs.org/math-random@1.0.4: resolution: {integrity: sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz} name: math-random @@ -42290,6 +42329,21 @@ packages: react: registry.npmjs.org/react@18.2.0 scheduler: registry.npmjs.org/scheduler@0.23.0 + registry.npmjs.org/react-draggable@4.4.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.5.tgz} + id: registry.npmjs.org/react-draggable/4.4.5 + name: react-draggable + version: 4.4.5 + peerDependencies: + react: '>= 16.3.0' + react-dom: '>= 16.3.0' + dependencies: + clsx: registry.npmjs.org/clsx@1.2.1 + prop-types: registry.npmjs.org/prop-types@15.8.1 + react: registry.npmjs.org/react@18.2.0 + react-dom: registry.npmjs.org/react-dom@18.2.0(react@18.2.0) + dev: false + registry.npmjs.org/react-error-overlay@6.0.11: resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz} name: react-error-overlay @@ -42308,6 +42362,24 @@ packages: react: registry.npmjs.org/react@18.1.0 dev: false + registry.npmjs.org/react-grid-layout@1.3.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-sB3rNhorW77HUdOjB4JkelZTdJGQKuXLl3gNg+BI8gJkTScspL1myfZzW/EM0dLEn+1eH+xW+wNqk0oIM9o7cw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/react-grid-layout/-/react-grid-layout-1.3.4.tgz} + id: registry.npmjs.org/react-grid-layout/1.3.4 + name: react-grid-layout + version: 1.3.4 + peerDependencies: + react: '>= 16.3.0' + react-dom: '>= 16.3.0' + dependencies: + clsx: registry.npmjs.org/clsx@1.2.1 + lodash.isequal: registry.npmjs.org/lodash.isequal@4.5.0 + prop-types: registry.npmjs.org/prop-types@15.8.1 + react: registry.npmjs.org/react@18.2.0 + react-dom: registry.npmjs.org/react-dom@18.2.0(react@18.2.0) + react-draggable: registry.npmjs.org/react-draggable@4.4.5(react-dom@18.2.0)(react@18.2.0) + react-resizable: registry.npmjs.org/react-resizable@3.0.5(react-dom@18.2.0)(react@18.2.0) + dev: false + registry.npmjs.org/react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz} name: react-is @@ -42776,6 +42848,37 @@ packages: version: 0.9.0 engines: {node: '>=0.10.0'} + registry.npmjs.org/react-resizable@3.0.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-vKpeHhI5OZvYn82kXOs1bC8aOXktGU5AmKAgaZS4F5JPburCtbmDPqE7Pzp+1kN4+Wb81LlF33VpGwWwtXem+w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/react-resizable/-/react-resizable-3.0.5.tgz} + id: registry.npmjs.org/react-resizable/3.0.5 + name: react-resizable + version: 3.0.5 + peerDependencies: + react: '>= 16.3' + dependencies: + prop-types: registry.npmjs.org/prop-types@15.8.1 + react: registry.npmjs.org/react@18.2.0 + react-draggable: registry.npmjs.org/react-draggable@4.4.5(react-dom@18.2.0)(react@18.2.0) + transitivePeerDependencies: + - react-dom + dev: false + + registry.npmjs.org/react-responsive@9.0.2(react@18.2.0): + resolution: {integrity: sha512-+4CCab7z8G8glgJoRjAwocsgsv6VA2w7JPxFWHRc7kvz8mec1/K5LutNC2MG28Mn8mu6+bu04XZxHv5gyfT7xQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/react-responsive/-/react-responsive-9.0.2.tgz} + id: registry.npmjs.org/react-responsive/9.0.2 + name: react-responsive + version: 9.0.2 + engines: {node: '>=0.10'} + peerDependencies: + react: '>=16.8.0' + dependencies: + hyphenate-style-name: registry.npmjs.org/hyphenate-style-name@1.0.4 + matchmediaquery: registry.npmjs.org/matchmediaquery@0.3.1 + prop-types: registry.npmjs.org/prop-types@15.8.1 + react: registry.npmjs.org/react@18.2.0 + shallow-equal: registry.npmjs.org/shallow-equal@1.2.1 + dev: false + registry.npmjs.org/react-shallow-renderer@16.15.0(react@18.1.0): resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz} id: registry.npmjs.org/react-shallow-renderer/16.15.0 @@ -44989,6 +45092,12 @@ packages: dependencies: kind-of: registry.npmjs.org/kind-of@6.0.3 + registry.npmjs.org/shallow-equal@1.2.1: + resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz} + name: shallow-equal + version: 1.2.1 + dev: false + registry.npmjs.org/shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz} name: shallowequal