@pdfme/ui 4.2.2 → 4.2.3-dev.3

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/README.md CHANGED
@@ -1,6 +1,16 @@
1
1
  # PDFME
2
2
 
3
- <p>
3
+ <p align="center">
4
+ <img src="https://raw.githubusercontent.com/pdfme/pdfme/main/website/static/img/logo.svg" width="300"/>
5
+ </p>
6
+
7
+ <h4 align="center">
8
+ <a href="https://pdfme.com/">Website</a> |
9
+ <a href="https://app.pdfme.com/">pdfme Cloud</a> |
10
+ <a href="https://discord.gg/xWPTJbmgNV">Discord</a>
11
+ </h4>
12
+
13
+ <p align="center">
4
14
  <a href="https://github.com/pdfme/pdfme/blob/master/LICENSE.md">
5
15
  <img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="pdfme is released under the MIT license." />
6
16
  </a>
@@ -13,20 +23,9 @@
13
23
  <a href="https://npmcharts.com/compare/@pdfme/ui?minimal=true">
14
24
  <img src="https://img.shields.io/npm/dm/@pdfme/ui.svg" alt="Downloads per month on npm." />
15
25
  </a>
16
- <a href="https://pdfme.com/docs/development-guide#contribution">
17
- <img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" alt="PRs welcome!" />
18
- </a>
19
- <a href="https://twitter.com/intent/tweet?text=Awesome+pdf+library%21&url=https://pdfme.com">
20
- <img src="https://img.shields.io/twitter/url/http/shields.io.svg?style=social" alt="Tweet" />
21
- </a>
22
26
  </p>
23
27
 
24
- TypeScript base PDF generator and React base UI.
25
- Open source, developed by the community, and completely free to use under the MIT license!
26
-
27
- <p align="center">
28
- <img src="https://raw.githubusercontent.com/pdfme/pdfme/main/website/static/img/logo.svg" width="300"/>
29
- </p>
28
+ <p align="center">TypeScript base PDF generator and React base UI. Open source, developed by the community, and completely free to use under the MIT license!</p>
30
29
 
31
30
  ## Features
32
31
 
@@ -302,3 +301,18 @@ const viewer = new Viewer({ domContainer, template, inputs });
302
301
 
