inconel 0.1.13 → 0.1.15

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.
Files changed (35) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/DatePicker/DatePicker.cjs +1 -1
  3. package/dist/cjs/components/DatePicker/DatePicker.cjs.map +1 -1
  4. package/dist/cjs/index.cjs +1 -1
  5. package/dist/cjs/styles.css +1 -1
  6. package/dist/components/DatePicker/DatePicker.js +50 -50
  7. package/dist/components/DatePicker/DatePicker.js.map +1 -1
  8. package/dist/components/index.d.ts +0 -2
  9. package/dist/components/index.d.ts.map +1 -1
  10. package/dist/index.js +52 -56
  11. package/dist/index.js.map +1 -1
  12. package/dist/styles.css +1 -1
  13. package/package.json +1 -3
  14. package/dist/cjs/components/HtmlEditor/HtmlEditor.cjs +0 -2
  15. package/dist/cjs/components/HtmlEditor/HtmlEditor.cjs.map +0 -1
  16. package/dist/cjs/components/TextEditor/TextEditor.cjs +0 -2
  17. package/dist/cjs/components/TextEditor/TextEditor.cjs.map +0 -1
  18. package/dist/cjs/components/TextEditor/utils.cjs +0 -2
  19. package/dist/cjs/components/TextEditor/utils.cjs.map +0 -1
  20. package/dist/components/HtmlEditor/HtmlEditor.d.ts +0 -13
  21. package/dist/components/HtmlEditor/HtmlEditor.d.ts.map +0 -1
  22. package/dist/components/HtmlEditor/HtmlEditor.js +0 -39
  23. package/dist/components/HtmlEditor/HtmlEditor.js.map +0 -1
  24. package/dist/components/HtmlEditor/index.d.ts +0 -3
  25. package/dist/components/HtmlEditor/index.d.ts.map +0 -1
  26. package/dist/components/TextEditor/TextEditor.d.ts +0 -10
  27. package/dist/components/TextEditor/TextEditor.d.ts.map +0 -1
  28. package/dist/components/TextEditor/TextEditor.js +0 -71
  29. package/dist/components/TextEditor/TextEditor.js.map +0 -1
  30. package/dist/components/TextEditor/index.d.ts +0 -3
  31. package/dist/components/TextEditor/index.d.ts.map +0 -1
  32. package/dist/components/TextEditor/utils.d.ts +0 -20
  33. package/dist/components/TextEditor/utils.d.ts.map +0 -1
  34. package/dist/components/TextEditor/utils.js +0 -15
  35. package/dist/components/TextEditor/utils.js.map +0 -1
