@startlibs/form 1.1.3 → 1.2.0-rc.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/lib/AutoComplete.mjs +7 -7
- package/lib/AutoComplete.mjs.map +1 -1
- package/lib/Checkbox.mjs +4 -2
- package/lib/Checkbox.mjs.map +1 -1
- package/lib/Combobox.mjs +1 -1
- package/lib/Combobox.mjs.map +1 -1
- package/lib/DatePicker.mjs +25 -9
- package/lib/DatePicker.mjs.map +1 -1
- package/lib/Errors.mjs +20 -10
- package/lib/Errors.mjs.map +1 -1
- package/lib/ExpandableBox.mjs +1 -1
- package/lib/ExpandableBox.mjs.map +1 -1
- package/lib/Field.mjs +10 -5
- package/lib/Field.mjs.map +1 -1
- package/lib/FieldBox.mjs +3 -3
- package/lib/FieldBox.mjs.map +1 -1
- package/lib/InputboxGroup.mjs +1 -1
- package/lib/InputboxGroup.mjs.map +1 -1
- package/lib/RichText.mjs +11 -6
- package/lib/RichText.mjs.map +1 -1
- package/lib/TextInput.mjs +4 -4
- package/lib/TextInput.mjs.map +1 -1
- package/lib/alt/checkbox/SimpleCheckbox.mjs +1 -1
- package/lib/alt/checkbox/SimpleCheckbox.mjs.map +1 -1
- package/lib/alt/checkbox/ToggleCheckbox.mjs +4 -3
- package/lib/alt/checkbox/ToggleCheckbox.mjs.map +1 -1
- package/lib/alt/radiobox/CleanTabRadiobox.mjs +1 -1
- package/lib/alt/radiobox/CleanTabRadiobox.mjs.map +1 -1
- package/lib/alt/radiobox/SimpleRadiobox.mjs +2 -2
- package/lib/alt/radiobox/SimpleRadiobox.mjs.map +1 -1
- package/lib/alt/radiobox/TabRadiobox.mjs +1 -1
- package/lib/alt/radiobox/TabRadiobox.mjs.map +1 -1
- package/lib/index.cjs +94 -51
- package/lib/index.cjs.map +1 -1
- package/lib/index.mjs +2 -2
- package/lib/withFormImageInput.mjs +1 -1
- package/lib/withFormImageInput.mjs.map +1 -1
- package/lib-yak/AutoComplete.mjs +705 -0
- package/lib-yak/AutoComplete.mjs.map +1 -0
- package/lib-yak/Checkbox.mjs +80 -0
- package/lib-yak/Checkbox.mjs.map +1 -0
- package/lib-yak/Combobox.mjs +652 -0
- package/lib-yak/Combobox.mjs.map +1 -0
- package/lib-yak/ComboboxWithCustom.mjs +77 -0
- package/lib-yak/ComboboxWithCustom.mjs.map +1 -0
- package/lib-yak/DatePicker.mjs +774 -0
- package/lib-yak/DatePicker.mjs.map +1 -0
- package/lib-yak/EditableBox.mjs +495 -0
- package/lib-yak/EditableBox.mjs.map +1 -0
- package/lib-yak/Errors.mjs +226 -0
- package/lib-yak/Errors.mjs.map +1 -0
- package/lib-yak/ExpandableBox.mjs +247 -0
- package/lib-yak/ExpandableBox.mjs.map +1 -0
- package/lib-yak/Field.mjs +93 -0
- package/lib-yak/Field.mjs.map +1 -0
- package/lib-yak/FieldBox.mjs +173 -0
- package/lib-yak/FieldBox.mjs.map +1 -0
- package/lib-yak/Form.mjs +322 -0
- package/lib-yak/Form.mjs.map +1 -0
- package/lib-yak/FormValue.mjs +111 -0
- package/lib-yak/FormValue.mjs.map +1 -0
- package/lib-yak/InputboxGroup.mjs +146 -0
- package/lib-yak/InputboxGroup.mjs.map +1 -0
- package/lib-yak/Radiobox.mjs +69 -0
- package/lib-yak/Radiobox.mjs.map +1 -0
- package/lib-yak/RichText.mjs +776 -0
- package/lib-yak/RichText.mjs.map +1 -0
- package/lib-yak/TextInput.mjs +589 -0
- package/lib-yak/TextInput.mjs.map +1 -0
- package/lib-yak/alt/checkbox/SimpleCheckbox.mjs +225 -0
- package/lib-yak/alt/checkbox/SimpleCheckbox.mjs.map +1 -0
- package/lib-yak/alt/checkbox/ToggleCheckbox.mjs +173 -0
- package/lib-yak/alt/checkbox/ToggleCheckbox.mjs.map +1 -0
- package/lib-yak/alt/radiobox/CleanTabRadiobox.mjs +87 -0
- package/lib-yak/alt/radiobox/CleanTabRadiobox.mjs.map +1 -0
- package/lib-yak/alt/radiobox/IconRadioBox.mjs +138 -0
- package/lib-yak/alt/radiobox/IconRadioBox.mjs.map +1 -0
- package/lib-yak/alt/radiobox/SimpleRadiobox.mjs +203 -0
- package/lib-yak/alt/radiobox/SimpleRadiobox.mjs.map +1 -0
- package/lib-yak/alt/radiobox/TabRadiobox.mjs +117 -0
- package/lib-yak/alt/radiobox/TabRadiobox.mjs.map +1 -0
- package/lib-yak/enhanceInput.mjs +131 -0
- package/lib-yak/enhanceInput.mjs.map +1 -0
- package/lib-yak/index.mjs +28 -0
- package/lib-yak/index.mjs.map +1 -0
- package/lib-yak/useConfirmDialog.mjs +117 -0
- package/lib-yak/useConfirmDialog.mjs.map +1 -0
- package/lib-yak/useDraftConfirmation.mjs +56 -0
- package/lib-yak/useDraftConfirmation.mjs.map +1 -0
- package/lib-yak/validation.mjs +91 -0
- package/lib-yak/validation.mjs.map +1 -0
- package/lib-yak/withFormImageInput.mjs +298 -0
- package/lib-yak/withFormImageInput.mjs.map +1 -0
- package/package.json +13 -3
- package/src/AutoComplete.jsx +12 -12
- package/src/Checkbox.jsx +2 -2
- package/src/Combobox.jsx +1 -1
- package/src/DatePicker.jsx +25 -22
- package/src/Errors.jsx +18 -8
- package/src/ExpandableBox.jsx +3 -3
- package/src/Field.jsx +9 -4
- package/src/FieldBox.jsx +6 -6
- package/src/IconRadioBoxOldHubt.jsx +1 -1
- package/src/InputboxGroup.jsx +1 -1
- package/src/RichText.jsx +17 -13
- package/src/TextInput.jsx +37 -26
- package/src/alt/checkbox/SimpleCheckbox.jsx +5 -5
- package/src/alt/checkbox/ToggleCheckbox.jsx +9 -8
- package/src/alt/radiobox/CleanTabRadiobox.jsx +2 -2
- package/src/alt/radiobox/SimpleRadiobox.jsx +7 -7
- package/src/alt/radiobox/TabRadiobox.jsx +4 -4
- package/src/withFormImageInput.jsx +2 -2
package/src/TextInput.jsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, {useState, forwardRef, useEffect} from 'react'
|
|
2
|
-
import {Field} from './Field'
|
|
2
|
+
import {Field, FieldLabel} from './Field'
|
|
3
3
|
import {useInput} from './enhanceInput'
|
|
4
4
|
import styled, {css} from 'styled-components'
|
|
5
5
|
import {Loading} from '@startlibs/components'
|
|
@@ -84,28 +84,20 @@ const Input = styled.input`
|
|
|
84
84
|
height: 3rem;
|
|
85
85
|
padding: 0 0.7rem;
|
|
86
86
|
overflow: auto;
|
|
87
|
-
${media.mobile`
|
|
88
|
-
height: 42px;
|
|
89
|
-
padding: 0 1rem;
|
|
90
|
-
@supports (-webkit-touch-callout: none) {
|
|
91
|
-
font-size: 16px;
|
|
92
|
-
}
|
|
93
|
-
`}
|
|
94
87
|
|
|
95
|
-
|
|
88
|
+
&::-webkit-input-placeholder {
|
|
96
89
|
color: rgba(0,0,0,0.3);
|
|
97
90
|
}
|
|
98
|
-
|
|
99
|
-
color: rgba(0,0,0,0.3);
|
|
100
|
-
}
|
|
101
|
-
:-moz-placeholder {
|
|
102
|
-
color: rgba(0,0,0,0.3);
|
|
103
|
-
}
|
|
104
|
-
:-ms-input-placeholder {
|
|
91
|
+
&::-moz-placeholder {
|
|
105
92
|
color: rgba(0,0,0,0.3);
|
|
106
93
|
}
|
|
94
|
+
/* :-moz-placeholder (Firefox <19) e :-ms-input-placeholder (Edge antigo) saíram: o browserslist
|
|
95
|
+
do pacote já não cobre esses motores (firefox >= 60, edge >= 79, Chromium), e a versão
|
|
96
|
+
single-colon confundia o lightningcss do yak, que compilava pra uma pseudo-classe diferente
|
|
97
|
+
(placeholder-shown, do próprio input, em vez do texto do placeholder) — o color vazava pro
|
|
98
|
+
input inteiro. Sem efeito em nenhum browser hoje suportado; nada muda no golden. */
|
|
107
99
|
${props => !props.hasTextBox && !props.noFocus && css`
|
|
108
|
-
|
|
100
|
+
&:focus {
|
|
109
101
|
border-color: ${getColor('gray180')};
|
|
110
102
|
box-shadow: 0px 0px 0px 2px rgba(0,0,0,0.1);
|
|
111
103
|
}
|
|
@@ -113,7 +105,7 @@ const Input = styled.input`
|
|
|
113
105
|
border-color: ${getColor('alert')} !important;
|
|
114
106
|
`}
|
|
115
107
|
`}
|
|
116
|
-
|
|
108
|
+
&::-ms-clear { /* Clear IE pseudo-buttons */
|
|
117
109
|
display: none;
|
|
118
110
|
}
|
|
119
111
|
${props => props.locked && css`
|
|
@@ -127,10 +119,6 @@ const Input = styled.input`
|
|
|
127
119
|
padding: .7rem;
|
|
128
120
|
display: block;
|
|
129
121
|
${props => props.autoResize ? 'overflow:hidden;' : 'overflow:auto;'}
|
|
130
|
-
${media.mobile`
|
|
131
|
-
padding: 1rem;
|
|
132
|
-
${props => props.regularInputHeight && 'min-height: 42px;'}
|
|
133
|
-
`}
|
|
134
122
|
`}
|
|
135
123
|
${props => props.rounded && css`
|
|
136
124
|
border-radius: 100px;
|
|
@@ -139,6 +127,29 @@ const Input = styled.input`
|
|
|
139
127
|
`}
|
|
140
128
|
${props => props.hasIcon && css`
|
|
141
129
|
padding-left: ${props.rounded ? '3rem' : '2.5rem'};
|
|
130
|
+
`}
|
|
131
|
+
/* stylis (sc) emite @media depois das declarações planas, não na ordem do fonte; o yak
|
|
132
|
+
preserva a ordem do fonte. Os blocos de media abaixo (fallback/isTextArea/hasIcon, nessa
|
|
133
|
+
ordem) ficam DEPOIS de todas as declarações planas acima (locked/isTextArea/rounded/hasIcon,
|
|
134
|
+
na mesma ordem do fonte original) pros dois modos baterem — lição do grupo 12: fallback
|
|
135
|
+
antes do bloco de media. As partes de media de isTextArea e hasIcon saíram de dentro dos
|
|
136
|
+
blocos acima (que continuam só com a parte plana, na posição original) e viraram
|
|
137
|
+
interpolações próprias aqui, na mesma ordem relativa de antes (media geral, depois
|
|
138
|
+
isTextArea, depois hasIcon), pra não mudar o resultado em nenhum dos dois modos. */
|
|
139
|
+
${media.mobile`
|
|
140
|
+
height: 42px;
|
|
141
|
+
padding: 0 1rem;
|
|
142
|
+
@supports (-webkit-touch-callout: none) {
|
|
143
|
+
font-size: 16px;
|
|
144
|
+
}
|
|
145
|
+
`}
|
|
146
|
+
${props => props.isTextArea && css`
|
|
147
|
+
${media.mobile`
|
|
148
|
+
padding: 1rem;
|
|
149
|
+
${props => props.regularInputHeight && 'min-height: 42px;'}
|
|
150
|
+
`}
|
|
151
|
+
`}
|
|
152
|
+
${props => props.hasIcon && css`
|
|
142
153
|
${media.mobile`
|
|
143
154
|
padding-left: ${props.rounded ? '3.25rem' : '2.75rem'};
|
|
144
155
|
`}
|
|
@@ -150,7 +161,7 @@ const InputWithTextBox = styled.div`
|
|
|
150
161
|
display: flex;
|
|
151
162
|
border-radius: ${props => props.rounded ? '100px' : '8px'};
|
|
152
163
|
position: relative;
|
|
153
|
-
|
|
164
|
+
&:before {
|
|
154
165
|
position: absolute;
|
|
155
166
|
border-radius: ${props => props.rounded ? '100px' : '8px'};
|
|
156
167
|
top: 0;
|
|
@@ -162,13 +173,13 @@ const InputWithTextBox = styled.div`
|
|
|
162
173
|
}
|
|
163
174
|
${props => props.focused && css`
|
|
164
175
|
box-shadow: 0px 0px 0px 2px rgba(0,0,0,0.1);
|
|
165
|
-
|
|
176
|
+
&:before {
|
|
166
177
|
content: '';
|
|
167
178
|
border: 1px solid ${getColor('gray180')};
|
|
168
179
|
}
|
|
169
180
|
`}
|
|
170
181
|
${props => props.hasErrors && css`
|
|
171
|
-
|
|
182
|
+
&:before {
|
|
172
183
|
content: '';
|
|
173
184
|
border: 1px solid ${getColor('alert')};
|
|
174
185
|
}
|
|
@@ -499,7 +510,7 @@ const FloatingFieldType = styled(Field)`
|
|
|
499
510
|
font-weight: 400;
|
|
500
511
|
padding: 16px 1rem 0;
|
|
501
512
|
}
|
|
502
|
-
${
|
|
513
|
+
${FieldLabel} {
|
|
503
514
|
position: absolute;
|
|
504
515
|
top: 1.5rem;
|
|
505
516
|
left: 1rem;
|
|
@@ -68,10 +68,10 @@ const CheckboxContent = styled.div `
|
|
|
68
68
|
width: 100%;
|
|
69
69
|
align-items: center;
|
|
70
70
|
display: flex;
|
|
71
|
-
|
|
71
|
+
&:hover {
|
|
72
72
|
background: rgb(245,245,245);
|
|
73
73
|
}
|
|
74
|
-
|
|
74
|
+
&:active {
|
|
75
75
|
background: rgb(235,235,235);
|
|
76
76
|
transition: none;
|
|
77
77
|
}
|
|
@@ -85,7 +85,7 @@ const CheckboxContent = styled.div `
|
|
|
85
85
|
${props => props.checked && props.highlightSelected && css`
|
|
86
86
|
border-color: ${getColor('main')};
|
|
87
87
|
background: ${props => desaturate(0.3, lighten(0.52, getColor("main")(props)))};
|
|
88
|
-
|
|
88
|
+
&:hover {
|
|
89
89
|
background: ${props => desaturate(0.3, lighten(0.52, getColor("main")(props)))};
|
|
90
90
|
}
|
|
91
91
|
${CheckboxPseudoInput} {
|
|
@@ -101,7 +101,7 @@ const CheckboxContent = styled.div `
|
|
|
101
101
|
a, a.link {
|
|
102
102
|
color: white;
|
|
103
103
|
}
|
|
104
|
-
|
|
104
|
+
&:hover {
|
|
105
105
|
background: ${getColor('main')};
|
|
106
106
|
}
|
|
107
107
|
${CheckboxPseudoInput} {
|
|
@@ -118,7 +118,7 @@ const CheckboxContent = styled.div `
|
|
|
118
118
|
`}
|
|
119
119
|
${props => props.disabled && css`
|
|
120
120
|
background-color: rgba(0,0,0,0.075) !important;
|
|
121
|
-
color: rgba(0,0,0,0.6);
|
|
121
|
+
color: rgba(0,0,0,0.6);
|
|
122
122
|
&[disabled] {
|
|
123
123
|
opacity: 0.75 !important;
|
|
124
124
|
}
|
|
@@ -21,7 +21,7 @@ const Toggle = styled.div `
|
|
|
21
21
|
display: inline-block;
|
|
22
22
|
position: relative;
|
|
23
23
|
font-weight: 600;
|
|
24
|
-
|
|
24
|
+
&:after {
|
|
25
25
|
content: '';
|
|
26
26
|
transition: 0.25s ease;
|
|
27
27
|
border-radius: 50%;
|
|
@@ -79,27 +79,27 @@ const ToggleCheckboxStyled = styled(Checkbox)`
|
|
|
79
79
|
`}
|
|
80
80
|
${props => props.gray ? `
|
|
81
81
|
background-color: rgba(0,0,0,0.06);
|
|
82
|
-
|
|
82
|
+
&:hover {
|
|
83
83
|
background-color: rgba(0,0,0,0.08);
|
|
84
84
|
}
|
|
85
|
-
|
|
85
|
+
&:active {
|
|
86
86
|
background-color: rgba(0,0,0,0.1);
|
|
87
87
|
transition: none;
|
|
88
88
|
}
|
|
89
89
|
`:css`
|
|
90
90
|
background-color: ${getColor('lightBluishGray')};
|
|
91
|
-
|
|
91
|
+
&:hover {
|
|
92
92
|
background: ${props => darken(0.035, getColor('lightBluishGray')(props))};
|
|
93
93
|
}
|
|
94
|
-
|
|
94
|
+
&:active {
|
|
95
95
|
background: ${props => darken(0.05, getColor('lightBluishGray')(props))};
|
|
96
96
|
transition: none;
|
|
97
97
|
}
|
|
98
98
|
`}
|
|
99
99
|
${props => !props.noFocus && css`
|
|
100
|
-
|
|
100
|
+
&:focus-within {
|
|
101
101
|
background-color: rgba(0,0,0,0.09);
|
|
102
|
-
|
|
102
|
+
&:after{
|
|
103
103
|
content: '';
|
|
104
104
|
pointer-events: none;
|
|
105
105
|
position: absolute;
|
|
@@ -135,7 +135,8 @@ export const ToggleCheckbox = styled(({path, disabled, rightInfo, label, descTex
|
|
|
135
135
|
<TransitionDiv block>{descText && <DescText>{descText}</DescText>}</TransitionDiv>
|
|
136
136
|
</ToggleLabel>
|
|
137
137
|
{rightInfo}
|
|
138
|
-
|
|
138
|
+
{/* variante como classe: no yak, o override de theme.startlibs.ToggleCheckbox não lê props */}
|
|
139
|
+
<Toggle checked={checked} className={checked ? 'styled-toggle-checkbox-checked' : undefined}/>
|
|
139
140
|
</>
|
|
140
141
|
}
|
|
141
142
|
</ToggleCheckboxStyled>
|
|
@@ -16,7 +16,7 @@ export const Tab = styled.div`
|
|
|
16
16
|
position: relative;
|
|
17
17
|
${props => props.checked ? css`
|
|
18
18
|
color: ${getColor("main")};
|
|
19
|
-
|
|
19
|
+
&:after {
|
|
20
20
|
content: '';
|
|
21
21
|
position: absolute;
|
|
22
22
|
bottom: -2px;
|
|
@@ -28,7 +28,7 @@ export const Tab = styled.div`
|
|
|
28
28
|
}
|
|
29
29
|
`: css`
|
|
30
30
|
cursor: pointer;
|
|
31
|
-
|
|
31
|
+
&:hover {
|
|
32
32
|
color: ${getColor("gray90")};
|
|
33
33
|
}
|
|
34
34
|
`}
|
|
@@ -24,7 +24,7 @@ const CssCircle = styled.div`
|
|
|
24
24
|
`)}
|
|
25
25
|
|
|
26
26
|
${ifProp('checked', css`
|
|
27
|
-
|
|
27
|
+
&:before {
|
|
28
28
|
content: '';
|
|
29
29
|
width: 8px;
|
|
30
30
|
height: 8px;
|
|
@@ -70,10 +70,10 @@ const RadioboxContent = styled.div `
|
|
|
70
70
|
width: 100%;
|
|
71
71
|
align-items: center;
|
|
72
72
|
display: flex;
|
|
73
|
-
|
|
73
|
+
&:hover {
|
|
74
74
|
background: rgb(245,245,245);
|
|
75
75
|
}
|
|
76
|
-
|
|
76
|
+
&:active {
|
|
77
77
|
background: rgb(235,235,235);
|
|
78
78
|
transition: none;
|
|
79
79
|
}
|
|
@@ -87,11 +87,11 @@ const RadioboxContent = styled.div `
|
|
|
87
87
|
${props => props.checked && props.highlightSelected && css`
|
|
88
88
|
border-color: ${getColor('main')};
|
|
89
89
|
background: ${props => desaturate(0.3, lighten(0.52, getColor("main")(props)))};
|
|
90
|
-
|
|
90
|
+
&:hover {
|
|
91
91
|
background: ${props => desaturate(0.3, lighten(0.52, getColor("main")(props)))};
|
|
92
92
|
}
|
|
93
93
|
${CssCircle} {
|
|
94
|
-
|
|
94
|
+
&:before {
|
|
95
95
|
background-color: ${getColor('main')};
|
|
96
96
|
}
|
|
97
97
|
}
|
|
@@ -100,11 +100,11 @@ const RadioboxContent = styled.div `
|
|
|
100
100
|
border-color: ${getColor('main')};
|
|
101
101
|
background: ${getColor('main')};
|
|
102
102
|
color: white;
|
|
103
|
-
|
|
103
|
+
&:hover {
|
|
104
104
|
background: ${getColor('main')};
|
|
105
105
|
}
|
|
106
106
|
${CssCircle} {
|
|
107
|
-
|
|
107
|
+
&:before {
|
|
108
108
|
background-color: ${getColor('main')};
|
|
109
109
|
}
|
|
110
110
|
}
|
|
@@ -16,7 +16,7 @@ export const TabButton = styled(Button)`
|
|
|
16
16
|
border: 1px solid ${getColor('gray210')};
|
|
17
17
|
border-left-width: 0;
|
|
18
18
|
height: 100%;
|
|
19
|
-
|
|
19
|
+
&:hover {
|
|
20
20
|
background: ${props => desaturate(0.6, lighten(0.5, getColor("main")(props)))};
|
|
21
21
|
}
|
|
22
22
|
${ifProp('checked', css`
|
|
@@ -35,7 +35,7 @@ export const TabButton = styled(Button)`
|
|
|
35
35
|
${props => props.isFirst!==undefined && !props.isFirst && `
|
|
36
36
|
border-bottom-left-radius: 0;
|
|
37
37
|
border-top-left-radius: 0;
|
|
38
|
-
|
|
38
|
+
&:focus:after{
|
|
39
39
|
border-bottom-left-radius: 2px;
|
|
40
40
|
border-top-left-radius: 2px;
|
|
41
41
|
}
|
|
@@ -43,12 +43,12 @@ export const TabButton = styled(Button)`
|
|
|
43
43
|
${props => props.isLast!==undefined && !props.isLast && `
|
|
44
44
|
border-bottom-right-radius: 0;
|
|
45
45
|
border-top-right-radius: 0;
|
|
46
|
-
|
|
46
|
+
&:focus:after{
|
|
47
47
|
border-bottom-right-radius: 2px;
|
|
48
48
|
border-top-right-radius: 2px;
|
|
49
49
|
z-index: 2;
|
|
50
50
|
}
|
|
51
|
-
`}
|
|
51
|
+
`}
|
|
52
52
|
${media.mobile`
|
|
53
53
|
min-width: 0;
|
|
54
54
|
${props => props.icon ? `
|
|
@@ -17,10 +17,10 @@ export const FileInput = styled.input.attrs({type: 'file'})`
|
|
|
17
17
|
width: 100%;
|
|
18
18
|
height: 100%;
|
|
19
19
|
overflow: hidden;
|
|
20
|
-
|
|
20
|
+
&::-webkit-file-upload-button {
|
|
21
21
|
visibility: hidden;
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
&::file-upload-button {
|
|
24
24
|
visibility: hidden;
|
|
25
25
|
}
|
|
26
26
|
`
|