@dskripchenko/laravel-admin 1.5.5 → 1.6.2
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/components/fields/DateField.vue.d.ts +1 -1
- package/dist/components/fields/FileField.vue.d.ts +18 -0
- package/dist/components/fields/ImageCropperField.vue.d.ts +28 -0
- package/dist/components/fields/TextField.vue.d.ts +1 -1
- package/dist/components/layouts/EmbeddedResourceTable.vue.d.ts +18 -0
- package/dist/components/render/FieldRenderer.vue.d.ts +5 -0
- package/dist/components/render/formState.d.ts +3 -1
- package/dist/components/resource/InlineEditCell.vue.d.ts +13 -1
- package/dist/components/resource/ResourceIndexPage.vue.d.ts +6 -6
- package/dist/components/resource/ResourceTreePage.vue.d.ts +10 -0
- package/dist/{formState-DGNcH1XQ.js → formState-DC25j4xe.js} +10 -9
- package/dist/formState-DC25j4xe.js.map +1 -0
- package/dist/formState-yUTD6wAR.cjs +2 -0
- package/dist/formState-yUTD6wAR.cjs.map +1 -0
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +13915 -12647
- package/dist/index.mjs.map +1 -1
- package/dist/quill.cjs +1 -1
- package/dist/quill.mjs +1 -1
- package/dist/stores/manifest.d.ts +89 -0
- package/dist/style.css +1 -1
- package/dist/tinymce.cjs +1 -1
- package/dist/tinymce.mjs +1 -1
- package/dist/types/bootstrap.d.ts +2 -0
- package/package.json +1 -1
- package/dist/formState-DGNcH1XQ.js.map +0 -1
- package/dist/formState-GlJBphEn.cjs +0 -2
- package/dist/formState-GlJBphEn.cjs.map +0 -1
|
@@ -19,7 +19,7 @@ declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
19
19
|
min: string | null;
|
|
20
20
|
disabled: boolean;
|
|
21
21
|
required: boolean;
|
|
22
|
-
help: string | null;
|
|
23
22
|
inputType: "date" | "datetime-local" | "time";
|
|
23
|
+
help: string | null;
|
|
24
24
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
25
25
|
export default _default;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
name: string;
|
|
3
|
+
label?: string | null;
|
|
4
|
+
help?: string | null;
|
|
5
|
+
required?: boolean;
|
|
6
|
+
accept?: string | null;
|
|
7
|
+
maxSize?: number | null;
|
|
8
|
+
image?: boolean;
|
|
9
|
+
}
|
|
10
|
+
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
11
|
+
label: string | null;
|
|
12
|
+
image: boolean;
|
|
13
|
+
required: boolean;
|
|
14
|
+
accept: string | null;
|
|
15
|
+
help: string | null;
|
|
16
|
+
maxSize: number | null;
|
|
17
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
18
|
+
export default _default;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
name: string;
|
|
3
|
+
label?: string | null;
|
|
4
|
+
help?: string | null;
|
|
5
|
+
required?: boolean;
|
|
6
|
+
accept?: string | null;
|
|
7
|
+
maxSize?: number | null;
|
|
8
|
+
aspectRatio?: number | null;
|
|
9
|
+
outputWidth?: number | null;
|
|
10
|
+
outputHeight?: number | null;
|
|
11
|
+
minCropWidth?: number | null;
|
|
12
|
+
minCropHeight?: number | null;
|
|
13
|
+
quality?: number | null;
|
|
14
|
+
}
|
|
15
|
+
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
16
|
+
label: string | null;
|
|
17
|
+
required: boolean;
|
|
18
|
+
accept: string | null;
|
|
19
|
+
help: string | null;
|
|
20
|
+
maxSize: number | null;
|
|
21
|
+
aspectRatio: number | null;
|
|
22
|
+
outputWidth: number | null;
|
|
23
|
+
outputHeight: number | null;
|
|
24
|
+
minCropWidth: number | null;
|
|
25
|
+
minCropHeight: number | null;
|
|
26
|
+
quality: number | null;
|
|
27
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
28
|
+
export default _default;
|
|
@@ -16,7 +16,7 @@ declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
16
16
|
required: boolean;
|
|
17
17
|
readonly: boolean;
|
|
18
18
|
autocomplete: string | null;
|
|
19
|
-
help: string | null;
|
|
20
19
|
inputType: "text" | "email" | "url" | "password" | "tel" | "search";
|
|
20
|
+
help: string | null;
|
|
21
21
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
22
22
|
export default _default;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface Features {
|
|
2
|
+
create?: boolean;
|
|
3
|
+
delete?: boolean;
|
|
4
|
+
bulkDelete?: boolean;
|
|
5
|
+
}
|
|
6
|
+
interface Props {
|
|
7
|
+
resource: string;
|
|
8
|
+
foreign_key: string;
|
|
9
|
+
parent_field?: string;
|
|
10
|
+
hide_columns?: string[];
|
|
11
|
+
features?: Features;
|
|
12
|
+
}
|
|
13
|
+
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
14
|
+
features: Features;
|
|
15
|
+
parent_field: string;
|
|
16
|
+
hide_columns: string[];
|
|
17
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
18
|
+
export default _default;
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
export interface FormStateContext {
|
|
12
12
|
state: Record<string, unknown>;
|
|
13
13
|
errors: Record<string, string[]>;
|
|
14
|
+
/** Контекст формы: FieldRenderer скрывает поля с visibility[mode]=false. */
|
|
15
|
+
mode?: 'create' | 'update' | 'view';
|
|
14
16
|
setField: (name: string, value: unknown) => void;
|
|
15
17
|
getField: (name: string) => unknown;
|
|
16
18
|
setError: (name: string, messages: string[] | null) => void;
|
|
@@ -27,7 +29,7 @@ export interface FormStateContext {
|
|
|
27
29
|
* @param initialErrors Начальные ошибки (для повторного render'а после
|
|
28
30
|
* ValidationError).
|
|
29
31
|
*/
|
|
30
|
-
export declare function provideFormState(initial?: Record<string, unknown>, initialErrors?: Record<string, string[]
|
|
32
|
+
export declare function provideFormState(initial?: Record<string, unknown>, initialErrors?: Record<string, string[]>, mode?: 'create' | 'update' | 'view'): FormStateContext;
|
|
31
33
|
/**
|
|
32
34
|
* Получить form-context. Throws, если не вызван внутри `provideFormState()`.
|
|
33
35
|
*/
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
type InlineInputType = 'text' | 'number' | 'select' | 'date' | 'textarea' | 'switcher';
|
|
1
2
|
interface Props {
|
|
2
3
|
resourceSlug: string;
|
|
3
4
|
rowId: string | number;
|
|
@@ -5,17 +6,28 @@ interface Props {
|
|
|
5
6
|
value: unknown;
|
|
6
7
|
/** Если false — двойной клик ничего не делает (read-only cell). */
|
|
7
8
|
editable?: boolean;
|
|
9
|
+
/** Тип контрола редактирования. */
|
|
10
|
+
inputType?: InlineInputType;
|
|
11
|
+
/** Для inputType='select' — мапа value→label. */
|
|
12
|
+
options?: Record<string | number, string>;
|
|
13
|
+
/** Per-row override map; если column ∈ override и значение false — read-only. */
|
|
14
|
+
rowOverride?: Record<string, boolean>;
|
|
8
15
|
}
|
|
9
|
-
declare var __VLS_1: {};
|
|
16
|
+
declare var __VLS_1: {}, __VLS_3: {};
|
|
10
17
|
type __VLS_Slots = {} & {
|
|
11
18
|
default?: (props: typeof __VLS_1) => any;
|
|
19
|
+
} & {
|
|
20
|
+
default?: (props: typeof __VLS_3) => any;
|
|
12
21
|
};
|
|
13
22
|
declare const __VLS_component: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
14
23
|
saved: (value: unknown) => any;
|
|
15
24
|
}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
|
|
16
25
|
onSaved?: ((value: unknown) => any) | undefined;
|
|
17
26
|
}>, {
|
|
27
|
+
options: Record<string | number, string>;
|
|
18
28
|
editable: boolean;
|
|
29
|
+
inputType: InlineInputType;
|
|
30
|
+
rowOverride: Record<string, boolean>;
|
|
19
31
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
20
32
|
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
21
33
|
export default _default;
|
|
@@ -10,20 +10,20 @@ interface Props {
|
|
|
10
10
|
/** Имя router-route для action «Создать». */
|
|
11
11
|
createRouteName?: string | null;
|
|
12
12
|
}
|
|
13
|
-
declare var
|
|
13
|
+
declare var __VLS_5: {}, __VLS_103: {}, __VLS_181: {
|
|
14
14
|
filters: Record<string, unknown>;
|
|
15
15
|
setFilter: (key: string, value: unknown) => Promise<void>;
|
|
16
|
-
},
|
|
16
|
+
}, __VLS_247: `cell-${string}`, __VLS_248: {
|
|
17
17
|
row: Record<string, unknown> | undefined;
|
|
18
18
|
};
|
|
19
19
|
type __VLS_Slots = {} & {
|
|
20
|
-
[K in NonNullable<typeof
|
|
20
|
+
[K in NonNullable<typeof __VLS_247>]?: (props: typeof __VLS_248) => any;
|
|
21
21
|
} & {
|
|
22
|
-
actions?: (props: typeof
|
|
22
|
+
actions?: (props: typeof __VLS_5) => any;
|
|
23
23
|
} & {
|
|
24
|
-
'header-menu'?: (props: typeof
|
|
24
|
+
'header-menu'?: (props: typeof __VLS_103) => any;
|
|
25
25
|
} & {
|
|
26
|
-
filters?: (props: typeof
|
|
26
|
+
filters?: (props: typeof __VLS_181) => any;
|
|
27
27
|
};
|
|
28
28
|
declare const __VLS_component: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
29
29
|
import: () => any;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
slug: string;
|
|
3
|
+
title?: string | null;
|
|
4
|
+
subtitle?: string | null;
|
|
5
|
+
}
|
|
6
|
+
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
7
|
+
title: string | null;
|
|
8
|
+
subtitle: string | null;
|
|
9
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
10
|
+
export default _default;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { inject as l, reactive as i, provide as
|
|
1
|
+
import { inject as l, reactive as i, provide as d } from "vue";
|
|
2
2
|
const n = /* @__PURE__ */ Symbol("admin.form-state");
|
|
3
|
-
function
|
|
3
|
+
function F(o = {}, f = {}, u) {
|
|
4
4
|
const s = i(o), e = i({ ...f }), c = {
|
|
5
5
|
state: s,
|
|
6
6
|
errors: e,
|
|
7
|
+
mode: u,
|
|
7
8
|
setField(t, r) {
|
|
8
9
|
s[t] = r, e[t] && delete e[t];
|
|
9
10
|
},
|
|
@@ -21,20 +22,20 @@ function a(o = {}, f = {}) {
|
|
|
21
22
|
for (const t of Object.keys(e)) delete e[t];
|
|
22
23
|
}
|
|
23
24
|
};
|
|
24
|
-
return
|
|
25
|
+
return d(n, c), c;
|
|
25
26
|
}
|
|
26
|
-
function
|
|
27
|
+
function p() {
|
|
27
28
|
const o = l(n);
|
|
28
29
|
if (!o)
|
|
29
30
|
throw new Error("useFormState() called outside of provideFormState() scope");
|
|
30
31
|
return o;
|
|
31
32
|
}
|
|
32
|
-
function
|
|
33
|
+
function y() {
|
|
33
34
|
return l(n, null);
|
|
34
35
|
}
|
|
35
36
|
export {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
F as p,
|
|
38
|
+
y as t,
|
|
39
|
+
p as u
|
|
39
40
|
};
|
|
40
|
-
//# sourceMappingURL=formState-
|
|
41
|
+
//# sourceMappingURL=formState-DC25j4xe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formState-DC25j4xe.js","sources":["../resources/ts/components/render/formState.ts"],"sourcesContent":["/**\n * Composable для form-state: предоставляет state + ошибки через provide/inject.\n *\n * Контейнер (Resource form / Settings page) вызывает `provideFormState()`,\n * Field-компоненты в дереве — `useFormState()` для чтения значения и\n * мутации поля.\n *\n * State — reactive proxy; setField мутирует ключ. Errors — отдельный\n * reactive Map (field-name → string[] messages).\n */\n\nimport { inject, provide, reactive, type InjectionKey } from 'vue'\n\nexport interface FormStateContext {\n state: Record<string, unknown>\n errors: Record<string, string[]>\n /** Контекст формы: FieldRenderer скрывает поля с visibility[mode]=false. */\n mode?: 'create' | 'update' | 'view'\n setField: (name: string, value: unknown) => void\n getField: (name: string) => unknown\n setError: (name: string, messages: string[] | null) => void\n setErrors: (next: Record<string, string[]>) => void\n clearErrors: () => void\n}\n\nconst FormStateKey: InjectionKey<FormStateContext> = Symbol('admin.form-state')\n\n/**\n * Создаёт form-context и provid'ит его потомкам.\n *\n * Переданный `initial`-object оборачивается в `reactive()` — мутации stora\n * видны и снаружи (caller владеет state'ом и может его читать после submit'а).\n *\n * @param initial Начальные значения state'а.\n * @param initialErrors Начальные ошибки (для повторного render'а после\n * ValidationError).\n */\nexport function provideFormState(\n initial: Record<string, unknown> = {},\n initialErrors: Record<string, string[]> = {},\n mode?: 'create' | 'update' | 'view',\n): FormStateContext {\n const state = reactive(initial)\n const errors = reactive<Record<string, string[]>>({ ...initialErrors })\n\n const ctx: FormStateContext = {\n state,\n errors,\n mode,\n setField(name, value) {\n ;(state as Record<string, unknown>)[name] = value\n // Очистить ошибки этого поля при изменении — стандартный UX.\n if (errors[name]) {\n delete errors[name]\n }\n },\n getField(name) {\n return (state as Record<string, unknown>)[name]\n },\n setError(name, messages) {\n if (messages === null || messages.length === 0) {\n delete errors[name]\n } else {\n errors[name] = messages\n }\n },\n setErrors(next) {\n for (const key of Object.keys(errors)) delete errors[key]\n Object.assign(errors, next)\n },\n clearErrors() {\n for (const key of Object.keys(errors)) delete errors[key]\n },\n }\n\n provide(FormStateKey, ctx)\n return ctx\n}\n\n/**\n * Получить form-context. Throws, если не вызван внутри `provideFormState()`.\n */\nexport function useFormState(): FormStateContext {\n const ctx = inject(FormStateKey)\n if (!ctx) {\n throw new Error('useFormState() called outside of provideFormState() scope')\n }\n return ctx\n}\n\n/** Опционально получить (null если нет). */\nexport function tryUseFormState(): FormStateContext | null {\n return inject(FormStateKey, null)\n}\n"],"names":["FormStateKey","provideFormState","initial","initialErrors","mode","state","reactive","errors","ctx","name","value","messages","next","key","provide","useFormState","inject","tryUseFormState"],"mappings":";AAyBA,MAAMA,2BAAsD,kBAAkB;AAYvE,SAASC,EACdC,IAAmC,CAAA,GACnCC,IAA0C,CAAA,GAC1CC,GACkB;AAClB,QAAMC,IAAQC,EAASJ,CAAO,GACxBK,IAASD,EAAmC,EAAE,GAAGH,GAAe,GAEhEK,IAAwB;AAAA,IAC5B,OAAAH;AAAA,IACA,QAAAE;AAAA,IACA,MAAAH;AAAA,IACA,SAASK,GAAMC,GAAO;AAClB,MAAAL,EAAkCI,CAAI,IAAIC,GAExCH,EAAOE,CAAI,KACb,OAAOF,EAAOE,CAAI;AAAA,IAEtB;AAAA,IACA,SAASA,GAAM;AACb,aAAQJ,EAAkCI,CAAI;AAAA,IAChD;AAAA,IACA,SAASA,GAAME,GAAU;AACvB,MAAIA,MAAa,QAAQA,EAAS,WAAW,IAC3C,OAAOJ,EAAOE,CAAI,IAElBF,EAAOE,CAAI,IAAIE;AAAA,IAEnB;AAAA,IACA,UAAUC,GAAM;AACd,iBAAWC,KAAO,OAAO,KAAKN,CAAM,EAAG,QAAOA,EAAOM,CAAG;AACxD,aAAO,OAAON,GAAQK,CAAI;AAAA,IAC5B;AAAA,IACA,cAAc;AACZ,iBAAWC,KAAO,OAAO,KAAKN,CAAM,EAAG,QAAOA,EAAOM,CAAG;AAAA,IAC1D;AAAA,EAAA;AAGF,SAAAC,EAAQd,GAAcQ,CAAG,GAClBA;AACT;AAKO,SAASO,IAAiC;AAC/C,QAAMP,IAAMQ,EAAOhB,CAAY;AAC/B,MAAI,CAACQ;AACH,UAAM,IAAI,MAAM,2DAA2D;AAE7E,SAAOA;AACT;AAGO,SAASS,IAA2C;AACzD,SAAOD,EAAOhB,GAAc,IAAI;AAClC;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const o=require("vue"),n=Symbol("admin.form-state");function d(c={},l={},u){const s=o.reactive(c),t=o.reactive({...l}),i={state:s,errors:t,mode:u,setField(e,r){s[e]=r,t[e]&&delete t[e]},getField(e){return s[e]},setError(e,r){r===null||r.length===0?delete t[e]:t[e]=r},setErrors(e){for(const r of Object.keys(t))delete t[r];Object.assign(t,e)},clearErrors(){for(const e of Object.keys(t))delete t[e]}};return o.provide(n,i),i}function a(){const c=o.inject(n);if(!c)throw new Error("useFormState() called outside of provideFormState() scope");return c}function f(){return o.inject(n,null)}exports.provideFormState=d;exports.tryUseFormState=f;exports.useFormState=a;
|
|
2
|
+
//# sourceMappingURL=formState-yUTD6wAR.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formState-yUTD6wAR.cjs","sources":["../resources/ts/components/render/formState.ts"],"sourcesContent":["/**\n * Composable для form-state: предоставляет state + ошибки через provide/inject.\n *\n * Контейнер (Resource form / Settings page) вызывает `provideFormState()`,\n * Field-компоненты в дереве — `useFormState()` для чтения значения и\n * мутации поля.\n *\n * State — reactive proxy; setField мутирует ключ. Errors — отдельный\n * reactive Map (field-name → string[] messages).\n */\n\nimport { inject, provide, reactive, type InjectionKey } from 'vue'\n\nexport interface FormStateContext {\n state: Record<string, unknown>\n errors: Record<string, string[]>\n /** Контекст формы: FieldRenderer скрывает поля с visibility[mode]=false. */\n mode?: 'create' | 'update' | 'view'\n setField: (name: string, value: unknown) => void\n getField: (name: string) => unknown\n setError: (name: string, messages: string[] | null) => void\n setErrors: (next: Record<string, string[]>) => void\n clearErrors: () => void\n}\n\nconst FormStateKey: InjectionKey<FormStateContext> = Symbol('admin.form-state')\n\n/**\n * Создаёт form-context и provid'ит его потомкам.\n *\n * Переданный `initial`-object оборачивается в `reactive()` — мутации stora\n * видны и снаружи (caller владеет state'ом и может его читать после submit'а).\n *\n * @param initial Начальные значения state'а.\n * @param initialErrors Начальные ошибки (для повторного render'а после\n * ValidationError).\n */\nexport function provideFormState(\n initial: Record<string, unknown> = {},\n initialErrors: Record<string, string[]> = {},\n mode?: 'create' | 'update' | 'view',\n): FormStateContext {\n const state = reactive(initial)\n const errors = reactive<Record<string, string[]>>({ ...initialErrors })\n\n const ctx: FormStateContext = {\n state,\n errors,\n mode,\n setField(name, value) {\n ;(state as Record<string, unknown>)[name] = value\n // Очистить ошибки этого поля при изменении — стандартный UX.\n if (errors[name]) {\n delete errors[name]\n }\n },\n getField(name) {\n return (state as Record<string, unknown>)[name]\n },\n setError(name, messages) {\n if (messages === null || messages.length === 0) {\n delete errors[name]\n } else {\n errors[name] = messages\n }\n },\n setErrors(next) {\n for (const key of Object.keys(errors)) delete errors[key]\n Object.assign(errors, next)\n },\n clearErrors() {\n for (const key of Object.keys(errors)) delete errors[key]\n },\n }\n\n provide(FormStateKey, ctx)\n return ctx\n}\n\n/**\n * Получить form-context. Throws, если не вызван внутри `provideFormState()`.\n */\nexport function useFormState(): FormStateContext {\n const ctx = inject(FormStateKey)\n if (!ctx) {\n throw new Error('useFormState() called outside of provideFormState() scope')\n }\n return ctx\n}\n\n/** Опционально получить (null если нет). */\nexport function tryUseFormState(): FormStateContext | null {\n return inject(FormStateKey, null)\n}\n"],"names":["FormStateKey","provideFormState","initial","initialErrors","mode","state","reactive","errors","ctx","name","value","messages","next","key","provide","useFormState","inject","tryUseFormState"],"mappings":"oCAyBMA,SAAsD,kBAAkB,EAYvE,SAASC,EACdC,EAAmC,CAAA,EACnCC,EAA0C,CAAA,EAC1CC,EACkB,CAClB,MAAMC,EAAQC,EAAAA,SAASJ,CAAO,EACxBK,EAASD,EAAAA,SAAmC,CAAE,GAAGH,EAAe,EAEhEK,EAAwB,CAC5B,MAAAH,EACA,OAAAE,EACA,KAAAH,EACA,SAASK,EAAMC,EAAO,CAClBL,EAAkCI,CAAI,EAAIC,EAExCH,EAAOE,CAAI,GACb,OAAOF,EAAOE,CAAI,CAEtB,EACA,SAASA,EAAM,CACb,OAAQJ,EAAkCI,CAAI,CAChD,EACA,SAASA,EAAME,EAAU,CACnBA,IAAa,MAAQA,EAAS,SAAW,EAC3C,OAAOJ,EAAOE,CAAI,EAElBF,EAAOE,CAAI,EAAIE,CAEnB,EACA,UAAUC,EAAM,CACd,UAAWC,KAAO,OAAO,KAAKN,CAAM,EAAG,OAAOA,EAAOM,CAAG,EACxD,OAAO,OAAON,EAAQK,CAAI,CAC5B,EACA,aAAc,CACZ,UAAWC,KAAO,OAAO,KAAKN,CAAM,EAAG,OAAOA,EAAOM,CAAG,CAC1D,CAAA,EAGFC,OAAAA,EAAAA,QAAQd,EAAcQ,CAAG,EAClBA,CACT,CAKO,SAASO,GAAiC,CAC/C,MAAMP,EAAMQ,EAAAA,OAAOhB,CAAY,EAC/B,GAAI,CAACQ,EACH,MAAM,IAAI,MAAM,2DAA2D,EAE7E,OAAOA,CACT,CAGO,SAASS,GAA2C,CACzD,OAAOD,EAAAA,OAAOhB,EAAc,IAAI,CAClC"}
|