@aglyn/shared-ui-email-campaigns 1.0.0-beta.146 → 1.0.0-beta.149

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aglyn/shared-ui-email-campaigns",
3
- "version": "1.0.0-beta.146",
3
+ "version": "1.0.0-beta.149",
4
4
  "license": "Apache-2.0",
5
5
  "homepage": "https://aglyn.com",
6
6
  "repository": {
@@ -29,8 +29,8 @@
29
29
  "./package.json": "./package.json"
30
30
  },
31
31
  "dependencies": {
32
- "@aglyn/shared-ui-jsx": "1.0.0-beta.146",
33
- "@aglyn/shared-util-email": "1.0.0-beta.146",
32
+ "@aglyn/shared-ui-jsx": "1.0.0-beta.149",
33
+ "@aglyn/shared-util-email": "1.0.0-beta.149",
34
34
  "@swc/helpers": "0.5.23"
35
35
  },
36
36
  "peerDependencies": {
package/src/index.js CHANGED
@@ -13,11 +13,13 @@
13
13
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
- */ // Only the model reaches this barrel. `components/report-figures` renders MUI
17
- // and is imported by subpath instead — the tsconfig wildcard
18
- // `@aglyn/shared-ui-email-campaigns/*` already resolves it — so server
19
- // handlers reading a stored field name never pull a component graph behind
20
- // them.
16
+ */ // THE MODEL IS ALL THIS LIBRARY IS NOW (AGL-3080). It used to carry
17
+ // `components/report-figures` as well, reachable only by subpath so that a
18
+ // server handler reading a stored field name never pulled a component graph
19
+ // behind it. The figure primitives had already moved to
20
+ // `@aglyn/shared-ui-jsx`; the money ones that stayed were stranded where only
21
+ // the email surfaces could reach them, so they went the same way. This
22
+ // library renders nothing, and the subpath rule no longer has a subject.
21
23
  export * from "./lib/model/index.js";
22
24
 
23
25
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../libs/shared/ui/email-campaigns/src/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Only the model reaches this barrel. `components/report-figures` renders MUI\n// and is imported by subpath instead — the tsconfig wildcard\n// `@aglyn/shared-ui-email-campaigns/*` already resolves it — so server\n// handlers reading a stored field name never pull a component graph behind\n// them.\nexport * from './lib/model'\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED,8EAA8E;AAC9E,6DAA6D;AAC7D,uEAAuE;AACvE,2EAA2E;AAC3E,QAAQ;AACR,cAAc,uBAAa"}
1
+ {"version":3,"sources":["../../../../../../libs/shared/ui/email-campaigns/src/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// THE MODEL IS ALL THIS LIBRARY IS NOW (AGL-3080). It used to carry\n// `components/report-figures` as well, reachable only by subpath so that a\n// server handler reading a stored field name never pulled a component graph\n// behind it. The figure primitives had already moved to\n// `@aglyn/shared-ui-jsx`; the money ones that stayed were stranded where only\n// the email surfaces could reach them, so they went the same way. This\n// library renders nothing, and the subpath rule no longer has a subject.\nexport * from './lib/model'\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED,oEAAoE;AACpE,2EAA2E;AAC3E,4EAA4E;AAC5E,wDAAwD;AACxD,8EAA8E;AAC9E,uEAAuE;AACvE,yEAAyE;AACzE,cAAc,uBAAa"}
@@ -21,7 +21,7 @@
21
21
  * Nothing here imports React or MUI, so a server handler that needs a field
22
22
  * name or a rate can take this barrel without dragging a component graph
23
23
  * into its bundle. The renderers live one directory over, behind
24
- * `@aglyn/shared-ui-email-campaigns/components/report-figures`.
24
+ * `@aglyn/shared-ui-jsx/components/measured-figures.component`.
25
25
  */
26
26
  /**
27
27
  * Campaign reporting: the rate math, the populations the send recorded, and
@@ -20,7 +20,7 @@
20
20
  * Nothing here imports React or MUI, so a server handler that needs a field
21
21
  * name or a rate can take this barrel without dragging a component graph
22
22
  * into its bundle. The renderers live one directory over, behind
23
- * `@aglyn/shared-ui-email-campaigns/components/report-figures`.
23
+ * `@aglyn/shared-ui-jsx/components/measured-figures.component`.
24
24
  */ /**
25
25
  * Campaign reporting: the rate math, the populations the send recorded, and
26
26
  * the link rollup — pure, so every denominator is named once and provable
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../libs/shared/ui/email-campaigns/src/lib/model/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * The email-campaign document model: the stored shapes and the pure\n * arithmetic over them.\n *\n * Nothing here imports React or MUI, so a server handler that needs a field\n * name or a rate can take this barrel without dragging a component graph\n * into its bundle. The renderers live one directory over, behind\n * `@aglyn/shared-ui-email-campaigns/components/report-figures`.\n */\n\n/**\n * Campaign reporting: the rate math, the populations the send recorded, and\n * the link rollup — pure, so every denominator is named once and provable\n * rather than chosen in JSX.\n */\nexport * from './campaign-report'\n\n/**\n * What a campaign EARNED: the last-click window, the gross/refunded pair and\n * the per-currency buckets that are never added together. Separate from the\n * rate math because it reads a different document and answers the merchant's\n * second question rather than their first.\n */\nexport * from './campaign-revenue'\n\n/** Reading one message record — its state, and when it went out. */\nexport * from './email-record'\n\n/**\n * The campaign CONTAINER — its window, its lists, and the arithmetic that\n * rolls its sends into one set of figures.\n */\nexport * from './campaign-container'\n\nexport * from './campaign-send-time'\n\n/**\n * What a campaign CAUSED: the four identify moments, kept apart because one\n * visitor action writes several of them. Separate from the revenue module\n * because it reads a different document and answers what happened to people\n * who were anonymous until the moment being counted.\n */\nexport * from './campaign-conversions'\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;CAQC,GAED;;;;CAIC,GACD,cAAc,uBAAmB;AAEjC;;;;;CAKC,GACD,cAAc,wBAAoB;AAElC,kEAAkE,GAClE,cAAc,oBAAgB;AAE9B;;;CAGC,GACD,cAAc,0BAAsB;AAEpC,cAAc,0BAAsB;AAEpC;;;;;CAKC,GACD,cAAc,4BAAwB"}
1
+ {"version":3,"sources":["../../../../../../../../libs/shared/ui/email-campaigns/src/lib/model/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * The email-campaign document model: the stored shapes and the pure\n * arithmetic over them.\n *\n * Nothing here imports React or MUI, so a server handler that needs a field\n * name or a rate can take this barrel without dragging a component graph\n * into its bundle. The renderers live one directory over, behind\n * `@aglyn/shared-ui-jsx/components/measured-figures.component`.\n */\n\n/**\n * Campaign reporting: the rate math, the populations the send recorded, and\n * the link rollup — pure, so every denominator is named once and provable\n * rather than chosen in JSX.\n */\nexport * from './campaign-report'\n\n/**\n * What a campaign EARNED: the last-click window, the gross/refunded pair and\n * the per-currency buckets that are never added together. Separate from the\n * rate math because it reads a different document and answers the merchant's\n * second question rather than their first.\n */\nexport * from './campaign-revenue'\n\n/** Reading one message record — its state, and when it went out. */\nexport * from './email-record'\n\n/**\n * The campaign CONTAINER — its window, its lists, and the arithmetic that\n * rolls its sends into one set of figures.\n */\nexport * from './campaign-container'\n\nexport * from './campaign-send-time'\n\n/**\n * What a campaign CAUSED: the four identify moments, kept apart because one\n * visitor action writes several of them. Separate from the revenue module\n * because it reads a different document and answers what happened to people\n * who were anonymous until the moment being counted.\n */\nexport * from './campaign-conversions'\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;CAQC,GAED;;;;CAIC,GACD,cAAc,uBAAmB;AAEjC;;;;;CAKC,GACD,cAAc,wBAAoB;AAElC,kEAAkE,GAClE,cAAc,oBAAgB;AAE9B;;;CAGC,GACD,cAAc,0BAAsB;AAEpC,cAAc,0BAAsB;AAEpC;;;;;CAKC,GACD,cAAc,4BAAwB"}
@@ -1,51 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Aglyn LLC
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- */
17
- export { Figure, percent, RateRow, Section, type MeasuredRate, } from '@aglyn/shared-ui-jsx/components/measured-figures.component';
18
- import type { CampaignMoneyPerMessage } from '../model/campaign-revenue';
19
- export declare function money(cents: number, currency: string): string;
20
- /**
21
- * One money figure, with the population it is averaged over named.
22
- *
23
- * The same rule {@link RateRow} enforces for a percentage, applied to an
24
- * average — they go wrong the same way. "$0.42 per recipient" is meaningless
25
- * without the recipient count, and worse than meaningless when the reader
26
- * assumes a different one from the writer.
27
- */
28
- export declare function MoneyPerMessageRow(props: {
29
- label: string;
30
- figure: CampaignMoneyPerMessage | null;
31
- }): import("react").JSX.Element;
32
- export declare namespace MoneyPerMessageRow {
33
- var displayName: string;
34
- }
35
- /**
36
- * One money total, with what it counts named underneath.
37
- *
38
- * {@link Figure}'s contract in currency: `null` draws a dash and never a
39
- * zero, because "no attribution has ever been recorded" and "this campaign
40
- * earned nothing" lead a merchant to opposite conclusions about whether to
41
- * send another one.
42
- */
43
- export declare function MoneyFigure(props: {
44
- label: string;
45
- cents: number | null;
46
- currency: string;
47
- note: string;
48
- }): import("react").JSX.Element;
49
- export declare namespace MoneyFigure {
50
- var displayName: string;
51
- }
@@ -1,120 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * @license
4
- * Copyright 2026 Aglyn LLC
5
- *
6
- * Licensed under the Apache License, Version 2.0 (the "License");
7
- * you may not use this file except in compliance with the License.
8
- * You may obtain a copy of the License at
9
- *
10
- * http://www.apache.org/licenses/LICENSE-2.0
11
- *
12
- * Unless required by applicable law or agreed to in writing, software
13
- * distributed under the License is distributed on an "AS IS" BASIS,
14
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- * See the License for the specific language governing permissions and
16
- * limitations under the License.
17
- */ /*
18
- * The four figure primitives now live in `@aglyn/shared-ui-jsx` so the forms
19
- * report and the email reports share one implementation of "a rate names its
20
- * denominator". Re-exported here because the email cards import them from
21
- * this path, and a rate that renders differently on two surfaces is the thing
22
- * the shared copy exists to prevent.
23
- */ export { Figure, percent, RateRow, Section } from "@aglyn/shared-ui-jsx/components/measured-figures.component";
24
- import { Stack, Typography } from "@mui/material";
25
- /*
26
- * Money stays here. It is not a figure primitive: it carries a currency, and
27
- * this surface deliberately refuses to sum two of them into one number.
28
- */ export function money(cents, currency) {
29
- const amount = cents / 100;
30
- try {
31
- return new Intl.NumberFormat(undefined, {
32
- style: 'currency',
33
- currency: currency.toUpperCase()
34
- }).format(amount);
35
- } catch (unused) {
36
- return `${amount.toFixed(2)} ${currency.toUpperCase()}`;
37
- }
38
- }
39
- /**
40
- * One money figure, with the population it is averaged over named.
41
- *
42
- * The same rule {@link RateRow} enforces for a percentage, applied to an
43
- * average — they go wrong the same way. "$0.42 per recipient" is meaningless
44
- * without the recipient count, and worse than meaningless when the reader
45
- * assumes a different one from the writer.
46
- */ export function MoneyPerMessageRow(props) {
47
- const { label, figure } = props;
48
- return /*#__PURE__*/ _jsxs(Stack, {
49
- direction: "row",
50
- spacing: 2,
51
- sx: {
52
- justifyContent: 'space-between',
53
- alignItems: 'baseline'
54
- },
55
- children: [
56
- /*#__PURE__*/ _jsx(Typography, {
57
- variant: "body2",
58
- children: label
59
- }),
60
- figure ? /*#__PURE__*/ _jsxs(Stack, {
61
- direction: "row",
62
- spacing: 1,
63
- sx: {
64
- alignItems: 'baseline'
65
- },
66
- children: [
67
- /*#__PURE__*/ _jsx(Typography, {
68
- variant: "body2",
69
- sx: {
70
- fontWeight: 'bold'
71
- },
72
- children: money(figure.cents, figure.currency)
73
- }),
74
- /*#__PURE__*/ _jsx(Typography, {
75
- variant: "caption",
76
- color: "text.secondary",
77
- children: `${money(figure.numeratorCents, figure.currency)} over ${figure.denominator.toLocaleString()} ${figure.denominatorLabel}`
78
- })
79
- ]
80
- }) : /*#__PURE__*/ _jsx(Typography, {
81
- variant: "caption",
82
- color: "text.secondary",
83
- children: '— not enough recorded to compute'
84
- })
85
- ]
86
- });
87
- }
88
- MoneyPerMessageRow.displayName = 'MoneyPerMessageRow';
89
- /**
90
- * One money total, with what it counts named underneath.
91
- *
92
- * {@link Figure}'s contract in currency: `null` draws a dash and never a
93
- * zero, because "no attribution has ever been recorded" and "this campaign
94
- * earned nothing" lead a merchant to opposite conclusions about whether to
95
- * send another one.
96
- */ export function MoneyFigure(props) {
97
- return /*#__PURE__*/ _jsxs(Stack, {
98
- sx: {
99
- minWidth: 140
100
- },
101
- children: [
102
- /*#__PURE__*/ _jsx(Typography, {
103
- variant: "h6",
104
- children: props.cents === null ? '—' : money(props.cents, props.currency)
105
- }),
106
- /*#__PURE__*/ _jsx(Typography, {
107
- variant: "body2",
108
- children: props.label
109
- }),
110
- /*#__PURE__*/ _jsx(Typography, {
111
- variant: "caption",
112
- color: "text.secondary",
113
- children: props.cents === null ? 'not recorded' : props.note
114
- })
115
- ]
116
- });
117
- }
118
- MoneyFigure.displayName = 'MoneyFigure';
119
-
120
- //# sourceMappingURL=report-figures.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../../../libs/shared/ui/email-campaigns/src/lib/components/report-figures.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * The four figure primitives now live in `@aglyn/shared-ui-jsx` so the forms\n * report and the email reports share one implementation of \"a rate names its\n * denominator\". Re-exported here because the email cards import them from\n * this path, and a rate that renders differently on two surfaces is the thing\n * the shared copy exists to prevent.\n */\nexport {\n Figure,\n percent,\n RateRow,\n Section,\n type MeasuredRate,\n} from '@aglyn/shared-ui-jsx/components/measured-figures.component'\n\nimport { Stack, Typography } from '@mui/material'\nimport type { CampaignMoneyPerMessage } from '../model/campaign-revenue'\nimport { percent as sharedPercent } from '@aglyn/shared-ui-jsx/components/measured-figures.component'\n\n/*\n * Money stays here. It is not a figure primitive: it carries a currency, and\n * this surface deliberately refuses to sum two of them into one number.\n */\nexport function money(cents: number, currency: string): string {\n const amount = cents / 100\n try {\n return new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency: currency.toUpperCase(),\n }).format(amount)\n } catch {\n return `${amount.toFixed(2)} ${currency.toUpperCase()}`\n }\n}\n\n/**\n * One money figure, with the population it is averaged over named.\n *\n * The same rule {@link RateRow} enforces for a percentage, applied to an\n * average — they go wrong the same way. \"$0.42 per recipient\" is meaningless\n * without the recipient count, and worse than meaningless when the reader\n * assumes a different one from the writer.\n */\nexport function MoneyPerMessageRow(props: {\n label: string\n figure: CampaignMoneyPerMessage | null\n}) {\n const { label, figure } = props\n return (\n <Stack\n direction=\"row\"\n spacing={2}\n sx={{ justifyContent: 'space-between', alignItems: 'baseline' }}\n >\n <Typography variant=\"body2\">{label}</Typography>\n {figure ? (\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'baseline' }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 'bold' }}>\n {money(figure.cents, figure.currency)}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {`${money(figure.numeratorCents, figure.currency)} over ${figure.denominator.toLocaleString()} ${figure.denominatorLabel}`}\n </Typography>\n </Stack>\n ) : (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {'— not enough recorded to compute'}\n </Typography>\n )}\n </Stack>\n )\n}\nMoneyPerMessageRow.displayName = 'MoneyPerMessageRow'\n\n/**\n * One money total, with what it counts named underneath.\n *\n * {@link Figure}'s contract in currency: `null` draws a dash and never a\n * zero, because \"no attribution has ever been recorded\" and \"this campaign\n * earned nothing\" lead a merchant to opposite conclusions about whether to\n * send another one.\n */\nexport function MoneyFigure(props: {\n label: string\n cents: number | null\n currency: string\n note: string\n}) {\n return (\n <Stack sx={{ minWidth: 140 }}>\n <Typography variant=\"h6\">\n {props.cents === null ? '—' : money(props.cents, props.currency)}\n </Typography>\n <Typography variant=\"body2\">{props.label}</Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {props.cents === null ? 'not recorded' : props.note}\n </Typography>\n </Stack>\n )\n}\nMoneyFigure.displayName = 'MoneyFigure'\n"],"names":["Figure","percent","RateRow","Section","Stack","Typography","money","cents","currency","amount","Intl","NumberFormat","undefined","style","toUpperCase","format","toFixed","MoneyPerMessageRow","props","label","figure","direction","spacing","sx","justifyContent","alignItems","variant","fontWeight","color","numeratorCents","denominator","toLocaleString","denominatorLabel","displayName","MoneyFigure","minWidth","note"],"mappings":";AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;CAMC,GACD,SACEA,MAAM,EACNC,OAAO,EACPC,OAAO,EACPC,OAAO,QAEF,6DAA4D;AAEnE,SAASC,KAAK,EAAEC,UAAU,QAAQ,gBAAe;AAIjD;;;CAGC,GACD,OAAO,SAASC,MAAMC,KAAa,EAAEC,QAAgB;IACnD,MAAMC,SAASF,QAAQ;IACvB,IAAI;QACF,OAAO,IAAIG,KAAKC,YAAY,CAACC,WAAW;YACtCC,OAAO;YACPL,UAAUA,SAASM,WAAW;QAChC,GAAGC,MAAM,CAACN;IACZ,EAAE,eAAM;QACN,OAAO,GAAGA,OAAOO,OAAO,CAAC,GAAG,CAAC,EAAER,SAASM,WAAW,IAAI;IACzD;AACF;AAEA;;;;;;;CAOC,GACD,OAAO,SAASG,mBAAmBC,KAGlC;IACC,MAAM,EAAEC,KAAK,EAAEC,MAAM,EAAE,GAAGF;IAC1B,qBACE,MAACd;QACCiB,WAAU;QACVC,SAAS;QACTC,IAAI;YAAEC,gBAAgB;YAAiBC,YAAY;QAAW;;0BAE9D,KAACpB;gBAAWqB,SAAQ;0BAASP;;YAC5BC,uBACC,MAAChB;gBAAMiB,WAAU;gBAAMC,SAAS;gBAAGC,IAAI;oBAAEE,YAAY;gBAAW;;kCAC9D,KAACpB;wBAAWqB,SAAQ;wBAAQH,IAAI;4BAAEI,YAAY;wBAAO;kCAClDrB,MAAMc,OAAOb,KAAK,EAAEa,OAAOZ,QAAQ;;kCAEtC,KAACH;wBAAWqB,SAAQ;wBAAUE,OAAM;kCACjC,GAAGtB,MAAMc,OAAOS,cAAc,EAAET,OAAOZ,QAAQ,EAAE,MAAM,EAAEY,OAAOU,WAAW,CAACC,cAAc,GAAG,CAAC,EAAEX,OAAOY,gBAAgB,EAAE;;;+BAI9H,KAAC3B;gBAAWqB,SAAQ;gBAAUE,OAAM;0BACjC;;;;AAKX;AACAX,mBAAmBgB,WAAW,GAAG;AAEjC;;;;;;;CAOC,GACD,OAAO,SAASC,YAAYhB,KAK3B;IACC,qBACE,MAACd;QAAMmB,IAAI;YAAEY,UAAU;QAAI;;0BACzB,KAAC9B;gBAAWqB,SAAQ;0BACjBR,MAAMX,KAAK,KAAK,OAAO,MAAMD,MAAMY,MAAMX,KAAK,EAAEW,MAAMV,QAAQ;;0BAEjE,KAACH;gBAAWqB,SAAQ;0BAASR,MAAMC,KAAK;;0BACxC,KAACd;gBAAWqB,SAAQ;gBAAUE,OAAM;0BACjCV,MAAMX,KAAK,KAAK,OAAO,iBAAiBW,MAAMkB,IAAI;;;;AAI3D;AACAF,YAAYD,WAAW,GAAG"}