@@ -1,39 +0,0 @@
1
- import { jsx as p } from "react/jsx-runtime";
2
- import c from "@uiw/react-textarea-code-editor";
3
- import { classNames as f } from "../shared/classNames.js";
4
- /* empty css */
5
- import { useInconelAdapters as d } from "../../adapters/context.js";
6
- function C({
7
- value: o = "",
8
- onChange: r,
9
- placeholder: t,
10
- language: e = "html",
11
- padding: n = 15,
12
- className: a,
13
- style: i,
14
- readOnly: l = !1
15
- }) {
16
- const m = d();
17
- return /* @__PURE__ */ p(
18
- c,
19
- {
20
- value: o,
21
- language: e,
22
- placeholder: t ?? String(m.translate?.("enterHtml", "HTML girin") ?? "HTML girin"),
23
- readOnly: l,
24
- onChange: (s) => r?.(s.target.value),
25
- padding: n,
26
- className: f("inconel-html-editor", a),
27
- style: {
28
- backgroundColor: "#f5f5f5",
29
- minHeight: 180,
30
- fontFamily: "ui-monospace, SFMono-Regular, SF Mono, Consolas, Liberation Mono, Menlo, monospace",
31
- ...i
32
- }
33
- }
34
- );
35
- }
36
- export {
37
- C as HtmlEditor
38
- };
39
- //# sourceMappingURL=HtmlEditor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HtmlEditor.js","sources":["../../../src/components/HtmlEditor/HtmlEditor.tsx"],"sourcesContent":["import CodeEditor from '@uiw/react-textarea-code-editor'\nimport type { CSSProperties } from 'react'\n\nimport { useInconelAdapters } from '../../adapters'\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\n\nexport interface HtmlEditorProps {\n value?: string\n onChange?: (value: string) => void\n placeholder?: string\n language?: string\n padding?: number\n className?: string\n style?: CSSProperties\n readOnly?: boolean\n}\n\nexport function HtmlEditor({\n value = '',\n onChange,\n placeholder,\n language = 'html',\n padding = 15,\n className,\n style,\n readOnly = false,\n}: HtmlEditorProps) {\n const adapters = useInconelAdapters()\n return (\n <CodeEditor\n value={value}\n language={language}\n placeholder={\n placeholder ??\n String(adapters.translate?.('enterHtml', 'HTML girin') ?? 'HTML girin')\n }\n readOnly={readOnly}\n onChange={(event) => onChange?.(event.target.value)}\n padding={padding}\n className={classNames('inconel-html-editor', className)}\n style={{\n backgroundColor: '#f5f5f5',\n minHeight: 180,\n fontFamily:\n 'ui-monospace, SFMono-Regular, SF Mono, Consolas, Liberation Mono, Menlo, monospace',\n ...style,\n }}\n />\n )\n}\n"],"names":["HtmlEditor","value","onChange","placeholder","language","padding","className","style","readOnly","adapters","useInconelAdapters","jsx","CodeEditor","event","classNames"],"mappings":";;;;;AAkBO,SAASA,EAAW;AAAA,EACzB,OAAAC,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,SAAAC,IAAU;AAAA,EACV,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC,IAAW;AACb,GAAoB;AAClB,QAAMC,IAAWC,EAAA;AACjB,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAAX;AAAA,MACA,UAAAG;AAAA,MACA,aACED,KACA,OAAOM,EAAS,YAAY,aAAa,YAAY,KAAK,YAAY;AAAA,MAExE,UAAAD;AAAA,MACA,UAAU,CAACK,MAAUX,IAAWW,EAAM,OAAO,KAAK;AAAA,MAClD,SAAAR;AAAA,MACA,WAAWS,EAAW,uBAAuBR,CAAS;AAAA,MACtD,OAAO;AAAA,QACL,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,YACE;AAAA,QACF,GAAGC;AAAA,MAAA;AAAA,IACL;AAAA,EAAA;AAGN;"}
@@ -1,3 +0,0 @@
1
- export { HtmlEditor } from './HtmlEditor';
2
- export type { HtmlEditorProps } from './HtmlEditor';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/HtmlEditor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
@@ -1,10 +0,0 @@
1
- export interface TextEditorProps {
2
- value?: string;
3
- onChange?: (value: string) => void;
4
- apiKey?: string;
5
- language?: string;
6
- languageUrl?: string;
7
- height?: number;
8
- }
9
- export declare function TextEditor({ value, onChange, apiKey, language, languageUrl, height, }: TextEditorProps): import("react").JSX.Element;
10
- //# sourceMappingURL=TextEditor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TextEditor.d.ts","sourceRoot":"","sources":["../../../src/components/TextEditor/TextEditor.tsx"],"names":[],"mappings":"AAKA,OAAO,cAAc,CAAA;AAsBrB,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAU,EACV,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,WAAW,EACX,MAAY,GACb,EAAE,eAAe,+BA4EjB"}
@@ -1,71 +0,0 @@
1
- import { jsx as s } from "react/jsx-runtime";
2
- import { Editor as k } from "@tinymce/tinymce-react";
3
- import { useRef as c } from "react";
4
- import { getMediaContent as y } from "./utils.js";
5
- /* empty css */
6
- import { useInconelAdapters as b } from "../../adapters/context.js";
7
- function w({
8
- value: l = "",
9
- onChange: i,
10
- apiKey: u,
11
- language: d,
12
- languageUrl: m,
13
- height: p = 500
14
- }) {
15
- const t = b(), a = c(null), o = c(null), f = async () => {
16
- const e = a.current;
17
- e?.focus(), o.current = e?.selection.getBookmark(2, !0) ?? null;
18
- const n = await t.media?.open?.({
19
- type: "editor"
20
- }), r = y(n);
21
- r && (e ? (o.current && e.selection.moveToBookmark(o.current), e.insertContent(r), i?.(e.getContent())) : i?.(`${l} ${r}`.trim()), o.current = null);
22
- }, g = d ?? (t.locale ?? "tr-TR").split("-")[0];
23
- return /* @__PURE__ */ s("div", { className: "inconel-text-editor", children: /* @__PURE__ */ s(
24
- k,
25
- {
26
- apiKey: u,
27
- value: l,
28
- onInit: (e, n) => {
29
- a.current = n;
30
- },
31
- onEditorChange: (e) => i?.(e),
32
- init: {
33
- height: p,
34
- language: g,
35
- language_url: m,
36
- entity_encoding: "raw",
37
- plugins: [
38
- "anchor",
39
- "autolink",
40
- "charmap",
41
- "codesample",
42
- "emoticons",
43
- "link",
44
- "lists",
45
- "searchreplace",
46
- "table",
47
- "visualblocks",
48
- "wordcount"
49
- ],
50
- toolbar: "undo redo | blocks fontfamily fontsize | bold italic underline strikethrough | link table inconelGallery | align lineheight | numlist bullist indent outdent | removeformat",
51
- menubar: !1,
52
- setup: (e) => {
53
- if (!t.media?.open) return;
54
- e.ui.registry.addButton("inconelGallery", {
55
- text: "Galeri",
56
- tooltip: String(
57
- t.translate?.("mediaGallery", "Medya galerisi") ?? "Medya galerisi"
58
- ),
59
- onAction: () => {
60
- f();
61
- }
62
- });
63
- }
64
- }
65
- }
66
- ) });
67
- }
68
- export {
69
- w as TextEditor
70
- };
71
- //# sourceMappingURL=TextEditor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TextEditor.js","sources":["../../../src/components/TextEditor/TextEditor.tsx"],"sourcesContent":["import { Editor } from '@tinymce/tinymce-react'\nimport { useRef } from 'react'\n\nimport { useInconelAdapters } from '../../adapters'\nimport { getMediaContent, type MediaSelection } from './utils'\nimport './styles.css'\n\ninterface EditorSelection {\n getBookmark: (type: number, normalized: boolean) => unknown\n moveToBookmark: (bookmark: unknown) => void\n}\n\ninterface EditorApi {\n focus: () => void\n insertContent: (content: string) => void\n getContent: () => string\n selection: EditorSelection\n ui: {\n registry: {\n addButton: (\n name: string,\n options: { text: string; tooltip: string; onAction: () => void },\n ) => void\n }\n }\n}\n\nexport interface TextEditorProps {\n value?: string\n onChange?: (value: string) => void\n apiKey?: string\n language?: string\n languageUrl?: string\n height?: number\n}\n\nexport function TextEditor({\n value = '',\n onChange,\n apiKey,\n language,\n languageUrl,\n height = 500,\n}: TextEditorProps) {\n const adapters = useInconelAdapters()\n const editorRef = useRef<EditorApi | null>(null)\n const bookmarkRef = useRef<unknown>(null)\n\n const selectMedia = async () => {\n const editor = editorRef.current\n editor?.focus()\n bookmarkRef.current = editor?.selection.getBookmark(2, true) ?? null\n const selection = (await adapters.media?.open?.({\n type: 'editor',\n })) as MediaSelection | undefined\n const content = getMediaContent(selection)\n if (!content) return\n if (editor) {\n if (bookmarkRef.current) {\n editor.selection.moveToBookmark(bookmarkRef.current)\n }\n editor.insertContent(content)\n onChange?.(editor.getContent())\n } else {\n onChange?.(`${value} ${content}`.trim())\n }\n bookmarkRef.current = null\n }\n\n const locale = language ?? (adapters.locale ?? 'tr-TR').split('-')[0]\n\n return (\n <div className=\"inconel-text-editor\">\n <Editor\n apiKey={apiKey}\n value={value}\n onInit={(_event, editor) => {\n editorRef.current = editor as unknown as EditorApi\n }}\n onEditorChange={(content) => onChange?.(content)}\n init={{\n height,\n language: locale,\n language_url: languageUrl,\n entity_encoding: 'raw',\n plugins: [\n 'anchor',\n 'autolink',\n 'charmap',\n 'codesample',\n 'emoticons',\n 'link',\n 'lists',\n 'searchreplace',\n 'table',\n 'visualblocks',\n 'wordcount',\n ],\n toolbar:\n 'undo redo | blocks fontfamily fontsize | bold italic underline strikethrough | link table inconelGallery | align lineheight | numlist bullist indent outdent | removeformat',\n menubar: false,\n setup: (editor: unknown) => {\n if (!adapters.media?.open) return\n const api = editor as unknown as EditorApi\n api.ui.registry.addButton('inconelGallery', {\n text: 'Galeri',\n tooltip: String(\n adapters.translate?.('mediaGallery', 'Medya galerisi') ??\n 'Medya galerisi',\n ),\n onAction: () => {\n void selectMedia()\n },\n })\n },\n }}\n />\n </div>\n )\n}\n"],"names":["TextEditor","value","onChange","apiKey","language","languageUrl","height","adapters","useInconelAdapters","editorRef","useRef","bookmarkRef","selectMedia","editor","selection","content","getMediaContent","locale","jsx","Editor","_event"],"mappings":";;;;;;AAoCO,SAASA,EAAW;AAAA,EACzB,OAAAC,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,QAAAC,IAAS;AACX,GAAoB;AAClB,QAAMC,IAAWC,EAAA,GACXC,IAAYC,EAAyB,IAAI,GACzCC,IAAcD,EAAgB,IAAI,GAElCE,IAAc,YAAY;AAC9B,UAAMC,IAASJ,EAAU;AACzB,IAAAI,GAAQ,MAAA,GACRF,EAAY,UAAUE,GAAQ,UAAU,YAAY,GAAG,EAAI,KAAK;AAChE,UAAMC,IAAa,MAAMP,EAAS,OAAO,OAAO;AAAA,MAC9C,MAAM;AAAA,IAAA,CACP,GACKQ,IAAUC,EAAgBF,CAAS;AACzC,IAAKC,MACDF,KACEF,EAAY,WACdE,EAAO,UAAU,eAAeF,EAAY,OAAO,GAErDE,EAAO,cAAcE,CAAO,GAC5Bb,IAAWW,EAAO,YAAY,KAE9BX,IAAW,GAAGD,CAAK,IAAIc,CAAO,GAAG,MAAM,GAEzCJ,EAAY,UAAU;AAAA,EACxB,GAEMM,IAASb,MAAaG,EAAS,UAAU,SAAS,MAAM,GAAG,EAAE,CAAC;AAEpE,SACE,gBAAAW,EAAC,OAAA,EAAI,WAAU,uBACb,UAAA,gBAAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,QAAAhB;AAAA,MACA,OAAAF;AAAA,MACA,QAAQ,CAACmB,GAAQP,MAAW;AAC1B,QAAAJ,EAAU,UAAUI;AAAA,MACtB;AAAA,MACA,gBAAgB,CAACE,MAAYb,IAAWa,CAAO;AAAA,MAC/C,MAAM;AAAA,QACJ,QAAAT;AAAA,QACA,UAAUW;AAAA,QACV,cAAcZ;AAAA,QACd,iBAAiB;AAAA,QACjB,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,SACE;AAAA,QACF,SAAS;AAAA,QACT,OAAO,CAACQ,MAAoB;AAC1B,cAAI,CAACN,EAAS,OAAO,KAAM;AAE3B,UADYM,EACR,GAAG,SAAS,UAAU,kBAAkB;AAAA,YAC1C,MAAM;AAAA,YACN,SAAS;AAAA,cACPN,EAAS,YAAY,gBAAgB,gBAAgB,KACnD;AAAA,YAAA;AAAA,YAEJ,UAAU,MAAM;AACd,cAAKK,EAAA;AAAA,YACP;AAAA,UAAA,CACD;AAAA,QACH;AAAA,MAAA;AAAA,IACF;AAAA,EAAA,GAEJ;AAEJ;"}
@@ -1,3 +0,0 @@
1
- export { TextEditor } from './TextEditor';
2
- export type { TextEditorProps } from './TextEditor';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/TextEditor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
@@ -1,20 +0,0 @@
1
- export interface MediaSelection {
2
- fileType?: string;
3
- url?: string;
4
- mimeType?: string;
5
- originalName?: string;
6
- data?: {
7
- isImage?: boolean;
8
- domain?: string;
9
- path?: string;
10
- sizes?: {
11
- large?: {
12
- fileName?: string;
13
- };
14
- };
15
- fileName?: string;
16
- type?: string;
17
- };
18
- }
19
- export declare function getMediaContent(selection?: MediaSelection): string;
20
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/TextEditor/utils.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE;gBAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAA;QACzC,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAMD,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,cAAc,UAoBzD"}
@@ -1,15 +0,0 @@
1
- function s(a) {
2
- return a?.split("/")[1]?.replace(/[^a-z0-9]/gi, "") || "file";
3
- }
4
- function f(a) {
5
- if (!a) return "";
6
- const { fileType: r, url: n, mimeType: m, originalName: l, data: e = {} } = a, t = n ?? (e.domain && e.path && e.sizes?.large?.fileName ? `${e.domain}/${e.path}/${e.sizes.large.fileName}` : ""), i = n ?? (e.domain && e.path && e.fileName ? `${e.domain}/${e.path}/${e.fileName}` : "");
7
- if ((r === "image" || e.isImage) && t)
8
- return `<img class="image" src="${t}" />`;
9
- const o = e.type ?? s(m);
10
- return i ? `<a class="download ${o}" href="${i}">${l ?? i}</a>` : "";
11
- }
12
- export {
13
- f as getMediaContent
14
- };
15
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sources":["../../../src/components/TextEditor/utils.ts"],"sourcesContent":["export interface MediaSelection {\n fileType?: string\n url?: string\n mimeType?: string\n originalName?: string\n data?: {\n isImage?: boolean\n domain?: string\n path?: string\n sizes?: { large?: { fileName?: string } }\n fileName?: string\n type?: string\n }\n}\n\nfunction extensionFromMimeType(mimeType?: string) {\n return mimeType?.split('/')[1]?.replace(/[^a-z0-9]/gi, '') || 'file'\n}\n\nexport function getMediaContent(selection?: MediaSelection) {\n if (!selection) return ''\n const { fileType, url, mimeType, originalName, data = {} } = selection\n const imageUrl =\n url ??\n (data.domain && data.path && data.sizes?.large?.fileName\n ? `${data.domain}/${data.path}/${data.sizes.large.fileName}`\n : '')\n const fileUrl =\n url ??\n (data.domain && data.path && data.fileName\n ? `${data.domain}/${data.path}/${data.fileName}`\n : '')\n if ((fileType === 'image' || data.isImage) && imageUrl) {\n return `<img class=\"image\" src=\"${imageUrl}\" />`\n }\n const extension = data.type ?? extensionFromMimeType(mimeType)\n return fileUrl\n ? `<a class=\"download ${extension}\" href=\"${fileUrl}\">${originalName ?? fileUrl}</a>`\n : ''\n}\n"],"names":["extensionFromMimeType","mimeType","getMediaContent","selection","fileType","url","originalName","data","imageUrl","fileUrl","extension"],"mappings":"AAeA,SAASA,EAAsBC,GAAmB;AAChD,SAAOA,GAAU,MAAM,GAAG,EAAE,CAAC,GAAG,QAAQ,eAAe,EAAE,KAAK;AAChE;AAEO,SAASC,EAAgBC,GAA4B;AAC1D,MAAI,CAACA,EAAW,QAAO;AACvB,QAAM,EAAE,UAAAC,GAAU,KAAAC,GAAK,UAAAJ,GAAU,cAAAK,GAAc,MAAAC,IAAO,CAAA,MAAOJ,GACvDK,IACJH,MACCE,EAAK,UAAUA,EAAK,QAAQA,EAAK,OAAO,OAAO,WAC5C,GAAGA,EAAK,MAAM,IAAIA,EAAK,IAAI,IAAIA,EAAK,MAAM,MAAM,QAAQ,KACxD,KACAE,IACJJ,MACCE,EAAK,UAAUA,EAAK,QAAQA,EAAK,WAC9B,GAAGA,EAAK,MAAM,IAAIA,EAAK,IAAI,IAAIA,EAAK,QAAQ,KAC5C;AACN,OAAKH,MAAa,WAAWG,EAAK,YAAYC;AAC5C,WAAO,2BAA2BA,CAAQ;AAE5C,QAAME,IAAYH,EAAK,QAAQP,EAAsBC,CAAQ;AAC7D,SAAOQ,IACH,sBAAsBC,CAAS,WAAWD,CAAO,KAAKH,KAAgBG,CAAO,SAC7E;AACN;"}