strapi-plugin-bulk-updater 1.3.3 → 1.3.6
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/_chunks/{BulkUpdater-C2lw4D0D.js → BulkUpdater-CXDs0Dws.js} +181 -142
- package/dist/_chunks/BulkUpdater-CXDs0Dws.js.map +1 -0
- package/dist/_chunks/{BulkUpdater-CgsqzdyX.mjs → BulkUpdater-D812YfOE.mjs} +182 -143
- package/dist/_chunks/BulkUpdater-D812YfOE.mjs.map +1 -0
- package/dist/admin/index.js +43 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +42 -2
- package/dist/admin/index.mjs.map +1 -1
- package/dist/server/index.js +405 -62
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +405 -62
- package/dist/server/index.mjs.map +1 -1
- package/package.json +3 -3
- package/dist/_chunks/BulkUpdater-C2lw4D0D.js.map +0 -1
- package/dist/_chunks/BulkUpdater-CgsqzdyX.mjs.map +0 -1
package/dist/admin/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
const React = require("react");
|
|
2
3
|
const icons = require("@strapi/icons");
|
|
4
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
5
|
+
const React__default = /* @__PURE__ */ _interopDefault(React);
|
|
3
6
|
const PLUGIN_ID = "bulk-updater";
|
|
4
7
|
const index = {
|
|
5
8
|
register(app) {
|
|
@@ -10,7 +13,7 @@ const index = {
|
|
|
10
13
|
id: `${PLUGIN_ID}.plugin.name`,
|
|
11
14
|
defaultMessage: "Bulk Attribute Updater"
|
|
12
15
|
},
|
|
13
|
-
Component: () => Promise.resolve().then(() => require("../_chunks/BulkUpdater-
|
|
16
|
+
Component: () => Promise.resolve().then(() => require("../_chunks/BulkUpdater-CXDs0Dws.js")),
|
|
14
17
|
permissions: [],
|
|
15
18
|
position: 3
|
|
16
19
|
});
|
|
@@ -46,6 +49,45 @@ const index = {
|
|
|
46
49
|
});
|
|
47
50
|
},
|
|
48
51
|
bootstrap(app) {
|
|
52
|
+
try {
|
|
53
|
+
const contentManagerPlugin = app.getPlugin("content-manager");
|
|
54
|
+
if (contentManagerPlugin?.apis?.addDocumentAction) {
|
|
55
|
+
contentManagerPlugin.apis.addDocumentAction((actions) => {
|
|
56
|
+
if (window.strapi?.features?.isEnabled?.("cms-content-history")) {
|
|
57
|
+
return actions;
|
|
58
|
+
}
|
|
59
|
+
const hasHistory = actions.some((a) => a.type === "history" || a.id === "content-history");
|
|
60
|
+
if (hasHistory) return actions;
|
|
61
|
+
const customHistoryAction = ({ model, document }) => {
|
|
62
|
+
if (window.strapi?.features?.isEnabled?.("cms-content-history")) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
icon: React__default.default.createElement(icons.ClockCounterClockwise, {}),
|
|
67
|
+
label: "Content History",
|
|
68
|
+
onClick: () => {
|
|
69
|
+
const currentPath = window.location.pathname.replace(/\/$/, "");
|
|
70
|
+
if (!currentPath.endsWith("/history")) {
|
|
71
|
+
window.location.href = `${currentPath}/history${window.location.search}`;
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
disabled: !document || !document.id || !model?.startsWith("api::"),
|
|
75
|
+
position: "header"
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
customHistoryAction.type = "history";
|
|
79
|
+
customHistoryAction.position = "header";
|
|
80
|
+
const deleteIndex = actions.findIndex((a) => a.type === "delete");
|
|
81
|
+
if (deleteIndex !== -1) {
|
|
82
|
+
actions.splice(deleteIndex, 0, customHistoryAction);
|
|
83
|
+
} else {
|
|
84
|
+
actions.push(customHistoryAction);
|
|
85
|
+
}
|
|
86
|
+
return actions;
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
} catch {
|
|
90
|
+
}
|
|
49
91
|
}
|
|
50
92
|
};
|
|
51
93
|
module.exports = index;
|
package/dist/admin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../admin/src/pluginId.ts","../../admin/src/index.ts"],"sourcesContent":["export const PLUGIN_ID = 'bulk-updater';\n","import { PLUGIN_ID } from './pluginId';\nimport { Pencil } from '@strapi/icons';\n\nexport default {\n register(app: any) {\n app.addMenuLink({\n to: `plugins/${PLUGIN_ID}`,\n icon: Pencil,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: 'Bulk Attribute Updater',\n },\n Component: () => import('./pages/BulkUpdater'),\n permissions: [],\n position: 3,\n });\n\n app.addSettingsLink('global', {\n id: `${PLUGIN_ID}-settings`,\n intlLabel: {\n id: `${PLUGIN_ID}.settings.name`,\n defaultMessage: 'Bulk Updater Settings',\n },\n to: `${PLUGIN_ID}`,\n Component: () => import('./pages/SettingsPage'),\n permissions: [],\n });\n\n app.registerPlugin({\n id: PLUGIN_ID,\n name: PLUGIN_ID,\n });\n\n app.customFields.register({\n name: 'scoped-select',\n pluginId: PLUGIN_ID,\n type: 'string',\n intlLabel: {\n id: `${PLUGIN_ID}.scoped-select.label`,\n defaultMessage: 'Scoped Quota Select',\n },\n intlDescription: {\n id: `${PLUGIN_ID}.scoped-select.description`,\n defaultMessage: 'Dropdown with dynamic cross-component usage quota enforcement',\n },\n components: {\n Input: async () => import('./components/ScopedQuotaSelectInput'),\n },\n });\n },\n bootstrap(app: any) {},\n};\n"],"names":["Pencil"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../admin/src/pluginId.ts","../../admin/src/index.ts"],"sourcesContent":["export const PLUGIN_ID = 'bulk-updater';\n","import React from 'react';\nimport { PLUGIN_ID } from './pluginId';\nimport { Pencil, ClockCounterClockwise } from '@strapi/icons';\n\nexport default {\n register(app: any) {\n app.addMenuLink({\n to: `plugins/${PLUGIN_ID}`,\n icon: Pencil,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: 'Bulk Attribute Updater',\n },\n Component: () => import('./pages/BulkUpdater'),\n permissions: [],\n position: 3,\n });\n\n app.addSettingsLink('global', {\n id: `${PLUGIN_ID}-settings`,\n intlLabel: {\n id: `${PLUGIN_ID}.settings.name`,\n defaultMessage: 'Bulk Updater Settings',\n },\n to: `${PLUGIN_ID}`,\n Component: () => import('./pages/SettingsPage'),\n permissions: [],\n });\n\n app.registerPlugin({\n id: PLUGIN_ID,\n name: PLUGIN_ID,\n });\n\n app.customFields.register({\n name: 'scoped-select',\n pluginId: PLUGIN_ID,\n type: 'string',\n intlLabel: {\n id: `${PLUGIN_ID}.scoped-select.label`,\n defaultMessage: 'Scoped Quota Select',\n },\n intlDescription: {\n id: `${PLUGIN_ID}.scoped-select.description`,\n defaultMessage: 'Dropdown with dynamic cross-component usage quota enforcement',\n },\n components: {\n Input: async () => import('./components/ScopedQuotaSelectInput'),\n },\n });\n },\n bootstrap(app: any) {\n try {\n const contentManagerPlugin = app.getPlugin('content-manager');\n if (contentManagerPlugin?.apis?.addDocumentAction) {\n contentManagerPlugin.apis.addDocumentAction((actions: any[]) => {\n if (window.strapi?.features?.isEnabled?.('cms-content-history')) {\n return actions;\n }\n\n const hasHistory = actions.some((a: any) => a.type === 'history' || a.id === 'content-history');\n if (hasHistory) return actions;\n\n const customHistoryAction = ({ model, document }: any) => {\n if (window.strapi?.features?.isEnabled?.('cms-content-history')) {\n return null;\n }\n\n return {\n icon: React.createElement(ClockCounterClockwise, {}),\n label: 'Content History',\n onClick: () => {\n const currentPath = window.location.pathname.replace(/\\/$/, '');\n if (!currentPath.endsWith('/history')) {\n window.location.href = `${currentPath}/history${window.location.search}`;\n }\n },\n disabled: !document || !document.id || !model?.startsWith('api::'),\n position: 'header',\n };\n };\n customHistoryAction.type = 'history';\n customHistoryAction.position = 'header';\n\n const deleteIndex = actions.findIndex((a: any) => a.type === 'delete');\n if (deleteIndex !== -1) {\n actions.splice(deleteIndex, 0, customHistoryAction);\n } else {\n actions.push(customHistoryAction);\n }\n return actions;\n });\n }\n } catch {}\n },\n};\n"],"names":["Pencil","React","ClockCounterClockwise"],"mappings":";;;;;AAAO,MAAM,YAAY;ACIzB,MAAA,QAAe;AAAA,EACb,SAAS,KAAU;AACjB,QAAI,YAAY;AAAA,MACd,IAAI,WAAW,SAAS;AAAA,MACxB,MAAMA,MAAAA;AAAAA,MACN,WAAW;AAAA,QACT,IAAI,GAAG,SAAS;AAAA,QAChB,gBAAgB;AAAA,MAAA;AAAA,MAElB,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,oCAAqB,CAAA;AAAA,MAC7C,aAAa,CAAA;AAAA,MACb,UAAU;AAAA,IAAA,CACX;AAED,QAAI,gBAAgB,UAAU;AAAA,MAC5B,IAAI,GAAG,SAAS;AAAA,MAChB,WAAW;AAAA,QACT,IAAI,GAAG,SAAS;AAAA,QAChB,gBAAgB;AAAA,MAAA;AAAA,MAElB,IAAI,GAAG,SAAS;AAAA,MAChB,WAAW,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,qCAAsB,CAAA;AAAA,MAC9C,aAAa,CAAA;AAAA,IAAC,CACf;AAED,QAAI,eAAe;AAAA,MACjB,IAAI;AAAA,MACJ,MAAM;AAAA,IAAA,CACP;AAED,QAAI,aAAa,SAAS;AAAA,MACxB,MAAM;AAAA,MACN,UAAU;AAAA,MACV,MAAM;AAAA,MACN,WAAW;AAAA,QACT,IAAI,GAAG,SAAS;AAAA,QAChB,gBAAgB;AAAA,MAAA;AAAA,MAElB,iBAAiB;AAAA,QACf,IAAI,GAAG,SAAS;AAAA,QAChB,gBAAgB;AAAA,MAAA;AAAA,MAElB,YAAY;AAAA,QACV,OAAO,YAAY,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,+CAAqC,CAAA;AAAA,MAAA;AAAA,IACjE,CACD;AAAA,EAAA;AAAA,EAEH,UAAU,KAAU;AAClB,QAAI;AACF,YAAM,uBAAuB,IAAI,UAAU,iBAAiB;AAC5D,UAAI,sBAAsB,MAAM,mBAAmB;AACjD,6BAAqB,KAAK,kBAAkB,CAAC,YAAmB;AAC9D,cAAI,OAAO,QAAQ,UAAU,YAAY,qBAAqB,GAAG;AAC/D,mBAAO;AAAA,UAAA;AAGT,gBAAM,aAAa,QAAQ,KAAK,CAAC,MAAW,EAAE,SAAS,aAAa,EAAE,OAAO,iBAAiB;AAC9F,cAAI,WAAY,QAAO;AAEvB,gBAAM,sBAAsB,CAAC,EAAE,OAAO,eAAoB;AACxD,gBAAI,OAAO,QAAQ,UAAU,YAAY,qBAAqB,GAAG;AAC/D,qBAAO;AAAA,YAAA;AAGT,mBAAO;AAAA,cACL,MAAMC,eAAAA,QAAM,cAAcC,MAAAA,uBAAuB,CAAA,CAAE;AAAA,cACnD,OAAO;AAAA,cACP,SAAS,MAAM;AACb,sBAAM,cAAc,OAAO,SAAS,SAAS,QAAQ,OAAO,EAAE;AAC9D,oBAAI,CAAC,YAAY,SAAS,UAAU,GAAG;AACrC,yBAAO,SAAS,OAAO,GAAG,WAAW,WAAW,OAAO,SAAS,MAAM;AAAA,gBAAA;AAAA,cACxE;AAAA,cAEF,UAAU,CAAC,YAAY,CAAC,SAAS,MAAM,CAAC,OAAO,WAAW,OAAO;AAAA,cACjE,UAAU;AAAA,YAAA;AAAA,UACZ;AAEF,8BAAoB,OAAO;AAC3B,8BAAoB,WAAW;AAE/B,gBAAM,cAAc,QAAQ,UAAU,CAAC,MAAW,EAAE,SAAS,QAAQ;AACrE,cAAI,gBAAgB,IAAI;AACtB,oBAAQ,OAAO,aAAa,GAAG,mBAAmB;AAAA,UAAA,OAC7C;AACL,oBAAQ,KAAK,mBAAmB;AAAA,UAAA;AAElC,iBAAO;AAAA,QAAA,CACR;AAAA,MAAA;AAAA,IACH,QACM;AAAA,IAAA;AAAA,EAAC;AAEb;;"}
|
package/dist/admin/index.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React__default from "react";
|
|
2
|
+
import { ClockCounterClockwise, Pencil } from "@strapi/icons";
|
|
2
3
|
const PLUGIN_ID = "bulk-updater";
|
|
3
4
|
const index = {
|
|
4
5
|
register(app) {
|
|
@@ -9,7 +10,7 @@ const index = {
|
|
|
9
10
|
id: `${PLUGIN_ID}.plugin.name`,
|
|
10
11
|
defaultMessage: "Bulk Attribute Updater"
|
|
11
12
|
},
|
|
12
|
-
Component: () => import("../_chunks/BulkUpdater-
|
|
13
|
+
Component: () => import("../_chunks/BulkUpdater-D812YfOE.mjs"),
|
|
13
14
|
permissions: [],
|
|
14
15
|
position: 3
|
|
15
16
|
});
|
|
@@ -45,6 +46,45 @@ const index = {
|
|
|
45
46
|
});
|
|
46
47
|
},
|
|
47
48
|
bootstrap(app) {
|
|
49
|
+
try {
|
|
50
|
+
const contentManagerPlugin = app.getPlugin("content-manager");
|
|
51
|
+
if (contentManagerPlugin?.apis?.addDocumentAction) {
|
|
52
|
+
contentManagerPlugin.apis.addDocumentAction((actions) => {
|
|
53
|
+
if (window.strapi?.features?.isEnabled?.("cms-content-history")) {
|
|
54
|
+
return actions;
|
|
55
|
+
}
|
|
56
|
+
const hasHistory = actions.some((a) => a.type === "history" || a.id === "content-history");
|
|
57
|
+
if (hasHistory) return actions;
|
|
58
|
+
const customHistoryAction = ({ model, document }) => {
|
|
59
|
+
if (window.strapi?.features?.isEnabled?.("cms-content-history")) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
icon: React__default.createElement(ClockCounterClockwise, {}),
|
|
64
|
+
label: "Content History",
|
|
65
|
+
onClick: () => {
|
|
66
|
+
const currentPath = window.location.pathname.replace(/\/$/, "");
|
|
67
|
+
if (!currentPath.endsWith("/history")) {
|
|
68
|
+
window.location.href = `${currentPath}/history${window.location.search}`;
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
disabled: !document || !document.id || !model?.startsWith("api::"),
|
|
72
|
+
position: "header"
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
customHistoryAction.type = "history";
|
|
76
|
+
customHistoryAction.position = "header";
|
|
77
|
+
const deleteIndex = actions.findIndex((a) => a.type === "delete");
|
|
78
|
+
if (deleteIndex !== -1) {
|
|
79
|
+
actions.splice(deleteIndex, 0, customHistoryAction);
|
|
80
|
+
} else {
|
|
81
|
+
actions.push(customHistoryAction);
|
|
82
|
+
}
|
|
83
|
+
return actions;
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
} catch {
|
|
87
|
+
}
|
|
48
88
|
}
|
|
49
89
|
};
|
|
50
90
|
export {
|
package/dist/admin/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../admin/src/pluginId.ts","../../admin/src/index.ts"],"sourcesContent":["export const PLUGIN_ID = 'bulk-updater';\n","import { PLUGIN_ID } from './pluginId';\nimport { Pencil } from '@strapi/icons';\n\nexport default {\n register(app: any) {\n app.addMenuLink({\n to: `plugins/${PLUGIN_ID}`,\n icon: Pencil,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: 'Bulk Attribute Updater',\n },\n Component: () => import('./pages/BulkUpdater'),\n permissions: [],\n position: 3,\n });\n\n app.addSettingsLink('global', {\n id: `${PLUGIN_ID}-settings`,\n intlLabel: {\n id: `${PLUGIN_ID}.settings.name`,\n defaultMessage: 'Bulk Updater Settings',\n },\n to: `${PLUGIN_ID}`,\n Component: () => import('./pages/SettingsPage'),\n permissions: [],\n });\n\n app.registerPlugin({\n id: PLUGIN_ID,\n name: PLUGIN_ID,\n });\n\n app.customFields.register({\n name: 'scoped-select',\n pluginId: PLUGIN_ID,\n type: 'string',\n intlLabel: {\n id: `${PLUGIN_ID}.scoped-select.label`,\n defaultMessage: 'Scoped Quota Select',\n },\n intlDescription: {\n id: `${PLUGIN_ID}.scoped-select.description`,\n defaultMessage: 'Dropdown with dynamic cross-component usage quota enforcement',\n },\n components: {\n Input: async () => import('./components/ScopedQuotaSelectInput'),\n },\n });\n },\n bootstrap(app: any) {},\n};\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../admin/src/pluginId.ts","../../admin/src/index.ts"],"sourcesContent":["export const PLUGIN_ID = 'bulk-updater';\n","import React from 'react';\nimport { PLUGIN_ID } from './pluginId';\nimport { Pencil, ClockCounterClockwise } from '@strapi/icons';\n\nexport default {\n register(app: any) {\n app.addMenuLink({\n to: `plugins/${PLUGIN_ID}`,\n icon: Pencil,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: 'Bulk Attribute Updater',\n },\n Component: () => import('./pages/BulkUpdater'),\n permissions: [],\n position: 3,\n });\n\n app.addSettingsLink('global', {\n id: `${PLUGIN_ID}-settings`,\n intlLabel: {\n id: `${PLUGIN_ID}.settings.name`,\n defaultMessage: 'Bulk Updater Settings',\n },\n to: `${PLUGIN_ID}`,\n Component: () => import('./pages/SettingsPage'),\n permissions: [],\n });\n\n app.registerPlugin({\n id: PLUGIN_ID,\n name: PLUGIN_ID,\n });\n\n app.customFields.register({\n name: 'scoped-select',\n pluginId: PLUGIN_ID,\n type: 'string',\n intlLabel: {\n id: `${PLUGIN_ID}.scoped-select.label`,\n defaultMessage: 'Scoped Quota Select',\n },\n intlDescription: {\n id: `${PLUGIN_ID}.scoped-select.description`,\n defaultMessage: 'Dropdown with dynamic cross-component usage quota enforcement',\n },\n components: {\n Input: async () => import('./components/ScopedQuotaSelectInput'),\n },\n });\n },\n bootstrap(app: any) {\n try {\n const contentManagerPlugin = app.getPlugin('content-manager');\n if (contentManagerPlugin?.apis?.addDocumentAction) {\n contentManagerPlugin.apis.addDocumentAction((actions: any[]) => {\n if (window.strapi?.features?.isEnabled?.('cms-content-history')) {\n return actions;\n }\n\n const hasHistory = actions.some((a: any) => a.type === 'history' || a.id === 'content-history');\n if (hasHistory) return actions;\n\n const customHistoryAction = ({ model, document }: any) => {\n if (window.strapi?.features?.isEnabled?.('cms-content-history')) {\n return null;\n }\n\n return {\n icon: React.createElement(ClockCounterClockwise, {}),\n label: 'Content History',\n onClick: () => {\n const currentPath = window.location.pathname.replace(/\\/$/, '');\n if (!currentPath.endsWith('/history')) {\n window.location.href = `${currentPath}/history${window.location.search}`;\n }\n },\n disabled: !document || !document.id || !model?.startsWith('api::'),\n position: 'header',\n };\n };\n customHistoryAction.type = 'history';\n customHistoryAction.position = 'header';\n\n const deleteIndex = actions.findIndex((a: any) => a.type === 'delete');\n if (deleteIndex !== -1) {\n actions.splice(deleteIndex, 0, customHistoryAction);\n } else {\n actions.push(customHistoryAction);\n }\n return actions;\n });\n }\n } catch {}\n },\n};\n"],"names":["React"],"mappings":";;AAAO,MAAM,YAAY;ACIzB,MAAA,QAAe;AAAA,EACb,SAAS,KAAU;AACjB,QAAI,YAAY;AAAA,MACd,IAAI,WAAW,SAAS;AAAA,MACxB,MAAM;AAAA,MACN,WAAW;AAAA,QACT,IAAI,GAAG,SAAS;AAAA,QAChB,gBAAgB;AAAA,MAAA;AAAA,MAElB,WAAW,MAAM,OAAO,qCAAqB;AAAA,MAC7C,aAAa,CAAA;AAAA,MACb,UAAU;AAAA,IAAA,CACX;AAED,QAAI,gBAAgB,UAAU;AAAA,MAC5B,IAAI,GAAG,SAAS;AAAA,MAChB,WAAW;AAAA,QACT,IAAI,GAAG,SAAS;AAAA,QAChB,gBAAgB;AAAA,MAAA;AAAA,MAElB,IAAI,GAAG,SAAS;AAAA,MAChB,WAAW,MAAM,OAAO,sCAAsB;AAAA,MAC9C,aAAa,CAAA;AAAA,IAAC,CACf;AAED,QAAI,eAAe;AAAA,MACjB,IAAI;AAAA,MACJ,MAAM;AAAA,IAAA,CACP;AAED,QAAI,aAAa,SAAS;AAAA,MACxB,MAAM;AAAA,MACN,UAAU;AAAA,MACV,MAAM;AAAA,MACN,WAAW;AAAA,QACT,IAAI,GAAG,SAAS;AAAA,QAChB,gBAAgB;AAAA,MAAA;AAAA,MAElB,iBAAiB;AAAA,QACf,IAAI,GAAG,SAAS;AAAA,QAChB,gBAAgB;AAAA,MAAA;AAAA,MAElB,YAAY;AAAA,QACV,OAAO,YAAY,OAAO,gDAAqC;AAAA,MAAA;AAAA,IACjE,CACD;AAAA,EAAA;AAAA,EAEH,UAAU,KAAU;AAClB,QAAI;AACF,YAAM,uBAAuB,IAAI,UAAU,iBAAiB;AAC5D,UAAI,sBAAsB,MAAM,mBAAmB;AACjD,6BAAqB,KAAK,kBAAkB,CAAC,YAAmB;AAC9D,cAAI,OAAO,QAAQ,UAAU,YAAY,qBAAqB,GAAG;AAC/D,mBAAO;AAAA,UAAA;AAGT,gBAAM,aAAa,QAAQ,KAAK,CAAC,MAAW,EAAE,SAAS,aAAa,EAAE,OAAO,iBAAiB;AAC9F,cAAI,WAAY,QAAO;AAEvB,gBAAM,sBAAsB,CAAC,EAAE,OAAO,eAAoB;AACxD,gBAAI,OAAO,QAAQ,UAAU,YAAY,qBAAqB,GAAG;AAC/D,qBAAO;AAAA,YAAA;AAGT,mBAAO;AAAA,cACL,MAAMA,eAAM,cAAc,uBAAuB,CAAA,CAAE;AAAA,cACnD,OAAO;AAAA,cACP,SAAS,MAAM;AACb,sBAAM,cAAc,OAAO,SAAS,SAAS,QAAQ,OAAO,EAAE;AAC9D,oBAAI,CAAC,YAAY,SAAS,UAAU,GAAG;AACrC,yBAAO,SAAS,OAAO,GAAG,WAAW,WAAW,OAAO,SAAS,MAAM;AAAA,gBAAA;AAAA,cACxE;AAAA,cAEF,UAAU,CAAC,YAAY,CAAC,SAAS,MAAM,CAAC,OAAO,WAAW,OAAO;AAAA,cACjE,UAAU;AAAA,YAAA;AAAA,UACZ;AAEF,8BAAoB,OAAO;AAC3B,8BAAoB,WAAW;AAE/B,gBAAM,cAAc,QAAQ,UAAU,CAAC,MAAW,EAAE,SAAS,QAAQ;AACrE,cAAI,gBAAgB,IAAI;AACtB,oBAAQ,OAAO,aAAa,GAAG,mBAAmB;AAAA,UAAA,OAC7C;AACL,oBAAQ,KAAK,mBAAmB;AAAA,UAAA;AAElC,iBAAO;AAAA,QAAA,CACR;AAAA,MAAA;AAAA,IACH,QACM;AAAA,IAAA;AAAA,EAAC;AAEb;"}
|