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.
@@ -33,7 +33,7 @@ function Demo()
33
33
 
34
34
  return (
35
35
  <div>
36
-
36
+ <p> Notice that Lilact CSSTransition accepts multiple children too. </p>
37
37
  <CSSTransition in={inProp} classNames='test'
38
38
 
39
39
  onEnter={function(){console.log('onEnter', arguments)}}
@@ -5,7 +5,14 @@ function Demo() {
5
5
 
6
6
  return (
7
7
  <div>
8
- Check the console for component stack!
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>
@@ -44,6 +44,7 @@ function Demo({ username })
44
44
  );
45
45
 
46
46
  return <>
47
+ <p>This is a simple to-do list using `useReducer`. Enter new entries and they will be added.</p>
47
48
  <input
48
49
  value={state.draft}
49
50
  onChange={e => {
@@ -8,7 +8,8 @@ function Demo() {
8
8
  };
9
9
 
10
10
  return <>
11
- <p>See the console for logs.</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;
@@ -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
- border: "1px solid #888",
89
- padding: "5px"
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
- border: "1px solid",
100
- height: "400px",
101
- minHeight: "400px",
102
- overflowY: "auto",
103
- padding: "10px"
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({ file })
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/"+file[0]);
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/"+file[0]);
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?'- ':'+ ') + file[0] + ' '}</span>
135
- <b className={right}>{file[1]}</b>
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({file})
175
+ function DemoBlock({entry})
152
176
  {
153
- return <div key={file[0]}>
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 file={file} />
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
- ['use-deffered.jsx', '( useState, useDeferredValue )'],
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 file={x}/>)}
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiL1VzZXJzL2FyYXNoL0Rlc2t0b3AvUHJvamVjdHMvTGlsYWN0L3NyYy9qc3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIvVXNlcnMvYXJhc2gvRGVza3RvcC9Qcm9qZWN0cy9MaWxhY3Qvc3JjL2pzeC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4QkM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTs7Q0FFQTtDQUNBOztDQUVBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0NBRUE7Ozs7Q0FJQTtpQ0FDZ0M7Ozs7O0VBSy9CO0VBQ0E7OEJBQzRCOzs7O3FDQUlPOzs7Ozs7O21CQU9sQjtDQUNsQjthQUNZO0lBQ1QsSUFBSTs7Ozs7O29CQU1ZO0NBQ25CO0VBQ0M7RUFDQTtFQUNBOztFQUVBOztFQUVBOzs7O09BSUssUUFBUTtLQUNWLGdCQUFpQjtLQUNqQixrQkFBa0I7Ozs7S0FJbEIsYUFBYzs7OztZQUlQOzs7OztPQUtMLG9CQUFvQjs7U0FFbEIsS0FBSzs7OztJQUlWO0lBQ0E7SUFDQTtRQUNJO1NBQ0MscUJBQXNCOztPQUV4QixtQ0FBbUM7OztTQUdqQyxJQUFJOzs7Ozs7OztzQkFRUztDQUNyQjtZQUNXOzs7OztJQUtSLHlDQUF5QztvQkFDekI7Ozs7Ozs7T0FPYixvQkFBb0I7OztTQUdsQixLQUFLOzs7TUFHUixzQ0FBc0M7O09BRXJDLG1DQUFtQzs7Ozs7O01BTXBDLGdCQUFnQjs7T0FFZixtQ0FBbUM7Ozs7Ozs7Ozs7WUFVOUI7Ozs7d0JBSVk7Q0FDdkI7O09BRU07R0FDSDs7RUFFRjs7Ozs7O0lBTUUsU0FBUzthQUNBOzs7Ozs7MEJBTWEsbUJBQW9CLEFBQUQ7Ozs7S0FJeEMsbUNBQW1DOzs7O09BSWpDOzs7UUFHQyxVQUFXOzs7S0FHZCxXQUFXO2NBQ0Y7Ozs7Ozt1QkFNUyxxQkFBc0IsQUFBRDs7O01BR3RDLG1DQUFtQzs7Ozs7WUFLN0I7Ozs7Q0FJWDtDQUNBOzsyQkFFMEI7Q0FDMUI7Ozt5Q0FHd0MsZ0JBQWdCOzs7OztzQkFLbkMsVUFBVTtzQkFDVjtzQkFDQTtRQUNiLG9EQUFvRDs7OztLQUl4RCxnQ0FBZ0M7Ozs7OzBCQUtYOzs7OztxQkFLTCxXQUFXO3NCQUNWO3NCQUNBO1FBQ2Isb0RBQW9EOzs7Ozs7Ozs7cUJBU3hDLElBQUk7b0JBQ0wsSUFBSTs7d0JBRUEsT0FBTzs7S0FFMUIsTUFBTzs7Z0JBRUk7O0tBRVgsZ0JBQWdCO09BQ2QsOEJBQThCOzs7bUJBR2xCOztrQkFFRDtrQkFDQTs7OztLQUliLGNBQWM7T0FDWiwwQkFBMEI7bUJBQ2Q7O09BRVoscURBQXFEO21CQUN6Qzs7VUFFVDtRQUNGO29CQUNZOztvQkFFQTttQkFDRDs7Ozs7Z0JBS0g7Ozs7Ozs7O1lBUUo7ZUFDRzs7MkJBRVk7TUFDckI7Ozs7OztxQkFNZTtDQUNwQjtZQUNXOzs7Ozs7T0FNTCxvQkFBb0I7Ozs7U0FJbEIsS0FBSzs7Ozs7TUFLUixtQ0FBbUM7Ozs7TUFJbkMscUJBQXFCOzs7O01BSXJCLFVBQVU7T0FDVCxzQkFBc0I7eUJBQ0o7Ozs7Ozs7Ozs7Ozs7O1lBY2I7Ozs7eUJBSWE7Q0FDeEI7Ozs7T0FJTSxnQkFBZ0I7U0FDZCxVQUFVOzs7TUFHYixrQkFBa0I7Ozs7OztVQU1kLGlDQUFpQzs7OztPQUlwQyxrQkFBa0I7bUJBQ047OzsrQkFHWSxVQUFVOztPQUVsQyxzQkFBc0I7Z0JBQ2I7Ozs7O2lDQUtpQjsyQkFDTjs7OztTQUlsQjtvQkFDVzs7T0FFYixRQUFROzs7Ozs7Ozs7OzttQkFXSTs7Ozs7Ozs7Ozs7O2tCQVlEO0NBQ2pCO0lBQ0csY0FBYztHQUNmO2tCQUNlOzs7O1FBSVYsUUFBUTtNQUNWLGtCQUFtQjtNQUNuQixhQUFjO01BQ2Q7TUFDQSxTQUFTLFVBQVcsdUJBQXNCO09BQ3pDLFFBQVEsc0JBQXVCOzs7TUFHaEMsU0FBUyxVQUFXLGlDQUFpQyxzQkFBcUI7T0FDekUsUUFBUSxzQkFBdUI7Ozs7Ozs7RUFPcEM7Ozs7OztHQU1DLEtBQUssT0FBTzs7WUFFSCxFQUFFOzs7O2VBSUM7Ozs7O2FBS0Y7Ozs7T0FJTiwrQkFBZ0M7SUFDbkM7O3dCQUVvQjs7Ozs7OztPQU9qQixvQkFBb0I7OztRQUduQixnQ0FBaUMsa0JBQWlCOzs7S0FHckQ7OzZCQUV3QjtLQUN4QixhQUFhOzs7Ozs7O1NBT1QsY0FBYzs7OztNQUlqQixZQUFZOztnQkFFRjs7VUFFTixvQkFBb0I7MkJBQ0g7O1FBRW5COztpQkFFUzs7Ozs7V0FLTixjQUFjOzs7TUFHbkI7NkJBQ3VCOzs7Ozs7NkJBTUE7Ozs7Ozs7V0FPbEIsZ0NBQWlDLGtCQUFpQjs7OztRQUlyRCxrQkFBa0I7ZUFDWDs7O2dDQUdpQjs7Ozs7OztTQU92QjtLQUNKO2FBQ1E7Ozs7Ozs7NEJBT2U7O3dCQUVKOzs7O01BSWxCLHNCQUFzQjs7Ozs7S0FLdkI7OztPQUdFLG1DQUFtQzs7Ozt5QkFJakI7O01BRW5COzs7Ozs7NkJBTXVCOztJQUV6QjtJQUNBO01BQ0U7O01BRUE7OztNQUdBLFFBQVE7T0FDUCxtQ0FBbUM7OztTQUdqQzs7Ozs7Ozs7ZUFRTTs7Ozs7Ozs7Ozs7MEJBV1c7Q0FDekI7WUFDVyxFQUFFOzs7Ozs7OztPQVFQLG9CQUFvQjs7O1NBR2xCLEtBQUs7O1lBRUY7dUJBQ1c7TUFDakI7Ozs7Ozs7dUJBT2lCOzs7O3VCQUlBOzs7O3VCQUlBOzs7O2NBSVQ7Ozs7OztNQU1SLG1DQUFtQzs7Ozt5QkFJaEI7TUFDbkI7Ozs7Ozs7Ozs7OztZQVlNOzs7O2lCQUlLO0NBQ2hCO1lBQ1csRUFBRTs7O2tCQUdJOzs7O09BSVgsb0JBQW9COzs7U0FHbEIsS0FBSzs7YUFFRDt1QkFDVTs7TUFFakI7Ozs7Ozs7O3VCQVFpQjs7O2NBR1Q7O3VCQUVTOzs7O2FBSVY7dUJBQ1U7OzthQUdWO2NBQ0M7Ozs7TUFJUixXQUFXOzs7T0FHVixtQ0FBbUM7OztjQUc1Qjs7OztJQUlWO3dCQUNvQjtPQUNqQjs7Ozs7O0lBTUg7d0JBQ29CO09BQ2pCOzs7Ozs7Ozs7Ozs7O0lBYUgscUJBQXFCOzs7O0lBSXJCLG1DQUFtQzs7Ozs7Q0FLdEM7Q0FDQTs7d0JBRXVCO0NBQ3ZCOzs7O2tCQUlpQjtFQUNoQjtRQUNNLENBQUUsMkNBQTBDOzs7TUFHOUMsTUFBTyxrQkFBaUI7c0JBQ1I7T0FDZjs7TUFFRCxNQUFPLHlDQUF3Qzs7Ozs7Ozs7S0FRaEQsNkNBQTZDOztLQUU3QyxNQUFPLDZFQUE0RTs7dUJBRWpFO01BQ2pCOztNQUVBLE1BQU8sNkRBQThELEFBQUQsY0FBZSxXQUFXOzs7dUJBRzdFO01BQ2pCO01BQ0EsTUFBTyxnREFBZ0Q7OztzQkFHdkM7O01BRWhCOztNQUVBLDRDQUE2QyxzQ0FBcUM7NEJBQzVELGFBQWE7d0JBQ2pCO09BQ2pCLG9DQUFvQzt5QkFDbEI7O1VBRWY7eUJBQ2U7Ozs7OztVQU1mLDRCQUE0Qjt1QkFDZjs7TUFFakIsTUFBTyxpREFBZ0Q7OzRCQUVqQyxvQkFBb0I7O3VCQUV6Qjs7T0FFaEIsTUFBTyxzQ0FBcUM7O1FBRTNDLHFDQUFxQzs7MEJBRW5COzs7U0FHakIsb0NBQW9DOzJCQUNsQjs7O1lBR2Y7MkJBQ2U7Ozs7Ozs7Ozs7Ozs7O2tCQWNUO0NBQ2pCOzs7S0FHSSxnQkFBZ0I7S0FDaEIsaUJBQWlCO2lCQUNMLFFBQVM7OztlQUdYOzs7OzttQkFLSTtDQUNsQjtJQUNHOztPQUVHLG9CQUFvQjs7S0FFdEIsMEJBQTBCOzs7OztPQUt4QixxQ0FBcUM7Ozs7Ozs7OzJCQVFqQjtDQUMxQjs7O29CQUdtQjs7Ozs7Ozs7OztzQkFVRSxRQUFRO0dBQzNCO0tBQ0UscUJBQXFCOztPQUVuQix1QkFBdUI7Z0JBQ2Q7OztLQUdYLHVEQUF1RDthQUMvQyxlQUFnQix1Q0FBdUM7Ozs7YUFJdkQ7O2tCQUVLLEVBQUcsT0FBTztLQUN0QixlQUFlOzs7Ozs7O2VBT047Ozs7Ozs7S0FPViw2QkFBNkI7OztRQUcxQixTQUFTOztVQUVQOzs7OztTQUtELFdBQVk7Ozs7OztxQ0FNZ0IsV0FBWSxBQUFEOztvRkFFb0MsY0FBZTs7Ozs7Q0FLbEc7Ozs7Ozs7Ozs7O0NBV0E7NkJBQzRCLE1BQU87Ozs7Ozs7O0NBUWxDO2VBQ2M7VUFDTDs7OztJQUlOO0NBQ0o7O2tEQUVpRDs7O3VCQUczQjs7ZUFFUCxBQUFELG9CQUFxQjtzQkFDYjs7OENBRXdCOzs7O1NBSXRDOztzQkFFYTs7c0JBRUE7OztrQkFHSixRQUFROztLQUVyQiw4QkFBOEI7T0FDNUIsZ0NBQWdDO09BQ2hDLE1BQU8scUNBQW9DO2FBQ3JDOzs7OztLQUtSLGtEQUFrRDs7MkNBRVo7T0FDcEMsNkNBQTZDOzs7T0FHN0MsYUFBYTsyQkFDTzs7UUFFbkIsOEJBQThCO1FBQzlCLFdBQVc7U0FDVixvQkFBb0I7NEJBQ0Qsd0JBQXlCOztZQUV6Qzs0QkFDZ0Isa0JBQW1COzs7Ozs7O1lBT25DOzs7MkNBRytCOztNQUVyQyw0QkFBNEI7MEJBQ1I7T0FDbkIsOEJBQThCO09BQzlCLFdBQVc7UUFDVixvQkFBb0I7eUJBQ0gsY0FBZ0IsQUFBRCxrQkFBb0IsQUFBRDs7Ozs7O1dBTWhEO3lCQUNjLFdBQVk7Ozs7O3dDQUtHLENBQUU7O01BRXBDLDJEQUEyRDttQkFDOUM7Ozs7O1NBS1Y7O21CQUVVOztpQkFFRiw4Q0FBOEM7O0tBRTFELE1BQU87OztHQUdUOztLQUVFLDJDQUEyQztLQUMzQywwQ0FBMEM7S0FDMUMsK0JBQStCLDZDQUE2QztLQUM1RTs7O0tBR0EsNEJBQTRCOzs7TUFHM0IsV0FBVztRQUNULHVCQUF1QjtpQkFDZDs7Ozs7O0tBTVosbUJBQW1COzs7TUFHbEIsV0FBVztRQUNULHVCQUF1QjtRQUN2QjtpQkFDUyx1QkFBd0I7Ozs7TUFJbkMsVUFBVTt5QkFDUzs7O0lBR3JCO01BQ0Usa0JBQWtCO3lCQUNDOzs7Ozs7S0FNcEIsb0JBQW9COztNQUVuQixzQkFBc0I7OztXQUdqQixxQ0FBc0MsS0FBSTs7Ozs7Ozs7O09BUzlDLGdDQUFnQztvQkFDbkI7Ozs7Ozs7TUFPZCxrQkFBa0I7UUFDaEIsNkJBQTZCOzs7Ozs7OztNQVEvQixXQUFXO1FBQ1QsdUJBQXVCO3NCQUNUO1FBQ2QsYUFBYTs7Ozs7Ozt5QkFPSTtrREFDeUI7Ozs7Ozs7SUFPOUMsb0JBQW9COzs7YUFHWDs7SUFFVCxvQkFBb0I7S0FDbkIsb0NBQW9DOzs7UUFHakM7Ozs7O3FDQUs2QiwwQkFBMkI7SUFDNUQsa0JBQWtCOzs7O0lBSWxCLGdDQUFnQztPQUM3QjtxQkFDYztvQkFDRDs7UUFFWixJQUFJOzs7RUFHViJ9
1275
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiL1VzZXJzL2FyYXNoL0Rlc2t0b3AvUHJvamVjdHMvTGlsYWN0L3NyYy9qc3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIvVXNlcnMvYXJhc2gvRGVza3RvcC9Qcm9qZWN0cy9MaWxhY3Qvc3JjL2pzeC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4QkM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTs7Q0FFQTtDQUNBOztDQUVBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0NBRUE7Ozs7Q0FJQTtpQ0FDZ0M7Ozs7O0VBSy9CO0VBQ0E7OEJBQzRCOzs7O3FDQUlPOzs7Ozs7O21CQU9sQjtDQUNsQjthQUNZO0lBQ1QsSUFBSTs7Ozs7O29CQU1ZO0NBQ25CO0VBQ0M7RUFDQTtFQUNBOztFQUVBOztFQUVBOzs7O09BSUssUUFBUTtLQUNWLGdCQUFpQjtLQUNqQixrQkFBa0I7Ozs7S0FJbEIsYUFBYzs7OztZQUlQOzs7OztPQUtMLG9CQUFvQjs7U0FFbEIsS0FBSzs7OztJQUlWO0lBQ0E7SUFDQTtRQUNJO1NBQ0MscUJBQXNCOztPQUV4QixtQ0FBbUM7OztTQUdqQyxJQUFJOzs7Ozs7OztzQkFRUztDQUNyQjtZQUNXOzs7OztJQUtSLHlDQUF5QztvQkFDekI7Ozs7Ozs7T0FPYixvQkFBb0I7OztTQUdsQixLQUFLOzs7TUFHUixzQ0FBc0M7O09BRXJDLG1DQUFtQzs7Ozs7O01BTXBDLGdCQUFnQjs7T0FFZixtQ0FBbUM7Ozs7Ozs7Ozs7WUFVOUI7Ozs7d0JBSVk7Q0FDdkI7O09BRU07R0FDSDs7RUFFRjs7Ozs7O0lBTUUsU0FBUzthQUNBOzs7Ozs7MEJBTWEsbUJBQW9CLEFBQUQ7Ozs7S0FJeEMsbUNBQW1DOzs7O09BSWpDOzs7UUFHQyxVQUFXOzs7S0FHZCxXQUFXO2NBQ0Y7Ozs7Ozt1QkFNUyxxQkFBc0IsQUFBRDs7O01BR3RDLG1DQUFtQzs7Ozs7WUFLN0I7Ozs7Q0FJWDtDQUNBOzsyQkFF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
1276
1276
 
1277
1277
  /***/ }),
1278
1278