303
302
  If you want to contribute to pdfme, please check the [Development Guide](https://pdfme.com/docs/development-guide) page.
304
303
  We look forward to your contribution!
304
+
305
+ ## Cloud Service Option
306
+
307
+ While pdfme is a powerful open-source library, we understand that some users might prefer a managed solution. For those looking for a ready-to-use, scalable PDF generation service without the need for setup and maintenance, we offer pdfme Cloud.
308
+
309
+ **[Try pdfme Cloud - Hassle-free PDF Generation](https://app.pdfme.com/)**
310
+
311
+ pdfme Cloud provides all the features of the open-source library, plus:
312
+
313
+ - PDF generation at scale without infrastructure management
314
+ - Hosted WYSIWYG template designer
315
+ - Simple API integration
316
+ - Automatic updates and maintenance
317
+
318
+ \*pdfme is and will always remain open-source. The cloud service is an optional offering for those who prefer a managed solution.
package/dist/index.es.js CHANGED
@@ -9307,7 +9307,6 @@ const ColorType = z.enum(["rgb", "cmyk"]).optional();
9307
9307
  z.object({ height: z.number(), width: z.number() });
9308
9308
  const Schema$1 = z.object({
9309
9309
  type: z.string(),
9310
- icon: z.string().optional(),
9311
9310
  content: z.string().optional(),
9312
9311
  position: z.object({ x: z.number(), y: z.number() }),
9313
9312
  width: z.number(),
@@ -9355,7 +9354,8 @@ CommonProps.extend({
9355
9354
  const UIOptions = CommonOptions.extend({
9356
9355
  lang: Lang.optional(),
9357
9356
  labels: z.record(z.string(), z.string()).optional(),
9358
- theme: z.record(z.string(), z.unknown()).optional()
9357
+ theme: z.record(z.string(), z.unknown()).optional(),
9358
+ icons: z.record(z.string(), z.string()).optional()
9359
9359
  }), HTMLElementSchema = z.any().refine((a) => a instanceof HTMLElement), UIProps = CommonProps.extend({
9360
9360
  domContainer: HTMLElementSchema,
9361
9361
  options: UIOptions.optional()
@@ -60275,7 +60275,9 @@ const uuid$6 = () => "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (a)
60275
60275
  const tt = (nt = Object.values(_).find(
60276
60276
  (at) => (at == null ? void 0 : at.propPanel.defaultSchema.type) === $
60277
60277
  )) == null ? void 0 : nt.propPanel;
60278
- Object.assign(a, (tt == null ? void 0 : tt.defaultSchema) || {});
60278
+ Object.keys((tt == null ? void 0 : tt.defaultSchema) || {}).forEach((at) => {
60279
+ a.hasOwnProperty(at) || (a[at] = tt == null ? void 0 : tt.defaultSchema[at]);
60280
+ });
60279
60281
  }, changeSchemas = (a) => {
60280
60282
  const { objs: s, schemas: $, basePdf: _, pluginsRegistry: _e, pageSize: tt, commitSchemas: nt } = a, at = s.reduce((ot, { key: rt, value: st, schemaId: lt }) => {
60281
60283
  const et = ot.find((it) => it.id === lt);
@@ -81843,7 +81845,6 @@ const UseDynamicFontSize = (a) => {
81843
81845
  widgets: { UseDynamicFontSize },
81844
81846
  defaultSchema: {
81845
81847
  type: "text",
81846
- icon: '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-text-cursor-input"><path d="M5 4h1a3 3 0 0 1 3 3 3 3 0 0 1 3-3h1"/><path d="M13 20h-1a3 3 0 0 1-3-3 3 3 0 0 1-3 3H5"/><path d="M5 16H4a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2h1"/><path d="M13 8h7a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-7"/><path d="M9 7v10"/></svg>',
81847
81848
  content: "Type Something...",
81848
81849
  position: { x: 0, y: 0 },
81849
81850
  width: 45,
@@ -81968,14 +81969,19 @@ const UseDynamicFontSize = (a) => {
81968
81969
  return "flex-end";
81969
81970
  }
81970
81971
  return "flex-start";
81971
- }, getBackgroundColor = (a, s) => !a || !s.backgroundColor ? "transparent" : s.backgroundColor, textSchema = { pdf: pdfRender, ui: uiRender, propPanel }, text = textSchema;
81972
+ }, getBackgroundColor = (a, s) => !a || !s.backgroundColor ? "transparent" : s.backgroundColor, textSchema = {
81973
+ pdf: pdfRender,
81974
+ ui: uiRender,
81975
+ propPanel,
81976
+ icon: '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-text-cursor-input"><path d="M5 4h1a3 3 0 0 1 3 3 3 3 0 0 1 3-3h1"/><path d="M13 20h-1a3 3 0 0 1-3-3 3 3 0 0 1-3 3H5"/><path d="M5 16H4a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2h1"/><path d="M13 8h7a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-7"/><path d="M9 7v10"/></svg>'
81977
+ }, text = textSchema;
81972
81978
  textSchema.pdf, textSchema.ui, {
81973
81979
  ...textSchema.propPanel,
81974
81980
  defaultSchema: {
81975
81981
  ...textSchema.propPanel.defaultSchema
81976
81982
  }
81977
81983
  };
81978
- const getBody$1 = (a) => JSON.parse(a || "[]"), getBodyWithRange = (a, s) => {
81984
+ const getBody$1 = (a) => typeof a == "string" ? JSON.parse(a || "[]") : a || [], getBodyWithRange = (a, s) => {
81979
81985
  const $ = getBody$1(a);
81980
81986
  return s ? $.slice(s.start, s.end) : $;
81981
81987
  };
@@ -82468,7 +82474,7 @@ const modifyTemplateForTable = async (a) => {
82468
82474
  for (const [rt, st] of Object.entries(at))
82469
82475
  if (st.type === "table") {
82470
82476
  st.__bodyRange = void 0;
82471
- const lt = JSON.parse(($ == null ? void 0 : $[rt]) || "[]"), et = await createMultiTables(lt, {
82477
+ const lt = getBody$1($ == null ? void 0 : $[rt]), et = await createMultiTables(lt, {
82472
82478
  schema: st,
82473
82479
  basePdf: tt.basePdf,
82474
82480
  options: _,
@@ -82489,7 +82495,7 @@ const modifyTemplateForTable = async (a) => {
82489
82495
  start: ut.slice(0, dt + 1).reduce((mt, ct) => mt + ct.length, 0),
82490
82496
  end: ut.slice(0, dt + 2).reduce((mt, ct) => mt + ct.length, 0)
82491
82497
  },
82492
- content: $[rt]
82498
+ content: typeof $[rt] != "string" ? JSON.stringify($[rt] || "[]") : $[rt]
82493
82499
  }
82494
82500
  };
82495
82501
  ot[gt] = pt;
@@ -151858,55 +151864,33 @@ const FormRender = withProvider(FormCore, defaultWidgets), svgBaseProp = {
151858
151864
  );
151859
151865
  }) }) });
151860
151866
  }, ButtonGroupWidget$1 = ButtonGroupWidget, { Text: Text$2 } = Typography$1, DetailView = (a) => {
151861
- const { token: s } = theme.useToken(), { size: $, changeSchemas: _, deselectSchema: _e, activeSchema: tt, activeElements: nt } = a, at = useForm(), ot = reactExports.useContext(I18nContext), rt = reactExports.useContext(PluginsRegistry), st = reactExports.useContext(OptionsContext), [lt, et] = reactExports.useState({});
151862
- reactExports.useEffect(() => {
151863
- const pt = {
151864
- AlignWidget: (mt) => /* @__PURE__ */ jsxRuntimeExports.jsx(AlignWidget$1, { ...mt, ...a, options: st }),
151865
- Divider: () => /* @__PURE__ */ jsxRuntimeExports.jsx(Divider$1, { style: { marginTop: s.marginXS, marginBottom: s.marginXS } }),
151866
- ButtonGroup: (mt) => /* @__PURE__ */ jsxRuntimeExports.jsx(ButtonGroupWidget$1, { ...mt, ...a, options: st })
151867
- };
151868
- for (const mt of Object.values(rt)) {
151869
- const ct = (mt == null ? void 0 : mt.propPanel.widgets) || {};
151870
- Object.entries(ct).forEach(([vt, At]) => {
151871
- pt[vt] = (xt) => /* @__PURE__ */ jsxRuntimeExports.jsx(
151872
- WidgetRenderer$1,
151873
- {
151874
- ...xt,
151875
- ...a,
151876
- options: st,
151877
- theme: s,
151878
- i18n: ot,
151879
- widget: At
151880
- }
151881
- );
151882
- });
151867
+ const { token: s } = theme.useToken(), { size: $, changeSchemas: _, deselectSchema: _e, activeSchema: tt, activeElements: nt } = a, at = useForm(), ot = reactExports.useContext(I18nContext), rt = reactExports.useContext(PluginsRegistry), st = reactExports.useContext(OptionsContext);
151868
+ reactExports.useState({});
151869
+ const lt = { ...tt };
151870
+ lt.x = lt.position.x, lt.y = lt.position.y, delete lt.position, at.setValues(lt);
151871
+ const et = (pt) => {
151872
+ const mt = (vt, At) => typeof vt == "object" ? JSON.stringify(vt) !== JSON.stringify(At) : vt !== At;
151873
+ let ct = [];
151874
+ for (let vt in pt) {
151875
+ if (["id", "content"].includes(vt))
151876
+ continue;
151877
+ let At = pt[vt], xt = !1;
151878
+ ["x", "y"].includes(vt) ? (xt = At !== tt.position[vt], vt = "position." + vt) : xt = mt(At, tt[vt]), xt && (At === null && ["rotate", "opacity"].includes(vt) && (At = void 0), ct.push({ key: vt, value: At, schemaId: tt.id }));
151883
151879
  }
151884
- et(pt);
151885
- }, [tt, nt, rt, JSON.stringify(st)]), reactExports.useEffect(() => {
151886
- const pt = { ...tt };
151887
- pt.x = pt.position.x, pt.y = pt.position.y, delete pt.position, pt.key !== (at.getValues() || {}).key && at.resetFields(), at.setValues(pt);
151888
- }, [at, tt]);
151889
- const it = (pt) => {
151890
- let mt = [];
151891
- for (let ct in pt)
151892
- if (!["id", "content"].includes(ct) && (ct === "x" && (ct = "position.x"), ct === "y" && (ct = "position.y"), pt[ct] !== tt[ct])) {
151893
- let vt = pt[ct];
151894
- vt === null && ["rotate", "opacity"].includes(ct) && (vt = void 0), mt.push({ key: ct, value: vt, schemaId: tt.id });
151895
- }
151896
- mt.length && at.validateFields().then(() => _(mt)).catch((ct) => {
151897
- ct.errorFields.length && (mt = mt.filter((vt) => !ct.errorFields.find(
151898
- (At) => At.name.includes(vt.key)
151899
- ))), mt.length && _(mt);
151880
+ ct.length && at.validateFields().then(() => _(ct)).catch((vt) => {
151881
+ vt.errorFields.length && (ct = ct.filter((At) => !vt.errorFields.find(
151882
+ (xt) => xt.name.includes(At.key)
151883
+ ))), ct.length && _(ct);
151900
151884
  });
151901
- }, ut = Object.values(rt).find(
151885
+ }, it = Object.values(rt).find(
151902
151886
  (pt) => (pt == null ? void 0 : pt.propPanel.defaultSchema.type) === tt.type
151903
- ), ft = ut == null ? void 0 : ut.propPanel.schema;
151904
- ft || console.error(`[@pdfme/ui] No propPanel.schema for ${tt.type}.
151887
+ ), ut = it == null ? void 0 : it.propPanel.schema;
151888
+ ut || console.error(`[@pdfme/ui] No propPanel.schema for ${tt.type}.
151905
151889
  Check this document: https://pdfme.com/docs/custom-schemas`);
151906
- const ht = Object.entries(rt).map(([pt, mt]) => ({
151890
+ const ft = Object.entries(rt).map(([pt, mt]) => ({
151907
151891
  label: pt,
151908
151892
  value: mt == null ? void 0 : mt.propPanel.defaultSchema.type
151909
- })), dt = ut.propPanel.defaultSchema, gt = {
151893
+ })), ht = it.propPanel.defaultSchema, dt = {
151910
151894
  type: "object",
151911
151895
  column: 2,
151912
151896
  properties: {
@@ -151914,7 +151898,7 @@ Check this document: https://pdfme.com/docs/custom-schemas`);
151914
151898
  title: ot("type"),
151915
151899
  type: "string",
151916
151900
  widget: "select",
151917
- props: { options: ht },
151901
+ props: { options: ft },
151918
151902
  required: !0,
151919
151903
  span: 12
151920
151904
  },
@@ -151927,7 +151911,7 @@ Check this document: https://pdfme.com/docs/custom-schemas`);
151927
151911
  title: ot("rotate"),
151928
151912
  type: "number",
151929
151913
  widget: "inputNumber",
151930
- disabled: (dt == null ? void 0 : dt.rotate) === void 0,
151914
+ disabled: (ht == null ? void 0 : ht.rotate) === void 0,
151931
151915
  max: 360,
151932
151916
  props: { min: 0 },
151933
151917
  span: 8
@@ -151952,32 +151936,53 @@ Check this document: https://pdfme.com/docs/custom-schemas`);
151952
151936
  title: ot("opacity"),
151953
151937
  type: "number",
151954
151938
  widget: "inputNumber",
151955
- disabled: (dt == null ? void 0 : dt.opacity) === void 0,
151939
+ disabled: (ht == null ? void 0 : ht.opacity) === void 0,
151956
151940
  props: { step: 0.1, min: 0, max: 1 },
151957
151941
  span: 8
151958
151942
  }
151959
151943
  }
151960
151944
  };
151961
- if (typeof ft == "function") {
151962
- const pt = ft({
151945
+ if (typeof ut == "function") {
151946
+ const pt = ut({
151963
151947
  ...a,
151964
151948
  options: st,
151965
151949
  theme: s,
151966
151950
  i18n: ot
151967
151951
  }) || {};
151968
- gt.properties = {
151969
- ...gt.properties,
151952
+ dt.properties = {
151953
+ ...dt.properties,
151970
151954
  ...Object.keys(pt).length === 0 ? {} : { "--": { type: "void", widget: "Divider" } },
151971
151955
  ...pt
151972
151956
  };
151973
151957
  } else {
151974
- const pt = ft || {};
151975
- gt.properties = {
151976
- ...gt.properties,
151958
+ const pt = ut || {};
151959
+ dt.properties = {
151960
+ ...dt.properties,
151977
151961
  ...Object.keys(pt).length === 0 ? {} : { "--": { type: "void", widget: "Divider" } },
151978
151962
  ...pt
151979
151963
  };
151980
151964
  }
151965
+ const gt = {
151966
+ AlignWidget: (pt) => /* @__PURE__ */ jsxRuntimeExports.jsx(AlignWidget$1, { ...pt, ...a, options: st }),
151967
+ Divider: () => /* @__PURE__ */ jsxRuntimeExports.jsx(Divider$1, { style: { marginTop: s.marginXS, marginBottom: s.marginXS } }),
151968
+ ButtonGroup: (pt) => /* @__PURE__ */ jsxRuntimeExports.jsx(ButtonGroupWidget$1, { ...pt, ...a, options: st })
151969
+ };
151970
+ for (const pt of Object.values(rt)) {
151971
+ const mt = (pt == null ? void 0 : pt.propPanel.widgets) || {};
151972
+ Object.entries(mt).forEach(([ct, vt]) => {
151973
+ gt[ct] = (At) => /* @__PURE__ */ jsxRuntimeExports.jsx(
151974
+ WidgetRenderer$1,
151975
+ {
151976
+ ...At,
151977
+ ...a,
151978
+ options: st,
151979
+ theme: s,
151980
+ i18n: ot,
151981
+ widget: vt
151982
+ }
151983
+ );
151984
+ });
151985
+ }
151981
151986
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
151982
151987
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: { height: 40, display: "flex", alignItems: "center" }, children: [
151983
151988
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -152009,16 +152014,16 @@ Check this document: https://pdfme.com/docs/custom-schemas`);
152009
152014
  FormRender,
152010
152015
  {
152011
152016
  form: at,
152012
- schema: gt,
152013
- widgets: lt,
152014
- watch: { "#": it },
152017
+ schema: dt,
152018
+ widgets: gt,
152019
+ watch: { "#": et },
152015
152020
  locale: "en-US"
152016
152021
  }
152017
152022
  )
152018
152023
  }
152019
152024
  )
152020
152025
  ] });
152021
- }, DetailView$1 = DetailView, Sidebar = (a) => {
152026
+ }, propsAreUnchanged = (a, s) => JSON.stringify(a.activeSchema) == JSON.stringify(s.activeSchema), DetailView$1 = React$a.memo(DetailView, propsAreUnchanged), Sidebar = (a) => {
152022
152027
  const { sidebarOpen: s, setSidebarOpen: $, activeElements: _, schemas: _e } = a, { token: tt } = theme.useToken(), nt = () => _e.filter((ot) => _.map((rt) => rt.id).includes(ot.id)), at = () => {
152023
152028
  const ot = nt();
152024
152029
  return ot[ot.length - 1];
@@ -152152,15 +152157,15 @@ Check this document: https://pdfme.com/docs/custom-schemas`), /* @__PURE__ */ js
152152
152157
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { visibility: lt ? "hidden" : "visible" }, children: a.children })
152153
152158
  ] });
152154
152159
  }, LeftSidebar = ({ height: a, scale: s, basePdf: $ }) => {
152155
- const { token: _ } = theme.useToken(), _e = reactExports.useContext(PluginsRegistry), [tt, nt] = reactExports.useState(!1);
152160
+ const { token: _ } = theme.useToken(), _e = reactExports.useContext(PluginsRegistry), tt = reactExports.useContext(OptionsContext), [nt, at] = reactExports.useState(!1);
152156
152161
  return reactExports.useEffect(() => {
152157
- const at = () => {
152158
- tt && nt(!1);
152162
+ const ot = () => {
152163
+ nt && at(!1);
152159
152164
  };
152160
- return document.addEventListener("mouseup", at), () => {
152161
- document.removeEventListener("mouseup", at);
152165
+ return document.addEventListener("mouseup", ot), () => {
152166
+ document.removeEventListener("mouseup", ot);
152162
152167
  };
152163
- }, [tt]), /* @__PURE__ */ jsxRuntimeExports.jsx(
152168
+ }, [nt]), /* @__PURE__ */ jsxRuntimeExports.jsx(
152164
152169
  "div",
152165
152170
  {
152166
152171
  style: {
@@ -152172,28 +152177,34 @@ Check this document: https://pdfme.com/docs/custom-schemas`), /* @__PURE__ */ js
152172
152177
  width: 45,
152173
152178
  background: _.colorBgLayout,
152174
152179
  textAlign: "center",
152175
- overflow: tt ? "visible" : "auto"
152180
+ overflow: nt ? "visible" : "auto"
152176
152181
  },
152177
- children: Object.entries(_e).map(([at, ot]) => ot != null && ot.propPanel.defaultSchema ? /* @__PURE__ */ jsxRuntimeExports.jsx(
152178
- Draggable$1,
152179
- {
152180
- scale: s,
152181
- basePdf: $,
152182
- plugin: ot,
152183
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(
152184
- Button$2,
152185
- {
152186
- title: at,
152187
- onMouseDown: () => {
152188
- nt(!0);
152189
- },
152190
- style: { width: 35, height: 35, marginTop: "0.25rem", padding: "0.25rem" },
152191
- children: ot.propPanel.defaultSchema.icon ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { dangerouslySetInnerHTML: { __html: ot.propPanel.defaultSchema.icon } }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { overflow: "hidden", textOverflow: "ellipsis" }, children: at })
152192
- }
152193
- )
152194
- },
152195
- at
152196
- ) : null)
152182
+ children: Object.entries(_e).map(([ot, rt]) => {
152183
+ var lt;
152184
+ if (!(rt != null && rt.propPanel.defaultSchema))
152185
+ return null;
152186
+ const st = ((lt = tt.icons) == null ? void 0 : lt[rt.propPanel.defaultSchema.type]) ?? rt.icon;
152187
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
152188
+ Draggable$1,
152189
+ {
152190
+ scale: s,
152191
+ basePdf: $,
152192
+ plugin: rt,
152193
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(
152194
+ Button$2,
152195
+ {
152196
+ title: ot,
152197
+ onMouseDown: () => {
152198
+ at(!0);
152199
+ },
152200
+ style: { width: 35, height: 35, marginTop: "0.25rem", padding: "0.25rem" },
152201
+ children: st ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { dangerouslySetInnerHTML: { __html: st } }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { overflow: "hidden", textOverflow: "ellipsis" }, children: ot })
152202
+ }
152203
+ )
152204
+ },
152205
+ ot
152206
+ );
152207
+ })
152197
152208
  }
152198
152209
  );
152199
152210
  }, LeftSidebar$1 = LeftSidebar, Paper = (a) => {