@weareconceptstudio/account 0.0.0 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AccountConfig.d.ts +5 -0
- package/dist/AccountConfig.js +21 -0
- package/dist/components/AccountButton/index.d.ts +3 -0
- package/dist/components/AccountButton/index.js +22 -0
- package/dist/components/AccountButton/style.d.ts +2 -0
- package/dist/components/AccountButton/style.js +249 -0
- package/dist/components/AddressForm/index.d.ts +3 -0
- package/dist/components/AddressForm/index.js +100 -0
- package/dist/components/AddressForm/style.d.ts +2 -0
- package/dist/components/AddressForm/style.js +180 -0
- package/dist/components/AddressItem/index.d.ts +3 -0
- package/dist/components/AddressItem/index.js +41 -0
- package/dist/components/AddressItem/style.d.ts +2 -0
- package/dist/components/AddressItem/style.js +191 -0
- package/dist/components/CustomCheckbox/index.d.ts +7 -0
- package/dist/components/CustomCheckbox/index.js +15 -0
- package/dist/components/CustomCheckbox/style.d.ts +2 -0
- package/dist/components/CustomCheckbox/style.js +85 -0
- package/dist/components/EmptyCart/index.d.ts +5 -0
- package/dist/components/EmptyCart/index.js +14 -0
- package/dist/components/EmptyCart/style.d.ts +2 -0
- package/dist/components/EmptyCart/style.js +62 -0
- package/dist/components/EmptyOrders/index.d.ts +3 -0
- package/dist/components/EmptyOrders/index.js +12 -0
- package/dist/components/EmptyOrders/style.d.ts +2 -0
- package/dist/components/EmptyOrders/style.js +46 -0
- package/dist/components/FormInputCode/index.d.ts +24 -0
- package/dist/components/FormInputCode/index.js +145 -0
- package/dist/components/FormInputCode/style.d.ts +2 -0
- package/dist/components/FormInputCode/style.js +109 -0
- package/dist/components/OrderDetails/index.d.ts +3 -0
- package/dist/components/OrderDetails/index.js +48 -0
- package/dist/components/OrderDetails/style.d.ts +2 -0
- package/dist/components/OrderDetails/style.js +90 -0
- package/dist/components/OrderedItems/ReviewPopup/index.d.ts +0 -0
- package/dist/components/OrderedItems/ReviewPopup/index.js +202 -0
- package/dist/components/OrderedItems/ReviewPopup/style.d.ts +2 -0
- package/dist/components/OrderedItems/ReviewPopup/style.js +329 -0
- package/dist/components/OrderedItems/index.d.ts +7 -0
- package/dist/components/OrderedItems/index.js +108 -0
- package/dist/components/OrderedItems/style.d.ts +2 -0
- package/dist/components/OrderedItems/style.js +783 -0
- package/dist/components/OrdersList/OrderItem/index.d.ts +3 -0
- package/dist/components/OrdersList/OrderItem/index.js +21 -0
- package/dist/components/OrdersList/index.d.ts +10 -0
- package/dist/components/OrdersList/index.js +68 -0
- package/dist/components/OrdersList/style.d.ts +2 -0
- package/dist/components/OrdersList/style.js +373 -0
- package/dist/components/Pagination/index.d.ts +3 -0
- package/dist/components/Pagination/index.js +18 -0
- package/dist/components/Pagination/style.d.ts +2 -0
- package/dist/components/Pagination/style.js +72 -0
- package/dist/components/SelectShippingBilling/index.d.ts +3 -0
- package/dist/components/SelectShippingBilling/index.js +31 -0
- package/dist/components/SelectShippingBilling/style.d.ts +2 -0
- package/dist/components/SelectShippingBilling/style.js +112 -0
- package/dist/components/Sequence/index.d.ts +5 -0
- package/dist/components/Sequence/index.js +65 -0
- package/dist/components/Sequence/style.d.ts +2 -0
- package/dist/components/Sequence/style.js +317 -0
- package/dist/components/ShippingBillingForm/index.d.ts +3 -0
- package/dist/components/ShippingBillingForm/index.js +96 -0
- package/dist/components/ShippingBillingForm/style.d.ts +2 -0
- package/dist/components/ShippingBillingForm/style.js +77 -0
- package/dist/components/ShippingBillingInfo/index.d.ts +3 -0
- package/dist/components/ShippingBillingInfo/index.js +22 -0
- package/dist/components/ShippingBillingInfo/style.d.ts +2 -0
- package/dist/components/ShippingBillingInfo/style.js +98 -0
- package/dist/components/TotalCheckout/index.d.ts +3 -0
- package/dist/components/TotalCheckout/index.js +49 -0
- package/dist/components/TotalCheckout/style.d.ts +2 -0
- package/dist/components/TotalCheckout/style.js +211 -0
- package/dist/components/WarningMessage/index.d.ts +3 -0
- package/dist/components/WarningMessage/index.js +10 -0
- package/dist/components/WarningMessage/style.d.ts +2 -0
- package/dist/components/WarningMessage/style.js +34 -0
- package/dist/components/WarningMessageForPopup/index.d.ts +3 -0
- package/dist/components/WarningMessageForPopup/index.js +31 -0
- package/dist/components/WarningMessageForPopup/style.d.ts +2 -0
- package/dist/components/WarningMessageForPopup/style.js +82 -0
- package/dist/components/index.d.ts +18 -0
- package/dist/components/index.js +18 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/styles/helperClass.d.ts +2 -0
- package/dist/styles/helperClass.js +278 -0
- package/dist/styles/theme.d.ts +2 -0
- package/dist/styles/theme.js +63 -0
- package/dist/styles/typography.d.ts +2 -0
- package/dist/styles/typography.js +129 -0
- package/dist/styles/variables.d.ts +2 -0
- package/dist/styles/variables.js +401 -0
- package/dist/templates/AccountSettingsTemplate/AccountInfo/index.d.ts +38 -0
- package/dist/templates/AccountSettingsTemplate/AccountInfo/index.js +37 -0
- package/dist/templates/AccountSettingsTemplate/AccountInfo/style.d.ts +2 -0
- package/dist/templates/AccountSettingsTemplate/AccountInfo/style.js +165 -0
- package/dist/templates/AccountSettingsTemplate/AccountInfo/utils.d.ts +32 -0
- package/dist/templates/AccountSettingsTemplate/AccountInfo/utils.js +45 -0
- package/dist/templates/AccountSettingsTemplate/AccountPassword/index.d.ts +15 -0
- package/dist/templates/AccountSettingsTemplate/AccountPassword/index.js +36 -0
- package/dist/templates/AccountSettingsTemplate/AccountPassword/style.d.ts +2 -0
- package/dist/templates/AccountSettingsTemplate/AccountPassword/style.js +141 -0
- package/dist/templates/AccountSettingsTemplate/AccountPassword/utils.d.ts +10 -0
- package/dist/templates/AccountSettingsTemplate/AccountPassword/utils.js +22 -0
- package/dist/templates/AccountSettingsTemplate/index.d.ts +11 -0
- package/dist/templates/AccountSettingsTemplate/index.js +10 -0
- package/dist/templates/AccountSettingsTemplate/style.d.ts +2 -0
- package/dist/templates/AccountSettingsTemplate/style.js +37 -0
- package/dist/templates/AccountTemplate/index.d.ts +8 -0
- package/dist/templates/AccountTemplate/index.js +32 -0
- package/dist/templates/AccountTemplate/style.d.ts +2 -0
- package/dist/templates/AccountTemplate/style.js +293 -0
- package/dist/templates/AddressesTemplate/index.d.ts +3 -0
- package/dist/templates/AddressesTemplate/index.js +21 -0
- package/dist/templates/AddressesTemplate/style.d.ts +2 -0
- package/dist/templates/AddressesTemplate/style.js +89 -0
- package/dist/templates/CartTemplate/index.d.ts +3 -0
- package/dist/templates/CartTemplate/index.js +23 -0
- package/dist/templates/CartTemplate/style.d.ts +2 -0
- package/dist/templates/CartTemplate/style.js +37 -0
- package/dist/templates/CheckoutTemplate/index.d.ts +9 -0
- package/dist/templates/CheckoutTemplate/index.js +155 -0
- package/dist/templates/CheckoutTemplate/style.d.ts +2 -0
- package/dist/templates/CheckoutTemplate/style.js +173 -0
- package/dist/templates/ForgotPasswordTemplate/index.d.ts +5 -2
- package/dist/templates/ForgotPasswordTemplate/index.js +86 -3
- package/dist/templates/ForgotPasswordTemplate/style.d.ts +2 -0
- package/dist/templates/ForgotPasswordTemplate/style.js +186 -0
- package/dist/templates/OrderHistoryTemplate/index.d.ts +7 -0
- package/dist/templates/OrderHistoryTemplate/index.js +9 -0
- package/dist/templates/OrderHistoryTemplate/style.d.ts +2 -0
- package/dist/templates/OrderHistoryTemplate/style.js +3 -0
- package/dist/templates/OrderIndividualTemplate/index.d.ts +5 -0
- package/dist/templates/OrderIndividualTemplate/index.js +21 -0
- package/dist/templates/OrderIndividualTemplate/style.d.ts +2 -0
- package/dist/templates/OrderIndividualTemplate/style.js +3 -0
- package/dist/templates/ResetPasswordTemplate/index.d.ts +7 -2
- package/dist/templates/ResetPasswordTemplate/index.js +35 -2
- package/dist/templates/ResetPasswordTemplate/style.d.ts +2 -0
- package/dist/templates/ResetPasswordTemplate/style.js +163 -0
- package/dist/templates/SignInTemplate/index.d.ts +5 -2
- package/dist/templates/SignInTemplate/index.js +27 -2
- package/dist/templates/SignInTemplate/style.d.ts +2 -0
- package/dist/templates/SignInTemplate/style.js +168 -0
- package/dist/templates/SignUpTemplate/defaultFormFields.d.ts +11 -0
- package/dist/templates/SignUpTemplate/defaultFormFields.js +42 -0
- package/dist/templates/SignUpTemplate/index.d.ts +6 -2
- package/dist/templates/SignUpTemplate/index.js +33 -3
- package/dist/templates/SignUpTemplate/style.d.ts +2 -0
- package/dist/templates/SignUpTemplate/style.js +175 -0
- package/dist/templates/VerifyEmailAddressTemplate/index.d.ts +3 -0
- package/dist/templates/VerifyEmailAddressTemplate/index.js +105 -0
- package/dist/templates/VerifyEmailAddressTemplate/style.d.ts +2 -0
- package/dist/templates/VerifyEmailAddressTemplate/style.js +165 -0
- package/dist/templates/index.d.ts +8 -0
- package/dist/templates/index.js +11 -0
- package/dist/translations/en.d.ts +257 -0
- package/dist/translations/en.js +256 -0
- package/dist/translations/index.d.ts +259 -0
- package/dist/translations/index.js +2 -0
- package/dist/utils/_functions.d.ts +5 -0
- package/dist/utils/_functions.js +28 -0
- package/dist/utils/icons.d.ts +3 -0
- package/dist/utils/icons.js +27 -0
- package/package.json +5 -6
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
const AddressItemStyle = styled.section `
|
|
3
|
+
--account_itemWidth: 50%;
|
|
4
|
+
--account_itemBorderRadius: var(--sp1-5x);
|
|
5
|
+
--account_itemInternalWrapPad: var(--sp4x);
|
|
6
|
+
--account_smallMarginDistance: var(--sp1x);
|
|
7
|
+
--account_marginTopSize: var(--sp3x);
|
|
8
|
+
--account_verticalLineHeight: var(--sp2x);
|
|
9
|
+
--account_verticalDistance: var(--sp2x);
|
|
10
|
+
--account_changeAddressWrapMBot: var(--sp5x);
|
|
11
|
+
--account_circleSize: var(--sp4x);
|
|
12
|
+
--account_checkSize: var(--sp2x);
|
|
13
|
+
|
|
14
|
+
width: var(--account_itemWidth);
|
|
15
|
+
padding: 0 calc(var(--account_itemDistance) / 2);
|
|
16
|
+
|
|
17
|
+
&:nth-child(n + 3) {
|
|
18
|
+
margin-top: var(--account_itemDistance);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.item-internal-wrap {
|
|
22
|
+
display: flex;
|
|
23
|
+
flex-direction: column;
|
|
24
|
+
justify-content: space-between;
|
|
25
|
+
padding: var(--account_itemInternalWrapPad);
|
|
26
|
+
border: 2px solid var(--account_primaryColor5);
|
|
27
|
+
border-radius: var(--account_itemBorderRadius);
|
|
28
|
+
height: 100%;
|
|
29
|
+
|
|
30
|
+
.personal-data-wrap {
|
|
31
|
+
.col-wrap {
|
|
32
|
+
margin-top: var(--account_smallMarginDistance);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.margin-style {
|
|
37
|
+
margin-top: var(--account_marginTopSize);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.edit-remove-wrapper {
|
|
41
|
+
display: flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
margin-top: var(--account_marginTopSize);
|
|
44
|
+
|
|
45
|
+
.vertical-line {
|
|
46
|
+
width: 2px;
|
|
47
|
+
height: var(--account_verticalLineHeight);
|
|
48
|
+
background-color: var(--account_primaryColor3);
|
|
49
|
+
margin: 0 var(--account_verticalDistance);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
//! Relative styles
|
|
54
|
+
.relative-wrapper {
|
|
55
|
+
position: relative;
|
|
56
|
+
|
|
57
|
+
.circle-selected-wrap {
|
|
58
|
+
position: absolute;
|
|
59
|
+
width: var(--account_circleSize);
|
|
60
|
+
height: var(--account_circleSize);
|
|
61
|
+
border-radius: 50%;
|
|
62
|
+
border: 2px solid var(--account_primaryColor5);
|
|
63
|
+
background-color: var(--account_backgroundColor);
|
|
64
|
+
top: 0;
|
|
65
|
+
right: 0;
|
|
66
|
+
display: flex;
|
|
67
|
+
align-items: center;
|
|
68
|
+
justify-content: center;
|
|
69
|
+
|
|
70
|
+
i {
|
|
71
|
+
display: flex;
|
|
72
|
+
justify-content: center;
|
|
73
|
+
align-items: center;
|
|
74
|
+
|
|
75
|
+
&:before {
|
|
76
|
+
font-size: var(--account_checkSize);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.selected,
|
|
81
|
+
.note-selected {
|
|
82
|
+
color: var(--account_backgroundColor);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
&.active {
|
|
86
|
+
border: 2px solid var(--account_primaryColor1);
|
|
87
|
+
background-color: var(--account_primaryColor1);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.checkbox-icon {
|
|
91
|
+
display: flex;
|
|
92
|
+
justify-content: center;
|
|
93
|
+
align-items: center;
|
|
94
|
+
|
|
95
|
+
width: var(--account_checkSize);
|
|
96
|
+
height: var(--account_checkSize);
|
|
97
|
+
fill: var(--account_backgroundColor);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.change-address-wrap {
|
|
104
|
+
display: flex;
|
|
105
|
+
align-items: center;
|
|
106
|
+
justify-content: space-between;
|
|
107
|
+
margin-bottom: var(--account_changeAddressWrapMBot);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXLMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeL}) {
|
|
111
|
+
--account_itemInternalWrapPad: var(--sp3x);
|
|
112
|
+
--account_verticalLineHeight: var(--sp1-5x);
|
|
113
|
+
--account_marginTopSize: var(--sp2x);
|
|
114
|
+
--account_changeAddressWrapMBot: var(--sp4x);
|
|
115
|
+
--account_circleSize: var(--sp3x);
|
|
116
|
+
--account_checkSize: var(--sp1-5x);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeLMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeM}) {
|
|
120
|
+
--account_itemInternalWrapPad: var(--sp3x);
|
|
121
|
+
--account_smallMarginDistance: var(--sp0-5x);
|
|
122
|
+
--account_verticalLineHeight: var(--sp1-5x);
|
|
123
|
+
--account_verticalDistance: var(--sp1-5x);
|
|
124
|
+
--account_marginTopSize: var(--sp1-5x);
|
|
125
|
+
--account_changeAddressWrapMBot: var(--sp4x);
|
|
126
|
+
--account_circleSize: var(--sp3x);
|
|
127
|
+
--account_checkSize: var(--sp1-5x);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeMMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeS}) {
|
|
131
|
+
--account_itemInternalWrapPad: var(--sp3x);
|
|
132
|
+
--account_smallMarginDistance: var(--sp0-5x);
|
|
133
|
+
--account_verticalLineHeight: var(--sp1-5x);
|
|
134
|
+
--account_verticalDistance: var(--sp1-5x);
|
|
135
|
+
--account_marginTopSize: var(--sp1-5x);
|
|
136
|
+
--account_changeAddressWrapMBot: var(--sp3x);
|
|
137
|
+
--account_circleSize: var(--sp3x);
|
|
138
|
+
--account_checkSize: var(--sp1-5x);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeSMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXS}) {
|
|
142
|
+
--account_itemInternalWrapPad: var(--sp2x);
|
|
143
|
+
--account_smallMarginDistance: var(--sp0-5x);
|
|
144
|
+
--account_verticalLineHeight: var(--sp1-5x);
|
|
145
|
+
--account_verticalDistance: var(--sp1-5x);
|
|
146
|
+
--account_marginTopSize: var(--sp1x);
|
|
147
|
+
--account_changeAddressWrapMBot: var(--sp3x);
|
|
148
|
+
--account_circleSize: var(--sp2-5x);
|
|
149
|
+
--account_checkSize: var(--sp1x);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXSMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_TabletSize}) {
|
|
153
|
+
--account_itemInternalWrapPad: var(--sp2x);
|
|
154
|
+
--account_smallMarginDistance: var(--sp0-5x);
|
|
155
|
+
--account_verticalLineHeight: var(--sp1-5x);
|
|
156
|
+
--account_verticalDistance: var(--sp1x);
|
|
157
|
+
--account_marginTopSize: var(--sp1x);
|
|
158
|
+
--account_changeAddressWrapMBot: var(--sp3x);
|
|
159
|
+
--account_circleSize: var(--sp2-5x);
|
|
160
|
+
--account_checkSize: var(--sp1x);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeS}) {
|
|
164
|
+
--account_itemBorderRadius: var(--sp1x);
|
|
165
|
+
--account_itemInternalWrapPad: var(--sp2x);
|
|
166
|
+
--account_smallMarginDistance: var(--sp0-5x);
|
|
167
|
+
--account_verticalLineHeight: var(--sp1-5x);
|
|
168
|
+
--account_verticalDistance: var(--sp1x);
|
|
169
|
+
--account_marginTopSize: var(--sp1x);
|
|
170
|
+
--account_changeAddressWrapMBot: var(--sp3x);
|
|
171
|
+
--account_circleSize: var(--sp2-5x);
|
|
172
|
+
--account_checkSize: var(--sp1x);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeSMin}) {
|
|
176
|
+
--account_itemInternalWrapPad: var(--sp1-5x);
|
|
177
|
+
--account_smallMarginDistance: var(--sp0-5x);
|
|
178
|
+
--account_verticalLineHeight: var(--sp1-5x);
|
|
179
|
+
--account_verticalDistance: var(--sp1x);
|
|
180
|
+
--account_itemWidth: 100%;
|
|
181
|
+
--account_marginTopSize: var(--sp1x);
|
|
182
|
+
--account_changeAddressWrapMBot: var(--sp2x);
|
|
183
|
+
--account_circleSize: var(--sp2-5x);
|
|
184
|
+
--account_checkSize: var(--sp1x);
|
|
185
|
+
|
|
186
|
+
&:nth-child(2) {
|
|
187
|
+
margin-top: var(--account_itemDistance);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
`;
|
|
191
|
+
export default AddressItemStyle;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Text } from '@weareconceptstudio/core';
|
|
3
|
+
//* Icons
|
|
4
|
+
import { CheckboxCheckedIcon, CheckboxIcon } from '../../utils/icons';
|
|
5
|
+
//* Style
|
|
6
|
+
import CustomCheckboxStyle from './style';
|
|
7
|
+
const CustomCheckbox = ({ hide, setHide, isText = true }) => {
|
|
8
|
+
return (React.createElement(CustomCheckboxStyle, { className: `${isText ? 'is-text' : ''}` },
|
|
9
|
+
React.createElement("div", { onClick: () => setHide(!hide), className: `custom-checkbox-wrap cursor-pointer` },
|
|
10
|
+
hide ? (React.createElement("div", { className: 'checkbox-wrap', role: 'button' },
|
|
11
|
+
React.createElement(CheckboxCheckedIcon, null))) : (React.createElement("div", { className: 'checkbox-wrap', role: 'button' },
|
|
12
|
+
React.createElement(CheckboxIcon, null))),
|
|
13
|
+
isText ? (React.createElement(Text, { className: `account-p account-p3 account-font-regular account-primary-color1 checkbox-text`, text: `useAlsoBillingAddress` })) : null)));
|
|
14
|
+
};
|
|
15
|
+
export default CustomCheckbox;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export default CustomCheckboxStyle;
|
|
2
|
+
declare const CustomCheckboxStyle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
const CustomCheckboxStyle = styled.div `
|
|
3
|
+
--account_checkboxWrapSize: var(--sp4x);
|
|
4
|
+
--account_checkboxWrapDistance: var(--sp2x);
|
|
5
|
+
--account_checkboxMarTopSize: var(--sp4x);
|
|
6
|
+
|
|
7
|
+
.custom-checkbox-wrap {
|
|
8
|
+
display: inline-flex;
|
|
9
|
+
align-items: center;
|
|
10
|
+
|
|
11
|
+
.checkbox-wrap {
|
|
12
|
+
display: flex;
|
|
13
|
+
align-items: center;
|
|
14
|
+
|
|
15
|
+
svg {
|
|
16
|
+
cursor: pointer;
|
|
17
|
+
width: var(--account_checkboxWrapSize);
|
|
18
|
+
height: var(--account_checkboxWrapSize);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.checkbox-text {
|
|
24
|
+
margin-left: var(--account_checkboxWrapDistance);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
&.is-text {
|
|
28
|
+
margin-top: var(--account_checkboxMarTopSize);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.r-1 {
|
|
32
|
+
fill: var(--account_backgroundColor);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.r-2 {
|
|
36
|
+
fill: var(--account_primaryColor1);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.r-3 {
|
|
40
|
+
fill: var(--account_primaryColor4);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXLMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeL}) {
|
|
44
|
+
--account_checkboxWrapSize: var(--sp2-5x);
|
|
45
|
+
--account_checkboxWrapDistance: var(--sp2x);
|
|
46
|
+
--account_checkboxMarTopSize: var(--sp4x);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeLMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeM}) {
|
|
50
|
+
--account_checkboxWrapSize: var(--sp3x);
|
|
51
|
+
--account_checkboxWrapDistance: var(--sp2x);
|
|
52
|
+
--account_checkboxMarTopSize: var(--sp3x);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeMMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeS}) {
|
|
56
|
+
--account_checkboxWrapSize: var(--sp3x);
|
|
57
|
+
--account_checkboxWrapDistance: var(--sp1-5x);
|
|
58
|
+
--account_checkboxMarTopSize: var(--sp3x);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeSMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXS}) {
|
|
62
|
+
--account_checkboxWrapSize: var(--sp2-5x);
|
|
63
|
+
--account_checkboxWrapDistance: var(--sp1x);
|
|
64
|
+
--account_checkboxMarTopSize: var(--sp3x);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXSMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_TabletSize}) {
|
|
68
|
+
--account_checkboxWrapSize: var(--sp2-5x);
|
|
69
|
+
--account_checkboxWrapDistance: var(--sp1x);
|
|
70
|
+
--account_checkboxMarTopSize: var(--sp3x);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeS}) {
|
|
74
|
+
--account_checkboxWrapSize: var(--sp2-5x);
|
|
75
|
+
--account_checkboxWrapDistance: var(--sp1x);
|
|
76
|
+
--account_checkboxMarTopSize: var(--sp3x);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeSMin}) {
|
|
80
|
+
--account_checkboxWrapSize: var(--sp2-5x);
|
|
81
|
+
--account_checkboxWrapDistance: var(--sp1x);
|
|
82
|
+
--account_checkboxMarTopSize: var(--sp3x);
|
|
83
|
+
}
|
|
84
|
+
`;
|
|
85
|
+
export default CustomCheckboxStyle;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Text } from '@weareconceptstudio/core';
|
|
3
|
+
//* Style
|
|
4
|
+
import EmptyCartStyle from './style';
|
|
5
|
+
//* Components
|
|
6
|
+
import AccountButton from '../AccountButton';
|
|
7
|
+
const EmptyCart = ({ shoppingUrl }) => {
|
|
8
|
+
return (React.createElement(EmptyCartStyle, null,
|
|
9
|
+
React.createElement("div", { className: `empty-cart-wrap` },
|
|
10
|
+
React.createElement(Text, { tag: `h4`, className: `account-h4 account-font-bold account-primary-color1`, text: `cartEmpty` }),
|
|
11
|
+
React.createElement(Text, { className: `account-p account-p2 account-font-regular account-primary-color1 description`, text: `cartEmptyDesc` }),
|
|
12
|
+
shoppingUrl ? (React.createElement(AccountButton, { btnType: 'purple-text', text: `shopNow`, url: shoppingUrl })) : null)));
|
|
13
|
+
};
|
|
14
|
+
export default EmptyCart;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
const EmptyCartStyle = styled.section `
|
|
3
|
+
--account_emptyCartWrapMaxWidth: var(--sp94x);
|
|
4
|
+
--account_descriptionMTop: var(--sp3x);
|
|
5
|
+
--account_btnWrapMTop: var(--sp7x);
|
|
6
|
+
|
|
7
|
+
.empty-cart-wrap {
|
|
8
|
+
max-width: var(--account_emptyCartWrapMaxWidth);
|
|
9
|
+
width: 100%;
|
|
10
|
+
|
|
11
|
+
.description {
|
|
12
|
+
margin-top: var(--account_descriptionMTop);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.btn-wrap {
|
|
16
|
+
margin-top: var(--account_btnWrapMTop);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXLMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeL}) {
|
|
21
|
+
--account_emptyCartWrapMaxWidth: var(--sp51x);
|
|
22
|
+
--account_descriptionMTop: var(--sp2x);
|
|
23
|
+
--account_btnWrapMTop: var(--sp5x);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeLMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeM}) {
|
|
27
|
+
--account_emptyCartWrapMaxWidth: var(--sp55x);
|
|
28
|
+
--account_descriptionMTop: var(--sp2x);
|
|
29
|
+
--account_btnWrapMTop: var(--sp4x);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeMMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeS}) {
|
|
33
|
+
--account_emptyCartWrapMaxWidth: var(--sp53x);
|
|
34
|
+
--account_descriptionMTop: var(--sp2x);
|
|
35
|
+
--account_btnWrapMTop: var(--sp4x);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeSMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXS}) {
|
|
39
|
+
--account_emptyCartWrapMaxWidth: var(--sp48x);
|
|
40
|
+
--account_descriptionMTop: var(--sp2x);
|
|
41
|
+
--account_btnWrapMTop: var(--sp3x);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXSMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_TabletSize}) {
|
|
45
|
+
--account_emptyCartWrapMaxWidth: var(--sp43x);
|
|
46
|
+
--account_descriptionMTop: var(--sp2x);
|
|
47
|
+
--account_btnWrapMTop: var(--sp3x);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeS}) {
|
|
51
|
+
--account_emptyCartWrapMaxWidth: var(--sp43x);
|
|
52
|
+
--account_descriptionMTop: var(--sp2x);
|
|
53
|
+
--account_btnWrapMTop: var(--sp3x);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeSMin}) {
|
|
57
|
+
--account_emptyCartWrapMaxWidth: 100%;
|
|
58
|
+
--account_descriptionMTop: var(--sp1x);
|
|
59
|
+
--account_btnWrapMTop: var(--sp3x);
|
|
60
|
+
}
|
|
61
|
+
`;
|
|
62
|
+
export default EmptyCartStyle;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React, { memo as Memo } from 'react';
|
|
2
|
+
import { Text } from '@weareconceptstudio/core';
|
|
3
|
+
//* Style
|
|
4
|
+
import EmptyOrdersStyle from './style';
|
|
5
|
+
//* Components
|
|
6
|
+
import AccountButton from '../AccountButton';
|
|
7
|
+
const EmptyOrders = Memo(() => {
|
|
8
|
+
return (React.createElement(EmptyOrdersStyle, null,
|
|
9
|
+
React.createElement(Text, { tag: `h6`, className: `account-h6 account-font-bold account-primary-color1`, text: `emptyTitle` }),
|
|
10
|
+
React.createElement(Text, { className: `account-p account-p2 account-font-regular account-primary-color1 description`, text: `emptyDesc` })));
|
|
11
|
+
});
|
|
12
|
+
export default EmptyOrders;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export default EmptyOrdersStyle;
|
|
2
|
+
declare const EmptyOrdersStyle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLElement>, HTMLElement>, never>> & string;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
const EmptyOrdersStyle = styled.section `
|
|
3
|
+
--account_descMTop: var(--sp3x);
|
|
4
|
+
--account_descMBot: var(--sp7x);
|
|
5
|
+
|
|
6
|
+
.description {
|
|
7
|
+
margin-top: var(--account_descMTop);
|
|
8
|
+
margin-bottom: var(--account_descMBot);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXLMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeL}) {
|
|
12
|
+
--account_descMTop: var(--sp2x);
|
|
13
|
+
--account_descMBot: var(--sp5x);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeLMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeM}) {
|
|
17
|
+
--account_descMTop: var(--sp2x);
|
|
18
|
+
--account_descMBot: var(--sp4x);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeMMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeS}) {
|
|
22
|
+
--account_descMTop: var(--sp2x);
|
|
23
|
+
--account_descMBot: var(--sp4x);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeSMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXS}) {
|
|
27
|
+
--account_descMTop: var(--sp2x);
|
|
28
|
+
--account_descMBot: var(--sp3x);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_DesktopSizeXSMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_TabletSize}) {
|
|
32
|
+
--account_descMTop: var(--sp1-5x);
|
|
33
|
+
--account_descMBot: var(--sp3x);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeMin}) and (min-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeS}) {
|
|
37
|
+
--account_descMTop: var(--sp1-5x);
|
|
38
|
+
--account_descMBot: var(--sp3x);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@media only screen and (max-width: ${(props) => props.theme.account.mediaQuery.account_TabletSizeSMin}) {
|
|
42
|
+
--account_descMTop: var(--sp1-5x);
|
|
43
|
+
--account_descMBot: var(--sp3x);
|
|
44
|
+
}
|
|
45
|
+
`;
|
|
46
|
+
export default EmptyOrdersStyle;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export default class ReactCodeInput extends React.Component<any, any, any> {
|
|
2
|
+
static defaultProps: {
|
|
3
|
+
type: string;
|
|
4
|
+
fields: number;
|
|
5
|
+
autoFocus: boolean;
|
|
6
|
+
disabled: boolean;
|
|
7
|
+
required: boolean;
|
|
8
|
+
placeholder: any[];
|
|
9
|
+
};
|
|
10
|
+
constructor(props: any);
|
|
11
|
+
state: {
|
|
12
|
+
values: any[];
|
|
13
|
+
autoFocusIndex: number;
|
|
14
|
+
};
|
|
15
|
+
iRefs: React.RefObject<any>[];
|
|
16
|
+
id: number;
|
|
17
|
+
__clearvalues__: () => void;
|
|
18
|
+
triggerChange: (values?: any[]) => void;
|
|
19
|
+
onChange: (e: any) => void;
|
|
20
|
+
onKeyDown: (e: any) => void;
|
|
21
|
+
onFocus: (e: any) => void;
|
|
22
|
+
render(): React.JSX.Element;
|
|
23
|
+
}
|
|
24
|
+
import React from 'react';
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import React, { Component } from 'react';
|
|
2
|
+
//* Style
|
|
3
|
+
import FormInputCodeStyle from './style';
|
|
4
|
+
const KEY_CODE = {
|
|
5
|
+
backspace: 8,
|
|
6
|
+
left: 37,
|
|
7
|
+
up: 38,
|
|
8
|
+
right: 39,
|
|
9
|
+
down: 40,
|
|
10
|
+
};
|
|
11
|
+
export default class ReactCodeInput extends Component {
|
|
12
|
+
static defaultProps = {
|
|
13
|
+
type: 'number',
|
|
14
|
+
fields: 6,
|
|
15
|
+
autoFocus: true,
|
|
16
|
+
disabled: false,
|
|
17
|
+
required: false,
|
|
18
|
+
placeholder: [],
|
|
19
|
+
};
|
|
20
|
+
constructor(props) {
|
|
21
|
+
super(props);
|
|
22
|
+
const { fields, values } = props;
|
|
23
|
+
let vals;
|
|
24
|
+
let autoFocusIndex = 0;
|
|
25
|
+
if (values && values.length) {
|
|
26
|
+
vals = [];
|
|
27
|
+
for (let i = 0; i < fields; i++) {
|
|
28
|
+
vals.push(values[i] || '');
|
|
29
|
+
}
|
|
30
|
+
autoFocusIndex = values.length >= fields ? 0 : values.length;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
vals = Array(fields).fill('');
|
|
34
|
+
}
|
|
35
|
+
this.state = { values: vals, autoFocusIndex };
|
|
36
|
+
this.iRefs = [];
|
|
37
|
+
for (let i = 0; i < fields; i++) {
|
|
38
|
+
this.iRefs.push(React.createRef());
|
|
39
|
+
}
|
|
40
|
+
this.id = +new Date();
|
|
41
|
+
}
|
|
42
|
+
__clearvalues__ = () => {
|
|
43
|
+
const { fields } = this.props;
|
|
44
|
+
this.setState({ values: Array(fields).fill('') });
|
|
45
|
+
this.iRefs[0].current.focus();
|
|
46
|
+
};
|
|
47
|
+
triggerChange = (values = this.state.values) => {
|
|
48
|
+
const { onChange, onComplete, fields } = this.props;
|
|
49
|
+
const val = values.join('');
|
|
50
|
+
onChange && onChange(val);
|
|
51
|
+
if (onComplete && val.length >= fields) {
|
|
52
|
+
onComplete(val);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
onChange = (e) => {
|
|
56
|
+
const index = parseInt(e.target.dataset.id);
|
|
57
|
+
if (this.props.type === 'number') {
|
|
58
|
+
e.target.value = e.target.value.replace(/[^\d]/gi, '');
|
|
59
|
+
}
|
|
60
|
+
if (e.target.value === '' || (this.props.type === 'number' && !e.target.validity.valid)) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const { fields } = this.props;
|
|
64
|
+
let next;
|
|
65
|
+
const value = e.target.value;
|
|
66
|
+
let { values } = this.state;
|
|
67
|
+
values = Object.assign([], values);
|
|
68
|
+
if (value.length > 1) {
|
|
69
|
+
let nextIndex = value.length + index - 1;
|
|
70
|
+
if (nextIndex >= fields) {
|
|
71
|
+
nextIndex = fields - 1;
|
|
72
|
+
}
|
|
73
|
+
next = this.iRefs[nextIndex];
|
|
74
|
+
const split = value.split('');
|
|
75
|
+
split.forEach((item, i) => {
|
|
76
|
+
const cursor = index + i;
|
|
77
|
+
if (cursor < fields) {
|
|
78
|
+
values[cursor] = item;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
this.setState({ values });
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
next = this.iRefs[index + 1];
|
|
85
|
+
values[index] = value;
|
|
86
|
+
this.setState({ values });
|
|
87
|
+
}
|
|
88
|
+
if (next) {
|
|
89
|
+
next.current.focus();
|
|
90
|
+
next.current.select();
|
|
91
|
+
}
|
|
92
|
+
this.triggerChange(values);
|
|
93
|
+
};
|
|
94
|
+
onKeyDown = (e) => {
|
|
95
|
+
const index = parseInt(e.target.dataset.id);
|
|
96
|
+
const prevIndex = index - 1;
|
|
97
|
+
const nextIndex = index + 1;
|
|
98
|
+
const prev = this.iRefs[prevIndex];
|
|
99
|
+
const next = this.iRefs[nextIndex];
|
|
100
|
+
switch (e.keyCode) {
|
|
101
|
+
case KEY_CODE.backspace:
|
|
102
|
+
e.preventDefault();
|
|
103
|
+
const vals = [...this.state.values];
|
|
104
|
+
if (this.state.values[index]) {
|
|
105
|
+
vals[index] = '';
|
|
106
|
+
this.setState({ values: vals });
|
|
107
|
+
this.triggerChange(vals);
|
|
108
|
+
}
|
|
109
|
+
else if (prev) {
|
|
110
|
+
vals[prevIndex] = '';
|
|
111
|
+
prev.current.focus();
|
|
112
|
+
this.setState({ values: vals });
|
|
113
|
+
this.triggerChange(vals);
|
|
114
|
+
}
|
|
115
|
+
break;
|
|
116
|
+
case KEY_CODE.left:
|
|
117
|
+
e.preventDefault();
|
|
118
|
+
if (prev) {
|
|
119
|
+
prev.current.focus();
|
|
120
|
+
}
|
|
121
|
+
break;
|
|
122
|
+
case KEY_CODE.right:
|
|
123
|
+
e.preventDefault();
|
|
124
|
+
if (next) {
|
|
125
|
+
next.current.focus();
|
|
126
|
+
}
|
|
127
|
+
break;
|
|
128
|
+
case KEY_CODE.up:
|
|
129
|
+
case KEY_CODE.down:
|
|
130
|
+
e.preventDefault();
|
|
131
|
+
break;
|
|
132
|
+
default:
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
onFocus = (e) => {
|
|
137
|
+
e.target.select(e);
|
|
138
|
+
};
|
|
139
|
+
render() {
|
|
140
|
+
const { values, autoFocusIndex } = this.state;
|
|
141
|
+
const { autoFocus, className, type } = this.props;
|
|
142
|
+
return (React.createElement(FormInputCodeStyle, { className: `${className || ''}` },
|
|
143
|
+
React.createElement("div", { className: 'react-code-input-container' }, values.map((value, index) => (React.createElement("input", { autoComplete: 'on', type: type === 'number' ? 'tel' : type, pattern: type === 'number' ? '[0-9]*' : null, autoFocus: autoFocus && index === autoFocusIndex, key: `${this.id}-${index}`, "data-id": index, value: value, className: `input-item ${value ? 'completed' : ''}`, id: this.props.id ? `${this.props.id}-${index}` : null, ref: this.iRefs[index], onChange: this.onChange, onKeyDown: this.onKeyDown, onFocus: this.onFocus, disabled: this.props.disabled, required: this.props.required, placeholder: this.props.placeholder[index] }))))));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export default FormInputCodeStyle;
|
|
2
|
+
declare const FormInputCodeStyle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLElement>, HTMLElement>, never>> & string;
|