lilact 0.10.0 → 0.10.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/lilact.development.js +2 -2
- package/dist/lilact.development.js.map +1 -1
- package/dist/lilact.development.min.js +1 -1
- package/dist/lilact.development.min.js.map +1 -1
- package/dist/lilact.production.min.js +1 -1
- package/dist/lilact.production.min.js.map +1 -1
- package/docs/static/demos/css-transition.jsx +1 -1
- package/docs/static/demos/error-boundary.jsx +8 -1
- package/docs/static/demos/modal.jsx +2 -1
- package/docs/static/demos/reducer.jsx +1 -0
- package/docs/static/demos/transition.jsx +2 -1
- package/docs/static/demos/usedeffered.jsx +33 -0
- package/docs/static/index.html +59 -30
- package/docs/static/lilact.development.js +2 -2
- package/docs/static/lilact.development.min.js +1 -1
- package/docs/static/lilact.production.min.js +1 -1
- package/package.json +1 -1
- package/root/demos/css-transition.jsx +1 -1
- package/root/demos/error-boundary.jsx +8 -1
- package/root/demos/modal.jsx +2 -1
- package/root/demos/reducer.jsx +1 -0
- package/root/demos/transition.jsx +2 -1
- package/root/demos/usedeffered.jsx +33 -0
- package/root/index.html +59 -30
- package/root/lilact.development.js +2 -2
- package/root/lilact.development.min.js +1 -1
- package/root/lilact.production.min.js +1 -1
- package/src/jsx.js +1 -1
- package/docs/static/demos/use-deffered.jsx +0 -30
- package/root/demos/use-deffered.jsx +0 -30
|
@@ -5,7 +5,14 @@ function Demo() {
|
|
|
5
5
|
|
|
6
6
|
return (
|
|
7
7
|
<div>
|
|
8
|
-
|
|
8
|
+
<p>
|
|
9
|
+
In this example an ErrorBoundary shows a fallback on error that contains the error message.
|
|
10
|
+
<br/><br/>
|
|
11
|
+
The "Try Again" button resets the error. But the erronous state persists,
|
|
12
|
+
unless you get to a safe state by pressing the "Safe" button.
|
|
13
|
+
<br/><br/>
|
|
14
|
+
Check the console for component stack.
|
|
15
|
+
</p>
|
|
9
16
|
<div style={{ marginBottom: 12 }}>
|
|
10
17
|
<button onClick={() => setMode("safe")}>Safe</button>{" "}
|
|
11
18
|
<button onClick={() => setMode("direct")}>Direct-child throws</button>{" "}
|
|
@@ -16,7 +16,7 @@ function ModalDialog({ isOpen, children }) {
|
|
|
16
16
|
};
|
|
17
17
|
}, [isOpen]);
|
|
18
18
|
|
|
19
|
-
return <dialog ref={ref}>{children}</dialog>;
|
|
19
|
+
return <dialog ref={ref} style={{padding: 20, borderRadius: 10, border: "none", boxShadow: "0 5px 20px #000"}}>{children}</dialog>;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
function Demo() {
|
|
@@ -29,6 +29,7 @@ function Demo() {
|
|
|
29
29
|
<ModalDialog isOpen={show}>
|
|
30
30
|
Hello there!
|
|
31
31
|
<br />
|
|
32
|
+
<br />
|
|
32
33
|
<button onClick={() => {
|
|
33
34
|
setShow(false);
|
|
34
35
|
}}>Close</button>
|
|
@@ -8,7 +8,8 @@ function Demo() {
|
|
|
8
8
|
};
|
|
9
9
|
|
|
10
10
|
return <>
|
|
11
|
-
<p>
|
|
11
|
+
<p>This example doesn't actually change the visibility, but emits the events and
|
|
12
|
+
updated a text according the transition state. See the console for logs.</p>
|
|
12
13
|
<div>
|
|
13
14
|
<button onClick={toggleVisibility}>
|
|
14
15
|
{inProp ? 'Hide Component' : 'Show Component'}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const { useState, useDeferredValue } = Lilact;
|
|
2
|
+
|
|
3
|
+
function ExpensiveList({ query }) {
|
|
4
|
+
const items = Array.from({ length: 5000 }, (_, i) => `${query} item ${i}`);
|
|
5
|
+
return (
|
|
6
|
+
<ul>
|
|
7
|
+
{items.map((it) => (
|
|
8
|
+
<li key={it}>{it}</li>
|
|
9
|
+
))}
|
|
10
|
+
</ul>
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function Demo() {
|
|
15
|
+
const [q, setQ] = useState("");
|
|
16
|
+
const deferredQ = useDeferredValue(q, "Item");
|
|
17
|
+
|
|
18
|
+
return (<>
|
|
19
|
+
<p>This is only a showcase of useDeferredValue. No search actually takes place, just
|
|
20
|
+
a long list of items are loaded when you type.</p>
|
|
21
|
+
<div>
|
|
22
|
+
<input value={q} onKeyUp={(e) => setQ(e.target.value)} placeholder="Type to search..." />
|
|
23
|
+
<p>Live: {q}</p>
|
|
24
|
+
<p>Deferred: {deferredQ}</p>
|
|
25
|
+
<div style={{ height: 300, overflow: "auto", border: "1px solid #ccc" }}>
|
|
26
|
+
<ExpensiveList query={deferredQ} />
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
</>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
module.exports = Demo;
|
package/docs/static/index.html
CHANGED
|
@@ -70,7 +70,9 @@ injectGlobal({
|
|
|
70
70
|
overflowWrap: "anywhere"
|
|
71
71
|
},
|
|
72
72
|
p: {padding: "10px"},
|
|
73
|
-
body: {padding: "20px"}
|
|
73
|
+
body: { padding: "20px", background: "#262d36", color: "#e7e7e7" },
|
|
74
|
+
":visited": {color: "#c16480"},
|
|
75
|
+
|
|
74
76
|
});
|
|
75
77
|
|
|
76
78
|
const outer = css({
|
|
@@ -78,15 +80,24 @@ const outer = css({
|
|
|
78
80
|
flexDirection: "row",
|
|
79
81
|
gap: 2,
|
|
80
82
|
alignItems: "stretch",
|
|
81
|
-
width: "100%",
|
|
83
|
+
width: "calc(100% - 8px)",
|
|
84
|
+
margin: "2px 4px;",
|
|
85
|
+
borderRadius: "10px",
|
|
86
|
+
overflow: "hidden"
|
|
82
87
|
});
|
|
83
88
|
|
|
84
89
|
const collapsible = css({
|
|
85
|
-
width: "100%",
|
|
90
|
+
width: "calc(100% - 8px)",
|
|
86
91
|
display: "block",
|
|
87
92
|
fontSize: "16px",
|
|
88
|
-
|
|
89
|
-
|
|
93
|
+
padding: "10px",
|
|
94
|
+
borderRadius: "10px",
|
|
95
|
+
border: "none",
|
|
96
|
+
margin: "4px",
|
|
97
|
+
background:"#ece9ea",
|
|
98
|
+
":hover": {
|
|
99
|
+
background:"#ffa7c2"
|
|
100
|
+
}
|
|
90
101
|
});
|
|
91
102
|
|
|
92
103
|
const responsiveOuter = css({
|
|
@@ -96,31 +107,44 @@ const responsiveOuter = css({
|
|
|
96
107
|
});
|
|
97
108
|
|
|
98
109
|
const pane = css({ flex: "1 1 0",
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
110
|
+
height: "400px",
|
|
111
|
+
minHeight: "400px",
|
|
112
|
+
overflowY: "auto",
|
|
113
|
+
padding: "10px",
|
|
114
|
+
background:"#fff",
|
|
115
|
+
color: "#222",
|
|
116
|
+
button: {
|
|
117
|
+
background:"#ece9ea",
|
|
118
|
+
padding: "10px",
|
|
119
|
+
border: "none",
|
|
120
|
+
borderRadius: "7px",
|
|
121
|
+
margin: "5px",
|
|
122
|
+
|
|
123
|
+
":hover": {
|
|
124
|
+
background:"#ffa7c2"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
105
128
|
|
|
106
129
|
const left = css({ float: "left" });
|
|
107
130
|
const right = css({ float: "right" });
|
|
131
|
+
const demobox = css({ background: "#fff3", borderRadius: "12px", padding: "2px", margin: "4px"});
|
|
108
132
|
|
|
109
133
|
|
|
110
134
|
|
|
111
|
-
function DemoView({
|
|
135
|
+
function DemoView({ entry })
|
|
112
136
|
{
|
|
113
137
|
const [isOpen, setOpen] = useState(false);
|
|
114
138
|
|
|
115
139
|
const viewRef = useRef();
|
|
116
140
|
const codeRef = useRef();
|
|
117
141
|
|
|
118
|
-
const resource = createResource("demos/"+
|
|
142
|
+
const resource = createResource("demos/"+entry[0]);
|
|
119
143
|
const code = resource.read(); // Suspense will handle the promise
|
|
120
144
|
|
|
121
145
|
if(isOpen) {
|
|
122
146
|
useEffect(() => {
|
|
123
|
-
const Comp = run(code, "demos/"+
|
|
147
|
+
const Comp = run(code, "demos/"+entry[0]);
|
|
124
148
|
Lilact.render(<Comp/>, viewRef.current);
|
|
125
149
|
});
|
|
126
150
|
|
|
@@ -131,8 +155,8 @@ function DemoView({ file })
|
|
|
131
155
|
|
|
132
156
|
return <>
|
|
133
157
|
<button onClick={()=>setOpen(!isOpen)} className={collapsible} type="button">
|
|
134
|
-
<span className={left}>{ (isOpen?'- ':'+ ') +
|
|
135
|
-
<b className={right}>{
|
|
158
|
+
<span className={left}>{ (isOpen?'- ':'+ ') + entry[0] + ' '}</span>
|
|
159
|
+
<b className={right}>{entry[1]}</b>
|
|
136
160
|
</button>
|
|
137
161
|
{isOpen &&
|
|
138
162
|
<div style={{width:"100%"}}>
|
|
@@ -148,11 +172,12 @@ function DemoView({ file })
|
|
|
148
172
|
}
|
|
149
173
|
|
|
150
174
|
|
|
151
|
-
function DemoBlock({
|
|
175
|
+
function DemoBlock({entry})
|
|
152
176
|
{
|
|
153
|
-
return <
|
|
177
|
+
if(typeof(entry)==='string') return <h3><br/><center>{entry}</center></h3>;
|
|
178
|
+
return <div key={entry[0]} className={demobox}>
|
|
154
179
|
<Suspense fallback={<Spinner/>}>
|
|
155
|
-
<DemoView
|
|
180
|
+
<DemoView entry={entry} />
|
|
156
181
|
</Suspense>
|
|
157
182
|
</div>
|
|
158
183
|
}
|
|
@@ -160,24 +185,28 @@ function DemoBlock({file})
|
|
|
160
185
|
|
|
161
186
|
function App()
|
|
162
187
|
{
|
|
163
|
-
const demos =[
|
|
188
|
+
const demos =[
|
|
189
|
+
"Hooks",
|
|
164
190
|
['stopwatch.jsx', '( useState, useRef )'],
|
|
165
|
-
['pane.jsx', '( useRef, useState, ResizablePane )'],
|
|
166
|
-
['modal.jsx', '( useEffect, useRef, useState )'],
|
|
167
191
|
['actionstate.jsx', '( useActionState, useState )'],
|
|
192
|
+
['usedeffered.jsx', '( useState, useDeferredValue )'],
|
|
193
|
+
['usetransition.jsx', '( useTransition, useState, useCallback, useId ), emotion:( css, cx )'],
|
|
194
|
+
['reducer.jsx', '( useReducer )'],
|
|
168
195
|
['context.jsx', '( createContext, useContext, useState ), emotion:( css, cx )'],
|
|
196
|
+
"API",
|
|
197
|
+
['lazy.jsx', '( lazy, require, Suspene, Spinner )'],
|
|
169
198
|
['proptypes.jsx', '( PropTypes )'],
|
|
199
|
+
['redux.jsx', '( Provider, useSelector, useDispatch, connect ), redux:( createStore )'],
|
|
200
|
+
['transition.jsx', '( useState, Transition )'],
|
|
201
|
+
"Components",
|
|
202
|
+
<!-- ['switch-transition.jsx', '( SwitchTransition, useState )'], -->
|
|
170
203
|
['router.jsx', '( HashRouter, NavLink, Routes, Route, useNavigate, useLocation )'],
|
|
171
|
-
['
|
|
204
|
+
['modal.jsx', '( useEffect, useRef, useState )'],
|
|
205
|
+
['pane.jsx', '( useRef, useState, ResizablePane )'],
|
|
172
206
|
['css-transition.jsx', '( CSSTransition, useState, useRef )'],
|
|
173
|
-
<!-- ['switch-transition.jsx', '( SwitchTransition, useState )'], -->
|
|
174
|
-
['usetransition.jsx', '( useTransition, useState, useCallback, useId ), emotion:( css, cx )'],
|
|
175
|
-
['transition.jsx', '( useState, Transition )'],
|
|
176
|
-
['reducer.jsx', '( useReducer )'],
|
|
177
|
-
['redux.jsx', '( Provider, useSelector, useDispatch, connect ), redux:( createStore )'],
|
|
178
207
|
['suspense.jsx', '( Suspense, Spinner )'],
|
|
179
|
-
['lazy.jsx', '( lazy, require, Suspene, Spinner )'],
|
|
180
208
|
['form-elements.jsx', '()'],
|
|
209
|
+
"Error Report and Handling",
|
|
181
210
|
['error-boundary.jsx', '( ErrorBoundary, useState )'],
|
|
182
211
|
['error-parser.jsx', '-- JSX Parser Error --'],
|
|
183
212
|
['error-init.jsx', '-- Error in Component initialization --'],
|
|
@@ -206,7 +235,7 @@ function App()
|
|
|
206
235
|
|
|
207
236
|
<p>See the{" "}<a href="../">Lilact Documentation</a>{" "}for more info.</p>
|
|
208
237
|
</center>
|
|
209
|
-
{demos.map((x)=><DemoBlock
|
|
238
|
+
{demos.map((x)=><DemoBlock entry={x}/>)}
|
|
210
239
|
|
|
211
240
|
<hr/>
|
|
212
241
|
<p>
|
|
@@ -1099,7 +1099,7 @@ function transpileJSX( jsx, {
|
|
|
1099
1099
|
if(node.type==='xml') s = s.trim();
|
|
1100
1100
|
if(s.length) {
|
|
1101
1101
|
if(node.type==='xml') {
|
|
1102
|
-
node.children.splice(chi, 0, '"'+s.replaceAll("\n", "\\\n")+'"');
|
|
1102
|
+
node.children.splice(chi, 0, '"'+s.replaceAll("\n", "\\\n").replaceAll("\"", "\\\"")+'"');
|
|
1103
1103
|
}
|
|
1104
1104
|
else {
|
|
1105
1105
|
node.children.splice(chi, 0, ...s.split(tokenize_re));
|
|
@@ -1272,7 +1272,7 @@ function transpileJSX( jsx, {
|
|
|
1272
1272
|
|
|
1273
1273
|
|
|
1274
1274
|
|
|
1275
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
1275
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiL1VzZXJzL2FyYXNoL0Rlc2t0b3AvUHJvamVjdHMvTGlsYWN0L3NyYy9qc3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIvVXNlcnMvYXJhc2gvRGVza3RvcC9Qcm9qZWN0cy9MaWxhY3Qvc3JjL2pzeC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4QkM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTs7Q0FFQTtDQUNBOztDQUVBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0NBRUE7Ozs7Q0FJQTtpQ0FDZ0M7Ozs7O0VBSy9CO0VBQ0E7OEJBQzRCOzs7O3FDQUlPOzs7Ozs7O21CQU9sQjtDQUNsQjthQUNZO0lBQ1QsSUFBSTs7Ozs7O29CQU1ZO0NBQ25CO0VBQ0M7RUFDQTtFQUNBOztFQUVBOztFQUVBOzs7O09BSUssUUFBUTtLQUNWLGdCQUFpQjtLQUNqQixrQkFBa0I7Ozs7S0FJbEIsYUFBYzs7OztZQUlQOzs7OztPQUtMLG9CQUFvQjs7U0FFbEIsS0FBSzs7OztJQUlWO0lBQ0E7SUFDQTtRQUNJO1NBQ0MscUJBQXNCOztPQUV4QixtQ0FBbUM7OztTQUdqQyxJQUFJOzs7Ozs7OztzQkFRUztDQUNyQjtZQUNXOzs7OztJQUtSLHlDQUF5QztvQkFDekI7Ozs7Ozs7T0FPYixvQkFBb0I7OztTQUdsQixLQUFLOzs7TUFHUixzQ0FBc0M7O09BRXJDLG1DQUFtQzs7Ozs7O01BTXBDLGdCQUFnQjs7T0FFZixtQ0FBbUM7Ozs7Ozs7Ozs7WUFVOUI7Ozs7d0JBSVk7Q0FDdkI7O09BRU07R0FDSDs7RUFFRjs7Ozs7O0lBTUUsU0FBUzthQUNBOzs7Ozs7MEJBTWEsbUJBQW9CLEFBQUQ7Ozs7S0FJeEMsbUNBQW1DOzs7O09BSWpDOzs7UUFHQyxVQUFXOzs7S0FHZCxXQUFXO2NBQ0Y7Ozs7Ozt1QkFNUyxxQkFBc0IsQUFBRDs7O01BR3RDLG1DQUFtQzs7Ozs7WUFLN0I7Ozs7Q0FJWDtDQUNBOzsyQkFF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
|
|
1276
1276
|
|
|
1277
1277
|
/***/ }),
|
|
1278
1278
|
|